FreeDV squelch from settings

aprs
sh123 2022-08-13 16:29:30 +03:00
rodzic 62c7910486
commit 7a9b5630a2
7 zmienionych plików z 149 dodań i 48 usunięć

Wyświetl plik

@ -39,11 +39,13 @@ public class Freedv implements Protocol {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
int mode = SettingsWrapper.getFreeDvSoundModemModulation(sharedPreferences);
int gain = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_GAIN, "10000"));
int dataMode = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_FREEDV_DATA_MODE, "12"));
boolean isSquelchEnabled = sharedPreferences.getBoolean(PreferenceKeys.PORTS_SOUND_MODEM_FREEDV_ENABLE_SQUELCH, true);
float squelchSnr = Float.parseFloat( sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_FREEDV_SQUELCH_SNR, "0.0"));
Log.i(TAG, "Using freedv mode " + AudioTools.getFreedvModeAsText(sharedPreferences) + " gain " + gain);
Log.i(TAG, "Using freedv mode " + AudioTools.getFreedvModeAsText(sharedPreferences));
_freedv = Codec2.freedvCreate(mode, gain);
_freedv = Codec2.freedvCreate(mode, isSquelchEnabled, squelchSnr);
_modemTxBuffer = new short[Codec2.freedvGetNomModemSamples(_freedv)];
_speechRxBuffer = new short[Codec2.freedvGetMaxSpeechSamples(_freedv)];
}

Wyświetl plik

