kopia lustrzana https://github.com/sh123/codec2_talkie
Update APRS interfaces and add menu entry for log
rodzic
92df55dbd1
commit
75e02df6e7
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -224,5 +224,6 @@
|
|||
<string name="menu_start_tracking">Start tracking</string>
|
||||
<string name="menu_send_position">Send position</string>
|
||||
<string name="voax25_label">☎</string>
|
||||
<string name="menu_aprs_log">View log</string>
|
||||
|
||||
</resources>
|
Ładowanie…
Reference in New Issue