diff --git a/Makefile b/Makefile index e6fa110..095bb48 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,23 @@ -TARGET = firmware -ENABLE_AIRCOPY := 0 -ENABLE_FMRADIO := 0 -ENABLE_OVERLAY := 1 -ENABLE_UART := 1 -ENABLE_NOAA := 0 -ENABLE_VOICE := 0 -ENABLE_ALARM := 0 -ENABLE_BIG_FREQ := 0 -ENABLE_KEEP_MEM_NAME := 1 -ENABLE_CHAN_NAME_FREQ := 1 -ENABLE_WIDE_RX := 1 -ENABLE_TX_WHEN_AM := 0 -#ENABLE_SINGLE_VFO_CHAN := 1 -#ENABLE_BAND_SCOPE := 1 +# compile options +# you can enable ('1') or disable ('0') any/all of these you like +ENABLE_AIRCOPY := 0 +ENABLE_FMRADIO := 0 +ENABLE_OVERLAY := 1 +ENABLE_UART := 1 +ENABLE_NOAA := 0 +ENABLE_VOICE := 0 +ENABLE_ALARM := 0 +ENABLE_BIG_FREQ := 0 +ENABLE_KEEP_MEM_NAME := 1 +ENABLE_CHAN_NAME_FREQ := 1 +ENABLE_WIDE_RX := 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_HEADERS := $(patsubst hardware/%,bsp/%,$(BSP_DEFINITIONS)) @@ -42,8 +46,8 @@ ifeq ($(filter $(ENABLE_AIRCOPY) $(ENABLE_UART),1),1) OBJS += driver/crc.o endif OBJS += driver/eeprom.o - ifeq ($(ENABLE_OVERLAY),1) -OBJS += driver/flash.o +ifeq ($(ENABLE_OVERLAY),1) + OBJS += driver/flash.o endif OBJS += driver/gpio.o OBJS += driver/i2c.o @@ -104,7 +108,6 @@ OBJS += ui/status.o OBJS += ui/ui.o OBJS += ui/welcome.o OBJS += version.o - OBJS += main.o ifeq ($(OS),Windows_NT) @@ -125,6 +128,7 @@ ASFLAGS = -c -mcpu=cortex-m0 ifeq ($(ENABLE_OVERLAY),1) ASFLAGS += -DENABLE_OVERLAY endif + 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 += -DGIT_HASH=\"$(GIT_HASH)\" @@ -164,6 +168,9 @@ endif ifeq ($(ENABLE_TX_WHEN_AM),1) CFLAGS += -DENABLE_TX_WHEN_AM endif +ifeq ($(ENABLE_TAIL_CTCSS_PHASE_SHIFT),1) + CFLAGS += -DENABLE_TAIL_CTCSS_PHASE_SHIFT +endif ifeq ($(ENABLE_SINGLE_VFO_CHAN),1) CFLAGS += -DENABLE_SINGLE_VFO_CHAN endif diff --git a/README.md b/README.md index 86fae6e..286e421 100644 --- a/README.md +++ b/README.md @@ -9,22 +9,23 @@ Am amazing achievement if you ask me ! # User customization 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_FMRADIO := 0 FM band 2 radio -* ENABLE_OVERLAY := 1 -* ENABLE_UART := 1 serial port -* ENABLE_NOAA := 0 NOAA channels -* ENABLE_VOICE := 0 voices -* ENABLE_ALARM := 0 TX alarms -* ENABLE_BIG_FREQ := 0 big font for the frequencies -* ENABLE_KEEP_MEM_NAME := 1 maintain the channels name when saving over it -* ENABLE_CHAN_NAME_FREQ := 1 show the channels frequency below the channels name/number -* ENABLE_WIDE_RX := 1 enable the RX in the full 18MHz to 1300MHz range -* ENABLE_TX_WHEN_AM := 0 allow TX when RX set to AM -* #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented -* #ENABLE_BAND_SCOPE := 1 not yet implemented +* ENABLE_AIRCOPY := 0 +* ENABLE_FMRADIO := 0 FM band 2 radio +* ENABLE_OVERLAY := 1 +* ENABLE_UART := 1 without this you can't configure the radio with your PC +* ENABLE_NOAA := 0 NOAA channels +* ENABLE_VOICE := 0 strange voices +* ENABLE_ALARM := 0 TX alarms +* ENABLE_BIG_FREQ := 0 big font for the frequencies +* ENABLE_KEEP_MEM_NAME := 1 maintain the channel name when (re)saving a memory channel +* 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 (though frontend is not tuned for full range) +* ENABLE_TX_WHEN_AM := 0 allow TX when RX set to AM +* ENABLE_TAIL_CTCSS_PHASE_SHIFT := 1 use CTCSS tail phase shift rather than QS's 55Hz tone method +* #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' diff --git a/dcs.c b/dcs.c index 9591816..ee4b8c4 100644 --- a/dcs.c +++ b/dcs.c @@ -18,49 +18,41 @@ #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +// CTCSS Hz * 10 const uint16_t CTCSS_Options[50] = { - 0x029E, 0x02B5, 0x02CF, 0x02E8, - 0x0302, 0x031D, 0x0339, 0x0356, - 0x0375, 0x0393, 0x03B4, 0x03CE, - 0x03E8, 0x040B, 0x0430, 0x0455, - 0x047C, 0x04A4, 0x04CE, 0x04F9, - 0x0526, 0x0555, 0x0585, 0x05B6, - 0x05EA, 0x061F, 0x063E, 0x0656, - 0x0677, 0x068F, 0x06B1, 0x06CA, - 0x06ED, 0x0707, 0x072B, 0x0746, - 0x076B, 0x0788, 0x07AE, 0x07CB, - 0x07F3, 0x0811, 0x083B, 0x0885, - 0x08D1, 0x08F3, 0x0920, 0x0972, - 0x09C7, 0x09ED, + #if 0 + 670, 693, 719, 0x02E8, 0x0302, 0x031D, 0x0339, 0x0356, + 0x0375, 0x0393, 0x03B4, 0x03CE, 0x03E8, 0x040B, 0x0430, 0x0455, + 0x047C, 0x04A4, 0x04CE, 0x04F9, 0x0526, 0x0555, 0x0585, 0x05B6, + 0x05EA, 0x061F, 0x063E, 0x0656, 0x0677, 0x068F, 0x06B1, 0x06CA, + 0x06ED, 0x0707, 0x072B, 0x0746, 0x076B, 0x0788, 0x07AE, 0x07CB, + 0x07F3, 0x0811, 0x083B, 0x0885, 0x08D1, 0x08F3, 0x0920, 0x0972, + 0x09C7, 0x09ED + #else + 670, 693, 719, 744, 770, 797, 825, 854, + 885, 915, 948, 974, 1000, 1035, 1072, 1109, + 1148, 1188, 1230, 1273, 1318, 1365, 1413, 1462, + 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] = { - 0x0013, 0x0015, 0x0016, 0x0019, - 0x001A, 0x001E, 0x0023, 0x0027, - 0x0029, 0x002B, 0x002C, 0x0035, - 0x0039, 0x003A, 0x003B, 0x003C, - 0x004C, 0x004D, 0x004E, 0x0052, - 0x0055, 0x0059, 0x005A, 0x005C, - 0x0063, 0x0065, 0x006A, 0x006D, - 0x006E, 0x0072, 0x0075, 0x007A, - 0x007C, 0x0085, 0x008A, 0x0093, - 0x0095, 0x0096, 0x00A3, 0x00A4, - 0x00A5, 0x00A6, 0x00A9, 0x00AA, - 0x00AD, 0x00B1, 0x00B3, 0x00B5, - 0x00B6, 0x00B9, 0x00BC, 0x00C6, - 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, + 0x0013, 0x0015, 0x0016, 0x0019, 0x001A, 0x001E, 0x0023, 0x0027, + 0x0029, 0x002B, 0x002C, 0x0035, 0x0039, 0x003A, 0x003B, 0x003C, + 0x004C, 0x004D, 0x004E, 0x0052, 0x0055, 0x0059, 0x005A, 0x005C, + 0x0063, 0x0065, 0x006A, 0x006D, 0x006E, 0x0072, 0x0075, 0x007A, + 0x007C, 0x0085, 0x008A, 0x0093, 0x0095, 0x0096, 0x00A3, 0x00A4, + 0x00A5, 0x00A6, 0x00A9, 0x00AA, 0x00AD, 0x00B1, 0x00B3, 0x00B5, + 0x00B6, 0x00B9, 0x00BC, 0x00C6, 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) diff --git a/driver/bk4819.c b/driver/bk4819.c index acfd00c..fce4f08 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -276,13 +276,13 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord) // <12:0> = CDCSS baud rate frequency (134.4Hz) control word = // freq(Hz) * 20.64888 for XTAL 13M/26M or // 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); // REG_08 <15:0> <15> = 1 for CDCSS high 12bit // <15> = 0 for CDCSS low 12bit // <11:0> = CDCSShigh/low 12bit code - + // 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 } @@ -329,7 +329,7 @@ void BK4819_SetCTCSSFrequency(uint32_t FreqControlWord) // freq(Hz) * 20.64888 for XTAL 13M/26M or // 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 = // 25391 / freq(Hz) for XTAL 13M/26M or // 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 = // freq(Hz) * 20.64888 for XTAL 13M/26M or // 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> // @@ -351,7 +352,7 @@ void BK4819_Set55HzTailDetection(void) // freq(Hz) * 20.64888 for XTAL 13M/26M or // 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 = // 25391 / freq(Hz) for XTAL 13M/26M or // 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 = // freq(Hz) * 20.64888 for XTAL 13M/26M or // freq(Hz) * 20.97152 for XTAL 12.8M/19.2M/25.6M/38.4M - - // CTC2 Frequency Control Word = round_nearest(25391 / 55) = 462 - const unsigned int ctcss_Hz = 55; - BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC2 | ((25391 + (ctcss_Hz / 2)) / ctcss_Hz)); // with rounding + // + BK4819_WriteRegister(BK4819_REG_07, BK4819_REG_07_MODE_CTC2 | ((253910 + (freq_10Hz / 2)) / freq_10Hz)); // with rounding } void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold) @@ -879,11 +878,14 @@ void BK4819_EnableCDCSS(void) void BK4819_EnableCTCSS(void) { -// BK4819_GenTail(1); // 120° phase shift - BK4819_GenTail(2); // 180° phase shift -// BK4819_GenTail(3); // 240° phase shift -// BK4819_GenTail(4); // 55Hz tone freq - + #ifdef ENABLE_TAIL_CTCSS_PHASE_SHIFT + //BK4819_GenTail(1); // 120° phase shift + BK4819_GenTail(2); // 180° phase shift + //BK4819_GenTail(3); // 240° phase shift + #else + BK4819_GenTail(4); // 55Hz tone freq + #endif + // REG_51 <15> 0 // 1 = Enable TxCTCSS/CDCSS // 0 = Disable diff --git a/driver/bk4819.h b/driver/bk4819.h index 603fba3..4927e4d 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -66,7 +66,7 @@ void BK4819_ToggleGpioOut(BK4819_GPIO_PIN_t Pin, bool bSet); void BK4819_SetCDCSSCodeWord(uint32_t CodeWord); 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_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth); void BK4819_SetupPowerAmplifier(uint16_t Bias, uint32_t Frequency); diff --git a/firmware b/firmware index fc1c032..1d1fe3c 100644 Binary files a/firmware and b/firmware differ diff --git a/firmware.bin b/firmware.bin index 7e1c62f..2ffde21 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index d38ebb5..bce0348 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/radio.c b/radio.c index ce2e317..f3d19d3 100644 --- a/radio.c +++ b/radio.c @@ -594,11 +594,36 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) default: case CODE_TYPE_OFF: 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 | BK4819_REG_3F_CxCSS_TAIL | BK4819_REG_3F_SQUELCH_FOUND | 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; case CODE_TYPE_DIGITAL: @@ -611,17 +636,6 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) | BK4819_REG_3F_SQUELCH_FOUND | BK4819_REG_3F_SQUELCH_LOST; 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) diff --git a/win_make.bat b/win_make.bat index a013956..2fbb90a 100644 --- a/win_make.bat +++ b/win_make.bat @@ -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 230913 firmware.packed.bin +fw-pack.py firmware.bin 230914 firmware.packed.bin ::arm-none-eabi-size firmware