0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-28 14:21:25 +03:00

CTCSS fixes/tidy-ups/comments

This commit is contained in:
OneOfEleven 2023-09-14 11:16:45 +01:00
parent 54711a5971
commit 7cdb0c9a33
10 changed files with 118 additions and 102 deletions

View File

@ -1,19 +1,23 @@
TARGET = firmware
ENABLE_AIRCOPY := 0 # compile options
ENABLE_FMRADIO := 0 # you can enable ('1') or disable ('0') any/all of these you like
ENABLE_OVERLAY := 1 ENABLE_AIRCOPY := 0
ENABLE_UART := 1 ENABLE_FMRADIO := 0
ENABLE_NOAA := 0 ENABLE_OVERLAY := 1
ENABLE_VOICE := 0 ENABLE_UART := 1
ENABLE_ALARM := 0 ENABLE_NOAA := 0
ENABLE_BIG_FREQ := 0 ENABLE_VOICE := 0
ENABLE_KEEP_MEM_NAME := 1 ENABLE_ALARM := 0
ENABLE_CHAN_NAME_FREQ := 1 ENABLE_BIG_FREQ := 0
ENABLE_WIDE_RX := 1 ENABLE_KEEP_MEM_NAME := 1
ENABLE_TX_WHEN_AM := 0 ENABLE_CHAN_NAME_FREQ := 1
#ENABLE_SINGLE_VFO_CHAN := 1 ENABLE_WIDE_RX := 1
#ENABLE_BAND_SCOPE := 1 ENABLE_TX_WHEN_AM := 0
ENABLE_TAIL_CTCSS_PHASE_SHIFT := 1
#ENABLE_SINGLE_VFO_CHAN := 1
#ENABLE_BAND_SCOPE := 1
TARGET = firmware
BSP_DEFINITIONS := $(wildcard hardware/*/*.def) BSP_DEFINITIONS := $(wildcard hardware/*/*.def)
BSP_HEADERS := $(patsubst hardware/%,bsp/%,$(BSP_DEFINITIONS)) BSP_HEADERS := $(patsubst hardware/%,bsp/%,$(BSP_DEFINITIONS))
@ -42,8 +46,8 @@ ifeq ($(filter $(ENABLE_AIRCOPY) $(ENABLE_UART),1),1)
OBJS += driver/crc.o OBJS += driver/crc.o
endif endif
OBJS += driver/eeprom.o OBJS += driver/eeprom.o
ifeq ($(ENABLE_OVERLAY),1) ifeq ($(ENABLE_OVERLAY),1)
OBJS += driver/flash.o OBJS += driver/flash.o
endif endif
OBJS += driver/gpio.o OBJS += driver/gpio.o
OBJS += driver/i2c.o OBJS += driver/i2c.o
@ -104,7 +108,6 @@ OBJS += ui/status.o
OBJS += ui/ui.o OBJS += ui/ui.o
OBJS += ui/welcome.o OBJS += ui/welcome.o
OBJS += version.o OBJS += version.o
OBJS += main.o OBJS += main.o
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
@ -125,6 +128,7 @@ ASFLAGS = -c -mcpu=cortex-m0
ifeq ($(ENABLE_OVERLAY),1) ifeq ($(ENABLE_OVERLAY),1)
ASFLAGS += -DENABLE_OVERLAY ASFLAGS += -DENABLE_OVERLAY
endif endif
CFLAGS = -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delete-null-pointer-checks -std=c11 -MMD CFLAGS = -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delete-null-pointer-checks -std=c11 -MMD
CFLAGS += -DPRINTF_INCLUDE_CONFIG_H CFLAGS += -DPRINTF_INCLUDE_CONFIG_H
CFLAGS += -DGIT_HASH=\"$(GIT_HASH)\" CFLAGS += -DGIT_HASH=\"$(GIT_HASH)\"
@ -164,6 +168,9 @@ endif
ifeq ($(ENABLE_TX_WHEN_AM),1) ifeq ($(ENABLE_TX_WHEN_AM),1)
CFLAGS += -DENABLE_TX_WHEN_AM CFLAGS += -DENABLE_TX_WHEN_AM
endif endif
ifeq ($(ENABLE_TAIL_CTCSS_PHASE_SHIFT),1)
CFLAGS += -DENABLE_TAIL_CTCSS_PHASE_SHIFT
endif
ifeq ($(ENABLE_SINGLE_VFO_CHAN),1) ifeq ($(ENABLE_SINGLE_VFO_CHAN),1)
CFLAGS += -DENABLE_SINGLE_VFO_CHAN CFLAGS += -DENABLE_SINGLE_VFO_CHAN
endif endif

