external_gain in backup

pull/111/head
erikkaashoek 2 years ago
parent 53d4c84f1e
commit ed1dfed942

@ -156,36 +156,37 @@ static THD_FUNCTION(Thread1, arg)
// START_PROFILE
if (sweep_mode&(SWEEP_ENABLE|SWEEP_ONCE)) {
backup_t b;
b.frequency0 = setting.frequency0;
b.frequency1 = setting.frequency1;
b.data.frequency0 = setting.frequency0;
b.data.frequency1 = setting.frequency1;
if (setting.auto_attenuation)
b.attenuation = 0;
b.data.attenuation = 0;
else
b.attenuation = setting.attenuate_x2+1;
b.data.attenuation = setting.attenuate_x2+1;
b.data.external_gain = setting.external_gain*2;
if (setting.auto_reflevel || setting.unit != U_DBM)
b.reflevel = 0;
b.data.reflevel = 0;
else
b.reflevel = setting.reflevel + 140;
b.data.reflevel = setting.reflevel + 140;
if (setting.rbw_x10 == 0)
b.RBW = 0;
b.data.RBW = 0;
else
#ifdef TINYSA4
b.RBW = SI4463_rbw_selected+1;
b.data.RBW = SI4463_rbw_selected+1;
#else
b.RBW = SI4432_rbw_selected+1;
b.data.RBW = SI4432_rbw_selected+1;
#endif
b.mode = setting.mode;
b.checksum = 0;
b.data.mode = setting.mode;
b.data.checksum = 0;
uint8_t *c = (uint8_t *)&b;
int ci = sizeof(backup_t)-1; // Exclude checksum
uint8_t checksum = 0x55;
while (ci--) {
checksum ^= *c++;
}
b.checksum = checksum;
b.data.checksum = checksum;
uint32_t *f = (uint32_t *)&b;
uint32_t *t = &backup;
int i = USED_BACKUP_SIZE+1;
int i = USED_BACKUP_SIZE;
while (i--)
*t++ = *f++;
@ -3132,7 +3133,7 @@ int main(void)
backup_t b;
uint32_t *f = &backup;
uint32_t *t = (uint32_t *)&b;
int i = USED_BACKUP_SIZE+1;
int i = USED_BACKUP_SIZE;
while (i--)
*t++ = *f++;
uint8_t *c = (uint8_t *)&b;
@ -3141,10 +3142,10 @@ int main(void)
while (ci--) {
checksum ^= *c++;
}
if (b.checksum == checksum) {
if (b.data.checksum == checksum) {
#ifdef TINYSA4 // Set mode not working reliably
set_mode(b.mode);
switch (b.mode) {
set_mode(b.data.mode);
switch (b.data.mode) {
case M_LOW:
case M_HIGH:
break;
@ -3158,30 +3159,31 @@ int main(void)
break;
}
#endif
if (b.frequency0 != 0 || b.frequency1 != 0) {
if (b.mode <= M_HIGH){
set_sweep_frequency(ST_START, b.frequency0);
set_sweep_frequency(ST_STOP, b.frequency1);
set_external_gain(b.data.external_gain/2);
if (b.data.frequency0 != 0 || b.data.frequency1 != 0) {
if (b.data.mode <= M_HIGH){
set_sweep_frequency(ST_START, b.data.frequency0);
set_sweep_frequency(ST_STOP, b.data.frequency1);
} else {
set_sweep_frequency(ST_CW, (b.frequency0 + b.frequency1)/2);
set_sweep_frequency(ST_SPAN, (b.frequency1 - b.frequency0));
set_sweep_frequency(ST_CW, (b.data.frequency0 + b.data.frequency1)/2);
set_sweep_frequency(ST_SPAN, (b.data.frequency1 - b.data.frequency0));
ui_mode_menu();
}
if (b.attenuation == 0) {
if (b.data.attenuation == 0) {
set_auto_attenuation();
} else {
set_attenuation((b.attenuation - 1)/2.0);
set_attenuation((b.data.attenuation - 1)/2.0);
}
if (b.reflevel == 0) {
if (b.data.reflevel == 0) {
set_auto_reflevel(true);
} else {
set_auto_reflevel(false);
user_set_reflevel((float)(b.reflevel-140));
user_set_reflevel((float)(b.data.reflevel-140));
}
if (b.RBW == 0) {
if (b.data.RBW == 0) {
setting.rbw_x10 = 0;
} else {
set_RBW(force_rbw(b.RBW-1));
set_RBW(force_rbw(b.data.RBW-1));
}
}
}

@ -1750,25 +1750,34 @@ extern const menuitem_t menu_highoutputmode[];
extern const menuitem_t menu_mode[];
extern void menu_push_submenu(const menuitem_t *submenu);
#ifdef TINYSA4
#define MAX_BACKUP_SIZE 16
#define USED_BACKUP_SIZE 6
#else
#define MAX_BACKUP_SIZE 5
#define USED_BACKUP_SIZE 4 // must be equal to sizeof(backup_t)
#endif
typedef struct {
freq_t frequency0, frequency1;
uint8_t attenuation;
uint8_t reflevel;
uint8_t RBW;
uint8_t mode;
uint8_t checksum;
union {
uint32_t raw[USED_BACKUP_SIZE]; // checksum must be last byte
struct {
freq_t frequency0, frequency1;
uint8_t attenuation;
uint8_t reflevel;
uint8_t RBW;
uint8_t mode;
int8_t external_gain;
uint8_t dummy1,dummy2;
uint8_t checksum;
} data;
};
} backup_t;
#pragma pack(pop)
#define backup (*(uint32_t *)0x40002850) // backup registers 5 * 32 bits
#ifdef TINYSA4
#define MAX_BACKUP_SIZE 16
#define USED_BACKUP_SIZE 5
#else
#define MAX_BACKUP_SIZE 5
#define USED_BACKUP_SIZE 3
#endif
#if USED_BACKUP_SIZE > MAX_BACKUP_SIZE
#error "backup_t too large"

Loading…
Cancel
Save

Powered by TurnKey Linux.