mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 06:11:24 +03:00
DTMF adjustments
This commit is contained in:
parent
66afde980a
commit
6cdd8f35b1
@ -311,8 +311,7 @@ void DTMF_Reply(void)
|
||||
pString = gDTMF_String;
|
||||
}
|
||||
else
|
||||
{
|
||||
// append out ID code onto the end of the DTMF code to send
|
||||
{ // append our ID code onto the end of the DTMF code to send
|
||||
sprintf(String, "%s%c%s", gDTMF_String, gEeprom.DTMF_SEPARATE_CODE, gEeprom.ANI_DTMF_ID);
|
||||
pString = String;
|
||||
}
|
||||
|
@ -187,12 +187,16 @@ void GENERIC_Key_PTT(bool bKeyPressed)
|
||||
gDTMF_InputBox[gDTMF_InputIndex] = 0;
|
||||
|
||||
#if 0
|
||||
// append our DTMF ID to the inputted DTMF code -
|
||||
// IF the user inputted code is exactly 3 digits long
|
||||
if (gDTMF_InputIndex == 3)
|
||||
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3); // this will cause our ID tobe appened to the DTMF code
|
||||
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3);
|
||||
else
|
||||
#else
|
||||
// append our DTMF ID to the inputted DTMF code -
|
||||
// IF the user inputted code is exactly 3 digits long and D-DCD is enabled
|
||||
if (gDTMF_InputIndex == 3 && gTxVfo->DTMF_DECODING_ENABLE > 0)
|
||||
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3); // this will cause our ID tobe appened to the DTMF code
|
||||
gDTMF_CallMode = DTMF_CheckGroupCall(gDTMF_InputBox, 3);
|
||||
else
|
||||
#endif
|
||||
gDTMF_CallMode = DTMF_CALL_MODE_DTMF;
|
||||
|
27
app/main.c
27
app/main.c
@ -175,6 +175,33 @@ static void processFKeyFunction(const KEY_Code_t Key, const bool beep)
|
||||
}
|
||||
gRequestSaveVFO = true;
|
||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||
#else
|
||||
|
||||
// TODO: FIX ME .. not working for VFO, works for channel
|
||||
|
||||
switch (gTxVfo->CHANNEL_BANDWIDTH)
|
||||
{
|
||||
case BANDWIDTH_WIDE:
|
||||
gTxVfo->CHANNEL_BANDWIDTH = BANDWIDTH_NARROW;
|
||||
break;
|
||||
default:
|
||||
case BANDWIDTH_NARROW:
|
||||
gTxVfo->CHANNEL_BANDWIDTH = BANDWIDTH_WIDE;
|
||||
break;
|
||||
}
|
||||
if (IS_MR_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
||||
{
|
||||
gRequestSaveChannel = 2;
|
||||
}
|
||||
else
|
||||
// if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE))
|
||||
{
|
||||
gRequestSaveVFO = true;
|
||||
gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
|
||||
}
|
||||
BK4819_SetFilterBandwidth(gTxVfo->CHANNEL_BANDWIDTH);
|
||||
gUpdateDisplay = true;
|
||||
gRequestDisplayScreen = gScreenToDisplay;
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
@ -170,22 +170,22 @@ typedef enum BK4819_GPIO_PIN_t BK4819_GPIO_PIN_t;
|
||||
|
||||
// REG 24
|
||||
|
||||
#define BK4819_REG_24_SHIFT_UNKNOWN_15 15
|
||||
#define BK4819_REG_24_SHIFT_THRESHOLD 7
|
||||
#define BK4819_REG_24_SHIFT_UNKNOWN_6 6
|
||||
#define BK4819_REG_24_SHIFT_ENABLE 5
|
||||
#define BK4819_REG_24_SHIFT_SELECT 4
|
||||
#define BK4819_REG_24_SHIFT_MAX_SYMBOLS 0
|
||||
#define BK4819_REG_24_SHIFT_UNKNOWN_15 15
|
||||
#define BK4819_REG_24_SHIFT_THRESHOLD 7
|
||||
#define BK4819_REG_24_SHIFT_UNKNOWN_6 6
|
||||
#define BK4819_REG_24_SHIFT_ENABLE 5
|
||||
#define BK4819_REG_24_SHIFT_SELECT 4
|
||||
#define BK4819_REG_24_SHIFT_MAX_SYMBOLS 0
|
||||
|
||||
#define BK4819_REG_24_MASK_THRESHOLD (0x2FU << BK4819_REG_24_SHIFT_THRESHOLD)
|
||||
#define BK4819_REG_24_MASK_ENABLE (0x01U << BK4819_REG_24_SHIFT_ENABLE)
|
||||
#define BK4819_REG_24_MASK_SELECT (0x04U << BK4819_REG_24_SHIFT_SELECT)
|
||||
#define BK4819_REG_24_MASK_MAX_SYMBOLS (0x0FU << BK4819_REG_24_SHIFT_MAX_SYMBOLS)
|
||||
#define BK4819_REG_24_MASK_THRESHOLD (0x2Fu << BK4819_REG_24_SHIFT_THRESHOLD)
|
||||
#define BK4819_REG_24_MASK_ENABLE (0x01u << BK4819_REG_24_SHIFT_ENABLE)
|
||||
#define BK4819_REG_24_MASK_SELECT (0x04u << BK4819_REG_24_SHIFT_SELECT)
|
||||
#define BK4819_REG_24_MASK_MAX_SYMBOLS (0x0Fu << BK4819_REG_24_SHIFT_MAX_SYMBOLS)
|
||||
|
||||
#define BK4819_REG_24_ENABLE (0x01U << BK4819_REG_24_SHIFT_ENABLE)
|
||||
#define BK4819_REG_24_DISABLE (0x00U << BK4819_REG_24_SHIFT_ENABLE)
|
||||
#define BK4819_REG_24_SELECT_DTMF (0x01U << BK4819_REG_24_SHIFT_SELECT)
|
||||
#define BK4819_REG_24_SELECT_SELCALL (0x00U << BK4819_REG_24_SHIFT_SELECT)
|
||||
#define BK4819_REG_24_ENABLE (1u << BK4819_REG_24_SHIFT_ENABLE)
|
||||
#define BK4819_REG_24_DISABLE (0u << BK4819_REG_24_SHIFT_ENABLE)
|
||||
#define BK4819_REG_24_SELECT_DTMF (1u << BK4819_REG_24_SHIFT_SELECT)
|
||||
#define BK4819_REG_24_SELECT_SELCALL (0u << BK4819_REG_24_SHIFT_SELECT)
|
||||
|
||||
// REG 30
|
||||
|
||||
|
204
driver/bk4819.c
204
driver/bk4819.c
@ -23,6 +23,10 @@
|
||||
#include "driver/system.h"
|
||||
#include "driver/systick.h"
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||
#endif
|
||||
|
||||
static const uint16_t FSK_RogerTable[7] = {0xF1A2, 0x7446, 0x61A4, 0x6544, 0x4E8A, 0xE044, 0xEA84};
|
||||
|
||||
static uint16_t gBK4819_GpioOutState;
|
||||
@ -56,22 +60,9 @@ void BK4819_Init(void)
|
||||
// RX AF level
|
||||
BK4819_WriteRegister(BK4819_REG_48, 0xB3A8);
|
||||
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x006F);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x106B);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x2067);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x3062);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x4050);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x5047);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x603A);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x702C);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x8041);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0x9037);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0xA025);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0xB017);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0xC0E4);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0xD0CB);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0xE0B5);
|
||||
BK4819_WriteRegister(BK4819_REG_09, 0xF09F);
|
||||
const uint8_t dtmf_coeffs[] = {0x6F,0x6B,0x67,0x62,0x50,0x47,0x3A,0x2C,0x41,0x37,0x25,0x17,0xE4,0xCB,0xB5,0x9F};
|
||||
for (unsigned int i = 0; i < ARRAY_SIZE(dtmf_coeffs); i++)
|
||||
BK4819_WriteRegister(BK4819_REG_09, (i << 12) | dtmf_coeffs[i]);
|
||||
|
||||
BK4819_WriteRegister(BK4819_REG_1F, 0x5454);
|
||||
BK4819_WriteRegister(BK4819_REG_3E, 0xA037);
|
||||
@ -346,7 +337,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord)
|
||||
Config = 0x904A; // 1 0 0 1 0 0 0 0 0 1001010
|
||||
}
|
||||
BK4819_WriteRegister(BK4819_REG_51, Config);
|
||||
|
||||
|
||||
// REG_07 <15:0>
|
||||
//
|
||||
// When <13> = 0 for CTC1
|
||||
@ -367,7 +358,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord)
|
||||
BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | (((FreqControlWord * 2064888u) + 500000u) / 1000000u)); // with rounding
|
||||
}
|
||||
|
||||
// freq_10Hz is CTCSS Hz * 10
|
||||
// freq_10Hz is CTCSS Hz * 10
|
||||
void BK4819_SetTailDetection(const uint32_t freq_10Hz)
|
||||
{
|
||||
// REG_07 <15:0>
|
||||
@ -414,12 +405,97 @@ void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold)
|
||||
|
||||
void BK4819_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth)
|
||||
{
|
||||
// REG_43 <14:12> 4 RF filter bandwidth
|
||||
// 0 = 1.7 kHz
|
||||
// 1 = 2.0 kHz
|
||||
// 2 = 2.5 kHz
|
||||
// 3 = 3.0 kHz
|
||||
// 4 = 3.75 kHz
|
||||
// 5 = 4.0 kHz
|
||||
// 6 = 4.25 kHz
|
||||
// 7 = 4.5 kHz
|
||||
// if REG_43 <5> == 1 RF filter bandwidth * 2
|
||||
//
|
||||
// REG_43 <11:9> 0 RF filter bandwidth when signal is weak
|
||||
// 0 = 1.7 kHz
|
||||
// 1 = 2.0 kHz
|
||||
// 2 = 2.5 kHz
|
||||
// 3 = 3.0 kHz
|
||||
// 4 = 3.75 kHz
|
||||
// 5 = 4.0 kHz
|
||||
// 6 = 4.25 kHz
|
||||
// 7 = 4.5 kHz
|
||||
// if REG_43 <5> == 1 RF filter bandwidth * 2
|
||||
//
|
||||
// REG_43 <8:6> 1 AFTxLPF2 filter Band Width
|
||||
// 1 = 2.5 kHz (for 12.5k Channel Space)
|
||||
// 2 = 2.75 kHz
|
||||
// 0 = 3.0 kHz (for 25k Channel Space)
|
||||
// 3 = 3.5 kHz
|
||||
// 4 = 4.5 kHz
|
||||
// 5 = 4.25 kHz
|
||||
// 6 = 4.0 kHz
|
||||
// 7 = 3.75 kHz
|
||||
//
|
||||
// REG_43 <5:4> 0 BW Mode Selection
|
||||
// 1 = 6.25k
|
||||
// 0 = 12.5k
|
||||
// 2 = 25k/20k
|
||||
//
|
||||
// REG_43 <2> 0 Gain after FM Demodulation
|
||||
// 0 = 0dB
|
||||
// 1 = 6dB
|
||||
//
|
||||
if (Bandwidth == BK4819_FILTER_BW_WIDE)
|
||||
BK4819_WriteRegister(BK4819_REG_43, 0x3028);
|
||||
{
|
||||
BK4819_WriteRegister(BK4819_REG_43,
|
||||
(0u << 15) | // 0
|
||||
(3u << 12) | // 3 RF filter bandwidth
|
||||
(3u << 9) | // 0 RF filter bandwidth when signal is weak
|
||||
(0u << 6) | // 0 AFTxLPF2 filter Band Width
|
||||
(2u << 4) | // 2 BW Mode Selection
|
||||
(1u << 3) | // 1
|
||||
(0u << 2) | // 0 Gain after FM Demodulation
|
||||
(0u << 0)); // 0
|
||||
}
|
||||
else
|
||||
if (Bandwidth == BK4819_FILTER_BW_NARROW)
|
||||
BK4819_WriteRegister(BK4819_REG_43, 0x4048);
|
||||
//BK4819_WriteRegister(BK4819_REG_43, 0x790C); // fastest squelch, https://github.com/fagci/uv-k5-firmware-fagci-mod
|
||||
{
|
||||
BK4819_WriteRegister(BK4819_REG_43, // 0x4048); // 0 100 000 001 00 1 0 00
|
||||
(0u << 15) | // 0
|
||||
(3u << 12) | // 4 RF filter bandwidth
|
||||
(3u << 9) | // 0 RF filter bandwidth when signal is weak
|
||||
(1u << 6) | // 1 AFTxLPF2 filter Band Width
|
||||
(0u << 4) | // 0 BW Mode Selection
|
||||
(1u << 3) | // 1
|
||||
(0u << 2) | // 0 Gain after FM Demodulation
|
||||
(0u << 0)); // 0
|
||||
/*
|
||||
// https://github.com/fagci/uv-k5-firmware-fagci-mod
|
||||
//BK4819_WriteRegister(BK4819_REG_43, // 0x790C); // 0 111 100 100 00 1 1 00 squelch
|
||||
(0u << 15) | // 0
|
||||
(7u << 12) | // 7 RF filter bandwidth
|
||||
(4u << 9) | // 4 RF filter bandwidth when signal is weak
|
||||
(4u << 6) | // 4 AFTxLPF2 filter Band Width
|
||||
(0u << 4) | // 0 BW Mode Selection
|
||||
(1u << 3) | // 1
|
||||
(1u << 2) | // 1 Gain after FM Demodulation
|
||||
(0u << 0)); // 0
|
||||
*/
|
||||
}
|
||||
else
|
||||
if (Bandwidth == BK4819_FILTER_BW_NARROWER)
|
||||
{
|
||||
BK4819_WriteRegister(BK4819_REG_43, // 0 100 000 001 01 1 0 00
|
||||
(0u << 15) | // 0
|
||||
(4u << 12) | // 4 RF filter bandwidth
|
||||
(0u << 9) | // 0 RF filter bandwidth when signal is weak
|
||||
(1u << 6) | // 1 AFTxLPF2 filter Band Width
|
||||
(1u << 4) | // 1 BW Mode Selection
|
||||
(1u << 3) | // 1
|
||||
(0u << 2) | // 0 Gain after FM Demodulation
|
||||
(0u << 0)); // 0
|
||||
}
|
||||
}
|
||||
|
||||
void BK4819_SetupPowerAmplifier(uint16_t Bias, uint32_t Frequency)
|
||||
@ -452,21 +528,47 @@ void BK4819_SetFrequency(uint32_t Frequency)
|
||||
BK4819_WriteRegister(BK4819_REG_39, (Frequency >> 16) & 0xFFFF);
|
||||
}
|
||||
|
||||
void BK4819_SetupSquelch(uint8_t SquelchOpenRSSIThresh, uint8_t SquelchCloseRSSIThresh, uint8_t SquelchOpenNoiseThresh, uint8_t SquelchCloseNoiseThresh, uint8_t SquelchCloseGlitchThresh, uint8_t SquelchOpenGlitchThresh)
|
||||
void BK4819_SetupSquelch(
|
||||
uint8_t SquelchOpenRSSIThresh,
|
||||
uint8_t SquelchCloseRSSIThresh,
|
||||
uint8_t SquelchOpenNoiseThresh,
|
||||
uint8_t SquelchCloseNoiseThresh,
|
||||
uint8_t SquelchCloseGlitchThresh,
|
||||
uint8_t SquelchOpenGlitchThresh)
|
||||
{
|
||||
// REG_70 <15> 0 Enable TONE1
|
||||
// 1 = Enable
|
||||
// 0 = Disable
|
||||
// REG_70 <14:8> 0 TONE1 tuning gain
|
||||
// REG_70 <7> 0 Enable TONE2
|
||||
// 1 = Enable
|
||||
// 0 = Disable
|
||||
// REG_70 <6:0> 0 TONE2/FSK tuning gain
|
||||
//
|
||||
BK4819_WriteRegister(BK4819_REG_70, 0);
|
||||
|
||||
// Glitch threshold for Squelch
|
||||
//
|
||||
BK4819_WriteRegister(BK4819_REG_4D, 0xA000 | SquelchCloseGlitchThresh);
|
||||
|
||||
// REG_4E <13:11> 5 Squelch = 1 Delay Setting
|
||||
// REG_4E <10: 9> 7 Squelch = 0 Delay Setting
|
||||
// REG_4E < 7: 0> 8 Glitch threshold for Squelch = 1
|
||||
//
|
||||
#if 1
|
||||
BK4819_WriteRegister(BK4819_REG_4D, 0xA000 | SquelchCloseGlitchThresh);
|
||||
BK4819_WriteRegister(BK4819_REG_4E, 0x6F00 | SquelchOpenGlitchThresh);
|
||||
#else
|
||||
// fastest squelch, https://github.com/fagci/uv-k5-firmware-fagci-mod this doesn't work
|
||||
BK4819_WriteRegister(BK4819_REG_4D, 0b01000000 | SquelchCloseGlitchThresh);
|
||||
// https://github.com/fagci/uv-k5-firmware-fagci-mod
|
||||
BK4819_WriteRegister(BK4819_REG_4E, 0x0040 | SquelchOpenGlitchThresh);
|
||||
#endif
|
||||
|
||||
// 0x6f = 0110 1111 meaning the default sql delays from the datasheet are used (101 and 111)
|
||||
BK4819_WriteRegister(BK4819_REG_4E, 0x6F00 | SquelchOpenGlitchThresh);
|
||||
BK4819_WriteRegister(BK4819_REG_4F, (SquelchCloseNoiseThresh << 8) | SquelchOpenNoiseThresh);
|
||||
BK4819_WriteRegister(BK4819_REG_78, (SquelchOpenRSSIThresh << 8) | SquelchCloseRSSIThresh);
|
||||
|
||||
// REG_4F <14:8> 47 Ex-noise threshold for Squelch = 0
|
||||
// REG_4F <6:0> 46 Ex-noise threshold for Squelch = 1
|
||||
BK4819_WriteRegister(BK4819_REG_4F, ((uint16_t)SquelchCloseNoiseThresh << 8) | SquelchOpenNoiseThresh);
|
||||
|
||||
// REG_78 <15:8> 72 RSSI threshold for Squelch = 1 0.5dB/step
|
||||
// REG_78 <7:0> 70 RSSI threshold for Squelch = 0 0.5dB/step
|
||||
BK4819_WriteRegister(BK4819_REG_78, ((uint16_t)SquelchOpenRSSIThresh << 8) | SquelchCloseRSSIThresh);
|
||||
|
||||
BK4819_SetAF(BK4819_AF_MUTE);
|
||||
|
||||
@ -558,14 +660,14 @@ void BK4819_SetCompander(const unsigned int mode)
|
||||
// mode 1 .. TX
|
||||
// mode 2 .. RX
|
||||
// mode 3 .. TX and RX
|
||||
|
||||
|
||||
if (mode == 0)
|
||||
{ // disable
|
||||
const uint16_t Value = BK4819_ReadRegister(BK4819_REG_31);
|
||||
BK4819_WriteRegister(BK4819_REG_31, Value & ~(1u < 3));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// enable
|
||||
val = BK4819_ReadRegister(BK4819_REG_31);
|
||||
BK4819_WriteRegister(BK4819_REG_31, val | (1u < 3));
|
||||
@ -581,7 +683,7 @@ void BK4819_SetCompander(const unsigned int mode)
|
||||
const uint16_t compress_ratio = (mode == 1 || mode >= 3) ? 3 : 0; // 4:1
|
||||
val = BK4819_ReadRegister(BK4819_REG_29);
|
||||
BK4819_WriteRegister(BK4819_REG_29, (val & ~(3u < 14)) | (compress_ratio < 14));
|
||||
|
||||
|
||||
// set the expander ratio
|
||||
//
|
||||
// REG_28 <15:14> 01 Expander (AF Rx) Ratio
|
||||
@ -608,14 +710,25 @@ void BK4819_DisableDTMF(void)
|
||||
|
||||
void BK4819_EnableDTMF(void)
|
||||
{
|
||||
// no idea what this register does
|
||||
BK4819_WriteRegister(BK4819_REG_21, 0x06D8);
|
||||
|
||||
// REG_24 <5> 0 DTMF/SelCall Enable
|
||||
// 1 = Enable
|
||||
// 0 = Disable
|
||||
// REG_24 <4> 1 DTMF or SelCall Detection Mode
|
||||
// 1 = for DTMF
|
||||
// 0 = for SelCall
|
||||
// REG_24 <3:0> 14 Max Symbol Number for SelCall Detection
|
||||
//
|
||||
BK4819_WriteRegister(BK4819_REG_24,
|
||||
(1U << BK4819_REG_24_SHIFT_UNKNOWN_15)
|
||||
| (24 << BK4819_REG_24_SHIFT_THRESHOLD)
|
||||
| (1U << BK4819_REG_24_SHIFT_UNKNOWN_6)
|
||||
| BK4819_REG_24_ENABLE
|
||||
| BK4819_REG_24_SELECT_DTMF
|
||||
| (14U << BK4819_REG_24_SHIFT_MAX_SYMBOLS));
|
||||
(1u << BK4819_REG_24_SHIFT_UNKNOWN_15)
|
||||
// | (24u << BK4819_REG_24_SHIFT_THRESHOLD) // original
|
||||
| (31u << BK4819_REG_24_SHIFT_THRESHOLD) // hopefully reduced sensitivity
|
||||
| (1u << BK4819_REG_24_SHIFT_UNKNOWN_6)
|
||||
| BK4819_REG_24_ENABLE
|
||||
| BK4819_REG_24_SELECT_DTMF
|
||||
| (14u << BK4819_REG_24_SHIFT_MAX_SYMBOLS));
|
||||
}
|
||||
|
||||
void BK4819_PlayTone(uint16_t Frequency, bool bTuningGainSwitch)
|
||||
@ -748,6 +861,7 @@ void BK4819_EnterDTMF_TX(bool bLocalLoopback)
|
||||
BK4819_EnableDTMF();
|
||||
BK4819_EnterTxMute();
|
||||
BK4819_SetAF(bLocalLoopback ? BK4819_AF_BEEP : BK4819_AF_MUTE);
|
||||
|
||||
BK4819_WriteRegister(BK4819_REG_70,
|
||||
0
|
||||
| BK4819_REG_70_MASK_ENABLE_TONE1
|
||||
@ -809,7 +923,7 @@ void BK4819_PlayDTMF(char Code)
|
||||
case '*': tone1 = 9715; tone2 = 12482; break; // 941Hz 1209Hz
|
||||
case '#': tone1 = 9715; tone2 = 15249; break; // 941Hz 1477Hz
|
||||
}
|
||||
|
||||
|
||||
if (tone1 > 0 && tone2 > 0)
|
||||
{
|
||||
BK4819_WriteRegister(BK4819_REG_71, tone1);
|
||||
@ -823,7 +937,7 @@ void BK4819_PlayDTMFString(const char *pString, bool bDelayFirst, uint16_t First
|
||||
|
||||
if (pString == NULL)
|
||||
return;
|
||||
|
||||
|
||||
for (i = 0; pString[i]; i++)
|
||||
{
|
||||
uint16_t Delay;
|
||||
@ -854,7 +968,7 @@ void BK4819_TransmitTone(bool bLocalLoopback, uint32_t Frequency)
|
||||
BK4819_EnableTXLink();
|
||||
|
||||
SYSTEM_DelayMs(50);
|
||||
|
||||
|
||||
BK4819_ExitTxMute();
|
||||
}
|
||||
|
||||
@ -926,7 +1040,7 @@ void BK4819_EnableCTCSS(void)
|
||||
#else
|
||||
BK4819_GenTail(4); // 55Hz tone freq
|
||||
#endif
|
||||
|
||||
|
||||
// REG_51 <15> 0
|
||||
// 1 = Enable TxCTCSS/CDCSS
|
||||
// 0 = Disable
|
||||
@ -1123,10 +1237,10 @@ void BK4819_PlayRoger(void)
|
||||
const uint32_t tone1_Hz = 1540;
|
||||
const uint32_t tone2_Hz = 1310;
|
||||
#endif
|
||||
|
||||
|
||||
BK4819_EnterTxMute();
|
||||
BK4819_SetAF(BK4819_AF_MUTE);
|
||||
BK4819_WriteRegister(BK4819_REG_70, 0xE000); // 1110 0000 0000 0000
|
||||
BK4819_WriteRegister(BK4819_REG_70, 0xE000); // 1110 0000 0000 0000
|
||||
|
||||
BK4819_EnableTXLink();
|
||||
SYSTEM_DelayMs(50);
|
||||
|
@ -47,7 +47,8 @@ typedef enum BK4819_AF_Type_t BK4819_AF_Type_t;
|
||||
enum BK4819_FilterBandwidth_t
|
||||
{
|
||||
BK4819_FILTER_BW_WIDE = 0,
|
||||
BK4819_FILTER_BW_NARROW
|
||||
BK4819_FILTER_BW_NARROW,
|
||||
BK4819_FILTER_BW_NARROWER
|
||||
};
|
||||
|
||||
typedef enum BK4819_FilterBandwidth_t BK4819_FilterBandwidth_t;
|
||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -168,7 +168,9 @@ uint32_t FREQUENCY_FloorToStep(uint32_t Upper, uint32_t Step, uint32_t Lower)
|
||||
}
|
||||
|
||||
int FREQUENCY_Check(VFO_Info_t *pInfo)
|
||||
{
|
||||
{ // return '0' if TX frequency is allowed
|
||||
// otherwise return '-1'
|
||||
|
||||
const uint32_t Frequency = pInfo->pTX->Frequency;
|
||||
|
||||
#ifdef ENABLE_NOAA
|
||||
@ -178,6 +180,22 @@ int FREQUENCY_Check(VFO_Info_t *pInfo)
|
||||
|
||||
switch (gSetting_F_LOCK)
|
||||
{
|
||||
case F_LOCK_OFF:
|
||||
if (Frequency >= 13600000 && Frequency < 17400000)
|
||||
return 0;
|
||||
if (Frequency >= 17400000 && Frequency < 35000000)
|
||||
if (gSetting_200TX)
|
||||
return 0;
|
||||
if (Frequency >= 35000000 && Frequency < 40000000)
|
||||
if (gSetting_350TX && gSetting_350EN)
|
||||
return 0;
|
||||
if (Frequency >= 40000000 && Frequency < 47000000)
|
||||
return 0;
|
||||
if (Frequency >= 47000000 && Frequency <= 60000000)
|
||||
if (gSetting_500TX)
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case F_LOCK_FCC:
|
||||
if (Frequency >= 14400000 && Frequency < 14800000)
|
||||
return 0;
|
||||
@ -210,23 +228,8 @@ int FREQUENCY_Check(VFO_Info_t *pInfo)
|
||||
if (Frequency >= 40000000 && Frequency < 43800000)
|
||||
return 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (Frequency >= 13600000 && Frequency < 17400000)
|
||||
return 0;
|
||||
if (Frequency >= 35000000 && Frequency < 40000000)
|
||||
if (gSetting_350TX && gSetting_350EN)
|
||||
return 0;
|
||||
if (Frequency >= 40000000 && Frequency < 47000000)
|
||||
return 0;
|
||||
if (Frequency >= 17400000 && Frequency < 35000000)
|
||||
if (gSetting_200TX)
|
||||
return 0;
|
||||
if (Frequency >= 47000000 && Frequency <= 60000000)
|
||||
if (gSetting_500TX)
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// dis-allowed TX frequency
|
||||
return -1;
|
||||
}
|
||||
|
28
radio.c
28
radio.c
@ -318,7 +318,7 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg)
|
||||
if (Data[4] == 0xFF)
|
||||
{
|
||||
gEeprom.VfoInfo[VFO].FrequencyReverse = false;
|
||||
gEeprom.VfoInfo[VFO].CHANNEL_BANDWIDTH = 0;
|
||||
gEeprom.VfoInfo[VFO].CHANNEL_BANDWIDTH = BK4819_FILTER_BW_WIDE;
|
||||
gEeprom.VfoInfo[VFO].OUTPUT_POWER = OUTPUT_POWER_LOW;
|
||||
gEeprom.VfoInfo[VFO].BUSY_CHANNEL_LOCK = false;
|
||||
}
|
||||
@ -547,10 +547,16 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0)
|
||||
BK4819_ToggleGpioOut(BK4819_GPIO0_PIN28_GREEN, false);
|
||||
|
||||
Bandwidth = gRxVfo->CHANNEL_BANDWIDTH;
|
||||
if (Bandwidth != BK4819_FILTER_BW_WIDE)
|
||||
Bandwidth = BK4819_FILTER_BW_NARROW;
|
||||
BK4819_SetFilterBandwidth(Bandwidth);
|
||||
|
||||
switch (Bandwidth)
|
||||
{
|
||||
default:
|
||||
Bandwidth = BK4819_FILTER_BW_WIDE;
|
||||
case BK4819_FILTER_BW_WIDE:
|
||||
case BK4819_FILTER_BW_NARROW:
|
||||
BK4819_SetFilterBandwidth(Bandwidth);
|
||||
break;
|
||||
}
|
||||
|
||||
BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_RED, false);
|
||||
|
||||
BK4819_SetupPowerAmplifier(0, 0);
|
||||
@ -785,9 +791,15 @@ void RADIO_SetTxParameters(void)
|
||||
BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2, false);
|
||||
|
||||
Bandwidth = gCurrentVfo->CHANNEL_BANDWIDTH;
|
||||
if (Bandwidth != BK4819_FILTER_BW_WIDE)
|
||||
Bandwidth = BK4819_FILTER_BW_NARROW;
|
||||
BK4819_SetFilterBandwidth(Bandwidth);
|
||||
switch (Bandwidth)
|
||||
{
|
||||
default:
|
||||
Bandwidth = BK4819_FILTER_BW_WIDE;
|
||||
case BK4819_FILTER_BW_WIDE:
|
||||
case BK4819_FILTER_BW_NARROW:
|
||||
BK4819_SetFilterBandwidth(Bandwidth);
|
||||
break;
|
||||
}
|
||||
|
||||
BK4819_SetFrequency(gCurrentVfo->pTX->Frequency);
|
||||
|
||||
|
15
ui/main.c
15
ui/main.c
@ -432,10 +432,17 @@ void UI_DisplayMain(void)
|
||||
if (gEeprom.VfoInfo[vfo_num].FrequencyReverse)
|
||||
UI_PrintStringSmall("R", display_width + 62, 0, Line + 1);
|
||||
|
||||
// show the narrow band symbol
|
||||
if (gEeprom.VfoInfo[vfo_num].CHANNEL_BANDWIDTH == BANDWIDTH_NARROW)
|
||||
UI_PrintStringSmall("N", display_width + 70, 0, Line + 1);
|
||||
|
||||
{ // show the narrow band symbol
|
||||
String[0] = '?';
|
||||
switch (gEeprom.VfoInfo[vfo_num].CHANNEL_BANDWIDTH)
|
||||
{
|
||||
case BANDWIDTH_WIDE: String[0] = 'W'; break;
|
||||
case BANDWIDTH_NARROW: String[0] = 'N'; break;
|
||||
}
|
||||
String[1] = '\0';
|
||||
UI_PrintStringSmall(String, display_width + 70, 0, Line + 1);
|
||||
}
|
||||
|
||||
// show the DTMF decoding symbol
|
||||
if (gEeprom.VfoInfo[vfo_num].DTMF_DECODING_ENABLE || gSetting_KILLED)
|
||||
UI_PrintStringSmall("DTMF", display_width + 78, 0, Line + 1);
|
||||
|
28
ui/menu.c
28
ui/menu.c
@ -41,13 +41,13 @@ const char MenuList[][7] =
|
||||
{
|
||||
"SQL",
|
||||
"STEP",
|
||||
"TXPWR", // was "TXP"
|
||||
"RXDCS", // was "R_DCS"
|
||||
"RXCTCS", // was "R_CTCS"
|
||||
"TXDCS", // was "T_DCS"
|
||||
"TXCTCS", // was "T_CTCS"
|
||||
"TXDIR", // was "SFT_D"
|
||||
"TXOFFS", // was "OFFSET"
|
||||
"T-PWR", // was "TXP"
|
||||
"R-DCS", // was "R_DCS"
|
||||
"R-CTCS", // was "R_CTCS"
|
||||
"T-DCS", // was "T_DCS"
|
||||
"T-CTCS", // was "T_CTCS"
|
||||
"T-DIR", // was "SFT_D"
|
||||
"T-OFFS", // was "OFFSET"
|
||||
"W/N",
|
||||
"SCRAM", // was "SCR"
|
||||
"BUSYCL", // was "BCL"
|
||||
@ -56,9 +56,9 @@ const char MenuList[][7] =
|
||||
"VOX",
|
||||
"BACKLT", // was "ABR"
|
||||
"DUALRX", // was "TDR"
|
||||
"TXVFO", // was "WX"
|
||||
"T-VFO", // was "WX"
|
||||
"BEEP",
|
||||
"TXTOUT", // was "TOT"
|
||||
"T-TOUT", // was "TOT"
|
||||
#ifdef ENABLE_VOICE
|
||||
"VOICE",
|
||||
#endif
|
||||
@ -100,13 +100,13 @@ const char MenuList[][7] =
|
||||
"MEMDEL", // was "Del-CH"
|
||||
"RESET",
|
||||
|
||||
// normally hidden menu items from here on.
|
||||
// enabled if pressing PTT and side button below PTT at power-on.
|
||||
// hidden menu items from here on.
|
||||
// enabled if pressing PTT and upper side button at power-on.
|
||||
|
||||
"350-TX", // was "350TX"
|
||||
"F-LOCK",
|
||||
"200-TX", // was "200TX"
|
||||
"500-TX", // was "500TX"
|
||||
"T-200", // was "200TX"
|
||||
"T-350", // was "350TX"
|
||||
"T-500", // was "500TX"
|
||||
"350-EN", // was "350EN"
|
||||
"SCR-EN", // was "SCREN"
|
||||
|
||||
|
@ -83,11 +83,11 @@ enum
|
||||
MENU_DEL_CH,
|
||||
MENU_RESET,
|
||||
|
||||
// items after here are normally hidden
|
||||
// items after here are hidden
|
||||
|
||||
MENU_350TX,
|
||||
MENU_F_LOCK,
|
||||
MENU_200TX,
|
||||
MENU_350TX,
|
||||
MENU_500TX,
|
||||
MENU_350EN,
|
||||
MENU_SCREN,
|
||||
|
@ -2,7 +2,7 @@
|
||||
#ifdef GIT_HASH
|
||||
#define VER GIT_HASH
|
||||
#else
|
||||
#define VER "230917"
|
||||
#define VER "230918"
|
||||
#endif
|
||||
|
||||
const char Version[] = "OEFW-"VER;
|
||||
|
@ -13,7 +13,7 @@ del /S /Q *.o >nul 2>nul
|
||||
del /S /Q *.d >nul 2>nul
|
||||
|
||||
::python -m pip install --upgrade pip crcmod
|
||||
fw-pack.py firmware.bin 230917 firmware.packed.bin
|
||||
fw-pack.py firmware.bin 230918 firmware.packed.bin
|
||||
|
||||
::arm-none-eabi-size firmware
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user