View File

@ -9,22 +9,23 @@ Am amazing achievement if you ask me !
# User customization # User customization
This version you can customize at compile time by making various changes to the makefile. This version you can customize at compile time by making various changes to the makefile.
You can edit those changes by (currently) editing the MakeFile, look for these lines near the top of the file .. You can edit those changes by (currently) editing the MakeFile, look for these lines at the top of the file ..
* ENABLE_AIRCOPY := 0 aircopy * ENABLE_AIRCOPY := 0
* ENABLE_FMRADIO := 0 FM band 2 radio * ENABLE_FMRADIO := 0 FM band 2 radio
* ENABLE_OVERLAY := 1 * ENABLE_OVERLAY := 1
* ENABLE_UART := 1 serial port * ENABLE_UART := 1 without this you can't configure the radio with your PC
* ENABLE_NOAA := 0 NOAA channels * ENABLE_NOAA := 0 NOAA channels
* ENABLE_VOICE := 0 voices * ENABLE_VOICE := 0 strange voices
* ENABLE_ALARM := 0 TX alarms * ENABLE_ALARM := 0 TX alarms
* ENABLE_BIG_FREQ := 0 big font for the frequencies * ENABLE_BIG_FREQ := 0 big font for the frequencies
* ENABLE_KEEP_MEM_NAME := 1 maintain the channels name when saving over it * ENABLE_KEEP_MEM_NAME := 1 maintain the channel name when (re)saving a memory channel
* ENABLE_CHAN_NAME_FREQ := 1 show the channels frequency below the channels name/number * ENABLE_CHAN_NAME_FREQ := 1 show the channel frequency below the channel name/number
* ENABLE_WIDE_RX := 1 enable the RX in the full 18MHz to 1300MHz range * ENABLE_WIDE_RX := 1 enable the RX in the full 18MHz to 1300MHz (though frontend is not tuned for full range)
* ENABLE_TX_WHEN_AM := 0 allow TX when RX set to AM * ENABLE_TX_WHEN_AM := 0 allow TX when RX set to AM
* #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented * ENABLE_TAIL_CTCSS_PHASE_SHIFT := 1 use CTCSS tail phase shift rather than QS's 55Hz tone method
* #ENABLE_BAND_SCOPE := 1 not yet implemented * #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented
* #ENABLE_BAND_SCOPE := 1 not yet implemented
To enable the custom option, set the above option to '1' To enable the custom option, set the above option to '1'

70
dcs.c
View File

