diff --git a/driver/bk4819.c b/driver/bk4819.c index 91ef2d0..0e986ea 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -275,6 +275,7 @@ void BK4819_SetAGC(uint8_t Value) // PGA ........ -3dB // BK4819_WriteRegister(BK4819_REG_13, (3u << 8) | (2u << 5) | (3u << 3) | (6u << 0)); // 000000 11 101 11 110 + BK4819_WriteRegister(BK4819_REG_12, 0x037B); // 000000 11 011 11 011 BK4819_WriteRegister(BK4819_REG_11, 0x027B); // 000000 10 011 11 011 BK4819_WriteRegister(BK4819_REG_10, 0x007A); // 000000 00 011 11 010 @@ -328,6 +329,7 @@ void BK4819_SetAGC(uint8_t Value) // PGA ........ -3dB // BK4819_WriteRegister(BK4819_REG_13, (3u << 8) | (2u << 5) | (3u << 3) | (6u << 0)); // 000000 11 101 11 110 + BK4819_WriteRegister(BK4819_REG_12, 0x037C); // 000000 11 011 11 100 BK4819_WriteRegister(BK4819_REG_11, 0x027B); // 000000 10 011 11 011 BK4819_WriteRegister(BK4819_REG_10, 0x007A); // 000000 00 011 11 010 @@ -513,7 +515,7 @@ void BK4819_EnableVox(uint16_t VoxEnableThreshold, uint16_t VoxDisableThreshold) BK4819_WriteRegister(BK4819_REG_31, REG_31_Value | (1u << 2)); // VOX Enable } -void BK4819_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth) +void BK4819_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth, const bool weak_no_different) { // REG_43 <14:12> 4 RF filter bandwidth // 0 = 1.7 kHz @@ -558,53 +560,86 @@ void BK4819_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth) // if (Bandwidth == BK4819_FILTER_BW_WIDE) { - BK4819_WriteRegister(BK4819_REG_43, - (0u << 15) | // 0 - (3u << 12) | // 3 RF filter bandwidth - (0u << 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 + if (weak_no_different) + { + 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 + { + BK4819_WriteRegister(BK4819_REG_43, + (0u << 15) | // 0 + (3u << 12) | // 3 RF filter bandwidth + (0u << 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); // 0 100 000 001 00 1 0 00 - (0u << 15) | // 0 - (3u << 12) | // 4 RF filter bandwidth - (0u << 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 -*/ + if (weak_no_different) + { + 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 + } + else + { + BK4819_WriteRegister(BK4819_REG_43, // 0x4048); // 0 100 000 001 00 1 0 00 + (0u << 15) | // 0 + (3u << 12) | // 4 RF filter bandwidth + (0u << 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 + } } 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 + if (weak_no_different) + { + BK4819_WriteRegister(BK4819_REG_43, // 0 100 000 001 01 1 0 00 + (0u << 15) | // 0 + (4u << 12) | // 4 RF filter bandwidth + (4u << 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 + } + else + { + 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 + } } } diff --git a/driver/bk4819.h b/driver/bk4819.h index 3c1033a..37ead18 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -78,7 +78,7 @@ void BK4819_SetCDCSSCodeWord(uint32_t CodeWord); void BK4819_SetCTCSSFrequency(uint32_t BaudRate); 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_SetFilterBandwidth(BK4819_FilterBandwidth_t Bandwidth, const bool weak_no_different); void BK4819_SetupPowerAmplifier(uint16_t Bias, uint32_t Frequency); void BK4819_SetFrequency(uint32_t Frequency); void BK4819_SetupSquelch( diff --git a/firmware b/firmware index b432de5..2cf65b4 100644 Binary files a/firmware and b/firmware differ diff --git a/firmware.bin b/firmware.bin index 761de49..72c83e9 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index e94c448..cef35c3 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/radio.c b/radio.c index 978ea81..13345a9 100644 --- a/radio.c +++ b/radio.c @@ -565,7 +565,7 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) Bandwidth = BK4819_FILTER_BW_WIDE; case BK4819_FILTER_BW_WIDE: case BK4819_FILTER_BW_NARROW: - BK4819_SetFilterBandwidth(Bandwidth); + BK4819_SetFilterBandwidth(Bandwidth, gRxVfo->IsAM); break; } @@ -809,7 +809,7 @@ void RADIO_SetTxParameters(void) Bandwidth = BK4819_FILTER_BW_WIDE; case BK4819_FILTER_BW_WIDE: case BK4819_FILTER_BW_NARROW: - BK4819_SetFilterBandwidth(Bandwidth); + BK4819_SetFilterBandwidth(Bandwidth, gCurrentVfo->IsAM); break; } diff --git a/ui/menu.c b/ui/menu.c index 98adbc4..1b52fe1 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -676,31 +676,43 @@ void UI_DisplayMenu(void) // if (gSubMenuSelection == 0xFF || !gEeprom.SCAN_LIST_ENABLED[i]) if (gSubMenuSelection < 0 || !gEeprom.SCAN_LIST_ENABLED[i]) { + // channel number UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8); + + // channel name + BOARD_fetchChannelName(String, gSubMenuSelection); + if (String[0] == 0) + strcpy(String, "--"); + UI_PrintString(String, menu_item_x1, menu_item_x2, 2, 8); } else { + // channel number UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8); + // channel name + BOARD_fetchChannelName(String, gSubMenuSelection); + if (String[0] == 0) + strcpy(String, "--"); + UI_PrintStringSmall(String, menu_item_x1, menu_item_x2, 2); + if (IS_MR_CHANNEL(gEeprom.SCANLIST_PRIORITY_CH1[i])) { sprintf(String, "PRI1:%u", gEeprom.SCANLIST_PRIORITY_CH1[i] + 1); - UI_PrintString(String, menu_item_x1, menu_item_x2, 2, 8); + UI_PrintString(String, menu_item_x1, menu_item_x2, 3, 8); } if (IS_MR_CHANNEL(gEeprom.SCANLIST_PRIORITY_CH2[i])) { sprintf(String, "PRI2:%u", gEeprom.SCANLIST_PRIORITY_CH2[i] + 1); - UI_PrintString(String, menu_item_x1, menu_item_x2, 4, 8); + UI_PrintString(String, menu_item_x1, menu_item_x2, 5, 8); } } } if (gMenuCursor == MENU_MEM_CH || gMenuCursor == MENU_DEL_CH || - gMenuCursor == MENU_1_CALL || - gMenuCursor == MENU_SLIST1 || - gMenuCursor == MENU_SLIST2) + gMenuCursor == MENU_1_CALL) { // display the channel name char s[11]; BOARD_fetchChannelName(s, gSubMenuSelection);