kopia lustrzana https://github.com/sh123/codec2_talkie
Sound modem settings
rodzic
8d1cf2534f
commit
80fb8714c4
|
@ -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();
|
||||
|
|
|
@ -74,7 +74,7 @@ public class ProtocolFactory {
|
|||
proto = new KissParrot();
|
||||
break;
|
||||
case HDLC:
|
||||
proto = new Hdlc();
|
||||
proto = new Hdlc(sharedPreferences);
|
||||
break;
|
||||
case RAW:
|
||||
default:
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)];
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
||||
|
|
|
@ -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>
|
Ładowanie…
Reference in New Issue