Update APRS interfaces and add menu entry for log

pull/28/head
sh123 2022-07-02 12:12:07 +03:00
rodzic 92df55dbd1
commit 75e02df6e7
19 zmienionych plików z 108 dodań i 31 usunięć

Wyświetl plik

@ -307,6 +307,10 @@ public class MainActivity extends AppCompatActivity {
Toast.makeText(getBaseContext(), "Not implemented", Toast.LENGTH_SHORT).show();
return true;
}
else if (itemId == R.id.aprs_log) {
Toast.makeText(getBaseContext(), "Not implemented", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}

Wyświetl plik

@ -21,6 +21,7 @@ import java.util.TimerTask;
import com.radio.codec2talkie.protocol.Callback;
import com.radio.codec2talkie.protocol.Protocol;
import com.radio.codec2talkie.protocol.ProtocolFactory;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.tools.AudioTools;
import com.radio.codec2talkie.transport.Transport;
@ -207,7 +208,7 @@ public class AudioProcessor extends Thread {
private final Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -2,25 +2,38 @@ package com.radio.codec2talkie.protocol;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.audio.AudioProcessor;
import com.radio.codec2talkie.protocol.aprs.AprsCallsign;
import com.radio.codec2talkie.protocol.aprs.AprsData;
import com.radio.codec2talkie.protocol.aprs.AprsDataFactory;
import com.radio.codec2talkie.protocol.aprs.AprsDataType;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.protocol.ax25.AX25Callsign;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.transport.Transport;
import java.io.IOException;
public class Aprs implements Protocol {
private static final String TAG = Aprs.class.getSimpleName();
private final Protocol _childProtocol;
private String _srcCallsign;
private String _dstCallsign;
private Callback _parentCallback;
boolean _isVoax25Enabled;
private String _srcCallsign;
private String _dstCallsign;
private String _symbolCode;
private String _status;
private String _comment;
private boolean _isVoax25Enabled;
private boolean _isCompressed;
private AprsDataType _positionDataType;
public Aprs(Protocol childProtocol) {
_childProtocol = childProtocol;
@ -33,9 +46,21 @@ public class Aprs implements Protocol {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
_isVoax25Enabled = sharedPreferences.getBoolean(PreferenceKeys.APRS_VOAX25_ENABLE, false);
_srcCallsign = sharedPreferences.getString(PreferenceKeys.APRS_CALLSIGN, "NOCALL") + "-" +
sharedPreferences.getString(PreferenceKeys.APRS_SSID, "0");
_srcCallsign = AX25Callsign.formatCallsign(
sharedPreferences.getString(PreferenceKeys.APRS_CALLSIGN, "NOCALL"),
sharedPreferences.getString(PreferenceKeys.APRS_SSID, "0"));
_dstCallsign = "APZMDM";
_symbolCode = sharedPreferences.getString(PreferenceKeys.APRS_SYMBOL, "/[");
String packetFormat = sharedPreferences.getString(PreferenceKeys.APRS_LOCATION_PACKET_FORMAT, "uncompressed");
_status = sharedPreferences.getString(PreferenceKeys.APRS_LOCATION_MIC_E_MESSAGE_TYPE, "off_duty");
_comment = sharedPreferences.getString(PreferenceKeys.APRS_COMMENT, "off_duty");
_isCompressed = packetFormat.equals("compressed");
AprsDataType.DataType dataType = packetFormat.equals("mic_e") ?
AprsDataType.DataType.MIC_E : AprsDataType.DataType.POSITION_WITHOUT_TIMESTAMP_MSG;
_positionDataType = new AprsDataType(dataType);
}
@Override
@ -70,7 +95,7 @@ public class Aprs implements Protocol {
Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}
@ -134,8 +159,22 @@ public class Aprs implements Protocol {
};
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
// TODO, implement
public void sendPosition(Position position) throws IOException {
position.dstCallsign = _dstCallsign;
position.srcCallsign = _srcCallsign;
position.symbolCode = _symbolCode;
position.comment = _comment;
position.status = _status;
position.isCompressed = _isCompressed;
AprsData aprsData = AprsDataFactory.create(_positionDataType);
if (aprsData != null) {
aprsData.fromPosition(position);
if (aprsData.isValid()) {
sendData(position.srcCallsign, position.dstCallsign, aprsData.toBinary());
} else {
Log.e(TAG, "Send position protocol error");
}
}
}
@Override

Wyświetl plik

@ -2,6 +2,7 @@ package com.radio.codec2talkie.protocol;
import android.content.Context;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.transport.Transport;
import com.ustadmobile.codec2.Codec2;
@ -68,7 +69,7 @@ public class AudioCodec2 implements Protocol {
Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}
@ -130,7 +131,7 @@ public class AudioCodec2 implements Protocol {
};
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -6,6 +6,7 @@ import android.util.Log;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.transport.Transport;
import com.ustadmobile.codec2.Codec2;
@ -90,7 +91,7 @@ public class AudioFrameAggregator implements Protocol {
Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}
@ -163,7 +164,7 @@ public class AudioFrameAggregator implements Protocol {
};
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -7,6 +7,7 @@ import android.util.Log;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.protocol.ax25.AX25Packet;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.transport.Transport;
@ -92,7 +93,7 @@ public class Ax25 implements Protocol {
Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}
@ -164,7 +165,7 @@ public class Ax25 implements Protocol {
};
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -1,8 +1,10 @@
package com.radio.codec2talkie.protocol;
import com.radio.codec2talkie.protocol.position.Position;
public abstract class Callback {
// receive
abstract protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment);
abstract protected void onReceivePosition(Position position);
abstract protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame);
abstract protected void onReceiveCompressedAudio(String src, String dst, int codec, byte[] frame);
abstract protected void onReceiveData(String src, String dst, byte[] data);

Wyświetl plik

@ -11,6 +11,7 @@ import android.widget.Toast;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.R;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.transport.Transport;
@ -228,7 +229,7 @@ public class Kiss implements Protocol {
}
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -2,6 +2,7 @@ package com.radio.codec2talkie.protocol;
import android.content.Context;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.transport.Transport;
import java.io.IOException;
@ -18,7 +19,7 @@ public interface Protocol {
// callback
boolean receive() throws IOException;
// gps
void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment);
void sendPosition(Position position) throws IOException;
// control
void flush() throws IOException;
void close();

Wyświetl plik

@ -2,6 +2,7 @@ package com.radio.codec2talkie.protocol;
import android.content.Context;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.transport.Transport;
import java.io.IOException;
@ -57,7 +58,7 @@ public class Raw implements Protocol {
}
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -5,6 +5,7 @@ import android.text.TextUtils;
import android.util.Log;
import com.radio.codec2talkie.MainActivity;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.tools.StorageTools;
import com.radio.codec2talkie.transport.Transport;
@ -80,7 +81,7 @@ public class Recorder implements Protocol {
Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}
@ -143,7 +144,7 @@ public class Recorder implements Protocol {
};
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -6,6 +6,7 @@ import android.util.Log;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.tools.ScramblingTools;
import com.radio.codec2talkie.transport.Transport;
@ -80,7 +81,7 @@ public class Scrambler implements Protocol {
Callback _protocolCallback = new Callback() {
@Override
protected void onReceivePosition(String src, double latitude, double longitude, double altitude, float bearing, String comment) {
protected void onReceivePosition(Position position) {
throw new UnsupportedOperationException();
}
@ -152,7 +153,7 @@ public class Scrambler implements Protocol {
};
@Override
public void sendPosition(double latitude, double longitude, double altitude, float bearing, String comment) {
public void sendPosition(Position position) {
throw new UnsupportedOperationException();
}

Wyświetl plik

@ -1,7 +1,10 @@
package com.radio.codec2talkie.protocol.aprs;
import com.radio.codec2talkie.protocol.position.Position;
public interface AprsData {
void fromPosition(AprsPosition position);
void fromPosition(Position position);
Position toPosition();
void fromBinary(byte[] infoData);
byte[] toBinary();
boolean isValid();

Wyświetl plik

@ -7,12 +7,12 @@ public class AprsDataFactory {
switch (aprsDataType.getDataType()) {
case UNKNOWN:
case MESSAGE:
break;
case MIC_E:
case POSITION_WITH_TIMESTAMP_MSG:
case POSITION_WITH_TIMESTAMP_NO_MSG:
case POSITION_WITHOUT_TIMESTAMP_MSG:
case POSITION_WITHOUT_TIMESTAMP_NO_MSG:
break;
case POSITION_WITHOUT_TIMESTAMP_MSG:
return new AprsDataPositionReport();
}
return null;

Wyświetl plik

@ -1,8 +1,16 @@
package com.radio.codec2talkie.protocol.aprs;
import com.radio.codec2talkie.protocol.position.Position;
public class AprsDataPositionReport implements AprsData {
@Override
public void fromPosition(AprsPosition position) {
public void fromPosition(Position position) {
}
@Override
public Position toPosition() {
return null;
}
@Override

Wyświetl plik

@ -12,6 +12,10 @@ public class AX25Callsign {
public boolean isValid;
public boolean isLast = false;
public static String formatCallsign(String callsign, String ssid) {
return String.format("%s-%s", callsign, ssid);
}
public void fromString(String callsignWithSsid) {
isValid = false;
// ABCDEF-XX

Wyświetl plik

@ -1,11 +1,15 @@
package com.radio.codec2talkie.protocol.aprs;
package com.radio.codec2talkie.protocol.position;
public class AprsPosition {
public class Position {
public String timestamp;
public String srcCallsign;
public String dstCallsign;
public double latitude;
public double longitude;
public double altitude;
public float bearing;
public String status;
public String comment;
public String timestamp;
public String symbolCode;
public boolean isCompressed;
}

Wyświetl plik

@ -10,6 +10,9 @@
<item
android:id="@+id/messages"
android:title="@string/menu_messages" />
<item
android:id="@+id/aprs_log"
android:title="@string/menu_aprs_log" />
</group>
<group android:id="@+id/group_main">
<item

Wyświetl plik

@ -224,5 +224,6 @@
<string name="menu_start_tracking">Start tracking</string>
<string name="menu_send_position">Send position</string>
<string name="voax25_label">&#9742;</string>
<string name="menu_aprs_log">View log</string>
</resources>