Menu updated, marker position at time

Removed_REF_marker
erikkaashoek 5 years ago
parent 90b2f9c484
commit 60a5e9f5c6

@ -424,7 +424,7 @@ VNA_SHELL_FUNCTION(cmd_reset)
{ {
(void)argc; (void)argc;
(void)argv; (void)argv;
#ifndef TINYSA4
if (argc == 1) { if (argc == 1) {
if (get_str_index(argv[0], "dfu") == 0) { if (get_str_index(argv[0], "dfu") == 0) {
shell_printf("Performing reset to DFU mode\r\n"); shell_printf("Performing reset to DFU mode\r\n");
@ -432,6 +432,7 @@ VNA_SHELL_FUNCTION(cmd_reset)
return; return;
} }
} }
#endif
shell_printf("Performing reset\r\n"); shell_printf("Performing reset\r\n");
rccEnableWWDG(FALSE); rccEnableWWDG(FALSE);
@ -1017,8 +1018,8 @@ config_t config = {
.high_level_output_offset = 0.0, // Uncalibrated .high_level_output_offset = 0.0, // Uncalibrated
.correction_frequency = {{ 1000000, 500000000, 1000000000, 1500000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000, 6500000000, 7000000000, 7500000000, 8000000000, 8500000000, 9000000000, 10000000000 }, .correction_frequency = {{ 1000000, 500000000, 1000000000, 1500000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000, 6500000000, 7000000000, 7500000000, 8000000000, 8500000000, 9000000000, 10000000000 },
{ 1000000, 500000000, 1000000000, 1500000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000, 6500000000, 7000000000, 7500000000, 8000000000, 8500000000, 9000000000, 10000000000 }}, { 1000000, 500000000, 1000000000, 1500000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000, 6500000000, 7000000000, 7500000000, 8000000000, 8500000000, 9000000000, 10000000000 }},
.correction_value = {{ 0, +1.5, +4, +4, +2, +3.5, +8, +12, +15, +13, +12, +23, +26, +26, +26, +26, +26, +27, +27, +27 }, .correction_value = {{ 0, +1.5, +2, +4, +2, +3.5, +6.5, +9.5, +10, +9, +9, +23, +24, +24, +24, +24, +24, +24, +24, +24 },
{ 0, +1, +4.5, +1, +2.5, +6.5, +9, +15, +15.5, +28, +29, +41, +48, +48, +48, +48, +48, +48, +48, +48 }}, { 0, +1, +2.5, +1, +2.5, +6, +9, +11.5, +14.5, +23, +25, +36, +46, +46, +46, +46, +46, +46, +46, +46 }},
.setting_frequency_30mhz = 30000000, .setting_frequency_30mhz = 30000000,
.cor_am = 0, .cor_am = 0,
.cor_wfm = 0, .cor_wfm = 0,
@ -1253,6 +1254,18 @@ void set_marker_frequency(int m, freq_t f)
} }
} }
void set_marker_time(int m, float f)
{
if (m == MARKER_INVALID || !markers[m].enabled)
return;
markers[m].mtype &= ~M_TRACKING;
int i = f * (float)(sweep_points-1)* ONE_SECOND_TIME / setting.actual_sweep_time_us;
if (i >= sweep_points)
return;
markers[m].index = i;
markers[m].frequency = 0;
}
static void static void
set_frequencies(freq_t start, freq_t stop, uint16_t points) set_frequencies(freq_t start, freq_t stop, uint16_t points)
{ {

@ -85,7 +85,7 @@
#endif #endif
#ifdef TINYSA4 #ifdef TINYSA4
#define DEFAULT_IF ((freq_t)977400000) #define DEFAULT_IF ((freq_t)977400000)
#define DEFAULT_SPUR_OFFSET ((freq_t)1500000) #define DEFAULT_SPUR_OFFSET ((freq_t)1300000)
#define DEFAULT_MAX_FREQ ((freq_t)800000000) #define DEFAULT_MAX_FREQ ((freq_t)800000000)
#define HIGH_MIN_FREQ_MHZ 136// 825 #define HIGH_MIN_FREQ_MHZ 136// 825
#define HIGH_MAX_FREQ_MHZ 1130 #define HIGH_MAX_FREQ_MHZ 1130
@ -93,6 +93,7 @@
//#define ULTRA_MAX_FREQ 2900000000ULL //#define ULTRA_MAX_FREQ 2900000000ULL
#define MAX_LO_FREQ 4350000000ULL #define MAX_LO_FREQ 4350000000ULL
#define LOW_MAX_FREQ 800000000ULL #define LOW_MAX_FREQ 800000000ULL
#define MIN_BELOW_LO 550000000ULL
#endif #endif
/* /*
* main.c * main.c
@ -222,6 +223,7 @@ void send_region(const char *t, int16_t x, int16_t y, int16_t w, int16_t h);
void send_buffer(uint8_t * buf, int s); void send_buffer(uint8_t * buf, int s);
#endif #endif
void set_marker_frequency(int m, freq_t f); void set_marker_frequency(int m, freq_t f);
void set_marker_time(int m, float f);
void toggle_sweep(void); void toggle_sweep(void);
void toggle_mute(void); void toggle_mute(void);
void load_default_properties(void); void load_default_properties(void);
@ -1348,7 +1350,7 @@ extern void ADF4351_modulo(int m);
extern void ADF4351_csr(int c); extern void ADF4351_csr(int c);
extern void ADF4351_fastlock(int c); extern void ADF4351_fastlock(int c);
extern int SI4463_R; extern int SI4463_R;
extern volatile int64_t ADF4350_modulo; extern int64_t ADF4350_modulo;
extern void SI446x_set_AGC_LNA(uint8_t v); extern void SI446x_set_AGC_LNA(uint8_t v);
extern void SI4463_init_rx(void); extern void SI4463_init_rx(void);
extern void SI4463_init_tx(void); extern void SI4463_init_tx(void);

@ -1771,7 +1771,7 @@ case M_LOW: // Mixed into 0
set_AGC_LNA(); set_AGC_LNA();
#ifdef TINYSA4 #ifdef TINYSA4
ADF4351_enable(true); ADF4351_enable(true);
ADF4351_drive(setting.lo_drive); // ADF4351_drive(setting.lo_drive);
if (setting.tracking_output) if (setting.tracking_output)
ADF4351_enable_aux_out(true); ADF4351_enable_aux_out(true);
else else
@ -1856,7 +1856,7 @@ case M_GENLOW: // Mixed output from 0
#endif #endif
#ifdef TINYSA4 #ifdef TINYSA4
ADF4351_enable_out(true); ADF4351_enable_out(true);
ADF4351_drive(setting.lo_drive); // ADF4351_drive(setting.lo_drive);
ADF4351_enable(true); ADF4351_enable(true);
ADF4351_enable_aux_out(false); ADF4351_enable_aux_out(false);
@ -2484,9 +2484,9 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) /
// ----------------------------- set mixer drive -------------------------------------------- // ----------------------------- set mixer drive --------------------------------------------
if (setting.lo_drive & 0x04){ if (setting.lo_drive & 0x04){
int target_drive; int target_drive;
if (f < 400000000ULL) if (f < 2400000000ULL)
target_drive = 1; target_drive = 1;
else if (f < 2000000000ULL) else if (f < 3000000000ULL)
target_drive = 2; target_drive = 2;
else else
target_drive = 3; target_drive = 3;
@ -2783,7 +2783,7 @@ again: // Spur redu
if (S_STATE(setting.spur_removal)){ // If in low input mode and spur reduction is on if (S_STATE(setting.spur_removal)){ // If in low input mode and spur reduction is on
if (setting.below_IF == S_AUTO_OFF && // Auto and not yet in below IF if (setting.below_IF == S_AUTO_OFF && // Auto and not yet in below IF
#ifdef TINYSA4 #ifdef TINYSA4
( lf > ULTRA_MAX_FREQ || lf < local_IF/2 || ( lf + (uint64_t)local_IF< MAX_LO_FREQ && lf > 136000000ULL + local_IF) ) ( lf > ULTRA_MAX_FREQ || lf < local_IF/2 || ( lf + (uint64_t)local_IF< MAX_LO_FREQ && lf > MIN_BELOW_LO + local_IF) )
#else #else
(lf < local_IF / 2 || lf > local_IF) (lf < local_IF / 2 || lf > local_IF)
#endif #endif
@ -2898,7 +2898,12 @@ again: // Spur redu
ADF4351_R_counter(1); ADF4351_R_counter(1);
} else if (lf < LOW_MAX_FREQ && lf >= TXCO_DIV3 && MODE_INPUT(setting.mode)) { } else if (lf < LOW_MAX_FREQ && lf >= TXCO_DIV3 && MODE_INPUT(setting.mode)) {
if (ADF4350_modulo == 0) ADF4351_modulo(60); if (ADF4350_modulo == 0) {
if (actual_rbw_x10 >= 3000)
ADF4351_modulo(1000);
else
ADF4351_modulo(60);
}
freq_t tf = ((lf + actual_rbw_x10*1000) / TCXO) * TCXO; freq_t tf = ((lf + actual_rbw_x10*1000) / TCXO) * TCXO;
if (tf + actual_rbw_x10*100 >= lf && tf < lf + actual_rbw_x10*100) { // 30MHz if (tf + actual_rbw_x10*100 >= lf && tf < lf + actual_rbw_x10*100) { // 30MHz
ADF4351_R_counter(6); ADF4351_R_counter(6);
@ -2913,7 +2918,12 @@ again: // Spur redu
ADF4351_R_counter(1); ADF4351_R_counter(1);
} }
} else { } else {
if (ADF4350_modulo == 0) ADF4351_modulo(60); if (ADF4350_modulo == 0) {
if (actual_rbw_x10 >= 3000)
ADF4351_modulo(1000);
else
ADF4351_modulo(60);
}
if (setting.frequency_step < 100000) if (setting.frequency_step < 100000)
ADF4351_R_counter(3); ADF4351_R_counter(3);
else else
@ -3350,6 +3360,7 @@ sweep_again: // stay in sweep loop when output mo
if (refreshing) if (refreshing)
scandirty = false; scandirty = false;
if (break_on_operation && operation_requested) { // break loop if needed if (break_on_operation && operation_requested) { // break loop if needed
abort:
if (setting.actual_sweep_time_us > ONE_SECOND_TIME /* && MODE_INPUT(setting.mode) */) { if (setting.actual_sweep_time_us > ONE_SECOND_TIME /* && MODE_INPUT(setting.mode) */) {
ili9341_set_background(LCD_BG_COLOR); ili9341_set_background(LCD_BG_COLOR);
ili9341_fill(OFFSETX, CHART_BOTTOM+1, WIDTH, 1); // Erase progress bar ili9341_fill(OFFSETX, CHART_BOTTOM+1, WIDTH, 1); // Erase progress bar
@ -3387,8 +3398,15 @@ sweep_again: // stay in sweep loop when output mo
if (setting.additional_step_delay_us && (MODE_INPUT(setting.mode) || setting.modulation == MO_NONE)) { // No delay when modulation is active if (setting.additional_step_delay_us && (MODE_INPUT(setting.mode) || setting.modulation == MO_NONE)) { // No delay when modulation is active
if (setting.additional_step_delay_us < 30*ONE_MS_TIME) // Maximum delay time using my_microsecond_delay if (setting.additional_step_delay_us < 30*ONE_MS_TIME) // Maximum delay time using my_microsecond_delay
my_microsecond_delay(setting.additional_step_delay_us); my_microsecond_delay(setting.additional_step_delay_us);
else else {
osalThreadSleepMilliseconds(setting.additional_step_delay_us / ONE_MS_TIME); int tm = setting.additional_step_delay_us / ONE_MS_TIME;
do {
osalThreadSleepMilliseconds(tm>100?100:tm);
if (break_on_operation && operation_requested)
goto abort;
tm -= 100;
} while (tm > 0);
}
} }
} }

