mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-30 07:11:26 +03:00
fix tx tones
This commit is contained in:
parent
474317c149
commit
e2e030aed4
2
Makefile
2
Makefile
@ -57,7 +57,7 @@ ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1
|
|||||||
ENABLE_CONTRAST := 0
|
ENABLE_CONTRAST := 0
|
||||||
ENABLE_BOOT_BEEPS := 0
|
ENABLE_BOOT_BEEPS := 0
|
||||||
ENABLE_DTMF_CALL_FLASH_LIGHT := 1
|
ENABLE_DTMF_CALL_FLASH_LIGHT := 1
|
||||||
ENABLE_FLASH_LIGHT_SOS_TONE := 0
|
ENABLE_FLASH_LIGHT_SOS_TONE := 1
|
||||||
ENABLE_SHOW_CHARGE_LEVEL := 0
|
ENABLE_SHOW_CHARGE_LEVEL := 0
|
||||||
ENABLE_REVERSE_BAT_SYMBOL := 1
|
ENABLE_REVERSE_BAT_SYMBOL := 1
|
||||||
ENABLE_FREQ_SEARCH_TIMEOUT := 0
|
ENABLE_FREQ_SEARCH_TIMEOUT := 0
|
||||||
|
203
am_fix.c
203
am_fix.c
@ -28,72 +28,72 @@
|
|||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX
|
//#define SET_RSSI_COMP
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint16_t reg_val;
|
uint16_t reg_val;
|
||||||
int8_t gain_dB;
|
int8_t gain_dB;
|
||||||
} __attribute__((packed)) t_gain_table;
|
} __attribute__((packed)) t_gain_table;
|
||||||
|
|
||||||
// REG_10 AGC gain table
|
// REG_10 AGC gain table
|
||||||
//
|
//
|
||||||
// <15:10> ???
|
// <15:10> ???
|
||||||
//
|
//
|
||||||
// <9:8> = LNA Gain Short
|
// <9:8> = LNA Gain Short
|
||||||
// 3 = 0dB < original value
|
// 3 = 0dB < original value
|
||||||
// 2 = -24dB // was -11
|
// 2 = -24dB // was -11
|
||||||
// 1 = -30dB // was -16
|
// 1 = -30dB // was -16
|
||||||
// 0 = -33dB // was -19
|
// 0 = -33dB // was -19
|
||||||
//
|
//
|
||||||
// <7:5> = LNA Gain
|
// <7:5> = LNA Gain
|
||||||
// 7 = 0dB
|
// 7 = 0dB
|
||||||
// 6 = -2dB
|
// 6 = -2dB
|
||||||
// 5 = -4dB < original value
|
// 5 = -4dB < original value
|
||||||
// 4 = -6dB
|
// 4 = -6dB
|
||||||
// 3 = -9dB
|
// 3 = -9dB
|
||||||
// 2 = -14dB
|
// 2 = -14dB
|
||||||
// 1 = -19dB
|
// 1 = -19dB
|
||||||
// 0 = -24dB
|
// 0 = -24dB
|
||||||
//
|
//
|
||||||
// <4:3> = MIXER Gain
|
// <4:3> = MIXER Gain
|
||||||
// 3 = 0dB < original value
|
// 3 = 0dB < original value
|
||||||
// 2 = -3dB
|
// 2 = -3dB
|
||||||
// 1 = -6dB
|
// 1 = -6dB
|
||||||
// 0 = -8dB
|
// 0 = -8dB
|
||||||
//
|
//
|
||||||
// <2:0> = PGA Gain
|
// <2:0> = PGA Gain
|
||||||
// 7 = 0dB
|
// 7 = 0dB
|
||||||
// 6 = -3dB < original value
|
// 6 = -3dB < original value
|
||||||
// 5 = -6dB
|
// 5 = -6dB
|
||||||
// 4 = -9dB
|
// 4 = -9dB
|
||||||
// 3 = -15dB
|
// 3 = -15dB
|
||||||
// 2 = -21dB
|
// 2 = -21dB
|
||||||
// 1 = -27dB
|
// 1 = -27dB
|
||||||
// 0 = -33dB
|
// 0 = -33dB
|
||||||
|
|
||||||
// front end register dB values
|
// front end register dB values
|
||||||
//
|
//
|
||||||
// these values need to be accurate for the code to properly/reliably switch
|
// these values need to be accurate for the code to properly/reliably switch
|
||||||
// between table entries when adjusting the front end registers.
|
// between table entries when adjusting the front end registers.
|
||||||
//
|
//
|
||||||
// these 4 tables need a measuring/calibration update
|
// these 4 tables need a measuring/calibration update
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// QUESTION: why do I have to surround the negative numbers in brackets ???
|
// QUESTION: why do I have to surround the negative numbers in brackets ???
|
||||||
// if I don't add the brackets, reading the table returns unexpected/different values !!!
|
// if I don't add the brackets, reading the table returns unexpected/different values !!!
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//// static const int16_t lnas_dB[] = { -19, -16, -11, 0}; // was (but wrong)
|
//// static const int16_t lnas_dB[] = { -19, -16, -11, 0}; // was (but wrong)
|
||||||
// static const int16_t lnas_dB[] = { (-33), (-30), (-24), 0}; // corrected'ish
|
// static const int16_t lnas_dB[] = { (-33), (-30), (-24), 0}; // corrected'ish
|
||||||
// static const int16_t lna_dB[] = { (-24), (-19), (-14), ( -9), (-6), (-4), (-2), 0};
|
// static const int16_t lna_dB[] = { (-24), (-19), (-14), ( -9), (-6), (-4), (-2), 0};
|
||||||
// static const int16_t mixer_dB[] = { ( -8), ( -6), ( -3), 0};
|
// static const int16_t mixer_dB[] = { ( -8), ( -6), ( -3), 0};
|
||||||
// static const int16_t pga_dB[] = { (-33), (-27), (-21), (-15), (-9), (-6), (-3), 0};
|
// static const int16_t pga_dB[] = { (-33), (-27), (-21), (-15), (-9), (-6), (-3), 0};
|
||||||
|
|
||||||
// lookup table is hugely easier than writing code to do the same
|
// lookup table is hugely easier than writing code to do the same
|
||||||
//
|
//
|
||||||
static const t_gain_table gain_table[] =
|
static const t_gain_table gain_table[] =
|
||||||
{
|
{
|
||||||
{0x03BE, -7}, // 3 5 3 6 .. 0dB -4dB 0dB -3dB .. -7dB original
|
{0x03BE, -7}, // 3 5 3 6 .. 0dB -4dB 0dB -3dB .. -7dB original
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX_TEST1
|
#ifdef ENABLE_AM_FIX_TEST1
|
||||||
@ -105,9 +105,9 @@
|
|||||||
{0x015E, -47}, // 2 .. 1 2 3 6 .. -30dB -14dB 0dB -3dB .. -47dB
|
{0x015E, -47}, // 2 .. 1 2 3 6 .. -30dB -14dB 0dB -3dB .. -47dB
|
||||||
{0x025E, -41}, // 3 .. 2 2 3 6 .. -24dB -14dB 0dB -3dB .. -41dB
|
{0x025E, -41}, // 3 .. 2 2 3 6 .. -24dB -14dB 0dB -3dB .. -41dB
|
||||||
{0x035E, -17} // 4 .. 3 2 3 6 .. 0dB -14dB 0dB -3dB .. -17dB original
|
{0x035E, -17} // 4 .. 3 2 3 6 .. 0dB -14dB 0dB -3dB .. -17dB original
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned int original_index = 1;
|
static const unsigned int original_index = 1;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
{0x0000, -98}, // 1 .. 0 0 0 0 .. -33dB -24dB -8dB -33dB .. -98dB
|
{0x0000, -98}, // 1 .. 0 0 0 0 .. -33dB -24dB -8dB -33dB .. -98dB
|
||||||
@ -206,44 +206,44 @@
|
|||||||
{0x03F7, -3}, // 94 .. 3 7 2 7 .. 0dB 0dB -3dB 0dB .. -3dB
|
{0x03F7, -3}, // 94 .. 3 7 2 7 .. 0dB 0dB -3dB 0dB .. -3dB
|
||||||
{0x03DF, -2}, // 95 .. 3 6 3 7 .. 0dB -2dB 0dB 0dB .. -2dB
|
{0x03DF, -2}, // 95 .. 3 6 3 7 .. 0dB -2dB 0dB 0dB .. -2dB
|
||||||
{0x03FF, 0}, // 96 .. 3 7 3 7 .. 0dB 0dB 0dB 0dB .. 0dB
|
{0x03FF, 0}, // 96 .. 3 7 3 7 .. 0dB 0dB 0dB 0dB .. 0dB
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned int original_index = 90;
|
static const unsigned int original_index = 90;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
||||||
// display update rate
|
// display update rate
|
||||||
static const unsigned int display_update_rate = 250 / 10; // max 250ms display update rate
|
static const unsigned int display_update_rate = 250 / 10; // max 250ms display update rate
|
||||||
unsigned int display_update_tick = 0;
|
unsigned int display_update_tick = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX_TEST1
|
#ifdef ENABLE_AM_FIX_TEST1
|
||||||
// user manually sets the table index .. used to calibrate the desired dB gain table
|
// user manually sets the table index .. used to calibrate the desired dB gain table
|
||||||
unsigned int gain_table_index[2] = {1 + g_eeprom.config.setting.am_fix_test1, 1 + g_eeprom.config.setting.am_fix_test1};
|
unsigned int gain_table_index[2] = {1 + g_eeprom.config.setting.am_fix_test1, 1 + g_eeprom.config.setting.am_fix_test1};
|
||||||
#else
|
#else
|
||||||
unsigned int gain_table_index[2] = {original_index, original_index};
|
unsigned int gain_table_index[2] = {original_index, original_index};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// used simply to detect a changed gain setting
|
// used simply to detect a changed gain setting
|
||||||
unsigned int gain_table_index_prev[2] = {0, 0};
|
unsigned int gain_table_index_prev[2] = {0, 0};
|
||||||
|
|
||||||
// to help reduce gain hunting, peak hold count down tick
|
// to help reduce gain hunting, peak hold count down tick
|
||||||
unsigned int hold_counter[2] = {0, 0};
|
unsigned int hold_counter[2] = {0, 0};
|
||||||
|
|
||||||
// holds the previous RSSI level .. we do an average of old + new RSSI reading
|
// holds the previous RSSI level .. we do an average of old + new RSSI reading
|
||||||
int16_t prev_rssi[2] = {0, 0};
|
int16_t prev_rssi[2] = {0, 0};
|
||||||
|
|
||||||
// used to correct the RSSI readings after our RF gain adjustments
|
// used to correct the RSSI readings after our RF gain adjustments
|
||||||
int16_t rssi_gain_diff[2] = {0, 0};
|
int16_t rssi_gain_diff[2] = {0, 0};
|
||||||
|
|
||||||
#ifndef ENABLE_AM_FIX_TEST1
|
#ifndef ENABLE_AM_FIX_TEST1
|
||||||
// -89 dBm, any higher and the AM demodulator starts to saturate/clip/distort
|
// -89 dBm, any higher and the AM demodulator starts to saturate/clip/distort
|
||||||
const int16_t desired_rssi = (-89 + 160) * 2;
|
const int16_t desired_rssi = (-89 + 160) * 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void AM_fix_init(void)
|
void AM_fix_init(void)
|
||||||
{ // called at boot-up
|
{ // called at boot-up
|
||||||
unsigned int vfo;
|
unsigned int vfo;
|
||||||
for (vfo = 0; vfo < 2; vfo++)
|
for (vfo = 0; vfo < 2; vfo++)
|
||||||
{
|
{
|
||||||
@ -252,12 +252,12 @@
|
|||||||
#else
|
#else
|
||||||
gain_table_index[vfo] = original_index; // re-start with original QS setting
|
gain_table_index[vfo] = original_index; // re-start with original QS setting
|
||||||
#endif
|
#endif
|
||||||
// AM_fix_reset(vfo);
|
//AM_fix_reset(vfo);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AM_fix_reset(const int vfo)
|
void AM_fix_reset(const int vfo)
|
||||||
{ // reset the AM fixer upper
|
{ // reset the AM fixer upper
|
||||||
|
|
||||||
if (vfo < 0 || vfo >= 2)
|
if (vfo < 0 || vfo >= 2)
|
||||||
return;
|
return;
|
||||||
@ -271,21 +271,21 @@
|
|||||||
rssi_gain_diff[vfo] = 0;
|
rssi_gain_diff[vfo] = 0;
|
||||||
gain_table_index_prev[vfo] = 0;
|
gain_table_index_prev[vfo] = 0;
|
||||||
#ifdef ENABLE_AM_FIX_TEST1
|
#ifdef ENABLE_AM_FIX_TEST1
|
||||||
// gain_table_index[vfo] = 1 + g_eeprom.config.setting.am_fix_test1;
|
//gain_table_index[vfo] = 1 + g_eeprom.config.setting.am_fix_test1;
|
||||||
#else
|
#else
|
||||||
// gain_table_index[vfo] = original_index; // re-start with original QS setting
|
//gain_table_index[vfo] = original_index; // re-start with original QS setting
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust the RX gain to try and prevent the AM demodulator from
|
// adjust the RX gain to try and prevent the AM demodulator from
|
||||||
// saturating (distorted AM audio)
|
// saturating (distorted AM audio)
|
||||||
//
|
//
|
||||||
// we're actually doing the BK4819's job for it here, but as the chip
|
// we're actually doing the BK4819's job for it here, but as the chip
|
||||||
// won't/don't do it for itself, we're left to bodging it ourself by
|
// won't/don't do it for itself, we're left to bodging it ourself by
|
||||||
// playing with the RF front end gain setting
|
// playing with the RF front end gain setting
|
||||||
//
|
//
|
||||||
void AM_fix_10ms(const int vfo)
|
void AM_fix_10ms(const int vfo)
|
||||||
{
|
{
|
||||||
int16_t diff_dB;
|
int16_t diff_dB;
|
||||||
int16_t rssi;
|
int16_t rssi;
|
||||||
|
|
||||||
@ -328,9 +328,14 @@
|
|||||||
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
||||||
{
|
{
|
||||||
const int16_t new_rssi = rssi - rssi_gain_diff[vfo];
|
const int16_t new_rssi = rssi - rssi_gain_diff[vfo];
|
||||||
|
const uint16_t new_glitch = BK4819_GetGlitchIndicator();
|
||||||
|
const uint16_t new_noise = BK4819_GetExNoiceIndicator();
|
||||||
|
|
||||||
if (g_current_rssi[vfo] != new_rssi)
|
if (g_current_rssi[vfo] != new_rssi)
|
||||||
{
|
{
|
||||||
g_current_rssi[vfo] = new_rssi;
|
g_current_rssi[vfo] = new_rssi;
|
||||||
|
g_current_glitch[vfo] = new_glitch;
|
||||||
|
g_current_noise[vfo] = new_noise;
|
||||||
|
|
||||||
if (display_update_tick == 0)
|
if (display_update_tick == 0)
|
||||||
{ // trigger a display update
|
{ // trigger a display update
|
||||||
@ -387,9 +392,9 @@
|
|||||||
else
|
else
|
||||||
{ // incrementally reduce the gain .. taking it slow improves noise/spike immunity
|
{ // incrementally reduce the gain .. taking it slow improves noise/spike immunity
|
||||||
|
|
||||||
// if (index >= (1 + 3) && diff_dB >= 3)
|
//if (index >= (1 + 3) && diff_dB >= 3)
|
||||||
// index -= 3; // faster gain reduction
|
// index -= 3; // faster gain reduction
|
||||||
// else
|
//else
|
||||||
if (index > 1)
|
if (index > 1)
|
||||||
index--; // slow step-by-step gain reduction
|
index--; // slow step-by-step gain reduction
|
||||||
}
|
}
|
||||||
@ -426,8 +431,10 @@
|
|||||||
|
|
||||||
// offset the RSSI reading to the rest of the firmware to cancel out the gain adjustments we make
|
// offset the RSSI reading to the rest of the firmware to cancel out the gain adjustments we make
|
||||||
|
|
||||||
|
#ifdef SET_RSSI_COMP
|
||||||
// RF gain difference from original QS setting
|
// RF gain difference from original QS setting
|
||||||
rssi_gain_diff[vfo] = ((int16_t)gain_table[index].gain_dB - gain_table[original_index].gain_dB) * 2;
|
rssi_gain_diff[vfo] = ((int16_t)gain_table[index].gain_dB - gain_table[original_index].gain_dB) * 2;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// save the corrected RSSI level
|
// save the corrected RSSI level
|
||||||
@ -440,9 +447,9 @@
|
|||||||
g_update_display = true;
|
g_update_display = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
||||||
|
|
||||||
void AM_fix_print_data(const int vfo, char *s)
|
void AM_fix_print_data(const int vfo, char *s)
|
||||||
{
|
{
|
||||||
@ -458,6 +465,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
14
am_fix.h
14
am_fix.h
@ -16,20 +16,18 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AM_FIXH
|
#ifndef AM_FIXH
|
||||||
|
#define AM_FIXH
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX
|
extern int16_t rssi_gain_diff[2];
|
||||||
extern int16_t rssi_gain_diff[2];
|
|
||||||
|
|
||||||
void AM_fix_init(void);
|
void AM_fix_init(void);
|
||||||
void AM_fix_reset(const int vfo);
|
void AM_fix_reset(const int vfo);
|
||||||
void AM_fix_10ms(const int vfo);
|
void AM_fix_10ms(const int vfo);
|
||||||
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
#ifdef ENABLE_AM_FIX_SHOW_DATA
|
||||||
void AM_fix_print_data(const int vfo, char *s);
|
void AM_fix_print_data(const int vfo, char *s);
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -83,6 +83,8 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const
|
|||||||
static void APP_update_rssi(const int vfo)
|
static void APP_update_rssi(const int vfo)
|
||||||
{
|
{
|
||||||
int16_t rssi = BK4819_GetRSSI();
|
int16_t rssi = BK4819_GetRSSI();
|
||||||
|
uint8_t glitch = BK4819_GetGlitchIndicator();
|
||||||
|
uint8_t noise = BK4819_GetExNoiceIndicator();
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX
|
#ifdef ENABLE_AM_FIX
|
||||||
// add RF gain adjust compensation
|
// add RF gain adjust compensation
|
||||||
@ -94,8 +96,10 @@ static void APP_update_rssi(const int vfo)
|
|||||||
return; // no change
|
return; // no change
|
||||||
|
|
||||||
g_current_rssi[vfo] = rssi;
|
g_current_rssi[vfo] = rssi;
|
||||||
|
g_current_glitch[vfo] = glitch;
|
||||||
|
g_current_noise[vfo] = noise;
|
||||||
|
|
||||||
UI_update_rssi(rssi, vfo);
|
UI_update_rssi(rssi, glitch, noise, vfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void APP_check_for_new_receive(void)
|
static void APP_check_for_new_receive(void)
|
||||||
@ -1560,7 +1564,7 @@ void APP_process_flash_light_10ms(void)
|
|||||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT);
|
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT);
|
||||||
#ifdef ENABLE_FLASH_LIGHT_SOS_TONE
|
#ifdef ENABLE_FLASH_LIGHT_SOS_TONE
|
||||||
if (!g_squelch_open && !g_monitor_enabled && !GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER))
|
if (!g_squelch_open && !g_monitor_enabled && !GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER))
|
||||||
BK4819_StartTone1(880, 50);
|
BK4819_StartTone1(880, 50, g_current_function == FUNCTION_TRANSMIT);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -819,6 +819,7 @@ void MAIN_Key_STAR(bool key_pressed, bool key_held)
|
|||||||
if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
|
if (g_scan_state_dir != SCAN_STATE_DIR_OFF)
|
||||||
{ // RF scanning
|
{ // RF scanning
|
||||||
|
|
||||||
|
#ifdef ENABLE_SCAN_IGNORE_LIST
|
||||||
if (scanning_paused())
|
if (scanning_paused())
|
||||||
{
|
{
|
||||||
FI_add_freq_ignored(g_rx_vfo->freq_config_rx.frequency);
|
FI_add_freq_ignored(g_rx_vfo->freq_config_rx.frequency);
|
||||||
@ -830,6 +831,7 @@ void MAIN_Key_STAR(bool key_pressed, bool key_held)
|
|||||||
g_rx_reception_mode = RX_MODE_NONE;
|
g_rx_reception_mode = RX_MODE_NONE;
|
||||||
FUNCTION_Select(FUNCTION_FOREGROUND);
|
FUNCTION_Select(FUNCTION_FOREGROUND);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
2
audio.c
2
audio.c
@ -173,7 +173,7 @@ void AUDIO_PlayBeep(beep_type_t Beep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BK4819_PlayTone(ToneFrequency, true);
|
// BK4819_PlayTone(ToneFrequency, true);
|
||||||
BK4819_StartTone1(ToneFrequency, 96);
|
BK4819_StartTone1(ToneFrequency, 96, false);
|
||||||
|
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
||||||
|
@ -881,7 +881,7 @@ void BK4819_EnableDTMF(void)
|
|||||||
(15u << BK4819_REG_24_SHIFT_MAX_SYMBOLS)); // 0 ~ 15
|
(15u << BK4819_REG_24_SHIFT_MAX_SYMBOLS)); // 0 ~ 15
|
||||||
}
|
}
|
||||||
|
|
||||||
void BK4819_StartTone1(const uint16_t frequency, const unsigned int level)
|
void BK4819_StartTone1(const uint16_t frequency, const unsigned int level, const bool tx)
|
||||||
{
|
{
|
||||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
@ -895,12 +895,16 @@ void BK4819_StartTone1(const uint16_t frequency, const unsigned int level)
|
|||||||
BK4819_WriteRegister(0x70, BK4819_REG_70_ENABLE_TONE1 | ((level & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
BK4819_WriteRegister(0x70, BK4819_REG_70_ENABLE_TONE1 | ((level & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
||||||
|
|
||||||
BK4819_WriteRegister(0x30, 0);
|
BK4819_WriteRegister(0x30, 0);
|
||||||
#if 1
|
|
||||||
|
if (!tx)
|
||||||
|
{
|
||||||
BK4819_WriteRegister(0x30,
|
BK4819_WriteRegister(0x30,
|
||||||
BK4819_REG_30_ENABLE_AF_DAC |
|
BK4819_REG_30_ENABLE_AF_DAC |
|
||||||
BK4819_REG_30_ENABLE_DISC_MODE |
|
BK4819_REG_30_ENABLE_DISC_MODE |
|
||||||
BK4819_REG_30_ENABLE_TX_DSP);
|
BK4819_REG_30_ENABLE_TX_DSP);
|
||||||
#else
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
BK4819_WriteRegister(0x30,
|
BK4819_WriteRegister(0x30,
|
||||||
BK4819_REG_30_ENABLE_VCO_CALIB |
|
BK4819_REG_30_ENABLE_VCO_CALIB |
|
||||||
BK4819_REG_30_ENABLE_UNKNOWN |
|
BK4819_REG_30_ENABLE_UNKNOWN |
|
||||||
@ -913,13 +917,14 @@ void BK4819_StartTone1(const uint16_t frequency, const unsigned int level)
|
|||||||
BK4819_REG_30_ENABLE_TX_DSP | //
|
BK4819_REG_30_ENABLE_TX_DSP | //
|
||||||
// BK4819_REG_30_ENABLE_RX_DSP |
|
// BK4819_REG_30_ENABLE_RX_DSP |
|
||||||
0);
|
0);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
BK4819_WriteRegister(0x71, scale_freq(frequency));
|
BK4819_WriteRegister(0x71, scale_freq(frequency));
|
||||||
|
|
||||||
BK4819_ExitTxMute();
|
BK4819_ExitTxMute();
|
||||||
|
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
|
if (!tx)
|
||||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -978,7 +983,7 @@ void BK4819_StopTones(const bool tx)
|
|||||||
void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level)
|
void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level)
|
||||||
{
|
{
|
||||||
const uint16_t prev_af = BK4819_ReadRegister(0x47);
|
const uint16_t prev_af = BK4819_ReadRegister(0x47);
|
||||||
BK4819_StartTone1(tone_Hz, level);
|
BK4819_StartTone1(tone_Hz, level, g_current_function == FUNCTION_TRANSMIT);
|
||||||
SYSTEM_DelayMs(delay - 2);
|
SYSTEM_DelayMs(delay - 2);
|
||||||
BK4819_StopTones(g_current_function == FUNCTION_TRANSMIT);
|
BK4819_StopTones(g_current_function == FUNCTION_TRANSMIT);
|
||||||
BK4819_WriteRegister(0x47, prev_af);
|
BK4819_WriteRegister(0x47, prev_af);
|
||||||
@ -996,9 +1001,9 @@ void BK4819_PlayRoger(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
const uint16_t prev_af = BK4819_ReadRegister(0x47);
|
const uint16_t prev_af = BK4819_ReadRegister(0x47);
|
||||||
BK4819_StartTone1(tone1_Hz, 96);
|
BK4819_StartTone1(tone1_Hz, 96, true);
|
||||||
SYSTEM_DelayMs(80 - 2);
|
SYSTEM_DelayMs(80 - 2);
|
||||||
BK4819_StartTone1(tone2_Hz, 96);
|
BK4819_StartTone1(tone2_Hz, 96, true);
|
||||||
SYSTEM_DelayMs(80);
|
SYSTEM_DelayMs(80);
|
||||||
BK4819_StopTones(true);
|
BK4819_StopTones(true);
|
||||||
BK4819_WriteRegister(0x47, prev_af);
|
BK4819_WriteRegister(0x47, prev_af);
|
||||||
|
@ -103,7 +103,7 @@ void BK4819_SetCompander(const unsigned int mode);
|
|||||||
void BK4819_DisableVox(void);
|
void BK4819_DisableVox(void);
|
||||||
void BK4819_DisableDTMF(void);
|
void BK4819_DisableDTMF(void);
|
||||||
void BK4819_EnableDTMF(void);
|
void BK4819_EnableDTMF(void);
|
||||||
void BK4819_StartTone1(const uint16_t frequency, const unsigned int level);
|
void BK4819_StartTone1(const uint16_t frequency, const unsigned int level, const bool tx);
|
||||||
void BK4819_StopTones(const bool tx);
|
void BK4819_StopTones(const bool tx);
|
||||||
void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level);
|
void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level);
|
||||||
void BK4819_EnterTxMute(void);
|
void BK4819_EnterTxMute(void);
|
||||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -6,7 +6,7 @@
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
// a list of frequencies to ignore/skip when scanning
|
// a list of frequencies to ignore/skip when scanning
|
||||||
uint32_t ignore_frequencies[256];
|
uint32_t ignore_frequencies[64];
|
||||||
int ignore_frequencies_count = 0;
|
int ignore_frequencies_count = 0;
|
||||||
|
|
||||||
void FI_clear_freq_ignored(void)
|
void FI_clear_freq_ignored(void)
|
||||||
|
@ -220,7 +220,7 @@ void FUNCTION_Select(function_type_t Function)
|
|||||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
||||||
|
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
BK4819_StartTone1(500, 28);
|
BK4819_StartTone1(500, 28, g_current_function == FUNCTION_TRANSMIT);
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
|
|
||||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_SPEAKER);
|
||||||
|
4
misc.c
4
misc.c
@ -234,7 +234,9 @@ volatile bool g_flag_tail_tone_elimination_complete;
|
|||||||
|
|
||||||
volatile uint16_t g_boot_tick_10ms = 4000 / 10; // 4 seconds
|
volatile uint16_t g_boot_tick_10ms = 4000 / 10; // 4 seconds
|
||||||
|
|
||||||
int16_t g_current_rssi[2] = {0, 0}; // now one per VFO
|
int16_t g_current_rssi[2] = {0, 0};
|
||||||
|
uint16_t g_current_glitch[2] = {0, 0};
|
||||||
|
uint16_t g_current_noise[2] = {0, 0};
|
||||||
|
|
||||||
uint8_t g_mic_sensitivity_tuning;
|
uint8_t g_mic_sensitivity_tuning;
|
||||||
|
|
||||||
|
6
misc.h
6
misc.h
@ -321,7 +321,11 @@ extern volatile bool g_next_time_slice_40ms;
|
|||||||
extern volatile bool g_schedule_noaa;
|
extern volatile bool g_schedule_noaa;
|
||||||
#endif
|
#endif
|
||||||
extern volatile bool g_flag_tail_tone_elimination_complete;
|
extern volatile bool g_flag_tail_tone_elimination_complete;
|
||||||
extern int16_t g_current_rssi[2]; // now one per VFO
|
|
||||||
|
extern int16_t g_current_rssi[2];
|
||||||
|
extern uint16_t g_current_glitch[2];
|
||||||
|
extern uint16_t g_current_noise[2];
|
||||||
|
|
||||||
extern volatile uint16_t g_boot_tick_10ms;
|
extern volatile uint16_t g_boot_tick_10ms;
|
||||||
|
|
||||||
extern uint8_t g_mic_sensitivity_tuning;
|
extern uint8_t g_mic_sensitivity_tuning;
|
||||||
|
26
ui/main.c
26
ui/main.c
@ -55,27 +55,13 @@ void draw_bar(uint8_t *line, const int len, const int max_width)
|
|||||||
for (i = 0; i < max_width; i += 2)
|
for (i = 0; i < max_width; i += 2)
|
||||||
line[i] = (i <= len) ? 0x7f : 0x41;
|
line[i] = (i <= len) ? 0x7f : 0x41;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// segmented bar
|
// segmented bar
|
||||||
for (i = 0; i < max_width; i += 4)
|
for (i = 0; i < max_width; i += 4)
|
||||||
{
|
|
||||||
for (int k = i - 4; k < i && k < len; k++)
|
for (int k = i - 4; k < i && k < len; k++)
|
||||||
{
|
|
||||||
if (k >= 0)
|
if (k >= 0)
|
||||||
// line[k] = (k < (i - 1)) ? 0x7f : 0x00;
|
// line[k] = (k < (i - 1)) ? 0x7f : 0x00;
|
||||||
if (k < (i - 1))
|
if (k < (i - 1))
|
||||||
line[k] = 0x7f;
|
line[k] = 0x7f;
|
||||||
// line[k] = 0x3e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// top/bottom lines
|
|
||||||
for (i = 0; i < len; i += 2)
|
|
||||||
line[i] |= 0x41;
|
|
||||||
for (i &= ~3u ; i < max_width; i += 4)
|
|
||||||
line[i] = 0x41;
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,10 +165,14 @@ void UI_drawBars(uint8_t *p, const unsigned int level)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_RX_SIGNAL_BAR
|
#ifdef ENABLE_RX_SIGNAL_BAR
|
||||||
bool UI_DisplayRSSIBar(const int16_t rssi, const bool now)
|
bool UI_DisplayRSSIBar(const int16_t rssi, const int16_t glitch, const int16_t noise, const bool now)
|
||||||
{
|
{
|
||||||
if (g_eeprom.config.setting.enable_rssi_bar)
|
if (g_eeprom.config.setting.enable_rssi_bar)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
(void)glitch; // TODO:
|
||||||
|
(void)noise;
|
||||||
|
|
||||||
// const int16_t s0_dBm = -127; // S0 .. base level
|
// const int16_t s0_dBm = -127; // S0 .. base level
|
||||||
const int16_t s0_dBm = -147; // S0 .. base level
|
const int16_t s0_dBm = -147; // S0 .. base level
|
||||||
|
|
||||||
@ -245,14 +235,14 @@ void UI_drawBars(uint8_t *p, const unsigned int level)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void UI_update_rssi(const int16_t rssi, const int vfo)
|
void UI_update_rssi(const int16_t rssi, const int16_t glitch, const int16_t noise, const int vfo)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_RX_SIGNAL_BAR
|
#ifdef ENABLE_RX_SIGNAL_BAR
|
||||||
if (g_center_line == CENTER_LINE_RSSI)
|
if (g_center_line == CENTER_LINE_RSSI)
|
||||||
{ // optional larger RSSI dBm, S-point and bar level
|
{ // optional larger RSSI dBm, S-point and bar level
|
||||||
//if (g_current_function == FUNCTION_RECEIVE && g_squelch_open)
|
//if (g_current_function == FUNCTION_RECEIVE && g_squelch_open)
|
||||||
if (g_current_function == FUNCTION_RECEIVE)
|
if (g_current_function == FUNCTION_RECEIVE)
|
||||||
UI_DisplayRSSIBar(rssi, true);
|
UI_DisplayRSSIBar(rssi, glitch, noise, true);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -921,7 +911,7 @@ void UI_DisplayMain(void)
|
|||||||
if (rx && g_eeprom.config.setting.enable_rssi_bar)
|
if (rx && g_eeprom.config.setting.enable_rssi_bar)
|
||||||
{
|
{
|
||||||
g_center_line = CENTER_LINE_RSSI;
|
g_center_line = CENTER_LINE_RSSI;
|
||||||
UI_DisplayRSSIBar(g_current_rssi[g_rx_vfo_num], false);
|
UI_DisplayRSSIBar(g_current_rssi[g_rx_vfo_num], g_current_glitch[g_rx_vfo_num], g_current_noise[g_rx_vfo_num], false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,7 +34,7 @@ extern center_line_t g_center_line;
|
|||||||
#ifdef ENABLE_TX_AUDIO_BAR
|
#ifdef ENABLE_TX_AUDIO_BAR
|
||||||
bool UI_DisplayAudioBar(const bool now);
|
bool UI_DisplayAudioBar(const bool now);
|
||||||
#endif
|
#endif
|
||||||
void UI_update_rssi(const int16_t rssi, const int vfo);
|
void UI_update_rssi(const int16_t rssi, const int16_t glitch, const int16_t noise, const int vfo);
|
||||||
void UI_DisplayMain(void);
|
void UI_DisplayMain(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user