Sound modem settings

legacy
sh123 2022-07-31 15:01:27 +03:00
rodzic 8d1cf2534f
commit 80fb8714c4
10 zmienionych plików z 86 dodań i 17 usunięć

Wyświetl plik

@ -1,9 +1,11 @@
package com.radio.codec2talkie.protocol;
import android.content.Context;
import android.content.SharedPreferences;
import com.radio.codec2talkie.protocol.message.TextMessage;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.tools.BitTools;
import com.radio.codec2talkie.tools.ChecksumTools;
import com.radio.codec2talkie.transport.Transport;
@ -16,7 +18,14 @@ public class Hdlc implements Protocol {
protected Transport _transport;
private ProtocolCallback _parentProtocolCallback;
public Hdlc() {
private final int _prefixSymCount;
public Hdlc(SharedPreferences sharedPreferences) {
double preambleLenSec = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_PREAMBLE, "200")) / 1000.0;
String modemType = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200");
// FIXME if more modulation schemes
int modemSpeed = modemType.equals("300") ? 300 : 1200;
_prefixSymCount = (int) (preambleLenSec * modemSpeed / 8);
}
@Override
@ -78,10 +87,6 @@ public class Hdlc implements Protocol {
public byte[] hdlcEncode(byte[] dataSrc) {
ByteBuffer buffer = ByteBuffer.allocate(dataSrc.length + 2);
// TODO, read from settings
int prefixLen = 30;
int suffixLen = 5;
// include checksum
buffer.put(dataSrc);
int fcs = ChecksumTools.calculateFcs(dataSrc);
@ -96,10 +101,10 @@ public class Hdlc implements Protocol {
byte[] dataBytesAsBits = BitTools.convertToHDLCBitArray(data, true);
// add preamble
ByteBuffer hdlcBitBuffer = ByteBuffer.allocate(dataBytesAsBits.length + 8*prefixLen + 8*suffixLen);
hdlcBitBuffer.put(genPreamble(prefixLen));
ByteBuffer hdlcBitBuffer = ByteBuffer.allocate(dataBytesAsBits.length + 8*_prefixSymCount + 8);
hdlcBitBuffer.put(genPreamble(_prefixSymCount));
hdlcBitBuffer.put(dataBytesAsBits);
hdlcBitBuffer.put(genPreamble(suffixLen));
hdlcBitBuffer.put(genPreamble(1));
// return
hdlcBitBuffer.flip();

Wyświetl plik

@ -74,7 +74,7 @@ public class ProtocolFactory {
proto = new KissParrot();
break;
case HDLC:
proto = new Hdlc();
proto = new Hdlc(sharedPreferences);
break;
case RAW:
default:

Wyświetl plik

@ -18,6 +18,8 @@ public final class PreferenceKeys {
public static String PORTS_TCP_IP_RETRY_DELAY = "ports_tcp_ip_retry_delay";
public static String PORTS_SOUND_MODEM_ENABLED = "ports_sound_modem_enable";
public static String PORTS_SOUND_MODEM_TYPE = "ports_sound_modem_type";
public static String PORTS_SOUND_MODEM_PREAMBLE = "ports_sound_modem_preamble";
public static String CODEC2_MODE = "codec2_mode";
public static String CODEC2_TEST_MODE = "codec2_test_mode";

Wyświetl plik

@ -36,7 +36,8 @@ public class SettingsActivity extends AppCompatActivity
"kiss_scrambler_iterations",
"ports_tcp_ip_port",
"ports_tcp_ip_retry_count",
"ports_tcp_ip_retry_delay"
"ports_tcp_ip_retry_delay",
"ports_sound_modem_preamble"
};
private static final String[] _signedDecimalSettings = {
@ -122,6 +123,15 @@ public class SettingsActivity extends AppCompatActivity
}
}
public static class SettingsSoundModemFragment extends PreferenceFragmentCompat
{
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences_sound_modem, null);
setNumberInputType(getPreferenceManager());
}
}
public static class SettingsUsbFragment extends PreferenceFragmentCompat
{
@Override

Wyświetl plik

@ -11,6 +11,7 @@ import android.util.Log;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.tools.BitTools;
import com.radio.codec2talkie.tools.ChecksumTools;
import com.ustadmobile.codec2.Codec2;
@ -41,15 +42,18 @@ public class SoundModem implements Transport {
private final long _fskModem;
public SoundModem(String name, Context context) {
_name = name;
public SoundModem(Context context) {
_context = context;
_sharedPreferences = PreferenceManager.getDefaultSharedPreferences(_context);
// TODO, read from settings
//_fskModem = Codec2.fskCreate(AUDIO_SAMPLE_SIZE, 300, 1600, 200);
_fskModem = Codec2.fskCreate(AUDIO_SAMPLE_SIZE, 1200, 1200, 1000);
String type = _sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200");
if (type.equals("300")) {
_fskModem = Codec2.fskCreate(AUDIO_SAMPLE_SIZE, 300, 1600, 200);
_name = "SndModemHF300";
} else {
_fskModem = Codec2.fskCreate(AUDIO_SAMPLE_SIZE, 1200, 1200, 1000);
_name = "SndModemAFSK1200";
}
_recordAudioBuffer = new short[Codec2.fskDemodSamplesBufSize(_fskModem)];
_recordBitBuffer = new byte[Codec2.fskDemodBitsBufSize(_fskModem)];

Wyświetl plik

@ -31,7 +31,7 @@ public class TransportFactory {
case BLE:
return new Ble(BleHandler.getGatt(), BleHandler.getName());
case SOUND_MODEM:
return new SoundModem("SoundModem", context);
return new SoundModem(context);
case LOOPBACK:
default:
return new Loopback();

Wyświetl plik

@ -322,4 +322,14 @@
<item>21</item>
<item>22</item>
</string-array>
<string-array name="ports_sound_modem_type_entries">
<item>FSK 300 (1600/1800)</item>
<item>AFSK 1200 (1200/2200)</item>
</string-array>
<string-array name="ports_sound_modem_type_values">
<item>300</item>
<item>1200</item>
</string-array>
</resources>

Wyświetl plik

@ -294,4 +294,9 @@
<string name="ports_sound_modem_enable_title">Enable sound modem</string>
<string name="ports_sound_modem_enable_summary">Send data and receive data through sound modem by using phone speaker and mic</string>
<string name="main_status_sound_modem">SoundModem</string>
<string name="ports_sound_modem_preamble_title">Frame sync prefix</string>
<string name="ports_sound_modem_preamble_summary">No-op preamble (e.g. for VOX control) in milliseconds</string>
<string name="ports_sound_modem_type_title">Modem modulation type</string>
<string name="ports_sound_modem_control_title">Sound modem settings</string>
<string name="ports_sound_modem_control_settings">Set sound modem settings, such as bit rate</string>
</resources>

Wyświetl plik

@ -148,6 +148,13 @@
app:defaultValue="false">
</SwitchPreference>
<Preference
app:key="ports_sound_modem_control"
app:title="@string/ports_sound_modem_control_title"
app:summary="@string/ports_sound_modem_control_settings"
app:fragment="com.radio.codec2talkie.settings.SettingsActivity$SettingsSoundModemFragment">
</Preference>
</PreferenceCategory>
<PreferenceCategory

Wyświetl plik

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
app:key="ports_tcp_ip_category"
app:title="@string/kiss_basic_title">
<ListPreference
app:key="ports_sound_modem_type"
app:title="@string/ports_sound_modem_type_title"
app:entries="@array/ports_sound_modem_type_entries"
app:entryValues="@array/ports_sound_modem_type_values"
app:defaultValue="1200"
app:summary="%s">
</ListPreference>
<EditTextPreference
app:key="ports_sound_modem_preamble"
app:title="@string/ports_sound_modem_preamble_title"
app:summary="@string/ports_sound_modem_preamble_summary"
app:defaultValue="200">
</EditTextPreference>
</PreferenceCategory>
</PreferenceScreen>