X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fkernel%2Fao_config.c;fp=src%2Fkernel%2Fao_config.c;h=84efb11cd0e2e3474723e9bf51ea339f9130a2e1;hp=ece60ad355124e4bdcf4a703b6e8434713f82433;hb=c49bd3cb0c31a51fae79ddc92237cc309be9a242;hpb=d225adc3af9e5726d436cbbdbf8dcc5837e50804 diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c index ece60ad3..84efb11c 100644 --- a/src/kernel/ao_config.c +++ b/src/kernel/ao_config.c @@ -54,6 +54,7 @@ uint8_t ao_force_freq; #define AO_CONFIG_DEFAULT_IGNITE_MODE AO_IGNITE_MODE_DUAL #define AO_CONFIG_DEFAULT_PAD_ORIENTATION AO_PAD_ORIENTATION_ANTENNA_UP #define AO_CONFIG_DEFAULT_PYRO_TIME AO_MS_TO_TICKS(50) +#define AO_CONFIG_DEFAULT_RADIO_10MW 0 #if HAS_CONFIG_SAVE #ifndef USE_INTERNAL_FLASH #error Please define USE_INTERNAL_FLASH @@ -76,7 +77,7 @@ uint8_t ao_force_freq; #define AO_CONFIG_DEFAULT_RADIO_POWER 0x60 #endif #define AO_CONFIG_DEFAULT_RADIO_AMP 0 -#define AO_CONFIG_DEFAULT_APRS_SSID (ao_serial_number % 10) +#define AO_CONFIG_DEFAULT_APRS_SSID ((uint8_t) (ao_serial_number % 10)) #define AO_CONFIG_DEFAULT_RADIO_RATE AO_RADIO_RATE_38400 #if HAS_CONFIG_SAVE @@ -176,7 +177,7 @@ _ao_config_get(void) if (minor < 9) memset(&ao_config.aes_key, '\0', AO_AES_LEN); if (minor < 10) - ao_config.frequency = 434550 + ao_config._legacy_radio_channel * 100; + ao_config.frequency = 434550U + ao_config._legacy_radio_channel * 100U; if (minor < 11) ao_config.apogee_lockout = 0; #if AO_PYRO_NUM @@ -188,7 +189,7 @@ _ao_config_get(void) #if HAS_RADIO_POWER if (minor < 14) ao_config.radio_power = AO_CONFIG_DEFAULT_RADIO_POWER; - #endif +#endif #if HAS_RADIO_AMP if (minor < 14) ao_config.radio_amp = AO_CONFIG_DEFAULT_RADIO_AMP; @@ -245,6 +246,10 @@ _ao_config_get(void) #if HAS_APRS if (minor < 24) ao_config.aprs_offset = 0; +#endif +#if HAS_RADIO_10MW + if (minor < 25) + ao_config.radio_10mw = AO_CONFIG_DEFAULT_RADIO_10MW; #endif ao_config.minor = AO_CONFIG_MINOR; ao_config_dirty = 1; @@ -386,7 +391,7 @@ ao_config_main_deploy_set(void) if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.main_deploy = r; + ao_config.main_deploy = (uint16_t) r; _ao_config_edit_finish(); } @@ -449,11 +454,11 @@ ao_config_accel_calibrate_auto(char *orientation) } } #if HAS_IMU - accel_cal_along = accel_along_total >> ACCEL_CALIBRATE_SHIFT; - accel_cal_across = accel_across_total >> ACCEL_CALIBRATE_SHIFT; - accel_cal_through = accel_through_total >> ACCEL_CALIBRATE_SHIFT; + accel_cal_along = (int16_t) (accel_along_total >> ACCEL_CALIBRATE_SHIFT); + accel_cal_across = (int16_t) (accel_across_total >> ACCEL_CALIBRATE_SHIFT); + accel_cal_through = (int16_t) (accel_through_total >> ACCEL_CALIBRATE_SHIFT); #endif - return accel_total >> ACCEL_CALIBRATE_SHIFT; + return (int16_t) (accel_total >> ACCEL_CALIBRATE_SHIFT); } static void @@ -467,10 +472,10 @@ ao_config_accel_calibrate_set(void) int16_t accel_through_up = 0, accel_through_down = 0; #endif - up = ao_cmd_decimal(); + up = (int16_t) ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; - down = ao_cmd_decimal(); + down = (int16_t) ao_cmd_decimal(); auto_cal = (up == 0 && ao_cmd_status != ao_cmd_success); if (auto_cal) { up = ao_config_accel_calibrate_auto("up"); @@ -496,19 +501,19 @@ ao_config_accel_calibrate_set(void) ao_config.accel_minus_g = down; #if HAS_IMU if (auto_cal) { - ao_config.accel_zero_along = (accel_along_up + accel_along_down) / 2; - ao_config.accel_zero_across = (accel_across_up + accel_across_down) / 2; - ao_config.accel_zero_through = (accel_through_up + accel_through_down) / 2; + ao_config.accel_zero_along = (int16_t) ((accel_along_up + accel_along_down) / 2); + ao_config.accel_zero_across = (int16_t) ((accel_across_up + accel_across_down) / 2); + ao_config.accel_zero_through = (int16_t) ((accel_through_up + accel_through_down) / 2); } else { int16_t v; - v = ao_cmd_decimal(); + v = (int16_t) ao_cmd_decimal(); if (ao_cmd_status == ao_cmd_success) { ao_config.accel_zero_along = v; - v = ao_cmd_decimal(); + v = (int16_t) ao_cmd_decimal(); if (ao_cmd_status == ao_cmd_success) { ao_config.accel_zero_across = v; - v = ao_cmd_decimal(); + v = (int16_t) ao_cmd_decimal(); if (ao_cmd_status == ao_cmd_success) ao_config.accel_zero_through = v; } @@ -533,8 +538,12 @@ ao_config_apogee_delay_set(void) uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; + if (r > 255) { + ao_cmd_status = ao_cmd_lex_error; + return; + } _ao_config_edit_start(); - ao_config.apogee_delay = r; + ao_config.apogee_delay = (uint8_t) r; _ao_config_edit_finish(); } @@ -548,11 +557,15 @@ ao_config_apogee_lockout_show(void) static void ao_config_apogee_lockout_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; + if (r > 65535) { + ao_cmd_status = ao_cmd_lex_error; + return; + } _ao_config_edit_start(); - ao_config.apogee_lockout = r; + ao_config.apogee_lockout = (uint16_t) r; _ao_config_edit_finish(); } #endif @@ -594,7 +607,7 @@ ao_config_radio_rate_show(void) static void ao_config_radio_rate_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; if (AO_RADIO_RATE_MAX < r) { @@ -602,7 +615,7 @@ ao_config_radio_rate_set(void) return; } _ao_config_edit_start(); - ao_config.radio_rate = r; + ao_config.radio_rate = (uint8_t) r; _ao_config_edit_finish(); #if HAS_TELEMETRY ao_telemetry_reset_interval(); @@ -676,11 +689,11 @@ ao_config_ignite_mode_show(void) static void ao_config_ignite_mode_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.ignite_mode = r; + ao_config.ignite_mode = (uint8_t) r; _ao_config_edit_finish(); } #endif @@ -695,7 +708,7 @@ ao_config_pad_orientation_show(void) static void ao_config_pad_orientation_set(void) { - uint16_t r = ao_cmd_decimal() & 1; + uint8_t r = ao_cmd_decimal() & 1; if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); @@ -720,11 +733,11 @@ ao_config_radio_enable_show(void) static void ao_config_radio_enable_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.radio_enable = r; + ao_config.radio_enable = r != 0; _ao_config_edit_finish(); #if HAS_TELEMETRY && HAS_RADIO_RATE ao_telemetry_reset_interval(); @@ -774,11 +787,11 @@ ao_config_aprs_show(void) static void ao_config_aprs_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.aprs_interval = r; + ao_config.aprs_interval = (uint16_t) r; _ao_config_edit_finish(); ao_telemetry_reset_interval(); } @@ -792,11 +805,11 @@ ao_config_aprs_offset_show(void) static void ao_config_aprs_offset_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.aprs_offset = r; + ao_config.aprs_offset = (uint8_t) r; _ao_config_edit_finish(); ao_telemetry_reset_interval(); } @@ -845,6 +858,27 @@ ao_config_radio_power_set(void) #endif +#if HAS_RADIO_10MW + +static void +ao_config_radio_10mw_show(void) +{ + printf ("Radio 10mw limit: %d\n", ao_config.radio_10mw); +} + +static void +ao_config_radio_10mw_set(void) +{ + uint32_t r = ao_cmd_decimal(); + if (ao_cmd_status != ao_cmd_success) + return; + _ao_config_edit_start(); + ao_config.radio_10mw = !!r; + _ao_config_edit_finish(); +} + +#endif + #if HAS_BEEP static void ao_config_beep_show(void) @@ -855,11 +889,11 @@ ao_config_beep_show(void) static void ao_config_beep_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.mid_beep = r; + ao_config.mid_beep = (uint8_t) r; _ao_config_edit_finish(); } #endif @@ -876,11 +910,12 @@ ao_config_tracker_show(void) static void ao_config_tracker_set(void) { - uint16_t m, i; - m = ao_cmd_decimal(); + uint16_t m; + uint8_t i; + m = (uint16_t) ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; - i = ao_cmd_decimal(); + i = (uint8_t) ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); @@ -903,11 +938,11 @@ ao_config_pyro_time_show(void) static void ao_config_pyro_time_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.pyro_time = r; + ao_config.pyro_time = (uint16_t) r; _ao_config_edit_finish(); } #endif @@ -923,7 +958,7 @@ ao_config_aprs_ssid_show(void) static void ao_config_aprs_ssid_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; if (15 < r) { @@ -931,14 +966,14 @@ ao_config_aprs_ssid_set(void) return; } _ao_config_edit_start(); - ao_config.aprs_ssid = r; + ao_config.aprs_ssid = (uint8_t) r; _ao_config_edit_finish(); } static void ao_config_aprs_format_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); @@ -963,11 +998,11 @@ ao_config_pad_box_show(void) static void ao_config_pad_box_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.pad_box = r; + ao_config.pad_box = (uint8_t) r; _ao_config_edit_finish(); } @@ -980,11 +1015,11 @@ ao_config_pad_idle_show(void) static void ao_config_pad_idle_set(void) { - uint16_t r = ao_cmd_decimal(); + uint32_t r = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; _ao_config_edit_start(); - ao_config.pad_idle = r; + ao_config.pad_idle = (uint8_t) r; _ao_config_edit_finish(); } #endif @@ -1090,6 +1125,10 @@ const struct ao_config_var ao_config_vars[] = { ao_config_pad_box_set, ao_config_pad_box_show }, { "i \0Set idle timeout (0 disable)", ao_config_pad_idle_set, ao_config_pad_idle_show }, +#endif +#if HAS_RADIO_10MW + { "p <0 no limit, 1 limit>\0Limit radio power to 10mW", + ao_config_radio_10mw_set, ao_config_radio_10mw_show }, #endif { "s\0Show", ao_config_show, 0 },