@ -931,6 +931,9 @@ uint32_t registers[6] = {0xC80000, 0x8008011, 0x1800C642, 0x48963,0xA5003C , 0x
#else #else
uint32_t registers[6] = {0xA00000, 0x8000011, 0x4E42, 0x4B3,0xDC003C , 0x580005} ; //10 MHz ref uint32_t registers[6] = {0xA00000, 0x8000011, 0x4E42, 0x4B3,0xDC003C , 0x580005} ; //10 MHz ref
#endif #endif
uint32_t old_registers[6];
bool reg_dirty[6] = {true, true, true, true, true, true};
int debug = 0; int debug = 0;
ioline_t ADF4351_LE[2] = { LINE_LO_SEL, LINE_LO_SEL}; ioline_t ADF4351_LE[2] = { LINE_LO_SEL, LINE_LO_SEL};
//int ADF4351_Mux = 7; //int ADF4351_Mux = 7;
@ -954,7 +957,7 @@ uint64_t PFDRFout[6] = {XTAL,XTAL,XTAL,10000000,10000000,10000000}; //Reference
//uint64_t Chrystal[6] = {XTAL,XTAL,XTAL,10000000,10000000,10000000}; //uint64_t Chrystal[6] = {XTAL,XTAL,XTAL,10000000,10000000,10000000};
//double FRACF; // Temp //double FRACF; // Temp
volatile int64_t int64_t
// INTA, // Temp // INTA, // Temp
ADF4350_modulo = 0, // Linked to spur table!!!!! ADF4350_modulo = 0, // Linked to spur table!!!!!
// MOD, // MOD,
@ -1013,11 +1016,16 @@ void ADF4351_Setup(void)
void ADF4351_WriteRegister32(int channel, const uint32_t value) void ADF4351_WriteRegister32(int channel, const uint32_t value)
{ {
// if (reg_dirty[value & 0x07] || (value & 0x07) == 0) {
if (old_registers[value & 0x07] != registers[value & 0x07] || (value & 0x07) == 0 ) {
registers[value & 0x07] = value; registers[value & 0x07] = value;
for (int i = 3; i >= 0; i--) shiftOut((value >> (8 * i)) & 0xFF); for (int i = 3; i >= 0; i--) shiftOut((value >> (8 * i)) & 0xFF);
palSetLine(ADF4351_LE[channel]); palSetLine(ADF4351_LE[channel]);
my_microsecond_delay(1); // Must my_microsecond_delay(1); // Must
palClearLine(ADF4351_LE[channel]); palClearLine(ADF4351_LE[channel]);
// reg_dirty[value & 0x07] = false;
old_registers[value & 0x07] = registers[value & 0x07];
}
} }
void ADF4351_Set(int channel) void ADF4351_Set(int channel)
@ -1038,12 +1046,14 @@ void ADF4351_Set(int channel)
void ADF4351_disable_output(void) void ADF4351_disable_output(void)
{ {
bitClear (registers[4], 5); // main output bitClear (registers[4], 5); // main output
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
void ADF4351_enable_output(void) void ADF4351_enable_output(void)
{ {
bitSet (registers[4], 5); // main output bitSet (registers[4], 5); // main output
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
#endif #endif
@ -1090,6 +1100,7 @@ void ADF4351_spur_mode(int S)
bitSet (registers[2], 30); // R set to 8 bitSet (registers[2], 30); // R set to 8
else else
bitClear (registers[2], 30); // R set to 8 bitClear (registers[2], 30); // R set to 8
reg_dirty[2] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1116,6 +1127,8 @@ void ADF4351_R_counter(int R)
clear_frequency_cache(); // When R changes the possible frequencies will change clear_frequency_cache(); // When R changes the possible frequencies will change
registers[2] &= ~ (((unsigned long)0x3FF) << 14); registers[2] &= ~ (((unsigned long)0x3FF) << 14);
registers[2] |= (((unsigned long)R) << 14); registers[2] |= (((unsigned long)R) << 14);
reg_dirty[2] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1123,6 +1136,7 @@ void ADF4351_mux(int R)
{ {
registers[2] &= ~ (((unsigned long)0x7) << 26); registers[2] &= ~ (((unsigned long)0x7) << 26);
registers[2] |= (((unsigned long)R & (unsigned long)0x07) << 26); registers[2] |= (((unsigned long)R & (unsigned long)0x07) << 26);
reg_dirty[2] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1130,6 +1144,7 @@ void ADF4351_csr(int c)
{ {
registers[3] &= ~ (((unsigned long)0x1) << 18); registers[3] &= ~ (((unsigned long)0x1) << 18);
registers[3] |= (((unsigned long)c & (unsigned long)0x01) << 18); registers[3] |= (((unsigned long)c & (unsigned long)0x01) << 18);
reg_dirty[3] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1137,6 +1152,7 @@ void ADF4351_fastlock(int c)
{ {
registers[3] &= ~ (((unsigned long)0x3) << 15); registers[3] &= ~ (((unsigned long)0x3) << 15);
registers[3] |= (((unsigned long)c & (unsigned long)0x03) << 15); registers[3] |= (((unsigned long)c & (unsigned long)0x03) << 15);
reg_dirty[3] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1144,6 +1160,7 @@ void ADF4351_CP(int p)
{ {
registers[2] &= ~ (((unsigned long)0xF) << 9); registers[2] &= ~ (((unsigned long)0xF) << 9);
registers[2] |= (((unsigned long)p) << 9); registers[2] |= (((unsigned long)p) << 9);
reg_dirty[2] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1152,6 +1169,7 @@ void ADF4351_drive(int p)
p &= 0x03; p &= 0x03;
registers[4] &= ~ (((unsigned long)0x3) << 3); registers[4] &= ~ (((unsigned long)0x3) << 3);
registers[4] |= (((unsigned long)p) << 3); registers[4] |= (((unsigned long)p) << 3);
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1160,6 +1178,7 @@ void ADF4351_aux_drive(int p)
p &= 0x03; p &= 0x03;
registers[4] &= ~ (((unsigned long)0x3) << 6); registers[4] &= ~ (((unsigned long)0x3) << 6);
registers[4] |= (((unsigned long)p) << 6); registers[4] |= (((unsigned long)p) << 6);
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
#if 0 #if 0
@ -1207,10 +1226,11 @@ uint64_t ADF4351_prepare_frequency(int channel, uint64_t freq) // freq / 10Hz
bitWrite (registers[4], 21, 0); bitWrite (registers[4], 21, 0);
bitWrite (registers[4], 20, 0); bitWrite (registers[4], 20, 0);
} }
reg_dirty[4] = true;
#if 1 #if 1
volatile uint32_t PFDR = (uint32_t)PFDRFout[channel]; uint32_t PFDR = (uint32_t)PFDRFout[channel];
uint32_t MOD = ADF4350_modulo; uint32_t MOD = ADF4350_modulo;
if (MOD == 0) if (MOD == 0)
MOD = 60; MOD = 60;
@ -1225,7 +1245,7 @@ uint64_t ADF4351_prepare_frequency(int channel, uint64_t freq) // freq / 10Hz
#else #else
volatile uint64_t PFDR = PFDRFout[channel]; uint64_t PFDR = PFDRFout[channel];
uint16_t MOD = ADF4350_modulo; uint16_t MOD = ADF4350_modulo;
if (MOD == 0) if (MOD == 0)
MOD = 60; MOD = 60;
@ -1257,7 +1277,7 @@ uint64_t ADF4351_prepare_frequency(int channel, uint64_t freq) // freq / 10Hz
#endif #endif
uint64_t actual_freq = ((uint64_t)PFDR *(INTA * MOD +FRAC))/OutputDivider / MOD; uint64_t actual_freq = ((uint64_t)PFDR *(INTA * MOD +FRAC))/OutputDivider / MOD;
#if 0 #if 0
volatile int max_delta = PFDRFout[channel]/OutputDivider/MOD/100; int max_delta = PFDRFout[channel]/OutputDivider/MOD/100;
if (actual_freq < freq - max_delta || actual_freq > freq + max_delta ){ if (actual_freq < freq - max_delta || actual_freq > freq + max_delta ){
while(1) while(1)
my_microsecond_delay(10); my_microsecond_delay(10);
@ -1276,11 +1296,13 @@ uint64_t ADF4351_prepare_frequency(int channel, uint64_t freq) // freq / 10Hz
registers[0] = 0; registers[0] = 0;
registers[0] = INTA << 15; // OK registers[0] = INTA << 15; // OK
registers[0] = registers[0] + (FRAC << 3); registers[0] = registers[0] + (FRAC << 3);
reg_dirty[0] = true;
if (MOD == 1) MOD = 2; if (MOD == 1) MOD = 2;
registers[1] = 0; registers[1] = 0;
registers[1] = MOD << 3; registers[1] = MOD << 3;
registers[1] = registers[1] + 1 ; // restore address "001" registers[1] = registers[1] + 1 ; // restore address "001"
bitSet (registers[1], 27); // Prescaler at 8/9 bitSet (registers[1], 27); // Prescaler at 8/9
reg_dirty[1] = true;
return actual_freq; return actual_freq;
} }
@ -1290,6 +1312,7 @@ void ADF4351_enable(int s)
bitClear(registers[4], 11); // Inverse logic!!!!! bitClear(registers[4], 11); // Inverse logic!!!!!
else else
bitSet(registers[4], 11); bitSet(registers[4], 11);
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1299,6 +1322,7 @@ void ADF4351_enable_aux_out(int s)
bitSet(registers[4], 8); bitSet(registers[4], 8);
else else
bitClear(registers[4], 8); bitClear(registers[4], 8);
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1313,6 +1337,8 @@ void ADF4351_enable_out(int s)
bitSet(registers[2], 5); // Enable power down bitSet(registers[2], 5); // Enable power down
bitSet(registers[2], 11); // Enable VCO power down bitSet(registers[2], 11); // Enable VCO power down
} }
reg_dirty[2] = true;
reg_dirty[4] = true;
ADF4351_Set(0); ADF4351_Set(0);
} }
@ -1585,7 +1611,7 @@ void SI4463_set_output_level(int t)
} }
void SI4463_start_tx(uint8_t CHANNEL) void SI4463_start_tx(uint8_t CHANNEL)
{ {
// volatile si446x_state_t s; // si446x_state_t s;
#if 0 #if 0
s = SI4463_get_state(); s = SI4463_get_state();
if (s == SI446X_STATE_RX){ if (s == SI446X_STATE_RX){
@ -1649,7 +1675,7 @@ void SI4463_start_tx(uint8_t CHANNEL)
void SI4463_start_rx(uint8_t CHANNEL) void SI4463_start_rx(uint8_t CHANNEL)
{ {
volatile si446x_state_t s = SI4463_get_state(); si446x_state_t s = SI4463_get_state();
if (s == SI446X_STATE_TX){ if (s == SI446X_STATE_TX){
SI4463_set_state(SI446X_STATE_READY); SI4463_set_state(SI446X_STATE_READY);
} }
@ -2626,7 +2652,7 @@ void SI4463_init_rx(void)
clear_frequency_cache(); clear_frequency_cache();
SI4463_start_rx(SI4463_channel); SI4463_start_rx(SI4463_channel);
#if 0 #if 0
volatile si446x_state_t s ; si446x_state_t s ;
again: again:
Si446x_getInfo(&SI4463_info); Si446x_getInfo(&SI4463_info);
@ -2675,7 +2701,7 @@ reset:
#endif #endif
SI4463_start_tx(0); SI4463_start_tx(0);
#if 0 #if 0
volatile si446x_state_t s ; si446x_state_t s ;
again: again:
Si446x_getInfo(&SI4463_info); Si446x_getInfo(&SI4463_info);

@ -567,6 +567,7 @@ extern const char *states[];
} }
} }
#ifndef TINYSA4
void void
enter_dfu(void) enter_dfu(void)
{ {
@ -581,6 +582,7 @@ enter_dfu(void)
*((unsigned long *)BOOT_FROM_SYTEM_MEMORY_MAGIC_ADDRESS) = BOOT_FROM_SYTEM_MEMORY_MAGIC; *((unsigned long *)BOOT_FROM_SYTEM_MEMORY_MAGIC_ADDRESS) = BOOT_FROM_SYTEM_MEMORY_MAGIC;
NVIC_SystemReset(); NVIC_SystemReset();
} }
#endif
static void static void
select_lever_mode(int mode) select_lever_mode(int mode)

@ -429,6 +429,7 @@ enum {
#ifdef __LIMITS__ #ifdef __LIMITS__
KM_LIMIT_FREQ, KM_LIMIT_LEVEL, KM_LIMIT_FREQ, KM_LIMIT_LEVEL,
#endif #endif
KM_MARKER_TIME,
// #35 // #35
KM_NONE // always at enum end KM_NONE // always at enum end
}; };
@ -480,6 +481,7 @@ static const struct {
{keypads_freq , "END\nFREQ"}, // KM_LIMIT_FREQ {keypads_freq , "END\nFREQ"}, // KM_LIMIT_FREQ
{keypads_plusmin_unit , "LEVEL"}, // KM_LIMIT_LEVEL {keypads_plusmin_unit , "LEVEL"}, // KM_LIMIT_LEVEL
#endif #endif
{keypads_time , "MARKER\nTIME"}, // KM_MARKER_TIME
}; };
#if 0 // Not used #if 0 // Not used
@ -501,6 +503,7 @@ static const menuitem_t menu_highoutputmode[];
static const menuitem_t menu_modulation[]; static const menuitem_t menu_modulation[];
static const menuitem_t menu_top[]; static const menuitem_t menu_top[];
static const menuitem_t menu_reffer[]; static const menuitem_t menu_reffer[];
static const menuitem_t menu_sweep_points[];
static const menuitem_t menu_modulation[]; static const menuitem_t menu_modulation[];
static const menuitem_t menu_limit_modify[]; static const menuitem_t menu_limit_modify[];
//static const menuitem_t menu_drive_wide[]; //static const menuitem_t menu_drive_wide[];
@ -678,13 +681,14 @@ static UI_FUNCTION_CALLBACK(menu_config_cb)
redraw_frame(); redraw_frame();
request_to_redraw_grid(); request_to_redraw_grid();
} }
#ifndef TINYSA4
static UI_FUNCTION_CALLBACK(menu_dfu_cb) static UI_FUNCTION_CALLBACK(menu_dfu_cb)
{ {
(void)data; (void)data;
(void)item; (void)item;
enter_dfu(); enter_dfu();
} }
#endif
#ifdef __LISTEN__ #ifdef __LISTEN__
static UI_FUNCTION_ADV_CALLBACK(menu_listen_acb) static UI_FUNCTION_ADV_CALLBACK(menu_listen_acb)
@ -1597,6 +1601,20 @@ static UI_FUNCTION_ADV_CALLBACK(menu_outputmode_acb)
toggle_mute(); toggle_mute();
} }
static UI_FUNCTION_ADV_CALLBACK(menu_enter_marker_acb)
{
(void) data;
(void) item;
if(b){
b->param_1.text = FREQ_IS_CW() ? "TIME" : "FREQUENCY";
return;
}
if (FREQ_IS_CW())
ui_mode_keypad(KM_MARKER_TIME);
else
ui_mode_keypad(KM_MARKER);
}
#ifdef TINYSA4 #ifdef TINYSA4
static const uint16_t points_setting[] = {51, 101, 201, 290, 450}; static const uint16_t points_setting[] = {51, 101, 201, 290, 450};
#else #else
@ -1724,6 +1742,7 @@ static const menuitem_t menu_sweep[] = {
{ MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", "0..350MHz"}, { MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", "0..350MHz"},
{ MT_FORM | MT_KEYPAD | MT_LOW, KM_LEVELSWEEP,"LEVEL CHANGE: %s", "-70..70"}, { MT_FORM | MT_KEYPAD | MT_LOW, KM_LEVELSWEEP,"LEVEL CHANGE: %s", "-70..70"},
{ MT_FORM | MT_KEYPAD, KM_SWEEP_TIME, "SWEEP TIME: %s", "0..600 seconds"}, { MT_FORM | MT_KEYPAD, KM_SWEEP_TIME, "SWEEP TIME: %s", "0..600 seconds"},
{ MT_FORM | MT_SUBMENU, 0, "SWEEP POINTS", menu_sweep_points},
{ MT_FORM | MT_CANCEL, 0, S_LARROW" BACK",NULL }, { MT_FORM | MT_CANCEL, 0, S_LARROW" BACK",NULL },
{ MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel { MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel
}; };
@ -1877,7 +1896,7 @@ const menuitem_t menu_marker_search[] = {
{ MT_CALLBACK, 1, "MIN\n" S_RARROW" RIGHT", menu_marker_search_cb }, { MT_CALLBACK, 1, "MIN\n" S_RARROW" RIGHT", menu_marker_search_cb },
{ MT_CALLBACK, 2, "MAX\n" S_LARROW" LEFT", menu_marker_search_cb }, { MT_CALLBACK, 2, "MAX\n" S_LARROW" LEFT", menu_marker_search_cb },
{ MT_CALLBACK, 3, "MAX\n" S_RARROW" RIGHT", menu_marker_search_cb }, { MT_CALLBACK, 3, "MAX\n" S_RARROW" RIGHT", menu_marker_search_cb },
{ MT_KEYPAD, KM_MARKER, "ENTER\nFREQUENCY", NULL}, { MT_ADV_CALLBACK, 0, "ENTER\n%s", menu_enter_marker_acb},
{ MT_ADV_CALLBACK, M_TRACKING, "TRACKING",menu_marker_modify_acb }, { MT_ADV_CALLBACK, M_TRACKING, "TRACKING",menu_marker_modify_acb },
{ MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel { MT_NONE, 0, NULL, NULL } // sentinel
@ -1960,11 +1979,13 @@ static const menuitem_t menu_marker[] = {
{ MT_NONE, 0, NULL, NULL } // sentinel { MT_NONE, 0, NULL, NULL } // sentinel
}; };
#ifndef TINYSA4
static const menuitem_t menu_dfu[] = { static const menuitem_t menu_dfu[] = {
{ MT_FORM | MT_CALLBACK, 0, "ENTER DFU", menu_dfu_cb}, { MT_FORM | MT_CALLBACK, 0, "ENTER DFU", menu_dfu_cb},
{ MT_FORM | MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_FORM | MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel { MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel
}; };
#endif
#ifdef __HARMONIC__ #ifdef __HARMONIC__
static const menuitem_t menu_harmonic[] = static const menuitem_t menu_harmonic[] =
@ -2095,10 +2116,14 @@ static const menuitem_t menu_settings2[] =
static const menuitem_t menu_settings[] = static const menuitem_t menu_settings[] =
{ {
{ MT_ADV_CALLBACK | MT_LOW, 0,"LO OUTPUT", menu_lo_output_acb}, { MT_ADV_CALLBACK | MT_LOW, 0,"LO OUTPUT", menu_lo_output_acb},
#ifndef TINYSA4
{ MT_KEYPAD, KM_ACTUALPOWER, "ACTUAL\nPOWER", NULL}, { MT_KEYPAD, KM_ACTUALPOWER, "ACTUAL\nPOWER", NULL},
#endif
{ MT_KEYPAD | MT_LOW, KM_IF, "IF FREQ", "0=auto IF"}, { MT_KEYPAD | MT_LOW, KM_IF, "IF FREQ", "0=auto IF"},
{ MT_SUBMENU,0, "SCAN SPEED", menu_scanning_speed}, { MT_SUBMENU,0, "SCAN SPEED", menu_scanning_speed},
#ifndef TINYSA4
{ MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"}, { MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"},
#endif
#ifdef TINYSA4 #ifdef TINYSA4
{ MT_SUBMENU | MT_LOW,0, "MIXER\nDRIVE", menu_mixer_drive}, { MT_SUBMENU | MT_LOW,0, "MIXER\nDRIVE", menu_mixer_drive},
#else #else
@ -2203,7 +2228,14 @@ static const menuitem_t menu_config[] = {
{ MT_SUBMENU, 0, "CONNECTION", menu_connection}, { MT_SUBMENU, 0, "CONNECTION", menu_connection},
#endif #endif
{ MT_SUBMENU, 0, "EXPERT\nCONFIG", menu_settings}, { MT_SUBMENU, 0, "EXPERT\nCONFIG", menu_settings},
#ifndef TINYSA4
{ MT_SUBMENU, 0, S_RARROW" DFU", menu_dfu}, { MT_SUBMENU, 0, S_RARROW" DFU", menu_dfu},
#endif
#ifdef TINYSA4
{ MT_KEYPAD, KM_ACTUALPOWER, "ACTUAL\nPOWER", NULL},
{ MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"},
#endif
{ MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel { MT_NONE, 0, NULL, NULL } // sentinel
}; };
@ -2668,6 +2700,9 @@ set_numeric_value(void)
case KM_MARKER: case KM_MARKER:
set_marker_frequency(active_marker, (freq_t)uistat.value - (setting.frequency_offset - FREQUENCY_SHIFT)); set_marker_frequency(active_marker, (freq_t)uistat.value - (setting.frequency_offset - FREQUENCY_SHIFT));
break; break;
case KM_MARKER_TIME:
set_marker_time(active_marker, uistat.value);
break;
case KM_MODULATION: case KM_MODULATION:
set_modulation_frequency((int)uistat.value); set_modulation_frequency((int)uistat.value);
break; break;

Loading…
Cancel
Save

Powered by TurnKey Linux.