diff --git a/firmware.bin b/firmware.bin index 018e749..06e7bda 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 1f56856..1c1455a 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/font.c b/font.c index 74d2c41..680eb16 100644 --- a/font.c +++ b/font.c @@ -380,101 +380,101 @@ const uint8_t g_font_small[95][6] = #ifdef ENABLE_SMALL_BOLD const uint8_t g_font_small_bold[95][6] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x5E, 0x5E, 0x00, 0x00}, - {0x06, 0x06, 0x00, 0x06, 0x06, 0x00}, - {0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00}, - {0x2E, 0x6B, 0x7F, 0x6B, 0x3A, 0x00}, - {0x63, 0x33, 0x18, 0x0C, 0x66, 0x63}, - {0x30, 0x4B, 0x4D, 0x55, 0x22, 0x50}, - {0x00, 0x00, 0x07, 0x07, 0x00, 0x00}, - {0x00, 0x1C, 0x3E, 0x63, 0x41, 0x00}, - {0x00, 0x41, 0x63, 0x3E, 0x1C, 0x00}, - {0x00, 0x2A, 0x1C, 0x1C, 0x2A, 0x00}, - {0x18, 0x18, 0x7E, 0x7E, 0x18, 0x18}, - {0x00, 0x40, 0x60, 0x20, 0x00, 0x00}, - {0x00, 0x18, 0x18, 0x18, 0x18, 0x00}, - {0x00, 0x00, 0x60, 0x60, 0x00, 0x00}, - {0x60, 0x30, 0x18, 0x0C, 0x06, 0x03}, - {0x3E, 0x7F, 0x63, 0x63, 0x7F, 0x3E}, - {0x64, 0x66, 0x7F, 0x7F, 0x60, 0x60}, - {0x62, 0x73, 0x7B, 0x7B, 0x6F, 0x66}, - {0x63, 0x63, 0x6B, 0x6B, 0x7F, 0x36}, - {0x38, 0x3C, 0x36, 0x7F, 0x7F, 0x30}, - {0x6F, 0x6F, 0x6B, 0x6B, 0x7B, 0x33}, - {0x3E, 0x7F, 0x6B, 0x6B, 0x7B, 0x32}, - {0x03, 0x03, 0x73, 0x7B, 0x0F, 0x07}, - {0x36, 0x7F, 0x6B, 0x6B, 0x7F, 0x36}, - {0x06, 0x6F, 0x6B, 0x6B, 0x7F, 0x3E}, - {0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00}, - {0x00, 0x40, 0x6C, 0x2C, 0x00, 0x00}, - {0x08, 0x14, 0x22, 0x41, 0x00, 0x00}, - {0x36, 0x36, 0x36, 0x36, 0x36, 0x00}, - {0x00, 0x41, 0x22, 0x14, 0x08, 0x00}, - {0x06, 0x07, 0x53, 0x5B, 0x1F, 0x0E}, - {0x30, 0x7B, 0x6B, 0x7B, 0x7F, 0x3E}, - {0x7E, 0x7F, 0x1B, 0x1B, 0x7F, 0x7E}, - {0x7F, 0x7F, 0x6B, 0x6B, 0x7F, 0x36}, - {0x3E, 0x7F, 0x63, 0x63, 0x63, 0x36}, - {0x7F, 0x7F, 0x63, 0x63, 0x7F, 0x3E}, - {0x7F, 0x7F, 0x6B, 0x6B, 0x6B, 0x63}, - {0x7F, 0x7F, 0x1B, 0x1B, 0x1B, 0x03}, - {0x3E, 0x7F, 0x63, 0x6B, 0x7B, 0x3A}, - {0x7F, 0x7F, 0x0C, 0x0C, 0x7F, 0x7F}, - {0x63, 0x63, 0x7F, 0x7F, 0x63, 0x63}, - {0x30, 0x73, 0x63, 0x7F, 0x3F, 0x03}, - {0x7F, 0x7F, 0x1C, 0x36, 0x63, 0x41}, - {0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60}, - {0x7F, 0x7F, 0x06, 0x06, 0x7F, 0x7F}, - {0x7F, 0x7F, 0x0C, 0x18, 0x7F, 0x7F}, - {0x3E, 0x7F, 0x63, 0x63, 0x7F, 0x3E}, - {0x7F, 0x7F, 0x1B, 0x1B, 0x1F, 0x0E}, - {0x3E, 0x7F, 0x63, 0x73, 0x7F, 0x7E}, - {0x7F, 0x7F, 0x1B, 0x3B, 0x7F, 0x66}, - {0x66, 0x6F, 0x6B, 0x6B, 0x7B, 0x33}, - {0x03, 0x03, 0x7F, 0x7F, 0x03, 0x03}, - {0x3F, 0x7F, 0x60, 0x60, 0x7F, 0x3F}, - {0x1F, 0x3F, 0x60, 0x60, 0x3F, 0x1F}, - {0x3F, 0x7F, 0x30, 0x30, 0x7F, 0x3F}, - {0x63, 0x77, 0x1C, 0x1C, 0x77, 0x63}, - {0x07, 0x0F, 0x78, 0x78, 0x0F, 0x07}, - {0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63}, - {0x00, 0x7F, 0x7F, 0x63, 0x63, 0x00}, - {0x01, 0x02, 0x04, 0x08, 0x10, 0x60}, - {0x00, 0x63, 0x63, 0x7F, 0x7F, 0x00}, - {0x0C, 0x0E, 0x03, 0x03, 0x0E, 0x0C}, - {0x60, 0x60, 0x60, 0x60, 0x60, 0x60}, - {0x00, 0x03, 0x07, 0x06, 0x00, 0x00}, - {0x20, 0x76, 0x56, 0x56, 0x7E, 0x3C}, - {0x7F, 0x7F, 0x6C, 0x6C, 0x7C, 0x38}, - {0x38, 0x7C, 0x6C, 0x6C, 0x6C, 0x00}, - {0x38, 0x7C, 0x6C, 0x6C, 0x7F, 0x7F}, - {0x3C, 0x7E, 0x56, 0x56, 0x5E, 0x0C}, - {0x7E, 0x7F, 0x1B, 0x1B, 0x02, 0x00}, - {0x0C, 0x5E, 0x56, 0x56, 0x7E, 0x3C}, - {0x7F, 0x7F, 0x0C, 0x0C, 0x7C, 0x78}, - {0x00, 0x00, 0x7A, 0x7A, 0x00, 0x00}, - {0x30, 0x60, 0x60, 0x7D, 0x3D, 0x00}, - {0x7F, 0x7F, 0x18, 0x3C, 0x7E, 0x66}, - {0x00, 0x3F, 0x7F, 0x40, 0x00, 0x00}, - {0x7C, 0x7C, 0x18, 0x18, 0x7C, 0x7C}, - {0x7C, 0x7C, 0x0C, 0x0C, 0x7C, 0x78}, - {0x3C, 0x7E, 0x66, 0x66, 0x7E, 0x3C}, - {0x7E, 0x7E, 0x36, 0x36, 0x3E, 0x1C}, - {0x1C, 0x3E, 0x36, 0x7E, 0x7E, 0x60}, - {0x7C, 0x7C, 0x0C, 0x0C, 0x18, 0x00}, - {0x4C, 0x5E, 0x56, 0x56, 0x76, 0x20}, - {0x3F, 0x7F, 0x6C, 0x6C, 0x60, 0x00}, - {0x3C, 0x7C, 0x60, 0x60, 0x7C, 0x3C}, - {0x0C, 0x3C, 0x70, 0x70, 0x3C, 0x0C}, - {0x3C, 0x7C, 0x30, 0x30, 0x7C, 0x3C}, - {0x44, 0x6C, 0x38, 0x38, 0x6C, 0x44}, - {0x06, 0x6E, 0x68, 0x68, 0x7E, 0x3E}, - {0x66, 0x76, 0x7E, 0x6E, 0x66, 0x00}, - {0x08, 0x3E, 0x77, 0x41, 0x00, 0x00}, - {0x00, 0x00, 0x7F, 0x00, 0x00, 0x00}, - {0x00, 0x41, 0x77, 0x3E, 0x08, 0x00}, - {0x0C, 0x06, 0x0C, 0x18, 0x0C, 0x00} + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' ' + {0x00, 0x00, 0x5E, 0x5E, 0x00, 0x00}, // '!' + {0x06, 0x06, 0x00, 0x06, 0x06, 0x00}, // '"' + {0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00}, // '#' + {0x2E, 0x6B, 0x7F, 0x6B, 0x3A, 0x00}, // '$' + {0x63, 0x33, 0x18, 0x0C, 0x66, 0x63}, // '%' + {0x30, 0x4B, 0x4D, 0x55, 0x22, 0x50}, // '&' + {0x00, 0x00, 0x07, 0x07, 0x00, 0x00}, // ''' + {0x00, 0x1C, 0x3E, 0x63, 0x41, 0x00}, // '(' + {0x00, 0x41, 0x63, 0x3E, 0x1C, 0x00}, // ')' + {0x00, 0x2A, 0x1C, 0x1C, 0x2A, 0x00}, // '*' + {0x18, 0x18, 0x7E, 0x7E, 0x18, 0x18}, // '+' + {0x00, 0x40, 0x60, 0x20, 0x00, 0x00}, // ',' + {0x00, 0x18, 0x18, 0x18, 0x18, 0x00}, // '-' + {0x00, 0x00, 0x60, 0x60, 0x00, 0x00}, // '.' + {0x60, 0x30, 0x18, 0x0C, 0x06, 0x03}, // '/' + {0x3E, 0x7F, 0x63, 0x63, 0x7F, 0x3E}, // '0' + {0x64, 0x66, 0x7F, 0x7F, 0x60, 0x60}, // '1' + {0x62, 0x73, 0x7B, 0x7B, 0x6F, 0x66}, // '2' + {0x63, 0x63, 0x6B, 0x6B, 0x7F, 0x36}, // '3' + {0x38, 0x3C, 0x36, 0x7F, 0x7F, 0x30}, // '4' + {0x6F, 0x6F, 0x6B, 0x6B, 0x7B, 0x33}, // '5' + {0x3E, 0x7F, 0x6B, 0x6B, 0x7B, 0x32}, // '6' + {0x03, 0x03, 0x73, 0x7B, 0x0F, 0x07}, // '7' + {0x36, 0x7F, 0x6B, 0x6B, 0x7F, 0x36}, // '8' + {0x06, 0x6F, 0x6B, 0x6B, 0x7F, 0x3E}, // '9' + {0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00}, // ':' + {0x00, 0x40, 0x6C, 0x2C, 0x00, 0x00}, // ';' + {0x08, 0x14, 0x22, 0x41, 0x00, 0x00}, // '<' + {0x36, 0x36, 0x36, 0x36, 0x36, 0x00}, // '=' + {0x00, 0x41, 0x22, 0x14, 0x08, 0x00}, // '>' + {0x06, 0x07, 0x53, 0x5B, 0x1F, 0x0E}, // '?' + {0x30, 0x7B, 0x6B, 0x7B, 0x7F, 0x3E}, // '@' + {0x7E, 0x7F, 0x1B, 0x1B, 0x7F, 0x7E}, // 'A' + {0x7F, 0x7F, 0x6B, 0x6B, 0x7F, 0x36}, // 'B' + {0x3E, 0x7F, 0x63, 0x63, 0x77, 0x36}, // 'C' + {0x7F, 0x7F, 0x63, 0x63, 0x7F, 0x3E}, // 'D' + {0x7F, 0x7F, 0x6B, 0x6B, 0x6B, 0x63}, // 'E' + {0x7F, 0x7F, 0x1B, 0x1B, 0x1B, 0x03}, // 'F' + {0x3E, 0x7F, 0x63, 0x6B, 0x7B, 0x3A}, // 'G' + {0x7F, 0x7F, 0x0C, 0x0C, 0x7F, 0x7F}, // 'H' + {0x63, 0x63, 0x7F, 0x7F, 0x63, 0x63}, // 'I' + {0x30, 0x73, 0x63, 0x7F, 0x3F, 0x03}, // 'J' + {0x7F, 0x7F, 0x1C, 0x36, 0x63, 0x41}, // 'K' + {0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60}, // 'L' + {0x7F, 0x7F, 0x06, 0x06, 0x7F, 0x7F}, // 'M' + {0x7F, 0x7F, 0x0C, 0x18, 0x7F, 0x7F}, // 'N' + {0x3E, 0x7F, 0x63, 0x63, 0x7F, 0x3E}, // 'O' + {0x7F, 0x7F, 0x1B, 0x1B, 0x1F, 0x0E}, // 'P' + {0x3E, 0x7F, 0x63, 0x73, 0x7F, 0x7E}, // 'Q' + {0x7F, 0x7F, 0x1B, 0x3B, 0x7F, 0x66}, // 'R' + {0x66, 0x6F, 0x6B, 0x6B, 0x7B, 0x33}, // 'S' + {0x03, 0x03, 0x7F, 0x7F, 0x03, 0x03}, // 'T' + {0x3F, 0x7F, 0x60, 0x60, 0x7F, 0x3F}, // 'U' + {0x1F, 0x3F, 0x60, 0x60, 0x3F, 0x1F}, // 'V' + {0x3F, 0x7F, 0x30, 0x30, 0x7F, 0x3F}, // 'W' + {0x63, 0x77, 0x1C, 0x1C, 0x77, 0x63}, // 'X' + {0x07, 0x0F, 0x78, 0x78, 0x0F, 0x07}, // 'Y' + {0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63}, // 'Z' + {0x00, 0x7F, 0x7F, 0x63, 0x63, 0x00}, // '[' + {0x01, 0x02, 0x04, 0x08, 0x10, 0x60}, // '\' + {0x00, 0x63, 0x63, 0x7F, 0x7F, 0x00}, // ']' + {0x0C, 0x0E, 0x03, 0x03, 0x0E, 0x0C}, // '^' + {0x60, 0x60, 0x60, 0x60, 0x60, 0x60}, // '_' + {0x00, 0x03, 0x07, 0x06, 0x00, 0x00}, // '`' + {0x38, 0x7C, 0x6C, 0x6C, 0x7C, 0x7C}, // 'a' + {0x7F, 0x7F, 0x6C, 0x6C, 0x7C, 0x38}, // 'b' + {0x38, 0x7C, 0x6C, 0x6C, 0x6C, 0x00}, // 'c' + {0x38, 0x7C, 0x6C, 0x6C, 0x7F, 0x7F}, // 'd' + {0x38, 0x7C, 0x54, 0x54, 0x5C, 0x08}, // 'e' + {0x7E, 0x7F, 0x1B, 0x1B, 0x03, 0x00}, // 'f' + {0x08, 0x5C, 0x54, 0x54, 0x7C, 0x3C}, // 'g' + {0x7F, 0x7F, 0x0C, 0x0C, 0x7C, 0x78}, // 'h' + {0x00, 0x00, 0x7A, 0x7A, 0x00, 0x00}, // 'i' + {0x30, 0x70, 0x60, 0x7D, 0x3D, 0x00}, // 'j' + {0x7F, 0x7F, 0x18, 0x3C, 0x7E, 0x66}, // 'k' + {0x00, 0x00, 0x3F, 0x7F, 0x60, 0x00}, // 'l' + {0x7C, 0x7C, 0x18, 0x18, 0x7C, 0x7C}, // 'm' + {0x7C, 0x7C, 0x0C, 0x0C, 0x7C, 0x78}, // 'n' + {0x3C, 0x7E, 0x66, 0x66, 0x7E, 0x3C}, // 'o' + {0x7C, 0x7E, 0x36, 0x36, 0x3E, 0x1C}, // 'p' + {0x1C, 0x3E, 0x36, 0x7E, 0x7E, 0x60}, // 'q' + {0x7C, 0x7C, 0x0C, 0x1C, 0x18, 0x00}, // 'r' + {0x4C, 0x5E, 0x56, 0x56, 0x76, 0x20}, // 's' + {0x3F, 0x7F, 0x6C, 0x6C, 0x60, 0x00}, // 't' + {0x3C, 0x7C, 0x60, 0x60, 0x7C, 0x3C}, // 'u' + {0x1C, 0x3C, 0x70, 0x70, 0x3C, 0x1C}, // 'v' + {0x3C, 0x7C, 0x30, 0x30, 0x7C, 0x3C}, // 'w' + {0x44, 0x6C, 0x38, 0x38, 0x6C, 0x44}, // 'x' + {0x06, 0x6E, 0x6C, 0x6C, 0x7E, 0x3E}, // 'y' + {0x66, 0x76, 0x7E, 0x6E, 0x66, 0x00}, // 'z' + {0x08, 0x3E, 0x77, 0x41, 0x00, 0x00}, // '{' + {0x00, 0x00, 0x7F, 0x00, 0x00, 0x00}, // '|' + {0x00, 0x41, 0x77, 0x3E, 0x08, 0x00}, // '}' + {0x18, 0x0C, 0x18, 0x30, 0x18, 0x00}, // '~' }; #endif diff --git a/frequencies.c b/frequencies.c index 4308856..0c31e61 100644 --- a/frequencies.c +++ b/frequencies.c @@ -158,41 +158,27 @@ uint32_t FREQUENCY_floor_to_step(uint32_t freq, const uint32_t step_size, const { uint32_t delta; + if (upper > lower && upper != 0xffffffff) + if (freq > (upper - 1)) + freq = upper - 1; + if (freq <= lower) return lower; - if (freq > (upper - 1)) - freq = upper - 1; - delta = freq - lower; - if (delta < step_size) - return lower; - - if (step_size == 833) - { - uint32_t base = (delta / 2500) * 2500; // 25kHz step - const uint32_t index = ((delta - base) % 2500) / step_size; - if (index >= 2) + if (step_size == 833) // 8.33 ~ 25/3 + { // long winded because 8.33 is not exactly 25/3 + uint32_t base = (delta / 2500) * 2500; + uint32_t index = ((delta - base) % 2500) / step_size; + if (index == 2) base++; freq = lower + base + (step_size * index); } else + { freq = lower + ((delta / step_size) * step_size); - - return freq; -} - -uint32_t FREQUENCY_wrap_to_step_band(uint32_t freq, const uint32_t step_size, const unsigned int band) -{ - const uint32_t upper = FREQ_BAND_TABLE[band].upper; - const uint32_t lower = FREQ_BAND_TABLE[band].lower; - - if (freq < lower) - return FREQUENCY_floor_to_step(upper, step_size, lower, upper); - - if (freq >= upper) - freq = lower; + } return freq; } diff --git a/frequencies.h b/frequencies.h index 7e0e566..0e0ea29 100644 --- a/frequencies.h +++ b/frequencies.h @@ -63,7 +63,7 @@ enum step_setting_e { STEP_12_5kHz, STEP_25_0kHz, STEP_8_33kHz, - + STEP_10Hz, STEP_50Hz, STEP_100Hz, @@ -97,7 +97,6 @@ frequency_band_t FREQUENCY_GetBand(uint32_t Frequency); uint8_t FREQUENCY_CalculateOutputPower(uint8_t TxpLow, uint8_t TxpMid, uint8_t TxpHigh, int32_t LowerLimit, int32_t Middle, int32_t UpperLimit, int32_t Frequency); uint32_t FREQUENCY_floor_to_step(uint32_t freq, const uint32_t step_size, const uint32_t lower, const uint32_t upper); -uint32_t FREQUENCY_wrap_to_step_band(uint32_t freq, const uint32_t step_size, const unsigned int band); int FREQUENCY_tx_freq_check(const uint32_t Frequency); int FREQUENCY_rx_freq_check(const uint32_t Frequency); diff --git a/utils/uv-k5_small_bold.bin b/utils/uv-k5_small_bold.bin index f7417ff..3064af7 100644 Binary files a/utils/uv-k5_small_bold.bin and b/utils/uv-k5_small_bold.bin differ diff --git a/utils/uv-k5_small_bold.fon b/utils/uv-k5_small_bold.fon index e489372..a1f8eab 100644 Binary files a/utils/uv-k5_small_bold.fon and b/utils/uv-k5_small_bold.fon differ