X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao_config.c;h=2d3d2870459715838f3bbdb8fcdd69b269b3d821;hb=a0a650a2be007b0436bd527d6c18f36eef6fbe2b;hp=921a248065a25d130e27c10799e2dc3dc9c3c41e;hpb=20282ef00afe70e3f3193f6f0200254cb2c33e93;p=fw%2Faltos diff --git a/src/core/ao_config.c b/src/core/ao_config.c index 921a2480..2d3d2870 100644 --- a/src/core/ao_config.c +++ b/src/core/ao_config.c @@ -64,6 +64,12 @@ ao_config_put(void) } #endif +static void +ao_config_set_radio(void) +{ + ao_config.radio_setting = ao_freq_to_set(ao_config.frequency, ao_config.radio_cal); +} + static void _ao_config_get(void) { @@ -85,7 +91,7 @@ _ao_config_get(void) sizeof(AO_CONFIG_DEFAULT_CALLSIGN) - 1); ao_config_dirty = 1; } - if (ao_config.minor < AO_CONFIG_MINOR) { + if (ao_config.minor != AO_CONFIG_MINOR) { /* Fixups for minor version 1 */ if (ao_config.minor < 1) ao_config.apogee_delay = AO_CONFIG_DEFAULT_APOGEE_DELAY; @@ -105,15 +111,25 @@ _ao_config_get(void) ao_config.ignite_mode = AO_CONFIG_DEFAULT_IGNITE_MODE; if (ao_config.minor < 6) ao_config.pad_orientation = AO_CONFIG_DEFAULT_PAD_ORIENTATION; - if (ao_config.minor < 7) - ao_config.radio_setting = ao_config.radio_cal; if (ao_config.minor < 8) ao_config.radio_enable = TRUE; +#if HAS_AES if (ao_config.minor < 9) - memset(&ao_config.aes_key, 0, AO_AES_LEN); + ao_xmemset(&ao_config.aes_key, '\0', AO_AES_LEN); +#endif + if (ao_config.minor < 10) { + ao_config.frequency = 434550; +#if HAS_RADIO_CHANNELS + ao_xmemset(&ao_config.radio_channels, '\0', sizeof (ao_config.radio_channels)); + ao_xmemcpy(&ao_config.radio_channels[0].name[0], + CODE_TO_XDATA("Channel 0"), sizeof("Channel 0")); + ao_config.radio_channels[0].kHz = 434550; +#endif + } ao_config.minor = AO_CONFIG_MINOR; ao_config_dirty = 1; } + ao_config_set_radio(); ao_config_loaded = 1; } @@ -187,6 +203,27 @@ ao_config_radio_channel_set(void) __reentrant ao_radio_recv_abort(); } +void +ao_config_frequency_show(void) __reentrant +{ + printf("Frequency: %ld\n", + ao_config.frequency); +} + +void +ao_config_frequency_set(void) __reentrant +{ + ao_cmd_decimal(); + if (ao_cmd_status != ao_cmd_success) + return; + _ao_config_edit_start(); + ao_config.frequency = ao_cmd_lex_u32; + ao_config.radio_channel = 0; + ao_config_set_radio(); + _ao_config_edit_finish(); + ao_radio_recv_abort(); +} + #if HAS_ADC void @@ -306,7 +343,8 @@ ao_config_radio_cal_set(void) __reentrant if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.radio_setting = ao_config.radio_cal = ao_cmd_lex_u32; + ao_config.radio_cal = ao_cmd_lex_u32; + ao_config_set_radio(); _ao_config_edit_finish(); } @@ -385,25 +423,6 @@ ao_config_pad_orientation_set(void) __reentrant } #endif -void -ao_config_radio_setting_show(void) __reentrant -{ - printf("Radio setting: %ld\n", ao_config.radio_setting); -} - -void -ao_config_radio_setting_set(void) __reentrant -{ - ao_cmd_decimal(); - if (ao_cmd_status != ao_cmd_success) - return; - _ao_config_edit_start(); - ao_config.radio_setting = ao_cmd_lex_u32; - ao_config.radio_channel = 0; - _ao_config_edit_finish(); - ao_radio_recv_abort(); -} - void ao_config_radio_enable_show(void) __reentrant { @@ -448,6 +467,50 @@ ao_config_key_set(void) __reentrant } #endif +#if HAS_RADIO_CHANNELS +void +ao_config_radio_config_show(void) __reentrant +{ + uint8_t i; + for (i = 0; i < AO_NUM_CHANNELS; i++) + if (ao_config.radio_channels[i].name[0]) { + printf("%2d %-16.16s %ld\n", + i, + ao_config.radio_channels[i].name, + ao_config.radio_channels[i].kHz); + } +} + +void +ao_config_radio_config_set(void) __reentrant +{ + __xdata struct ao_radio_channel * ch; + uint8_t i; + ao_cmd_decimal(); + if (ao_cmd_status != ao_cmd_success) + return; + if ((uint8_t) ao_cmd_lex_i >= AO_NUM_CHANNELS) { + ao_cmd_status = ao_cmd_syntax_error; + return; + } + ch = &ao_config.radio_channels[(uint8_t) ao_cmd_lex_i]; + _ao_config_edit_start(); + ao_cmd_white(); + i = 0; + while (ao_cmd_lex_c != '/' && ao_cmd_lex_c != '\n' && i < AO_CHANNEL_NAME_LEN) { + ch->name[i++] = ao_cmd_lex_c; + ao_cmd_lex(); + } + if (i < AO_CHANNEL_NAME_LEN) { + ch->name[i] = '\0'; + ao_cmd_lex(); + } + ao_cmd_decimal(); + ch->kHz = ao_cmd_lex_u32; + _ao_config_edit_finish(); +} +#endif + struct ao_config_var { __code char *str; void (*set)(void) __reentrant; @@ -465,17 +528,17 @@ ao_config_write(void) __reentrant; __code struct ao_config_var ao_config_vars[] = { #if HAS_ADC - { "m \0Main deploy (in meters)", + { "m \0Main deploy (m)", ao_config_main_deploy_set, ao_config_main_deploy_show, }, - { "d \0Apogee delay (in seconds)", + { "d \0Apogee delay (s)", ao_config_apogee_delay_set, ao_config_apogee_delay_show }, #endif /* HAS_ADC */ - { "r \0Radio channel (freq = 434.550 + chan * .1)", + { "r \0Radio channel", ao_config_radio_channel_set, ao_config_radio_channel_show }, + { "F \0Frequency (kHz)", + ao_config_frequency_set, ao_config_frequency_show }, { "c \0Callsign (8 char max)", ao_config_callsign_set, ao_config_callsign_show }, - { "R \0Radio freq control (freq = 434.550 * setting/cal)", - ao_config_radio_setting_set, ao_config_radio_setting_show }, { "e <0 disable, 1 enable>\0Enable telemetry and RDF", ao_config_radio_enable_set, ao_config_radio_enable_show }, #if HAS_ACCEL @@ -485,7 +548,7 @@ __code struct ao_config_var ao_config_vars[] = { { "f \0Radio calib (cal = rf/(xtal/2^16))", ao_config_radio_cal_set, ao_config_radio_cal_show }, #if HAS_LOG - { "l \0Flight log size in kB", + { "l \0Flight log size (kB)", ao_config_log_set, ao_config_log_show }, #endif #if HAS_IGNITE @@ -499,6 +562,10 @@ __code struct ao_config_var ao_config_vars[] = { #if HAS_AES { "k <32 hex digits>\0Set AES encryption key", ao_config_key_set, ao_config_key_show }, +#endif +#if HAS_RADIO_CHANNELS + { "C / \0Set radio chan config", + ao_config_radio_config_set,ao_config_radio_config_show }, #endif { "s\0Show", ao_config_show, 0 }, @@ -545,6 +612,7 @@ static void ao_config_show(void) __reentrant { uint8_t cmd; + ao_config_get(); printf("Config version: %d.%d\n", ao_config.major, ao_config.minor); for (cmd = 0; ao_config_vars[cmd].str != NULL; cmd++) @@ -572,7 +640,7 @@ ao_config_write(void) __reentrant #endif __code struct ao_cmds ao_config_cmds[] = { - { ao_config_set, "c \0Set config variable (? for help, s to show)" }, + { ao_config_set, "c \0Set config (? for help, s to show)" }, { 0, NULL }, };