X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_config.c;h=217b0ab1a8cd5145dbc6470f2c95bede280144f1;hb=91b6d1e56a37a2cfae53c3727feaaa40505f48d9;hp=9f329f17554b57e1271e94f788b51ccc3761c2f5;hpb=99525a748e00406424b98a0952f0156437b30b6c;p=fw%2Faltos diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c index 9f329f17..217b0ab1 100644 --- a/src/kernel/ao_config.c +++ b/src/kernel/ao_config.c @@ -86,7 +86,7 @@ _ao_config_put(void) ao_config_setup(); ao_config_erase(); ao_config_write(0, &ao_config, sizeof (ao_config)); -#if HAS_FLIGHT +#if HAS_FLIGHT && HAS_LOG ao_log_write_erase(0); #endif ao_config_flush(); @@ -238,6 +238,10 @@ _ao_config_get(void) ao_config.pad_box = 1; if (minor < 23) ao_config.pad_idle = 120; +#endif +#if HAS_APRS + if (minor < 24) + ao_config.aprs_offset = 0; #endif ao_config.minor = AO_CONFIG_MINOR; ao_config_dirty = 1; @@ -363,6 +367,8 @@ ao_config_send_frequency_set(void) #if HAS_FLIGHT +#if HAS_BARO + static void ao_config_main_deploy_show(void) { @@ -381,6 +387,8 @@ ao_config_main_deploy_set(void) _ao_config_edit_finish(); } +#endif + #if HAS_ACCEL static void ao_config_accel_calibrate_show(void) @@ -498,6 +506,7 @@ ao_config_accel_calibrate_set(void) } #endif /* HAS_ACCEL */ +#if HAS_BARO static void ao_config_apogee_delay_show(void) { @@ -533,6 +542,7 @@ ao_config_apogee_lockout_set(void) ao_config.apogee_lockout = r; _ao_config_edit_finish(); } +#endif #endif /* HAS_FLIGHT */ @@ -619,26 +629,26 @@ static void ao_config_log_set(void) { #if FLIGHT_LOG_APPEND - printf("Flight log fixed size %d kB\n", ao_storage_log_max >> 10); + printf("Flight log fixed size %u kB\n", (unsigned) (ao_storage_log_max >> 10)); #else - uint16_t block = (uint16_t) (ao_storage_block >> 10); - uint16_t log_max = (uint16_t) (ao_storage_log_max >> 10); uint32_t r; r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; - if (ao_log_present()) - printf("Storage must be empty before changing log size\n"); - else if (block > 1024 && (r & (block - 1))) - printf("Flight log size must be multiple of %d kB\n", block); - else if (r > log_max) - printf("Flight log max %d kB\n", log_max); - else { - _ao_config_edit_start(); - ao_config.flight_log_max = r << 10; - _ao_config_edit_finish(); + r = r << 10; + if (ao_log_present()) { + if (r != ao_config.flight_log_max) + printf("Storage must be empty before changing log size\n"); + return; + } + if (r > ao_storage_log_max) { + printf("Flight log max %u kB\n", (unsigned) (ao_storage_log_max >> 10)); + return; } + _ao_config_edit_start(); + ao_config.flight_log_max = r & ~(ao_storage_block - 1); + _ao_config_edit_finish(); #endif } #endif /* HAS_LOG */ @@ -760,6 +770,24 @@ ao_config_aprs_set(void) ao_telemetry_reset_interval(); } +static void +ao_config_aprs_offset_show(void) +{ + printf ("APRS offset: %d\n", ao_config.aprs_offset); +} + +static void +ao_config_aprs_offset_set(void) +{ + uint16_t r = ao_cmd_decimal(); + if (ao_cmd_status != ao_cmd_success) + return; + _ao_config_edit_start(); + ao_config.aprs_offset = r; + _ao_config_edit_finish(); + ao_telemetry_reset_interval(); +} + #endif /* HAS_APRS */ #if HAS_RADIO_AMP @@ -966,7 +994,7 @@ ao_config_save(void); #endif const struct ao_config_var ao_config_vars[] = { -#if HAS_FLIGHT +#if HAS_FLIGHT && HAS_BARO { "m \0Main deploy (m)", ao_config_main_deploy_set, ao_config_main_deploy_show, }, { "d \0Apogee delay (s)", @@ -1041,6 +1069,8 @@ const struct ao_config_var ao_config_vars[] = { ao_config_aprs_ssid_set, ao_config_aprs_ssid_show }, { "C <0 compressed, 1 uncompressed>\0APRS format", ao_config_aprs_format_set, ao_config_aprs_format_show }, + { "O \0APRS Offset from top of minute", + ao_config_aprs_offset_set, ao_config_aprs_offset_show }, #endif #if HAS_FIXED_PAD_BOX { "B \0Set pad box (1-99)",