@ -18,49 +18,41 @@
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
// CTCSS Hz * 10
const uint16_t CTCSS_Options[50] = { const uint16_t CTCSS_Options[50] = {
0x029E, 0x02B5, 0x02CF, 0x02E8, #if 0
0x0302, 0x031D, 0x0339, 0x0356, 670, 693, 719, 0x02E8, 0x0302, 0x031D, 0x0339, 0x0356,
0x0375, 0x0393, 0x03B4, 0x03CE, 0x0375, 0x0393, 0x03B4, 0x03CE, 0x03E8, 0x040B, 0x0430, 0x0455,
0x03E8, 0x040B, 0x0430, 0x0455, 0x047C, 0x04A4, 0x04CE, 0x04F9, 0x0526, 0x0555, 0x0585, 0x05B6,
0x047C, 0x04A4, 0x04CE, 0x04F9, 0x05EA, 0x061F, 0x063E, 0x0656, 0x0677, 0x068F, 0x06B1, 0x06CA,
0x0526, 0x0555, 0x0585, 0x05B6, 0x06ED, 0x0707, 0x072B, 0x0746, 0x076B, 0x0788, 0x07AE, 0x07CB,
0x05EA, 0x061F, 0x063E, 0x0656, 0x07F3, 0x0811, 0x083B, 0x0885, 0x08D1, 0x08F3, 0x0920, 0x0972,
0x0677, 0x068F, 0x06B1, 0x06CA, 0x09C7, 0x09ED
0x06ED, 0x0707, 0x072B, 0x0746, #else
0x076B, 0x0788, 0x07AE, 0x07CB, 670, 693, 719, 744, 770, 797, 825, 854,
0x07F3, 0x0811, 0x083B, 0x0885, 885, 915, 948, 974, 1000, 1035, 1072, 1109,
0x08D1, 0x08F3, 0x0920, 0x0972, 1148, 1188, 1230, 1273, 1318, 1365, 1413, 1462,
0x09C7, 0x09ED, 1514, 1567, 1598, 1622, 1655, 1679, 1713, 1738,
1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995,
2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418,
2503, 2541
#endif
}; };
const uint16_t DCS_Options[104] = { const uint16_t DCS_Options[104] = {
0x0013, 0x0015, 0x0016, 0x0019, 0x0013, 0x0015, 0x0016, 0x0019, 0x001A, 0x001E, 0x0023, 0x0027,
0x001A, 0x001E, 0x0023, 0x0027, 0x0029, 0x002B, 0x002C, 0x0035, 0x0039, 0x003A, 0x003B, 0x003C,
0x0029, 0x002B, 0x002C, 0x0035, 0x004C, 0x004D, 0x004E, 0x0052, 0x0055, 0x0059, 0x005A, 0x005C,
0x0039, 0x003A, 0x003B, 0x003C, 0x0063, 0x0065, 0x006A, 0x006D, 0x006E, 0x0072, 0x0075, 0x007A,
0x004C, 0x004D, 0x004E, 0x0052, 0x007C, 0x0085, 0x008A, 0x0093, 0x0095, 0x0096, 0x00A3, 0x00A4,
0x0055, 0x0059, 0x005A, 0x005C, 0x00A5, 0x00A6, 0x00A9, 0x00AA, 0x00AD, 0x00B1, 0x00B3, 0x00B5,
0x0063, 0x0065, 0x006A, 0x006D, 0x00B6, 0x00B9, 0x00BC, 0x00C6, 0x00C9, 0x00CD, 0x00D5, 0x00D9,
0x006E, 0x0072, 0x0075, 0x007A, 0x00DA, 0x00E3, 0x00E6, 0x00E9, 0x00EE, 0x00F4, 0x00F5, 0x00F9,
0x007C, 0x0085, 0x008A, 0x0093, 0x0109, 0x010A, 0x010B, 0x0113, 0x0119, 0x011A, 0x0125, 0x0126,
0x0095, 0x0096, 0x00A3, 0x00A4, 0x012A, 0x012C, 0x012D, 0x0132, 0x0134, 0x0135, 0x0136, 0x0143,
0x00A5, 0x00A6, 0x00A9, 0x00AA, 0x0146, 0x014E, 0x0153, 0x0156, 0x015A, 0x0166, 0x0175, 0x0186,
0x00AD, 0x00B1, 0x00B3, 0x00B5, 0x018A, 0x0194, 0x0197, 0x0199, 0x019A, 0x01AC, 0x01B2, 0x01B4,
0x00B6, 0x00B9, 0x00BC, 0x00C6, 0x01C3, 0x01CA, 0x01D3, 0x01D9, 0x01DA, 0x01DC, 0x01E3, 0x01EC,
0x00C9, 0x00CD, 0x00D5, 0x00D9,
0x00DA, 0x00E3, 0x00E6, 0x00E9,
0x00EE, 0x00F4, 0x00F5, 0x00F9,
0x0109, 0x010A, 0x010B, 0x0113,
0x0119, 0x011A, 0x0125, 0x0126,
0x012A, 0x012C, 0x012D, 0x0132,
0x0134, 0x0135, 0x0136, 0x0143,
0x0146, 0x014E, 0x0153, 0x0156,
0x015A, 0x0166, 0x0175, 0x0186,
0x018A, 0x0194, 0x0197, 0x0199,
0x019A, 0x01AC, 0x01B2, 0x01B4,
0x01C3, 0x01CA, 0x01D3, 0x01D9,
0x01DA, 0x01DC, 0x01E3, 0x01EC,
}; };
static uint32_t DCS_CalculateGolay(uint32_t CodeWord) static uint32_t DCS_CalculateGolay(uint32_t CodeWord)

View File

