altos: Make APRS SSID configurable
[fw/altos] / src / kernel / ao_config.c
index 721705551f66ec32bb02d10b7ffdeee888e6d01b..58fa735438c31439b25558369dd6e62c84f6cdd3 100644 (file)
@@ -61,6 +61,7 @@ __xdata uint8_t ao_config_mutex;
 #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)
 
 #if HAS_EEPROM
 static void
@@ -184,13 +185,17 @@ _ao_config_get(void)
 #endif
 #if HAS_TRACKER
                if (minor < 17) {
-                       ao_config.tracker_start_horiz = AO_CONFIG_DEFAULT_TRACKER_START_HORIZ;
-                       ao_config.tracker_start_vert = AO_CONFIG_DEFAULT_TRACKER_START_VERT;
+                       ao_config.tracker_motion = AO_TRACKER_MOTION_DEFAULT;
+                       ao_config.tracker_interval = AO_TRACKER_INTERVAL_DEFAULT;
                }
 #endif
 #if AO_PYRO_NUM
                if (minor < 18)
                        ao_config.pyro_time = AO_CONFIG_DEFAULT_PYRO_TIME;
+#endif
+#if HAS_APRS
+               if (minor < 19)
+                       ao_config.aprs_ssid = AO_CONFIG_DEFAULT_APRS_SSID;
 #endif
                ao_config.minor = AO_CONFIG_MINOR;
                ao_config_dirty = 1;
@@ -283,6 +288,7 @@ ao_config_frequency_set(void) __reentrant
        ao_radio_recv_abort();
 #endif
 }
+
 #endif
 
 #if HAS_FLIGHT
@@ -695,25 +701,25 @@ void
 ao_config_tracker_show(void)
 {
        printf ("Tracker setting: %d %d\n",
-               ao_config.tracker_start_horiz,
-               ao_config.tracker_start_vert);
+               ao_config.tracker_motion,
+               ao_config.tracker_interval);
 }
 
 void
 ao_config_tracker_set(void)
 {
-       uint16_t        h, v;
+       uint16_t        m, i;
        ao_cmd_decimal();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       h = ao_cmd_lex_i;
+       m = ao_cmd_lex_i;
        ao_cmd_decimal();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       v = ao_cmd_lex_i;
+       i = ao_cmd_lex_i;
        _ao_config_edit_start();
-       ao_config.tracker_start_horiz = h;
-       ao_config.tracker_start_vert = v;
+       ao_config.tracker_motion = m;
+       ao_config.tracker_interval = i;
        _ao_config_edit_finish();
 }
 #endif /* HAS_TRACKER */
@@ -737,6 +743,30 @@ ao_config_pyro_time_set(void)
 }
 #endif
 
+#if HAS_APRS
+void
+ao_config_aprs_ssid_show(void)
+{
+       printf ("APRS SSID: %d\n",
+               ao_config.aprs_ssid);
+}
+
+void
+ao_config_aprs_ssid_set(void)
+{
+       ao_cmd_decimal();
+       if (ao_cmd_status != ao_cmd_success)
+               return;
+       if (15 < ao_cmd_lex_i) {
+               ao_cmd_status = ao_cmd_lex_error;
+               return;
+       }
+       _ao_config_edit_start();
+       ao_config.aprs_ssid = ao_cmd_lex_i;
+       _ao_config_edit_finish();
+}
+#endif /* HAS_APRS */
+
 struct ao_config_var {
        __code char     *str;
        void            (*set)(void) __reentrant;
@@ -814,8 +844,12 @@ __code struct ao_config_var ao_config_vars[] = {
          ao_config_beep_set, ao_config_beep_show },
 #endif
 #if HAS_TRACKER
-       { "t <horiz> <vert>\0Tracker start trigger distances",
+       { "t <motion> <interval>\0Tracker configuration",
          ao_config_tracker_set, ao_config_tracker_show },
+#endif
+#if HAS_APRS
+       { "S <ssid>\0Set APRS SSID (0-15)",
+         ao_config_aprs_ssid_set, ao_config_aprs_ssid_show },
 #endif
        { "s\0Show",
          ao_config_show,               0 },