kopia lustrzana https://github.com/sh123/codec2_talkie
FreeDV squelch from settings
rodzic
62c7910486
commit
7a9b5630a2
|
@ -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)];
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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>
|
|
@ -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">🎛</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>
|
|
@ -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>
|
|
@ -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},
|
||||
|
|
|
@ -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);
|
||||
|
|
Ładowanie…
Reference in New Issue