@ -276,13 +276,13 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord)
// <12:0> = CDCSS baud rate frequency (134.4Hz) control word = // <12:0> = CDCSS baud rate frequency (134.4Hz) control word =
// freq(Hz) * 20.64888 for XTAL 13M/26M or // freq(Hz) * 20.64888 for XTAL 13M/26M or
// freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M
//
BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | 2775u); BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | 2775u);
// REG_08 <15:0> <15> = 1 for CDCSS high 12bit // REG_08 <15:0> <15> = 1 for CDCSS high 12bit
// <15> = 0 for CDCSS low 12bit // <15> = 0 for CDCSS low 12bit
// <11:0> = CDCSShigh/low 12bit code // <11:0> = CDCSShigh/low 12bit code
//
BK4819_WriteRegister(BK4819_REG_08, (0u << 15) | ((CodeWord >> 0) & 0x0FFF)); // LS 12-bits BK4819_WriteRegister(BK4819_REG_08, (0u << 15) | ((CodeWord >> 0) & 0x0FFF)); // LS 12-bits
BK4819_WriteRegister(BK4819_REG_08, (1u << 15) | ((CodeWord >> 12) & 0x0FFF)); // MS 12-bits BK4819_WriteRegister(BK4819_REG_08, (1u << 15) | ((CodeWord >> 12) & 0x0FFF)); // MS 12-bits
} }
@ -329,7 +329,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord)
// freq(Hz) * 20.64888 for XTAL 13M/26M or // freq(Hz) * 20.64888 for XTAL 13M/26M or
// freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M
// //
// When <13> = 1 for CTC2 (Tail 55Hz Rx detection) // When <13> = 1 for CTC2 (Tail RX detection)
// <12:0> = CTC2 (should below 100Hz) frequency control word = // <12:0> = CTC2 (should below 100Hz) frequency control word =
// 25391 / freq(Hz) for XTAL 13M/26M or // 25391 / freq(Hz) for XTAL 13M/26M or
// 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M // 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M
@ -338,11 +338,12 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord)
// <12:0> = CDCSS baud rate frequency (134.4Hz) control word = // <12:0> = CDCSS baud rate frequency (134.4Hz) control word =
// freq(Hz) * 20.64888 for XTAL 13M/26M or // freq(Hz) * 20.64888 for XTAL 13M/26M or
// freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M
//
BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | ((FreqControlWord * 2065u) / 1000u)); BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC1 | (((FreqControlWord * 2064888u) + 500000u) / 1000000u)); // with rounding
} }
void BK4819_Set55HzTailDetection(void) // freq_10Hz is CTCSS Hz * 10
void BK4819_SetTailDetection(const uint32_t freq_10Hz)
{ {
// REG_07 <15:0> // REG_07 <15:0>
// //
@ -351,7 +352,7 @@ void BK4819_Set55HzTailDetection(void)
// freq(Hz) * 20.64888 for XTAL 13M/26M or // freq(Hz) * 20.64888 for XTAL 13M/26M or
// freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M
// //
// When <13> = 1 for CTC2 (Tail 55Hz Rx detection) // When <13> = 1 for CTC2 (Tail RX detection)
// <12:0> = CTC2 (should below 100Hz) frequency control word = // <12:0> = CTC2 (should below 100Hz) frequency control word =
// 25391 / freq(Hz) for XTAL 13M/26M or // 25391 / freq(Hz) for XTAL 13M/26M or
// 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M // 25000 / freq(Hz) for XTAL 12.8M/19.2M/25.6M/38.4M
@ -360,10 +361,8 @@ void BK4819_Set55HzTailDetection(void)
// <12:0> = CDCSS baud rate frequency (134.4Hz) control word = // <12:0> = CDCSS baud rate frequency (134.4Hz) control word =
// freq(Hz) * 20.64888 for XTAL 13M/26M or // freq(Hz) * 20.64888 for XTAL 13M/26M or
// freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M
//
// CTC2 Frequency Control Word = round_nearest(25391 / 55) = 462 BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC2 | ((253910 + (freq_10Hz / 2)) / freq_10Hz)); // with rounding
const unsigned int ctcss_Hz = 55;
BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC2 | ((25391 + (ctcss_Hz / 2)) / ctcss_Hz)); // with rounding
} }
void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold) void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold)
@ -879,11 +878,14 @@ void BK4819_EnableCDCSS(void)
void BK4819_EnableCTCSS(void) void BK4819_EnableCTCSS(void)
{ {
// BK4819_GenTail(1); // 120° phase shift #ifdef ENABLE_TAIL_CTCSS_PHASE_SHIFT
BK4819_GenTail(2); // 180° phase shift //BK4819_GenTail(1); // 120° phase shift
// BK4819_GenTail(3); // 240° phase shift BK4819_GenTail(2); // 180° phase shift
// BK4819_GenTail(4); // 55Hz tone freq //BK4819_GenTail(3); // 240° phase shift
#else
BK4819_GenTail(4); // 55Hz tone freq
#endif
// REG_51 <15> 0 // REG_51 <15> 0
// 1 = Enable TxCTCSS/CDCSS // 1 = Enable TxCTCSS/CDCSS
// 0 = Disable // 0 = Disable

View File

@ -66,7 +66,7 @@ void BK4819_ToggleGpioOut(BK4819_GPIO_PIN_t Pin, bool bSet);
void BK4819_SetCDCSSCodeWord(uint32_t CodeWord); void BK4819_SetCDCSSCodeWord(uint32_t CodeWord);
void BK4819_SetCTCSSFrequency(uint32_t BaudRate); void BK4819_SetCTCSSFrequency(uint32_t BaudRate);
void BK4819_Set55HzTailDetection(void); void BK4819_SetTailDetection(const uint32_t freq_10Hz);
void BK4819_EnableVox(uint16_t Vox1Threshold, uint16_t Vox0Threshold); void BK4819_EnableVox(uint16_t Vox1Threshold, uint16_t Vox0Threshold);
void BK4819_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth); void BK4819_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth);
void BK4819_SetupPowerAmplifier(uint16_t Bias, uint32_t Frequency); void BK4819_SetupPowerAmplifier(uint16_t Bias, uint32_t Frequency);

