From 13874964797ee6a4ddace356f3090206e8c39a94 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Thu, 25 Feb 2021 11:41:33 +0100 Subject: [PATCH] Small bugs and space saving Waterfall colors Attennuation averaging Removed ham bands --- main.c | 15 +++++-- nanovna.h | 7 +-- plot.c | 6 ++- sa_cmd.c | 128 +++++++++++++++++++++++++++++------------------------- sa_core.c | 30 ++++++++----- ui_sa.c | 2 +- 6 files changed, 107 insertions(+), 81 deletions(-) diff --git a/main.c b/main.c index aff2ec2..24d7585 100644 --- a/main.c +++ b/main.c @@ -2423,6 +2423,7 @@ static const VNAShellCommand commands[] = #ifdef ENABLE_THREADS_COMMAND {"threads" , cmd_threads , 0}, #endif +#ifdef __SINGLE_LETTER__ { "y", cmd_y, CMD_WAIT_MUTEX }, { "i", cmd_i, CMD_WAIT_MUTEX }, { "v", cmd_v, CMD_WAIT_MUTEX }, @@ -2437,9 +2438,10 @@ static const VNAShellCommand commands[] = { "o", cmd_o, CMD_WAIT_MUTEX }, { "d", cmd_d, CMD_WAIT_MUTEX }, { "f", cmd_f, CMD_WAIT_MUTEX }, +#endif #ifdef TINYSA4 { "g", cmd_g, CMD_WAIT_MUTEX }, - #endif +#endif #ifdef __ADF4351__ { "x", cmd_x, 0 }, #endif @@ -2452,7 +2454,11 @@ VNA_SHELL_FUNCTION(cmd_help) (void)argv; const VNAShellCommand *scp = commands; shell_printf("Commands:"); - while (scp->sc_name != NULL && scp->sc_function != cmd_y) { + while (scp->sc_name != NULL +#ifdef __SINGLE_LETTER__ + && scp->sc_function != cmd_y +#endif + ) { shell_printf(" %s", scp->sc_name); scp++; } @@ -3018,7 +3024,10 @@ void hard_fault_handler_c(uint32_t *sp) #endif shell_printf("===================================\r\n"); #else - (void)sp; + ili9341_set_background(LCD_BG_COLOR); + ili9341_set_foreground(LCD_FG_COLOR); + ili9341_drawstring("FATAL ERROR", OFFSETX, 120); + (void)sp; #endif while (true) { } diff --git a/nanovna.h b/nanovna.h index fbdb3b0..834955c 100644 --- a/nanovna.h +++ b/nanovna.h @@ -46,11 +46,12 @@ #define __SELFTEST__ #define __CALIBRATE__ #define __FAST_SWEEP__ // Pre-fill SI4432 RSSI buffer to get fastest sweep in zero span mode -#define __HAM_BAND__ +//#define __HAM_BAND__ //#define __ULTRA__ // Add harmonics mode on low input. #define __SPUR__ // Does spur reduction by shifting IF //#define __USE_SERIAL_CONSOLE__ // Enable serial I/O connection (need enable HAL_USE_SERIAL as TRUE in halconf.h) - +#define __SINGLE_LETTER__ +#define __NICE_BIG_FONT__ #define __QUASI_PEAK__ #ifdef TINYSA3 @@ -411,7 +412,7 @@ extern const uint8_t numfont16x22[]; #define bFONT_GET_DATA(ch) ( &x7x11b_bits[(ch-bFONT_START_CHAR)*bFONT_GET_HEIGHT]) #define bFONT_GET_WIDTH(ch) (8-(x7x11b_bits[(ch-bFONT_START_CHAR)*bFONT_GET_HEIGHT]&7)) -#if 1 // Set to 0 to save 3kByte and loose nice font +#ifdef __NICE_BIG_FONT__ #define wFONT_START_CHAR 0x17 #define wFONT_MAX_WIDTH 12 #define wFONT_GET_HEIGHT 14 diff --git a/plot.c b/plot.c index cac69d7..8b83805 100644 --- a/plot.c +++ b/plot.c @@ -39,7 +39,9 @@ static void cell_blit_bitmap(int x, int y, uint16_t w, uint16_t h, const uint8_t static void draw_battery_status(void); static void update_waterfall(void); void cell_draw_test_info(int x0, int y0); - +#ifndef wFONT_GET_DATA +static void cell_drawstring_size(char *str, int x, int y, int size); +#endif static int16_t grid_offset; static int16_t grid_width; static freq_t grid_span; @@ -2447,7 +2449,7 @@ static void update_waterfall(void){ gamma_correct(b); color = RGB565(r, g, b); #else - uint16_t y = CELL_Y(index[i])* (graph_bottom == BIG_WATERFALL ? 2 : 1); // should be always in range 0 - graph_bottom *2 depends on height of scroll + uint16_t y = SMALL_WATERFALL - CELL_Y(index[i])* (graph_bottom == BIG_WATERFALL ? 2 : 1); // should be always in range 0 - graph_bottom *2 depends on height of scroll // Calculate gradient palette for range 0 .. 192 // idx r g b // 0 - 127 0 0 diff --git a/sa_cmd.c b/sa_cmd.c index da40634..f2dc797 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -18,7 +18,6 @@ #pragma GCC optimize ("Os") -static int VFO = 0; static int points = 101; // For 's' and 'm' commands VNA_SHELL_FUNCTION(cmd_mode) @@ -324,64 +323,6 @@ usage: } -VNA_SHELL_FUNCTION(cmd_v) -{ - if (argc != 1) { - shell_printf("%d\r\n", VFO); - return; - } - VFO = my_atoi(argv[0]) > 0 ? 1 : 0; - shell_printf("VFO %d\r\n", VFO); -} - -VNA_SHELL_FUNCTION(cmd_y) -{ - int rvalue; - if (argc != 1 && argc != 2) { - shell_printf("usage: y {addr(0-95)} [value(0-0xFF)]\r\n"); - return; - } - rvalue = my_atoui(argv[0]); -#ifdef __SI4432__ - int lvalue = 0; - SI4432_Sel = VFO; - if (argc == 2){ - lvalue = my_atoui(argv[1]); - SI4432_Write_Byte(rvalue, lvalue); - } else { - lvalue = SI4432_Read_Byte(rvalue); - shell_printf("%x\r\n", lvalue); - } -#endif -} -#if 0 // not used -VNA_SHELL_FUNCTION(cmd_z) -{ - static const char cmd_z_list[] = "t|r|i"; - if (argc != 1) { - shell_printf("usage: z %s\r\n", cmd_z_list); - return; - } - if (argc == 1) { -#ifdef __SI4432__ - SI4432_Sel = VFO; - int type = get_str_index(argv[0], cmd_z_list); - switch(type) { - case 0: - SI4432_Transmit(3); - break; - case 1: - SI4432_Receive(); - break; - case 2: - SI4432_Reset(); - break; - } -#endif - } -} -#endif - VNA_SHELL_FUNCTION(cmd_selftest) { if (argc < 1 || argc > 2) { @@ -396,6 +337,10 @@ VNA_SHELL_FUNCTION(cmd_selftest) sweep_mode = SWEEP_SELFTEST; } +#ifdef __SINGLE_LETTER__ + +static int VFO = 0; + #ifdef __ADF4351__ uint32_t xtoi(char *t) @@ -441,7 +386,6 @@ VNA_SHELL_FUNCTION(cmd_x) } #endif - VNA_SHELL_FUNCTION(cmd_i) { int rvalue; @@ -550,6 +494,68 @@ VNA_SHELL_FUNCTION(cmd_s) points = my_atoi(argv[0]); } + +VNA_SHELL_FUNCTION(cmd_v) +{ + if (argc != 1) { + shell_printf("%d\r\n", VFO); + return; + } + VFO = my_atoi(argv[0]) > 0 ? 1 : 0; + shell_printf("VFO %d\r\n", VFO); +} + +VNA_SHELL_FUNCTION(cmd_y) +{ + int rvalue; + if (argc != 1 && argc != 2) { + shell_printf("usage: y {addr(0-95)} [value(0-0xFF)]\r\n"); + return; + } + rvalue = my_atoui(argv[0]); +#ifdef __SI4432__ + int lvalue = 0; + SI4432_Sel = VFO; + if (argc == 2){ + lvalue = my_atoui(argv[1]); + SI4432_Write_Byte(rvalue, lvalue); + } else { + lvalue = SI4432_Read_Byte(rvalue); + shell_printf("%x\r\n", lvalue); + } +#endif +} +#if 0 // not used +VNA_SHELL_FUNCTION(cmd_z) +{ + static const char cmd_z_list[] = "t|r|i"; + if (argc != 1) { + shell_printf("usage: z %s\r\n", cmd_z_list); + return; + } + if (argc == 1) { +#ifdef __SI4432__ + SI4432_Sel = VFO; + int type = get_str_index(argv[0], cmd_z_list); + switch(type) { + case 0: + SI4432_Transmit(3); + break; + case 1: + SI4432_Receive(); + break; + case 2: + SI4432_Reset(); + break; + } +#endif + } +} +#endif + + +#endif + void sweep_remote(void) { uint32_t i; @@ -576,6 +582,7 @@ void sweep_remote(void) sweep_mode = 0; } +#ifdef __SINGLE_LETTER__ VNA_SHELL_FUNCTION(cmd_m) { (void)argc; @@ -627,6 +634,7 @@ VNA_SHELL_FUNCTION(cmd_f) setting.test_argument = my_atoi(argv[0]);; sweep_mode = SWEEP_SELFTEST; } +#endif VNA_SHELL_FUNCTION(cmd_correction) { diff --git a/sa_core.c b/sa_core.c index 0971286..229c4a3 100644 --- a/sa_core.c +++ b/sa_core.c @@ -3084,12 +3084,14 @@ int validate_flatness(int i) { const float atten_step[7] = { 0.0, 0.5, 1.0, 2.0, 4.0, 8.0, 16.0 }; int validate_atten(int i) { + int status = TS_PASS; float reference_peak_level = 0.0; test_fail_cause[i] = "Attenuator "; // for (int j= 0; j < 64; j++ ) { for (int j= 0; j < 7; j++ ) { -// set_attenuation(((float)j)/2.0); - set_attenuation(atten_step[j]); +// float a = ((float)j)/2.0; + float a = atten_step[j]; + set_attenuation(a); float summed_peak_level = 0; #define ATTEN_TEST_SWEEPS 5 for (int k=0; k= ATTEN_TEST_CRITERIA) - return(TS_FAIL); + if (SDU1.config->usbp->state == USB_ACTIVE) shell_printf("Attenuation %.2fdB, measured level %.2fdBm, delta %.2fdB\n\r",a, summed_peak_level, summed_peak_level - reference_peak_level); +#define ATTEN_TEST_CRITERIA 1 + if (summed_peak_level - reference_peak_level <= -ATTEN_TEST_CRITERIA || summed_peak_level - reference_peak_level >= ATTEN_TEST_CRITERIA) { + status = TS_FAIL; + // draw_all(true); + } + } } - test_fail_cause[i] = ""; - return(TS_PASS); + if (status == TS_PASS) + test_fail_cause[i] = ""; + return(status); } int validate_display(int tc) diff --git a/ui_sa.c b/ui_sa.c index 007cb78..6e90237 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -1782,7 +1782,7 @@ static const menuitem_t menu_settings[] = { { MT_ADV_CALLBACK | MT_LOW, 0,"LO OUTPUT", menu_lo_output_acb}, { MT_KEYPAD, KM_ACTUALPOWER, "ACTUAL\nPOWER", NULL}, - { MT_KEYPAD | MT_LOW, KM_IF, "IF FREQ", "Set to zero for auto IF"}, + { MT_KEYPAD | MT_LOW, KM_IF, "IF FREQ", "0=auto IF"}, { MT_SUBMENU,0, "SCAN SPEED", menu_scanning_speed}, { MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"}, { MT_SUBMENU | MT_LOW,0, "MIXER\nDRIVE", menu_lo_drive},