@ -24,6 +24,9 @@ public final class PreferenceKeys {
public static String PORTS_SOUND_MODEM_GAIN ="ports_sound_modem_gain";
public static String PORTS_SOUND_MODEM_PTT_OFF_DELAY_MS = "ports_sound_modem_ptt_off_delay_ms";
public static String PORTS_SOUND_MODEM_LOOPBACK="ports_sound_modem_loopback";
public static String PORTS_SOUND_MODEM_FREEDV_ENABLE_SQUELCH="ports_sound_modem_freedv_enable_squelch";
public static String PORTS_SOUND_MODEM_FREEDV_SQUELCH_SNR="ports_sound_modem_freedv_squelch_snr";
public static String PORTS_SOUND_MODEM_FREEDV_DATA_MODE="ports_sound_modem_freedv_data_mode";
public static String CODEC2_MODE = "codec2_mode";
public static String CODEC2_RECORDING_ENABLED = "codec2_recording_enabled";

Wyświetl plik

@ -352,7 +352,7 @@
</string-array>
<string-array name="ports_type_labels">
<item>Loopback/Echo</item>
<item>[Debug] Loopback/Echo</item>
<item>Bluetooth</item>
<item>Bluetooth LE (BLE)</item>
<item>TCP/IP</item>
@ -426,4 +426,42 @@
<item>12589</item>
<item>15848</item>
</string-array>
<string-array name="ports_sound_modem_freedv_squelch_snr_entries">
<item>-5 db</item>
<item>-4 db</item>
<item>-3 db</item>
<item>-2 db</item>
<item>-1 db</item>
<item>+0 db</item>
<item>+1 db</item>
<item>+2 db</item>
<item>+3 db</item>
<item>+4 db</item>
<item>+5 db</item>
</string-array>
<string-array name="ports_sound_modem_freedv_squelch_snr_values">
<item>-5.0</item>
<item>-4.0</item>
<item>-3.0</item>
<item>-2.0</item>
<item>-1.0</item>
<item>0.0</item>
<item>1.0</item>
<item>2.0</item>
<item>3.0</item>
<item>4.0</item>
<item>5.0</item>
</string-array>
<string-array name="ports_sound_modem_freedv_data_mode_entries">
<item>DATAC1 980bps (medium SNR)</item>
<item>DATAC3 321bps (low SNR)</item>
</string-array>
<string-array name="ports_sound_modem_freedv_data_mode_values">
<item>10</item>
<item>12</item>
</string-array>
</resources>

Wyświetl plik

@ -273,7 +273,7 @@
<string name="send_message_to_message_edit_text">Message text</string>
<string name="send_message_to_btn_ok_text">Send</string>
<string name="send_message_to_btn_cancel_text">Cancel</string>
<string name="activity_send_message_to_title">Send message to...</string>
<string name="activity_send_message_to_title">Send message to</string>
<string name="messages_view_title">Messages</string>
<string name="app_notifications_text_title">Incoming message</string>
<string name="app_notifications_text_summary">Click to open and read message</string>
@ -301,12 +301,22 @@
<string name="ports_sound_modem_control_settings">Set sound modem settings, such as bit rate</string>
<string name="ports_type_title">TNC transport type</string>
<string name="ports_sound_modem_disable_rx_title">Disable receive</string>
<string name="ports_sound_modem_disable_rx_summary">Run modem in transmit only mode, receive is disabled to save CPU cycles</string>
<string name="ports_sound_modem_disable_rx_summary">Run modem in transmit only mode, receive is disabled to save CPU cycles, e.g. when using APRS one way tracking</string>
<string name="ports_sound_modem_rig_title">Select RIG model for CAT PTT control</string>
<string name="ports_sound_modem_gain_title">Set modem audio gain</string>
<string name="ports_sound_modem_rig_label">&#127899;</string>
<string name="ports_sound_modem_ptt_off_delay_ms_title">CAT PTT transmit off delay</string>
<string name="ports_sound_modem_ptt_off_delay_ms_summary">How long to wait before switching off the transmission after last data is sent out (milliseconds)</string>
<string name="ports_sound_modem_loopback_title">Enable modulator loopback mode</string>
<string name="ports_sound_modem_loopback_title">[Debug] Enable modulator loopback mode</string>
<string name="ports_sound_modem_loopback_summary">Audio modulated samples will be fed back to de-modulator</string>
<string name="sound_modem_category_general_title">Sound modem settings</string>
<string name="sound_modem_category_afsk_title">AFSK modem settings</string>
<string name="ports_sound_modem_category_cat_ptt_title">CAT PTT settings</string>
<string name="sound_modem_category_freedv_title">FreeDV settings</string>
<string name="ports_sound_modem_freedv_enable_squelch_title">Enable SNR squelch</string>
<string name="ports_sound_modem_freedv_enable_squelch_summary">Receive will be disabled when SNR is below given threshold</string>
<string name="ports_sound_modem_freedv_squelch_snr_title">Set squelch SNR threshold</string>
<string name="ports_sound_modem_freedv_squelch_snr_summary">Packets below give threshold won\'t be received</string>
<string name="ports_sound_modem_freedv_data_mode_title">FreeDV data mode</string>
<string name="ports_sound_modem_freedv_data_title">Select data mode</string>
</resources>

Wyświetl plik

@ -3,8 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory
app:key="ports_tcp_ip_category"
app:title="@string/kiss_basic_title">
app:key="ports_sound_modem_category_general"
app:title="@string/sound_modem_category_general_title">
<ListPreference
app:key="ports_sound_modem_type"
@ -15,38 +15,6 @@
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>
<ListPreference
app:key="ports_sound_modem_rig"
app:title="@string/ports_sound_modem_rig_title"
app:entries="@array/ports_sound_modem_rig_entries"
app:entryValues="@array/ports_sound_modem_rig_values"
app:defaultValue="Disabled"
app:summary="%s">
</ListPreference>
<ListPreference
app:key="ports_sound_modem_gain"
app:title="@string/ports_sound_modem_gain_title"
app:entries="@array/ports_sound_modem_gain_entries"
app:entryValues="@array/ports_sound_modem_gain_values"
app:defaultValue="10000"
app:summary="%s">
</ListPreference>
<EditTextPreference
app:key="ports_sound_modem_ptt_off_delay_ms"
app:title="@string/ports_sound_modem_ptt_off_delay_ms_title"
app:summary="@string/ports_sound_modem_ptt_off_delay_ms_summary"
app:defaultValue="1000">
</EditTextPreference>
<SwitchPreference
app:key="ports_sound_modem_disable_rx"
app:title="@string/ports_sound_modem_disable_rx_title"
@ -62,4 +30,80 @@
</SwitchPreference>
</PreferenceCategory>
<PreferenceCategory
app:key="ports_sound_modem_category_cat_ptt"
app:title="@string/ports_sound_modem_category_cat_ptt_title">
<ListPreference
app:key="ports_sound_modem_rig"
app:title="@string/ports_sound_modem_rig_title"
app:entries="@array/ports_sound_modem_rig_entries"
app:entryValues="@array/ports_sound_modem_rig_values"
app:defaultValue="Disabled"
app:summary="%s">
</ListPreference>
<EditTextPreference
app:key="ports_sound_modem_ptt_off_delay_ms"
app:title="@string/ports_sound_modem_ptt_off_delay_ms_title"
app:summary="@string/ports_sound_modem_ptt_off_delay_ms_summary"
app:defaultValue="1000">
</EditTextPreference>
</PreferenceCategory>
<PreferenceCategory
app:key="ports_sound_modem_category_afsk"
app:title="@string/sound_modem_category_afsk_title">
<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>
<ListPreference
app:key="ports_sound_modem_gain"
app:title="@string/ports_sound_modem_gain_title"
app:entries="@array/ports_sound_modem_gain_entries"
app:entryValues="@array/ports_sound_modem_gain_values"
app:defaultValue="10000"
app:summary="%s">
</ListPreference>
</PreferenceCategory>
<PreferenceCategory
app:key="ports_sound_modem_category_freedv"
app:title="@string/sound_modem_category_freedv_title">
</PreferenceCategory>
<ListPreference
app:key="ports_sound_modem_freedv_data_mode"
app:title="@string/ports_sound_modem_freedv_data_title"
app:entries="@array/ports_sound_modem_freedv_data_mode_entries"
app:entryValues="@array/ports_sound_modem_freedv_data_mode_values"
app:summary="%s"
app:defaultValue="12">
</ListPreference>
<SwitchPreference
app:key="ports_sound_modem_freedv_enable_squelch"
app:title="@string/ports_sound_modem_freedv_enable_squelch_title"
app:summary="@string/ports_sound_modem_freedv_enable_squelch_summary"
app:defaultValue="true">
</SwitchPreference>
<ListPreference
app:key="ports_sound_modem_freedv_squelch_snr"
app:title="@string/ports_sound_modem_freedv_squelch_snr_title"
app:entries="@array/ports_sound_modem_freedv_squelch_snr_entries"
app:entryValues="@array/ports_sound_modem_freedv_squelch_snr_values"
app:summary="%s"
app:dependency="ports_sound_modem_freedv_enable_squelch"
app:defaultValue="0.0">
</ListPreference>
</PreferenceScreen>

Wyświetl plik

@ -33,7 +33,6 @@ namespace Java_com_ustadmobile_codec2_Codec2 {
struct freedv *freeDv;
short *speechSamples;
short *modemSamples;
int gain;
};
static Context *getContext(jlong jp) {
@ -98,17 +97,16 @@ namespace Java_com_ustadmobile_codec2_Codec2 {
return reinterpret_cast<jlong>(conFsk);
}
static jlong freedvCreate(JNIEnv *env, jclass clazz, int mode, int gain) {
static jlong freedvCreate(JNIEnv *env, jclass clazz, int mode, jboolean isSquelchEnabled, jfloat squelchSnr) {
struct ContextFreedv *conFreedv;
conFreedv = (struct ContextFreedv *) malloc(sizeof(struct ContextFreedv));
conFreedv->freeDv = freedv_open(mode);
conFreedv->gain = gain;
conFreedv->speechSamples = static_cast<short *>(malloc(
freedv_get_n_max_speech_samples(conFreedv->freeDv) * sizeof(short)));
conFreedv->modemSamples = static_cast<short *>(malloc(
freedv_get_n_max_modem_samples(conFreedv->freeDv) * sizeof(short)));
freedv_set_squelch_en(conFreedv->freeDv, 1);
freedv_set_snr_squelch_thresh(conFreedv->freeDv, -5.0);
freedv_set_squelch_en(conFreedv->freeDv, isSquelchEnabled);
freedv_set_snr_squelch_thresh(conFreedv->freeDv, squelchSnr);
return reinterpret_cast<jlong>(conFreedv);
}
@ -299,7 +297,7 @@ namespace Java_com_ustadmobile_codec2_Codec2 {
{"fskSamplesPerSymbol", "(J)I", (void *) fskSamplesPerSymbol},
{"fskNin", "(J)I", (void *) fskNin},
// freedv
{"freedvCreate", "(II)J", (void *)freedvCreate},
{"freedvCreate", "(IZF)J", (void *)freedvCreate},
{"freedvDestroy", "(J)I", (void *)freedvDestroy},
{"freedvGetMaxSpeechSamples", "(J)I", (void *)freedvGetMaxSpeechSamples},
{"freedvGetMaxModemSamples", "(J)I", (void *)freedvGetMaxModemSamples},

Wyświetl plik

@ -32,6 +32,12 @@ public class Codec2 {
public static final int FREEDV_MODE_2020B = 16;
public static final int FREEDV_MODE_700E = 13;
// freedv data modes
public static final int FREEDV_MODE_FSK_LDPC = 9;
public static final int FREEDV_MODE_DATAC1 = 10;
public static final int FREEDV_MODE_DATAC3 = 12;
public static final int FREEDV_MODE_DATAC0 = 14;
// raw codec2
public native static long create(int mode);
public native static int destroy(long con);
@ -57,7 +63,7 @@ public class Codec2 {
public native static long fskDemodulate(long conFsk, short[] inputSamples, byte[] outputBits);
// freedv
public native static long freedvCreate(int mode, int gain);
public native static long freedvCreate(int mode, boolean isSquelchEnabled, float squelchSnr);
public native static int freedvDestroy(long conFreedv);
public native static int freedvGetMaxSpeechSamples(long conFreedv);