BIN
firmware

Binary file not shown.

Binary file not shown.

Binary file not shown.

38
radio.c
View File

@ -594,11 +594,36 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0)
default: default:
case CODE_TYPE_OFF: case CODE_TYPE_OFF:
BK4819_SetCTCSSFrequency(670); BK4819_SetCTCSSFrequency(670);
BK4819_Set55HzTailDetection();
//#ifndef ENABLE_TAIL_CTCSS_PHASE_SHIFT
BK4819_SetTailDetection(550); // QS's 55Hz tone method
//#else
// BK4819_SetTailDetection(670); // 67Hz
//#endif
InterruptMask = 0 InterruptMask = 0
| BK4819_REG_3F_CxCSS_TAIL | BK4819_REG_3F_CxCSS_TAIL
| BK4819_REG_3F_SQUELCH_FOUND | BK4819_REG_3F_SQUELCH_FOUND
| BK4819_REG_3F_SQUELCH_LOST; | BK4819_REG_3F_SQUELCH_LOST;
break;
case CODE_TYPE_CONTINUOUS_TONE:
BK4819_SetCTCSSFrequency(CTCSS_Options[Code]);
//#ifndef ENABLE_TAIL_CTCSS_PHASE_SHIFT
BK4819_SetTailDetection(550); // QS's 55Hz tone method
//#else
// BK4819_SetTailDetection(CTCSS_Options[Code]);
//#endif
InterruptMask = 0
| BK4819_REG_3F_CxCSS_TAIL
| BK4819_REG_3F_CTCSS_FOUND
| BK4819_REG_3F_CTCSS_LOST
| BK4819_REG_3F_SQUELCH_FOUND
| BK4819_REG_3F_SQUELCH_LOST;
break; break;
case CODE_TYPE_DIGITAL: case CODE_TYPE_DIGITAL:
@ -611,17 +636,6 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0)
| BK4819_REG_3F_SQUELCH_FOUND | BK4819_REG_3F_SQUELCH_FOUND
| BK4819_REG_3F_SQUELCH_LOST; | BK4819_REG_3F_SQUELCH_LOST;
break; break;
case CODE_TYPE_CONTINUOUS_TONE:
BK4819_SetCTCSSFrequency(CTCSS_Options[Code]);
BK4819_Set55HzTailDetection();
InterruptMask = 0
| BK4819_REG_3F_CxCSS_TAIL
| BK4819_REG_3F_CTCSS_FOUND
| BK4819_REG_3F_CTCSS_LOST
| BK4819_REG_3F_SQUELCH_FOUND
| BK4819_REG_3F_SQUELCH_LOST;
break;
} }
if (gRxVfo->SCRAMBLING_TYPE == 0 || !gSetting_ScrambleEnable) if (gRxVfo->SCRAMBLING_TYPE == 0 || !gSetting_ScrambleEnable)

View File

@ -13,7 +13,7 @@ del /S /Q *.o >nul 2>nul
del /S /Q *.d >nul 2>nul del /S /Q *.d >nul 2>nul
::python -m pip install --upgrade pip crcmod ::python -m pip install --upgrade pip crcmod
fw-pack.py firmware.bin 230913 firmware.packed.bin fw-pack.py firmware.bin 230914 firmware.packed.bin
::arm-none-eabi-size firmware ::arm-none-eabi-size firmware