From 00a1715d073b3273d9dced138e9ac87596875b1b Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Tue, 9 Mar 2021 14:09:14 +0100 Subject: [PATCH] More comment --- main.c | 6 +++++- nanovna.h | 25 ++++++++++++------------- sa_cmd.c | 3 ++- sa_core.c | 27 +++++++++++++++------------ si4432.c | 27 ++++++++++++++++----------- si4468.c | 4 ++-- ui_sa.c | 14 ++++++++++---- 7 files changed, 62 insertions(+), 44 deletions(-) diff --git a/main.c b/main.c index 47e1d3b..89a479f 100644 --- a/main.c +++ b/main.c @@ -154,11 +154,13 @@ static THD_FUNCTION(Thread1, arg) } else if (sweep_mode & SWEEP_REMOTE) { sweep_remote(); #endif +#ifdef __CALIBRATE__ } else if (sweep_mode & SWEEP_CALIBRATE) { // call from lowest level to save stack space calibrate(); sweep_mode = SWEEP_ENABLE; - } else { +#endif + } else { // if (setting.mode != -1) __WFI(); } @@ -2438,7 +2440,9 @@ static const VNAShellCommand commands[] = { "modulation", cmd_modulation, 0 }, { "rbw", cmd_rbw, 0 }, { "mode", cmd_mode, CMD_WAIT_MUTEX }, +#ifdef __SPUR__ { "spur", cmd_spur, 0 }, +#endif #ifdef TINYSA4 { "lna", cmd_lna, 0 }, { "ultra", cmd_ultra, 0 }, diff --git a/nanovna.h b/nanovna.h index 02903e0..3ccd97d 100644 --- a/nanovna.h +++ b/nanovna.h @@ -53,22 +53,21 @@ #endif #define __PE4302__ //#define __SIMULATION__ -//#define __PIPELINE__ -#define __SCROLL__ +#define __SCROLL__ // Add waterfall option #define __ICONS__ #define __MEASURE__ -#define __LINEARITY__ // Not available -#define __SELFTEST__ -#define __CALIBRATE__ -#define __FAST_SWEEP__ // Pre-fill SI4432 RSSI buffer to get fastest sweep in zero span mode +#define __LINEARITY__ // Not available +#define __SELFTEST__ // Add selftest option (not fully disable it) +#define __CALIBRATE__ // Add calibration menu and functions +#define __FAST_SWEEP__ // Pre-fill SI4432 RSSI buffer to get fastest sweep in zero span mode // #define __AUDIO__ //#define __HAM_BAND__ -#define __SPUR__ // Does spur reduction by shifting IF +#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__ -#define __REMOTE_DESKTOP__ +#define __SINGLE_LETTER__ // Add fast console commands +#define __NICE_BIG_FONT__ // Add not scaled big font for menus +#define __QUASI_PEAK__ // Add quasi peak average option +#define __REMOTE_DESKTOP__ // Add remote desktop option #ifdef TINYSA4 #define __HARMONIC__ #endif @@ -273,7 +272,7 @@ extern float *drive_dBm; extern const int8_t drive_dBm []; #endif extern uint8_t signal_is_AM; -extern const int reffer_freq[]; +extern const uint32_t reffer_freq[]; extern freq_t minFreq; extern freq_t maxFreq; int level_is_calibrated(void); @@ -633,7 +632,7 @@ extern config_t config; //#define settingLevelOffset config.level_offset float get_level_offset(void); -extern int in_selftest; +extern uint8_t in_selftest; extern int display_test(void); // diff --git a/sa_cmd.c b/sa_cmd.c index a1a1bdb..547113e 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -90,7 +90,7 @@ int generic_option_cmd( const char *cmd, const char *cmd_list, int argc, char *a return m; } - +#ifdef __SPUR__ VNA_SHELL_FUNCTION(cmd_spur) { // static const char cmd[] = "off|on"; @@ -109,6 +109,7 @@ VNA_SHELL_FUNCTION(cmd_spur) redraw_request |= REDRAW_CAL_STATUS | REDRAW_AREA; } } +#endif #ifdef TINYSA4 VNA_SHELL_FUNCTION(cmd_lna) diff --git a/sa_core.c b/sa_core.c index e8e723d..9ae1e12 100644 --- a/sa_core.c +++ b/sa_core.c @@ -116,9 +116,9 @@ float level_range; //int setting.refer = -1; // Off by default -const int reffer_freq[] = {30000000, 15000000, 10000000, 4000000, 3000000, 2000000, 1000000}; +const uint32_t reffer_freq[] = {30000000, 15000000, 10000000, 4000000, 3000000, 2000000, 1000000}; -int in_selftest = false; +uint8_t in_selftest = false; void update_min_max_freq(void) { @@ -1042,7 +1042,7 @@ void set_AGC_LNA(void) { uint8_t v = 0; if (!S_STATE(setting.agc)) v |= 0x80 + 0x20; // Inverse!!!! - if (S_STATE(setting.lna)) + if (!S_STATE(setting.lna)) v |= 0x08; // Inverse!!!! SI446x_set_AGC_LNA(v); SI4432_old_v[0] = v; @@ -1286,7 +1286,7 @@ static const struct { { 300, 400, 120, 100}, { 100, 400, 120, 100}, { 30, 900, 300, 100}, - { 10, 3000, 600, 100}, + { 10, 4000, 600, 100}, { 0, 9000, 3000, 100} }; #endif @@ -1305,6 +1305,7 @@ static void calculate_step_delay(void) // Search index in table depend from RBW uint16_t i=0; + for (i=0;i= step_delay_table[i].rbw_x10) break; @@ -1915,13 +1916,13 @@ void interpolate_maximum(int m) markers[m].frequency = frequencies[idx]; if (idx > 0 && idx < sweep_points-1) { + const int32_t delta_Hz = (int64_t)frequencies[idx + 0] - frequencies[idx + 1]; const float y1 = actual_t[idx - 1]; const float y2 = actual_t[idx + 0]; const float y3 = actual_t[idx + 1]; - const float d = 0.5f * (y1 - y3) / ((y1 - (2 * y2) + y3) + 1e-12f); + const float d = abs(delta_Hz) * 0.5f * (y1 - y3) / ((y1 - (2 * y2) + y3) + 1e-12f); //const float bin = (float)idx + d; - const int32_t delta_Hz = abs((int64_t)frequencies[idx + 0] - frequencies[idx + 1]); - markers[m].frequency += (int32_t)(delta_Hz * d); + markers[m].frequency += d; } } @@ -2516,8 +2517,10 @@ modulation_again: goto skip_LO_setting; // No more LO changes required, save some time and jump over the code freq_t local_IF; +#ifdef __SPUR__ spur_second_pass = false; again: // Spur reduction jumps to here for second measurement +#endif local_IF=0; // to get rid of warning #ifdef TINYSA4 @@ -3189,10 +3192,10 @@ sweep_again: // stay in sweep loop when output mo // START_PROFILE - if (i == 0) { // Prepare peak finding + if (i == 0 || frequencies[i] < actual_rbw_x10 * 200) { // Prepare peak finding cur_max = 0; // Always at least one maximum temppeakIndex = 0; - temppeakLevel = actual_t[i]; + temppeakLevel = actual_t[0]; max_index[0] = 0; downslope = true; } @@ -3342,7 +3345,7 @@ sweep_again: // stay in sweep loop when output mo #endif // -------------------------- auto attenuate ---------------------------------- #ifdef TINYSA4 -#define AUTO_TARGET_LEVEL -30 +#define AUTO_TARGET_LEVEL -35 #else #define AUTO_TARGET_LEVEL -25 #endif @@ -4598,9 +4601,9 @@ void reset_calibration(void) #define CALIBRATE_RBWS 1 const int power_rbw [5] = { 100, 300, 30, 10, 3 }; +#ifdef __CALIBRATE__ void calibrate(void) { -#ifdef __CALIBRATE__ int local_test_status; int old_sweep_points = setting._sweep_points; in_selftest = true; @@ -4681,8 +4684,8 @@ quit: sweep_mode = SWEEP_ENABLE; set_refer_output(-1); reset_settings(M_LOW); -#endif } +#endif #pragma GCC pop_options diff --git a/si4432.c b/si4432.c index fe817b6..34c9122 100644 --- a/si4432.c +++ b/si4432.c @@ -104,7 +104,7 @@ static uint8_t shiftIn(void) }while(--i); #else SPI2_CLK_HIGH; - value|=SPI2_portSDO; + value =SPI2_portSDO; SPI2_CLK_LOW; value<<=1; SPI2_CLK_HIGH; @@ -186,43 +186,46 @@ uint16_t SI4432_Sel = GPIO_RX_SEL; // currently selected SI4432 #define SELECT_DELAY 10 void SI4432_shiftOutDword(uint32_t buf, uint16_t size) { - palClearPad(GPIOC, SI_nSEL[SI4432_Sel]); + uint16_t port = SI_nSEL[SI4432_Sel]; + palClearPad(GPIOC, port); do{ shiftOut(buf); buf>>=8; }while(--size); - palSetPad(GPIOC, SI_nSEL[SI4432_Sel]); + palSetPad(GPIOC, port); } #ifndef SI4432_Write_Byte void SI4432_Write_Byte(uint8_t ADR, uint8_t DATA ) { + uint16_t port = SI_nSEL[SI4432_Sel]; // if (SI4432_guard) // while(1) ; // SI4432_guard = 1; // SPI2_CLK_LOW; - palClearPad(GPIOC, SI_nSEL[SI4432_Sel]); + palClearPad(GPIOC, port); // chThdSleepMicroseconds(SELECT_DELAY); ADR |= 0x80 ; // RW = 1 shiftOut( ADR ); shiftOut( DATA ); - palSetPad(GPIOC, SI_nSEL[SI4432_Sel]); + palSetPad(GPIOC, port); // SI4432_guard = 0; } void SI4432_Write_2_Byte(uint8_t ADR, uint8_t DATA1, uint8_t DATA2) { + uint16_t port = SI_nSEL[SI4432_Sel]; // if (SI4432_guard) // while(1) ; // SI4432_guard = 1; // SPI2_CLK_LOW; - palClearPad(GPIOC, SI_nSEL[SI4432_Sel]); + palClearPad(GPIOC, port); // chThdSleepMicroseconds(SELECT_DELAY); ADR |= 0x80 ; // RW = 1 shiftOut( ADR ); shiftOut( DATA1 ); shiftOut( DATA2 ); - palSetPad(GPIOC, SI_nSEL[SI4432_Sel]); + palSetPad(GPIOC, port); // SI4432_guard = 0; } #endif @@ -230,18 +233,19 @@ void SI4432_Write_2_Byte(uint8_t ADR, uint8_t DATA1, uint8_t DATA2) #ifndef SI4432_Write_3_Byte void SI4432_Write_3_Byte(uint8_t ADR, uint8_t DATA1, uint8_t DATA2, uint8_t DATA3) { + uint16_t port = SI_nSEL[SI4432_Sel]; // if (SI4432_guard) // while(1) ; // SI4432_guard = 1; // SPI2_CLK_LOW; - palClearPad(GPIOC, SI_nSEL[SI4432_Sel]); + palClearPad(GPIOC, port); // chThdSleepMicroseconds(SELECT_DELAY); ADR |= 0x80 ; // RW = 1 shiftOut( ADR ); shiftOut( DATA1 ); shiftOut( DATA2 ); shiftOut( DATA3 ); - palSetPad(GPIOC, SI_nSEL[SI4432_Sel]); + palSetPad(GPIOC, port); // SI4432_guard = 0; } #endif @@ -249,14 +253,15 @@ void SI4432_Write_3_Byte(uint8_t ADR, uint8_t DATA1, uint8_t DATA2, uint8_t DATA uint8_t SI4432_Read_Byte(uint8_t ADR) { uint8_t DATA ; + uint16_t port = SI_nSEL[SI4432_Sel]; // if (SI4432_guard) // while(1) ; // SI4432_guard = 1; // SPI2_CLK_LOW; - palClearPad(GPIOC, SI_nSEL[SI4432_Sel]); + palClearPad(GPIOC, port); shiftOut(ADR); DATA = shiftIn(); - palSetPad(GPIOC, SI_nSEL[SI4432_Sel]); + palSetPad(GPIOC, port); // SI4432_guard = 0; return DATA ; } diff --git a/si4468.c b/si4468.c index 34f3c2a..58aed4c 100644 --- a/si4468.c +++ b/si4468.c @@ -203,8 +203,8 @@ static void shiftOutBuf(uint8_t *buf, uint16_t size) { } #endif -int SI4432_step_delay = 1500; -int SI4432_offset_delay = 1500; +uint32_t SI4432_step_delay = 1500; +uint32_t SI4432_offset_delay = 1500; #define MINIMUM_WAIT_FOR_RSSI 280 #ifdef __SI4432__ diff --git a/ui_sa.c b/ui_sa.c index 9a03899..7a06b1a 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -613,6 +613,7 @@ UI_FUNCTION_CALLBACK(menu_autosettings_cb) // draw_cal_status(); } +#ifdef __CALIBRATE__ static UI_FUNCTION_CALLBACK(menu_calibrate_cb) { (void)data; @@ -626,6 +627,7 @@ static UI_FUNCTION_CALLBACK(menu_calibrate_cb) break; } } +#endif static UI_FUNCTION_ADV_CALLBACK(menu_scanning_speed_acb) { @@ -1937,14 +1939,16 @@ static const menuitem_t menu_measure[] = { { MT_NONE, 0, NULL, NULL } // sentinel }; +#ifdef __CALIBRATE__ static const menuitem_t menu_calibrate[] = { - { MT_FORM | MT_TITLE, 0, "Connect HIGH and LOW", NULL}, - { MT_FORM | MT_CALLBACK, 0, "CALIBRATE", menu_calibrate_cb}, - { MT_FORM | MT_CALLBACK, 0, "RESET CALBRATION", menu_calibrate_cb}, - { MT_FORM | MT_CANCEL, 0, S_LARROW" BACK", NULL }, + { MT_FORM | MT_TITLE, 0, "Connect HIGH and LOW", NULL}, + { MT_FORM | MT_CALLBACK, 0, "CALIBRATE", menu_calibrate_cb}, + { MT_FORM | MT_CALLBACK, 0, "RESET CALBRATION", menu_calibrate_cb}, + { MT_FORM | MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel }; +#endif #ifdef __USE_SERIAL_CONSOLE__ //19200, 38400, 57600, 74800, 115200, 230400, 460800, 921600, 1843200, 3686400 @@ -1992,7 +1996,9 @@ const menuitem_t menu_touch[] = { static const menuitem_t menu_config[] = { { MT_SUBMENU, 0, "TOUCH", menu_touch}, { MT_CALLBACK, CONFIG_MENUITEM_SELFTEST, "SELF TEST", menu_config_cb}, +#ifdef __CALIBRATE__ { MT_SUBMENU, 0, "LEVEL CAL", menu_calibrate}, +#endif { MT_CALLBACK, CONFIG_MENUITEM_VERSION, "VERSION", menu_config_cb}, #ifdef __USE_SERIAL_CONSOLE__ { MT_SUBMENU, 0, "CONNECTION", menu_connection},