From eba378325df8f6dfa7dfdd019c0a1ba8b3810ea0 Mon Sep 17 00:00:00 2001 From: sh123 Date: Sat, 30 Jul 2022 20:55:43 +0300 Subject: [PATCH] Bit order --- .../com/radio/codec2talkie/app/AppWorker.java | 3 +- .../com/radio/codec2talkie/protocol/Aprs.java | 3 +- .../codec2talkie/transport/SoundModem.java | 40 ++++++++++++++++--- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java index 2762c35..3789235 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java @@ -11,6 +11,7 @@ import android.media.MediaRecorder; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.Process; import android.util.Log; import androidx.preference.PreferenceManager; @@ -496,7 +497,7 @@ public class AppWorker extends Thread { } catch (InterruptedException e) { e.printStackTrace(); } - setPriority(Thread.MAX_PRIORITY); + android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO); Looper.prepare(); sendStatusUpdate(AppMessage.EV_CONNECTED, null); diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Aprs.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Aprs.java index 13c89a1..635aa30 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Aprs.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/Aprs.java @@ -54,7 +54,8 @@ public class Aprs implements Protocol { _srcCallsign = AX25Callsign.formatCallsign( sharedPreferences.getString(PreferenceKeys.AX25_CALLSIGN, "NOCALL").toUpperCase(), sharedPreferences.getString(PreferenceKeys.AX25_SSID, "0")); - _dstCallsign = "APZMDM"; + //_dstCallsign = "APZMDM"; + _dstCallsign = "APDR15"; _symbolCode = sharedPreferences.getString(PreferenceKeys.APRS_SYMBOL, "/["); String packetFormat = sharedPreferences.getString(PreferenceKeys.APRS_LOCATION_PACKET_FORMAT, "uncompressed"); diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java b/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java index d504841..25db32f 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/transport/SoundModem.java @@ -110,7 +110,8 @@ public class SoundModem implements Transport { int cntOnes = 0; for (int i = 0; i < 8 * data.length; i++) { int b = ((int)data[i / 8]) & 0xff; - if ((b & (1 << (7 - (i % 8)))) > 0) { + // HDLC transmits least significant bit first + if ((b & (1 << (i % 8))) > 0) { bitBuffer.put((byte)1); s.append('1'); if (shouldBitStuff) @@ -123,12 +124,13 @@ public class SoundModem implements Transport { if (shouldBitStuff && cntOnes == 5) { bitBuffer.put((byte)0); s.append('0'); + s2.append(' '); cntOnes = 0; } if (i % 8 == 3) s.append(':'); if (i % 8 == 7) { s.append(' '); - s2.append(String.format("%02x ", b)); + s2.append(String.format("%02x ", b)); } } @@ -148,19 +150,45 @@ public class SoundModem implements Transport { return toHdlcByteBitArray(preamble, false); } + public static byte[] crc16(byte[] d) + { + byte[] out = new byte[2]; + int crc = 0xFFFF; + int crcpoly = 0x8408; + int i,k=0; + for (i=0; i>k)) + crc = ((crc >> 1) ^ crcpoly) & 0xFFFF; + else + crc >>= 1; + } + crc ^= 0xFFFF; + out[1] = (byte)(((crc & 0xff00) >> 8)-255-1); // high byte + out[0] = (byte)((crc & 0xff)-255-1); // low byte + return out; + } + public byte[] hdlcEncode(byte[] dataSrc) { ByteBuffer buffer = ByteBuffer.allocate(512); buffer.put(dataSrc); - int fcs = ChecksumTools.calculateFcs(dataSrc); - buffer.put((byte)((fcs >> 8) & 0xff)); - buffer.put((byte)(fcs & 0xff)); + byte[] rr = crc16(dataSrc); + buffer.put(rr[0]); + buffer.put(rr[1]); + //int fcs = (((int)rr[1] & 0xff) << 8) | ((int)rr[0] & 0xff); + //Log.i(TAG, String.format("checksum: %x %x", fcs, ChecksumTools.calculateFcs(dataSrc))); + //int fcs = ChecksumTools.calculateFcs(dataSrc); + //least significant byte first + //buffer.put((byte)(fcs & 0xff)); + //buffer.put((byte)((fcs >> 8) & 0xff)); buffer.flip(); byte[] data = new byte[buffer.remaining()]; buffer.get(data); - Log.i(TAG, String.format("checksum: %x", fcs)); + //Log.i(TAG, String.format("checksum: %x", fcs)); Log.i(TAG, "" + Arrays.toString(data)); byte[] dataBytesAsBits = toHdlcByteBitArray(data, true);