From 24865013329fcbb91f6254872ea6d4807c6b0209 Mon Sep 17 00:00:00 2001 From: OneOfEleven Date: Sun, 24 Sep 2023 13:00:02 +0100 Subject: [PATCH] Re-enabled weak signal bandwidth reduction --- am_fix.c | 63 ++++--- firmware.bin | Bin 0 -> 52932 bytes firmware.packed.bin | Bin 0 -> 52950 bytes radio.c | 6 +- utils/clean.bat | 17 ++ utils/gain_table.c | 98 ++++++++++ utils/main.cpp | 366 +++++++++++++++++++++++++++++++++++++ utils/misc.bpf | 3 + utils/misc.bpr | 119 ++++++++++++ utils/misc.dsk | 257 ++++++++++++++++++++++++++ utils/misc.res | Bin 0 -> 1536 bytes utils/uv-k5_small.fon | Bin 0 -> 1920 bytes utils/uv-k5_small_bold.fon | Bin 0 -> 1920 bytes 13 files changed, 906 insertions(+), 23 deletions(-) create mode 100644 firmware.bin create mode 100644 firmware.packed.bin create mode 100644 utils/clean.bat create mode 100644 utils/gain_table.c create mode 100644 utils/main.cpp create mode 100644 utils/misc.bpf create mode 100644 utils/misc.bpr create mode 100644 utils/misc.dsk create mode 100644 utils/misc.res create mode 100644 utils/uv-k5_small.fon create mode 100644 utils/uv-k5_small_bold.fon diff --git a/am_fix.c b/am_fix.c index e405837..8b68f9f 100644 --- a/am_fix.c +++ b/am_fix.c @@ -92,14 +92,20 @@ const uint8_t orig_pga = 6; // -3dB // 1 = -27dB // 0 = -33dB - // front end register dB values - needs a measuring/calibration update really + // front end register dB values + // + // these values need to be accurate for the code to properly/reliably switch + // between table entries when adjusting the front end registers. + // + // these 4 tables need a measuring/calibration update + // // static const int16_t lna_short_dB[] = {-19, -16, -11, 0}; // was static const int16_t lna_short_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 mixer_dB[] = { -8, -6, -3, 0}; static const int16_t pga_dB[] = {-33, -27, -21, -15, -9, -6, -3, 0}; - // lookup table is by far easier than writing code to do the same + // lookup table is hugely easier than writing code to do the same // static const t_am_fix_gain_table am_fix_gain_table[] = { @@ -115,7 +121,7 @@ const uint8_t orig_pga = 6; // -3dB {2, 2, 3, 6}, // 3 .. -24dB -14dB 0dB -3dB .. -41dB {3, 2, 3, 6} // 4 .. 0dB -14dB 0dB -3dB .. -17dB }; - + const unsigned int original_index = 1; #elif 0 @@ -288,6 +294,8 @@ const uint8_t orig_pga = 6; // -3dB #else unsigned int am_fix_gain_table_index = original_index; // start with original QS setting #endif + + // used to simply detect we've changed our table index/register settings unsigned int am_fix_gain_table_index_prev = 0; // moving average RSSI buffer @@ -299,14 +307,15 @@ const uint8_t orig_pga = 6; // -3dB uint16_t sum; // sum of all samples in the buffer } moving_avg_rssi = {0}; - // used to prevent gain hunting, provides a peak hold time delay + // to help reduce gain hunting, provides a peak hold time delay unsigned int am_gain_hold_counter = 0; // used to correct the RSSI readings after our front end gain adjustments int16_t rssi_db_gain_diff = 0; void AM_fix_reset(void) - { + { // reset the AM fixer + // reset the moving average filter memset(&moving_avg_rssi, 0, sizeof(moving_avg_rssi)); @@ -319,9 +328,17 @@ const uint8_t orig_pga = 6; // -3dB #else am_fix_gain_table_index = original_index; // re-start with original QS setting #endif + am_fix_gain_table_index_prev = 0; } + // adjust the RX RF gain to try and prevent the AM demodulator from + // saturating/overloading/clipping (distorted AM audio) + // + // 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 + // playing with the RF front end gain settings + // void AM_fix_adjust_frontEnd_10ms(void) { #ifndef ENABLE_AM_FIX_TEST1 @@ -329,12 +346,13 @@ const uint8_t orig_pga = 6; // -3dB const uint16_t desired_rssi = (-89 + 160) * 2; // dBm to ADC sample #endif - // we don't play with the front end gains if in FM mode - // they remain as per QS original + // we don't need to play with the front end gains if we're in FM mode, they + // remain as per QS original + // if (!gRxVfo->IsAM) return; - // we're in AM mode + // but we're not in FM mode, we're in AM mode switch (gCurrentFunction) { @@ -344,7 +362,7 @@ const uint8_t orig_pga = 6; // -3dB case FUNCTION_FOREGROUND: return; - // only adjust the front end if in one of these modes + // only adjust stuff if we're in one of these modes case FUNCTION_RECEIVE: case FUNCTION_MONITOR: case FUNCTION_INCOMING: @@ -352,10 +370,11 @@ const uint8_t orig_pga = 6; // -3dB } // sample the current RSSI level - uint16_t rssi = BK4819_GetRSSI(); // supposed 9-bit value (0 .. 511) - never seen that though + uint16_t rssi = BK4819_GetRSSI(); // supposed 9-bit value (0 .. 511) - never seen that though #if 1 - // compute a moving average RSSI - just smooths any sharp spikes + // compute moving average RSSI - helps smooth any sharp spikes/troughs + // but can cause gain hunting/oscillation if too long a buffer (.samples) if (moving_avg_rssi.count < ARRAY_SIZE(moving_avg_rssi.samples)) moving_avg_rssi.count++; moving_avg_rssi.sum -= moving_avg_rssi.samples[moving_avg_rssi.index]; // subtract the oldest sample @@ -370,42 +389,42 @@ const uint8_t orig_pga = 6; // -3dB #ifdef ENABLE_AM_FIX_TEST1 + // user is manually adjusting a gain register - don't do anything automatically + am_fix_gain_table_index = 1 + gSetting_AM_fix_test1; if (am_gain_hold_counter > 0) if (--am_gain_hold_counter > 0) return; - am_gain_hold_counter = 250; // 250ms + am_gain_hold_counter = 250; // 250ms hold #else - + + // automatically choose a front end gain setting by monitoring the RSSI + if (rssi > desired_rssi) { // decrease gain if (am_fix_gain_table_index > 1) am_fix_gain_table_index--; - am_gain_hold_counter = 50; // 500ms + am_gain_hold_counter = 50; // 500ms hold } if (am_gain_hold_counter > 0) am_gain_hold_counter--; if (am_gain_hold_counter == 0) - { // hold has been released, we're now free to increase gain - + // hold has been released, we're free to increase gain if (rssi < (desired_rssi - 10)) // 5dB hysterisis (helps reduce gain hunting) - { // increase gain - + // increase gain if (am_fix_gain_table_index < (ARRAY_SIZE(am_fix_gain_table) - 1)) am_fix_gain_table_index++; - } - } if (am_fix_gain_table_index == am_fix_gain_table_index_prev) return; // no gain changes have been made - + #endif // apply the new settings to the front end registers @@ -423,6 +442,7 @@ const uint8_t orig_pga = 6; // -3dB // gain difference from original QS setting rssi_db_gain_diff = am_dB_gain - orig_dB_gain; + // shall we or sharn't we ? //gCurrentRSSI[gEeprom.RX_CHANNEL] = rssi - (rssi_db_gain_diff * 2); } @@ -430,6 +450,7 @@ const uint8_t orig_pga = 6; // -3dB am_fix_gain_table_index_prev = am_fix_gain_table_index; #ifdef ENABLE_AM_FIX_SHOW_DATA + // trigger display update so the user can see the data as it changes gUpdateDisplay = true; #endif } diff --git a/firmware.bin b/firmware.bin new file mode 100644 index 0000000000000000000000000000000000000000..87094695d7425116d18f94241a3b7c821cea0135 GIT binary patch literal 52932 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 literal 0 HcmV?d00001 diff --git a/firmware.packed.bin b/firmware.packed.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ef02200f5176bb7a40131a2602f9a27da9cb2fc GIT binary patch literal 52950 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¥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 literal 0 HcmV?d00001 diff --git a/radio.c b/radio.c index ed45d55..444e50f 100644 --- a/radio.c +++ b/radio.c @@ -595,7 +595,8 @@ void RADIO_SetupRegisters(bool bSwitchToFunction0) case BK4819_FILTER_BW_WIDE: case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX - BK4819_SetFilterBandwidth(Bandwidth, gRxVfo->IsAM && gSetting_AM_fix); +// BK4819_SetFilterBandwidth(Bandwidth, gRxVfo->IsAM && gSetting_AM_fix); + BK4819_SetFilterBandwidth(Bandwidth, false); #else BK4819_SetFilterBandwidth(Bandwidth, false); #endif @@ -843,7 +844,8 @@ void RADIO_SetTxParameters(void) case BK4819_FILTER_BW_WIDE: case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX - BK4819_SetFilterBandwidth(Bandwidth, gCurrentVfo->IsAM && gSetting_AM_fix); +// BK4819_SetFilterBandwidth(Bandwidth, gCurrentVfo->IsAM && gSetting_AM_fix); + BK4819_SetFilterBandwidth(Bandwidth, false); #else BK4819_SetFilterBandwidth(Bandwidth, false); #endif diff --git a/utils/clean.bat b/utils/clean.bat new file mode 100644 index 0000000..e9148fa --- /dev/null +++ b/utils/clean.bat @@ -0,0 +1,17 @@ +@echo off +del /S /Q *.~* +del /S /Q *.map +del /S /Q *.tds +del /S /Q *.obj +del /S /Q *.db +del /S /Q *.ilc +del /S /Q *.ild +del /S /Q *.ilf +del /S /Q *.ils +del /S /Q *.dcu +::del /S /Q *.dsk +rd /S /Q Debug +rd /S /Q Release +rd /S /Q ipch +::pause +@echo on diff --git a/utils/gain_table.c b/utils/gain_table.c new file mode 100644 index 0000000..43a23ea --- /dev/null +++ b/utils/gain_table.c @@ -0,0 +1,98 @@ + + const t_am_fix_gain_table am_fix_gain_table[] = + { + {.lna_short = 3, .lna = 2, .mixer = 3, .pga = 6}, // 0 0dB -14dB 0dB -3dB .. -17dB original + + {0, 0, 0, 0}, // 1 .. -33dB -24dB -8dB -33dB .. -98dB + {0, 0, 1, 0}, // 2 .. -33dB -24dB -6dB -33dB .. -96dB + {1, 0, 0, 0}, // 3 .. -30dB -24dB -8dB -33dB .. -95dB + {0, 1, 0, 0}, // 4 .. -33dB -19dB -8dB -33dB .. -93dB + {0, 0, 0, 1}, // 5 .. -33dB -24dB -8dB -27dB .. -92dB + {0, 1, 1, 0}, // 6 .. -33dB -19dB -6dB -33dB .. -91dB + {0, 0, 1, 1}, // 7 .. -33dB -24dB -6dB -27dB .. -90dB + {1, 0, 0, 1}, // 8 .. -30dB -24dB -8dB -27dB .. -89dB + {0, 1, 2, 0}, // 9 .. -33dB -19dB -3dB -33dB .. -88dB + {1, 0, 3, 0}, // 10 .. -30dB -24dB 0dB -33dB .. -87dB + {0, 0, 0, 2}, // 11 .. -33dB -24dB -8dB -21dB .. -86dB + {1, 1, 2, 0}, // 12 .. -30dB -19dB -3dB -33dB .. -85dB + {0, 0, 3, 1}, // 13 .. -33dB -24dB 0dB -27dB .. -84dB + {0, 3, 0, 0}, // 14 .. -33dB -9dB -8dB -33dB .. -83dB + {1, 1, 3, 0}, // 15 .. -30dB -19dB 0dB -33dB .. -82dB + {1, 0, 3, 1}, // 16 .. -30dB -24dB 0dB -27dB .. -81dB + {0, 2, 3, 0}, // 17 .. -33dB -14dB 0dB -33dB .. -80dB + {1, 2, 0, 1}, // 18 .. -30dB -14dB -8dB -27dB .. -79dB + {0, 3, 2, 0}, // 19 .. -33dB -9dB -3dB -33dB .. -78dB + {1, 4, 0, 0}, // 20 .. -30dB -6dB -8dB -33dB .. -77dB + {0, 2, 0, 2}, // 21 .. -33dB -14dB -8dB -21dB .. -76dB + {0, 3, 3, 0}, // 22 .. -33dB -9dB 0dB -33dB .. -75dB + {1, 3, 0, 1}, // 23 .. -30dB -9dB -8dB -27dB .. -74dB + {1, 2, 0, 2}, // 24 .. -30dB -14dB -8dB -21dB .. -73dB + {1, 1, 0, 3}, // 25 .. -30dB -19dB -8dB -15dB .. -72dB + {1, 4, 0, 1}, // 26 .. -30dB -6dB -8dB -27dB .. -71dB + {1, 5, 2, 0}, // 27 .. -30dB -4dB -3dB -33dB .. -70dB + {1, 4, 1, 1}, // 28 .. -30dB -6dB -6dB -27dB .. -69dB + {2, 2, 2, 1}, // 29 .. -24dB -14dB -3dB -27dB .. -68dB + {2, 1, 2, 2}, // 30 .. -24dB -19dB -3dB -21dB .. -67dB + {2, 0, 2, 3}, // 31 .. -24dB -24dB -3dB -15dB .. -66dB + {1, 0, 0, 6}, // 32 .. -30dB -24dB -8dB -3dB .. -65dB + {2, 1, 1, 3}, // 33 .. -24dB -19dB -6dB -15dB .. -64dB + {0, 3, 1, 3}, // 34 .. -33dB -9dB -6dB -15dB .. -63dB + {2, 3, 0, 2}, // 35 .. -24dB -9dB -8dB -21dB .. -62dB + {2, 1, 2, 3}, // 36 .. -24dB -19dB -3dB -15dB .. -61dB + {2, 3, 1, 2}, // 37 .. -24dB -9dB -6dB -21dB .. -60dB + {2, 2, 3, 2}, // 38 .. -24dB -14dB 0dB -21dB .. -59dB + {2, 1, 1, 4}, // 39 .. -24dB -19dB -6dB -9dB .. -58dB + {2, 4, 1, 2}, // 40 .. -24dB -6dB -6dB -21dB .. -57dB + {1, 2, 2, 4}, // 41 .. -30dB -14dB -3dB -9dB .. -56dB + {2, 1, 1, 5}, // 42 .. -24dB -19dB -6dB -6dB .. -55dB + {2, 3, 3, 2}, // 43 .. -24dB -9dB 0dB -21dB .. -54dB + {1, 3, 0, 5}, // 44 .. -30dB -9dB -8dB -6dB .. -53dB + {1, 5, 2, 3}, // 45 .. -30dB -4dB -3dB -15dB .. -52dB + {1, 3, 1, 5}, // 46 .. -30dB -9dB -6dB -6dB .. -51dB + {0, 2, 2, 7}, // 47 .. -33dB -14dB -3dB 0dB .. -50dB + {2, 1, 1, 7}, // 48 .. -24dB -19dB -6dB 0dB .. -49dB + {0, 4, 2, 5}, // 49 .. -33dB -6dB -3dB -6dB .. -48dB + {1, 2, 3, 6}, // 50 .. -30dB -14dB 0dB -3dB .. -47dB + {1, 5, 1, 5}, // 51 .. -30dB -4dB -6dB -6dB .. -46dB + {3, 0, 3, 2}, // 52 .. 0dB -24dB 0dB -21dB .. -45dB + {3, 2, 2, 1}, // 53 .. 0dB -14dB -3dB -27dB .. -44dB + {2, 5, 1, 4}, // 54 .. -24dB -4dB -6dB -9dB .. -43dB + {1, 4, 2, 6}, // 55 .. -30dB -6dB -3dB -3dB .. -42dB + {3, 0, 0, 4}, // 56 .. 0dB -24dB -8dB -9dB .. -41dB + {0, 5, 3, 6}, // 57 .. -33dB -4dB 0dB -3dB .. -40dB + {2, 4, 2, 5}, // 58 .. -24dB -6dB -3dB -6dB .. -39dB + {3, 0, 0, 5}, // 59 .. 0dB -24dB -8dB -6dB .. -38dB + {0, 5, 3, 7}, // 60 .. -33dB -4dB 0dB 0dB .. -37dB + {2, 3, 3, 6}, // 61 .. -24dB -9dB 0dB -3dB .. -36dB + {3, 4, 0, 2}, // 62 .. 0dB -6dB -8dB -21dB .. -35dB + {3, 1, 1, 4}, // 63 .. 0dB -19dB -6dB -9dB .. -34dB + {3, 0, 3, 4}, // 64 .. 0dB -24dB 0dB -9dB .. -33dB + {3, 3, 0, 3}, // 65 .. 0dB -9dB -8dB -15dB .. -32dB + {3, 1, 1, 5}, // 66 .. 0dB -19dB -6dB -6dB .. -31dB + {3, 0, 2, 6}, // 67 .. 0dB -24dB -3dB -3dB .. -30dB + {3, 2, 3, 3}, // 68 .. 0dB -14dB 0dB -15dB .. -29dB + {3, 2, 0, 5}, // 69 .. 0dB -14dB -8dB -6dB .. -28dB + {3, 4, 1, 3}, // 70 .. 0dB -6dB -6dB -15dB .. -27dB + {3, 2, 2, 4}, // 71 .. 0dB -14dB -3dB -9dB .. -26dB + {3, 1, 2, 6}, // 72 .. 0dB -19dB -3dB -3dB .. -25dB + {3, 3, 1, 4}, // 73 .. 0dB -9dB -6dB -9dB .. -24dB + {3, 2, 1, 6}, // 74 .. 0dB -14dB -6dB -3dB .. -23dB + {3, 5, 2, 3}, // 75 .. 0dB -4dB -3dB -15dB .. -22dB + {3, 4, 1, 4}, // 76 .. 0dB -6dB -6dB -9dB .. -21dB + {3, 4, 0, 5}, // 77 .. 0dB -6dB -8dB -6dB .. -20dB + {3, 5, 1, 4}, // 78 .. 0dB -4dB -6dB -9dB .. -19dB + {3, 3, 3, 4}, // 79 .. 0dB -9dB 0dB -9dB .. -18dB + {3, 2, 3, 6}, // 80 .. 0dB -14dB 0dB -3dB .. -17dB original + {3, 5, 1, 5}, // 81 .. 0dB -4dB -6dB -6dB .. -16dB + {3, 3, 1, 7}, // 82 .. 0dB -9dB -6dB 0dB .. -15dB + {3, 2, 3, 7}, // 83 .. 0dB -14dB 0dB 0dB .. -14dB + {3, 5, 1, 6}, // 84 .. 0dB -4dB -6dB -3dB .. -13dB + {3, 4, 2, 6}, // 85 .. 0dB -6dB -3dB -3dB .. -12dB + {3, 5, 2, 6}, // 86 .. 0dB -4dB -3dB -3dB .. -10dB + {3, 4, 3, 6}, // 87 .. 0dB -6dB 0dB -3dB .. -9dB + {3, 5, 2, 7}, // 88 .. 0dB -4dB -3dB 0dB .. -7dB + {3, 4, 3, 7}, // 89 .. 0dB -6dB 0dB 0dB .. -6dB + {3, 5, 3, 7}, // 90 .. 0dB -4dB 0dB 0dB .. -4dB + }; + + const unsigned int original_index = 80; diff --git a/utils/main.cpp b/utils/main.cpp new file mode 100644 index 0000000..4eff329 --- /dev/null +++ b/utils/main.cpp @@ -0,0 +1,366 @@ + +#include + +#include +#include +#include + +#pragma hdrstop + +// ************************************************************************ +// create a front end gain table for the firmware + + // <9:8> = LNA Gain Short + // 3 = 0dB < original value + // 2 = -11dB + // 1 = -16dB + // 0 = -19dB + // + // <7:5> = LNA Gain + // 7 = 0dB + // 6 = -2dB + // 5 = -4dB + // 4 = -6dB + // 3 = -9dB + // 2 = -14dB < original value + // 1 = -19dB + // 0 = -24dB + // + // <4:3> = MIXER Gain + // 3 = 0dB < original value + // 2 = -3dB + // 1 = -6dB + // 0 = -8dB + // + // <2:0> = PGA Gain + // 7 = 0dB + // 6 = -3dB < original value + // 5 = -6dB + // 4 = -9dB + // 3 = -15dB + // 2 = -21dB + // 1 = -27dB + // 0 = -33dB + +typedef struct +{ + uint8_t lna_short; + uint8_t lna; + uint8_t mixer; + uint8_t pga; + int16_t lna_short_dB; + int16_t lna_dB; + int16_t mixer_dB; + int16_t pga_dB; + int16_t sum_dB; +} t_gain_table; + +void __fastcall create_gain_table(String filename) +{ + String s; + + std::vector gain_table; + + // front end register dB values +// const int16_t lna_short_dB[4] = { (-19), (-16), (-11), (0)}; // was + const int16_t lna_short_dB[4] = { (-33), (-30), (-24), (0)}; // corrected + const int16_t lna_dB[8] = { (-24), (-19), (-14), (-9), (-6), (-4), (-2), (0)}; + const int16_t mixer_dB[4] = { (-8), (-6), (-3), (0)}; + const int16_t pga_dB[8] = { (-33), (-27), (-21), (-15), (-9), (-6), (-3), (0)}; + + const uint8_t orig_lna_short = 3; + const uint8_t orig_lna = 2; + const uint8_t orig_mixer = 3; + const uint8_t orig_pga = 6; + + const int16_t orig_gain_dB = + lna_short_dB[orig_lna_short] + + lna_dB[orig_lna] + + mixer_dB[orig_mixer] + + pga_dB[orig_pga]; + + const uint8_t lna_short_min = 0; // 0 + const uint8_t lna_min = 0; // 0 + const uint8_t mixer_min = 0; // 0 + const uint8_t pga_min = 0; // 0 + + const uint8_t lna_short_max = 3; // 3 + const uint8_t lna_max = 5; // 5 + const uint8_t mixer_max = 3; // 3 + const uint8_t pga_max = 7; // 7 + + uint8_t lna_short = lna_short_min; + uint8_t lna = lna_min; + uint8_t mixer = mixer_min; + uint8_t pga = pga_min; + + unsigned int original_index = 0; + + while (true) + { + t_gain_table entry; + + entry.lna_short = lna_short; + entry.lna = lna; + entry.mixer = mixer; + entry.pga = pga; + + entry.lna_short_dB = lna_short_dB[lna_short]; + entry.lna_dB = lna_dB[lna]; + entry.mixer_dB = mixer_dB[mixer]; + entry.pga_dB = pga_dB[pga]; + + entry.sum_dB = lna_short_dB[lna_short] + + lna_dB[lna] + + mixer_dB[mixer] + + pga_dB[pga]; + + if (entry.sum_dB != orig_gain_dB) + gain_table.push_back(entry); + else + if (lna_short == orig_lna_short && lna == orig_lna && mixer == orig_mixer && pga == orig_pga) + gain_table.push_back(entry); + + if (++pga <= pga_max) + continue; + pga = pga_min; + + if (++mixer <= mixer_max) + continue; + mixer = mixer_min; + + if (++lna <= lna_max) + continue; + lna = lna_min; + + if (++lna_short <= lna_short_max) + continue; +// lna_short = lna_short_min; + + break; + } + + // sort the table according top the sum dB + for (unsigned int i = 0; i < gain_table.size() - 1; i++) + { + t_gain_table entry1 = gain_table[i]; + for (unsigned int k = i + 1; k < gain_table.size(); k++) + { + t_gain_table entry2 = gain_table[k]; + if (entry2.sum_dB < entry1.sum_dB) + { // swap + const t_gain_table entry = entry1; + entry1 = entry2; + entry2 = entry; + gain_table[i] = entry1; + gain_table[k] = entry2; + } + } + } + + { // remove sum_dB duplicates + unsigned int i = 0; + while (i < gain_table.size()) + { + const t_gain_table entry1 = gain_table[i++]; + + if (entry1.lna_short == orig_lna_short && + entry1.lna == orig_lna && + entry1.mixer == orig_mixer && + entry1.pga == orig_pga) + continue; // leave the original inplace + + while (i < gain_table.size()) + { + const t_gain_table entry2 = gain_table[i]; + + if (entry2.lna_short == orig_lna_short && + entry2.lna == orig_lna && + entry2.mixer == orig_mixer && + entry2.pga == orig_pga) + break; // leave the original inplace + + if (entry2.sum_dB != entry1.sum_dB) + break; + + gain_table.erase(gain_table.begin() + i, gain_table.begin() + i + 1); + } + } + } + + // find the QS original index + for (int i = (int)gain_table.size() - 1; i >= 0; i--) + { + const t_gain_table entry = gain_table[i]; + + if (entry.sum_dB != orig_gain_dB) + continue; + + if (entry.lna_short != orig_lna_short || + entry.lna != orig_lna || + entry.mixer != orig_mixer || + entry.pga != orig_pga) + continue; + + original_index = i; + break; + } + + const int save_handle = FileCreate(filename); + if (save_handle <= 0) + return; + + s = "\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + s = "\tconst t_am_fix_gain_table am_fix_gain_table[] =\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + s = "\t{\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + s = "\t\t{.lna_short = 3, .lna = 2, .mixer = 3, .pga = 6}, // 0 0dB -14dB 0dB -3dB .. -17dB original\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + s = "\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + + for (unsigned int i = 0; i < gain_table.size(); i++) + { + const t_gain_table entry = gain_table[i]; + + // {0, 0, 0, 0}, // 00 -19dB -24dB -8dB -33dB .. -84dB + + s.printf("\t\t{%u, %u, %u, %u}, // %3u .. %3ddB %3ddB %2ddB %3ddB .. %3ddB", + entry.lna_short, + entry.lna, + entry.mixer, + entry.pga, + 1 + i, + entry.lna_short_dB, + entry.lna_dB, + entry.mixer_dB, + entry.pga_dB, + entry.sum_dB); + + if (i == original_index) + s += " original"; + + s += "\r\n"; + + FileWrite(save_handle, s.c_str(), s.Length()); + } + + s = "\t};\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + + s.printf("\r\n\tconst unsigned int original_index = %u;\r\n", 1 + original_index); + FileWrite(save_handle, s.c_str(), s.Length()); + + FileClose(save_handle); +} + + // ************************************************************************ +// "rotate_font()" has nothing to do with this program at all, I just needed +// to write a bit of code to rotate some fonts I've drawn + +void __fastcall rotate_font(String filename1, String filename2) +{ + std::vector data; + + // **************************** + // load the file + + const int load_handle = FileOpen(filename1, fmOpenRead | fmShareDenyNone); + if (load_handle <= 0) + return; + + const int file_size = FileSeek(load_handle, 0, 2); + FileSeek(load_handle, 0, 0); + + if (file_size <= 0) + { + FileClose(load_handle); + return; + } + + data.resize(file_size); + + const int bytes_loaded = FileRead(load_handle, &data[0], file_size); + + FileClose(load_handle); + + if (bytes_loaded != (int)data.size()) + return; + + // *************************** + // rotate the font 90-deg clockwise + + for (unsigned int i = 0; i <= (data.size() - 8); i += 8) + { + uint8_t c1[8]; + uint8_t c2[8]; + memcpy(c1, &data[i], 8); + memset(c2, 0, 8); + for (unsigned int k = 0; k < 8; k++) + { + uint8_t b = c1[k]; + for (unsigned int m = 0; m < 8; m++) + { + if (b & 0x80) + c2[m] |= 1u << k; + b <<= 1; + } + } + memcpy(&data[i], c2, 8); + } + + // *************************** + // save file + + String s; + + const int save_handle = FileCreate(filename2); + if (save_handle <= 0) + return; + + s.printf("const uint8_t gFontSmall[95][7] =\r\n"); + FileWrite(save_handle, s.c_str(), s.Length()); + s = "{\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + + for (unsigned int i = 0; i < data.size(); ) + { + s = ""; +// for (unsigned int k = 0; k < 8 && i < data.size(); k++) + for (unsigned int k = 0; k < 7 && i < data.size(); k++) + { + String s2; + s2.printf("0x%02X", data[i++]); + if (k == 0) + s += "\t{"; +// if (k < 7) + if (k < 6) + s += s2 + ", "; + else + s += s2 + "},\r\n"; + } + i++; + FileWrite(save_handle, s.c_str(), s.Length()); + } + + s = "};\r\n"; + FileWrite(save_handle, s.c_str(), s.Length()); + + FileClose(save_handle); + + // *************************** +} + +#pragma argsused +int main(int argc, char* argv[]) +{ + create_gain_table("gain_table.c"); + +// rotate_font("uv-k5_small.bin", "uv-k5_small.c"); +// rotate_font("uv-k5_small_bold.bin", "uv-k5_small_bold.c"); + + return 0; +} + diff --git a/utils/misc.bpf b/utils/misc.bpf new file mode 100644 index 0000000..32b7389 --- /dev/null +++ b/utils/misc.bpf @@ -0,0 +1,3 @@ +This file is used by the project manager only and should be treated like the project file + +main diff --git a/utils/misc.bpr b/utils/misc.bpr new file mode 100644 index 0000000..00fd068 --- /dev/null +++ b/utils/misc.bpr @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=0 +MinorVer=0 +Release=1 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=2057 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=0.0.1.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +c:\program files (x86)\borland\cbuilder6\Bin\dclite60.bpl=Borland Integrated Translation Environment + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + + \ No newline at end of file diff --git a/utils/misc.dsk b/utils/misc.dsk new file mode 100644 index 0000000..553f44a --- /dev/null +++ b/utils/misc.dsk @@ -0,0 +1,257 @@ +[Closed Files] +File_0=SourceModule,'C:\Radios\Quansheng_UV-K5\uv-k5-firmware\uv-k5-firmware-custom\misc\Unit1.cpp',0,1,1,1,1,0,0 +File_1=SourceModule,'c:\program files (x86)\borland\cbuilder6\include\vcl\sysmac.H',0,1,32,9,50,0,0 +File_2=SourceModule,'C:\Radios\Quansheng_UV-K5\k5prog\k5prog-win\SerialPort.cpp',0,1,396,16,415,0,0 +File_3=SourceModule,'c:\program files (x86)\borland\cbuilder6\include\vcl\dstring.h',0,1,235,1,254,0,0 +File_4=SourceModule,'c:\program files (x86)\borland\cbuilder6\include\vcl\CGAUGES.h',0,1,41,20,60,0,0 +File_5=SourceModule,'c:\program files (x86)\borland\cbuilder6\include\winbase.h',0,1,799,17,818,0,0 +File_6=SourceModule,'C:\Radios\Quansheng_UV-K5\k5prog\k5prog-win\CriticalSection.h',0,1,1,1,32,0,0 +File_7=SourceModule,'C:\Radios\Quansheng_UV-K5\k5prog\k5prog-win\HighResolutionTick.h',0,1,35,1,44,0,0 +File_8=SourceModule,'c:\program files (x86)\borland\cbuilder6\include\vcl\Forms.hpp',0,1,417,27,436,0,0 +File_9=SourceModule,'C:\Radios\Quansheng_UV-K5\k5prog\mine\CriticalSection.h',0,1,72,7,91,0,0 + +[Modules] +Module0=C:\Radios\Quansheng_UV-K5\uv-k5-firmware\uv-k5-firmware-custom\misc\main.cpp +Count=1 +EditWindowCount=1 + +[C:\Radios\Quansheng_UV-K5\uv-k5-firmware\uv-k5-firmware-custom\misc\main.cpp] +ModuleType=SourceModule +FormState=0 +FormOnTop=0 + +[C:\Radios\Quansheng_UV-K5\uv-k5-firmware\uv-k5-firmware-custom\misc\misc.bpr] +FormState=0 +FormOnTop=0 + +[C:\Radios\Quansheng_UV-K5\uv-k5-firmware\uv-k5-firmware-custom\misc\ProjectGroup1.bpg] +FormState=0 +FormOnTop=0 + +[EditWindow0] +ViewCount=1 +CurrentView=0 +View0=0 +CodeExplorer=CodeExplorer@EditWindow0 +MessageView=MessageView@EditWindow0 +ClassHierarchy=ClassHierarchy@EditWindow0 +Create=1 +Visible=1 +State=0 +Left=319 +Top=140 +Width=1305 +Height=872 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1289 +ClientHeight=833 +LeftPanelSize=0 +LeftPanelClients=CodeExplorer@EditWindow0 +LeftPanelData=00000400010000000C000000436F64654578706C6F726572000000000000000000000000000000000001000000000000000000000000FFFFFFFF +RightPanelSize=0 +BottomPanelSize=0 +BottomPanelClients=MessageView@EditWindow0 +BottomPanelData=00000400010000000B0000004D6573736167655669657700000000000000000000000000000000000100000000000000000B0000004D65737361676556696577FFFFFFFF + +[View0] +Module=C:\Radios\Quansheng_UV-K5\uv-k5-firmware\uv-k5-firmware-custom\misc\main.cpp +CursorX=26 +CursorY=366 +TopLine=366 +LeftCol=1 + +[Watches] +Count=0 + +[Breakpoints] +Count=0 + +[AddressBreakpoints] +Count=0 + +[Main Window] +Create=1 +Visible=1 +State=2 +Left=0 +Top=0 +Width=1920 +Height=123 +MaxLeft=-1 +MaxTop=-1 +MaxWidth=1936 +MaxHeight=123 +ClientWidth=1920 +ClientHeight=84 + +[ProjectManager] +Create=1 +Visible=0 +State=0 +Left=369 +Top=372 +Width=446 +Height=318 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=430 +ClientHeight=279 +TBDockHeight=318 +LRDockWidth=446 +Dockable=1 + +[CPUWindow] +Create=1 +Visible=0 +State=0 +Left=693 +Top=363 +Width=533 +Height=353 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=517 +ClientHeight=314 +DumpPane=79 +DisassemblyPane=187 +RegisterPane=231 +FlagPane=64 + +[WatchWindow] +Create=1 +Visible=0 +State=0 +Left=714 +Top=971 +Width=897 +Height=168 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=881 +ClientHeight=129 +TBDockHeight=129 +LRDockWidth=421 +Dockable=1 + +[AlignmentPalette] +Create=1 +Visible=0 +State=0 +Left=200 +Top=125 +Width=156 +Height=89 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=150 +ClientHeight=60 + +[PropertyInspector] +Create=1 +Visible=1 +State=0 +Left=0 +Top=143 +Width=309 +Height=892 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=293 +ClientHeight=853 +TBDockHeight=908 +LRDockWidth=309 +Dockable=1 +SplitPos=135 +ArrangeBy=Name +SelectedItem= +ExpandedItems=Constraints +HiddenCategories= + +[ObjectTree] +Create=1 +Visible=0 +State=0 +Left=0 +Top=123 +Width=190 +Height=370 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=174 +ClientHeight=331 +TBDockHeight=370 +LRDockWidth=190 +Dockable=1 + +[CodeguardLog] +Create=1 +Visible=0 +State=0 +Left=191 +Top=108 +Width=448 +Height=190 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=432 +ClientHeight=151 +TBDockHeight=190 +LRDockWidth=448 +Dockable=1 + +[ClassHierarchy@EditWindow0] +Create=1 +Visible=0 +State=0 +Left=218 +Top=113 +Width=403 +Height=284 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=387 +ClientHeight=245 +TBDockHeight=284 +LRDockWidth=403 +Dockable=1 +TreeWidth=121 +Col1Width=120 +Col2Width=120 + +[CodeExplorer@EditWindow0] +Create=1 +Visible=0 +State=0 +Left=0 +Top=12 +Width=170 +Height=626 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=170 +ClientHeight=626 +TBDockHeight=388 +LRDockWidth=170 +Dockable=1 +ClassViewDisplayMode=0 + +[MessageView@EditWindow0] +Create=1 +Visible=0 +State=0 +Left=12 +Top=0 +Width=1277 +Height=85 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1277 +ClientHeight=85 +TBDockHeight=85 +LRDockWidth=443 +Dockable=1 + +[DockHosts] +DockHostCount=0 + diff --git a/utils/misc.res b/utils/misc.res new file mode 100644 index 0000000000000000000000000000000000000000..6f847b3d8dad373afe0fd24c1eb369c84786e86b GIT binary patch literal 1536 zcmb_bO=}ZT6g^Y3NH--5S8faDW+ED^{{CLEBhNlMrJE$tfJ@0`-+j zt3^**=cY`pQUesYQW$f+3<3Ty9Gc?Tcua>hAtp1!)%udd|0A(WVpq*`2~Owm z`4Wz1eCG!7xuZ<^F>yM@V$vlX#p$No6#gV}k#N(*B`yrBTn$Gqa^Z2+4W?KU3FbMu zk;V(QSUF4F&V}L6^h%jr~=-~uyG_gzD!VxpKaf}W* zUzAh9Lr(gLy2T!(qdUwNaMlh^(M5y&Pn^0zbmY_HzH)rdke&~CqqVxMdBWKCj9WpG zY|pKe+ao*YRItJ78+f4B*Oxx~%5AfDYoUXCTK^gSP4!B*UG^!{Ht~*;Ce~-pdrd|I zZy9$=+rxWy;>Ec8(;RYZQrGt_D8B)_qnG4%nC&BH?=N%+-lfcam9sd#&200__jXI? nvb&dRatFS{P#djl-@dE--vsXJmtYgN8Py_l{=Zl)UKaiU$p(Eo literal 0 HcmV?d00001 diff --git a/utils/uv-k5_small.fon b/utils/uv-k5_small.fon new file mode 100644 index 0000000000000000000000000000000000000000..3bb18920752cc2ce75810c74bc845a85ea3ee9eb GIT binary patch literal 1920 zcmchVF>Kpb5Qa}O6EUqDuxJJXG1`}c1BcXLfHYtN!gx>_K{b+8a8%SVkk(G^R6-m} zk(5RS2tt4tj~+dG^ys03(8;5h6dpZ#^yqHh(*J(SMU566`$&DKd+*-e{~qu0(jQV1 z5eL8b??uM2IxP9$7-9MPXTM#SU$4EpH7-4RcdOZI_f5Cg`Kh<^%JkM=ziIc@`sQ)_ z$6lx3c`-2GwKrBfZ~LJwUq(Z-?j%WQ|oN}V(!e|oxL1=Y3n8D zsx0HVb}_eIk_z+#6*0M(r(F2GJXyaG1NZ-~eXJTjp6K{@QxOfS$O(B$o{{IIOzEmi zdZbSpG9)81CM{Vf8{{InOt#1_IV4Bq7P(FCkh|m_xlfMC1M-kOB9F-v@{~Ly&q-}L z=qEkWCk+{r5gC(~tdk9Lkz6KQWS1P0BXWz}CU?kPa*y06$K(NdNFI^LTxl~^)X(FjUUzo4Kq8d-nEtQQ1n=)((+sh?qFFxEBYrDdyE5TG+%6RWJUenKPWkBPT9X>$_5%-o$$YK|^hS&Swj|trKAOA5gzh8fSb6R@v`sUM4cN7kW{b$3q=izYk*B9O4<|usF z{dw3Q_0w_qT{qk4zZxyQ_fBJ$`qBMsW{Vw&)VBUz?-O*=lCf;zsc56@v|O7-&Q+v3 zp;_LSnza2}bkt_H59LRR7D|&My1M+$qo?=2di?H-m!JOf`A?(gYrUR&K2rPR`%l8# zQFQBzJNSfm!*8>3cih|D2=5e=XDn&2bH~?2z8r3@jp2XQ9e2Xze)d~KtI=1c zUQs+r@La#N?Uba7{(-85PQoX2{8^s)FPnk-wrihg4>x9g{I{rz236&hJR{G^3sUCP zTO;daK!)TZ8Ieu0MXr!-a+OTT4mlumazbvCJLE38NA8mcD`cBoB@?nk4#=FGklW-Axl8Vm`{V&RB@f9X@|Zj!Psua# zoV*|fw-x=9buu7Ba*>S4CfOoa$Tqo3CS->kkU2Rax5*uHm)s-w$pdmq9+F4kKkoJA z)e0~q5Gj6|B8wJ}NYl3M2ev8esUJk?vNRh(^!2^FqR~2FjiSI8ygt5*Gy)Se;0OZe zW-+365o44(U@v=!PFiAInx@W3(9CrPbZ?;vX(2sl#a}Qz=X`N4v8o$LjduX5M)YXultS7ju%de{o<_=Q`mAHnwuY#Kkmfb|;8%8L08t)Om-{90!{S%)1u`m?N` zpfByiCJFpWrgh=e2-wjL{Bi92J?vN7%LjQcl|%>ZMOcdXmo7s*>T})5?}~hBnz@+u zZI(*x5~J&7UMvOCjHfh(?py^lilRVssd*p4tTaYiyF|3H8{U#iKs966FK&#rGdz{YjcxT?e|r z&>GwUNaWXe