altos: Add configurable beep tone
authorKeith Packard <keithp@keithp.com>
Fri, 2 May 2014 19:26:07 +0000 (12:26 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 2 May 2014 20:52:45 +0000 (13:52 -0700)
This lets you directly set the mid-range beep tone; the high and low
tones remain set off of that in the same ratio as before.

Note that none of the cc1111 products get this feature as they don't
have enough flash space anymore...

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_pins.h
src/kernel/ao.h
src/kernel/ao_beep.h
src/kernel/ao_config.c
src/kernel/ao_telemetry.h
src/telemini-v2.0/ao_pins.h

index 5b1586e08b8073d70526911125a7b7b2a3795e56..91bf81d2102a3a37cc09a14f353b2ac75a82cde4 100644 (file)
@@ -24,6 +24,7 @@
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BEEP_CONFIG         0
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
@@ -58,6 +59,7 @@
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BEEP_CONFIG         0
        #define HAS_BATTERY_REPORT      1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
@@ -95,6 +97,7 @@
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BEEP_CONFIG         0
        #define HAS_BATTERY_REPORT      1
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_FLIGHT              1
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BEEP_CONFIG         0
        #define HAS_GPS                 1
        #define HAS_SERIAL_1            1
        #define HAS_ADC                 1
        #define HAS_FLIGHT              0
        #define HAS_USB                 1
        #define HAS_BEEP                1
+       #define HAS_BEEP_CONFIG         0
        #define HAS_SERIAL_1            1
        #define HAS_SERIAL_1_ALT_1      1
        #define HAS_SERIAL_1_ALT_2      0
index 29ad26031d9733cfe7409b31127c06c53698ec41..9169bd8428fc6a9c55ee20345b5f8abf3dffb60f 100644 (file)
@@ -750,7 +750,7 @@ extern __xdata uint8_t ao_force_freq;
 #endif
 
 #define AO_CONFIG_MAJOR        1
-#define AO_CONFIG_MINOR        15
+#define AO_CONFIG_MINOR        16
 
 #define AO_AES_LEN 16
 
@@ -789,6 +789,9 @@ struct ao_config {
        int16_t         accel_zero_across;      /* minor version 15 */
        int16_t         accel_zero_through;     /* minor version 15 */
 #endif
+#if HAS_BEEP
+       uint8_t         mid_beep;               /* minor version 16 */
+#endif
 };
 
 #define AO_IGNITE_MODE_DUAL            0
index 55f6117155fd3001a64c2fa6215676d9467827bf..9d6ecf2766f830ed295e2853162ea9c7434681d1 100644 (file)
 #ifndef _AO_BEEP_H_
 #define _AO_BEEP_H_
 
+#ifndef HAS_BEEP_CONFIG
+#if defined(USE_EEPROM_CONFIG) && USE_EEPROM_CONFIG || HAS_EEPROM
+#define HAS_BEEP_CONFIG        1
+#endif
+#endif
+
 /*
  * ao_beep.c
  */
  * frequency = 1/2 (24e6/32) / beep
  */
 
-#define AO_BEEP_LOW    150     /* 2500Hz */
-#define AO_BEEP_MID    94      /* 3989Hz */
-#define AO_BEEP_HIGH   75      /* 5000Hz */
+#define AO_BEEP_MID_DEFAULT    94      /* 3989Hz */
+
+#if HAS_BEEP_CONFIG
+#define AO_BEEP_MID    ao_config.mid_beep
+#else
+#define AO_BEEP_MID    AO_BEEP_MID_DEFAULT
+#endif
+#define AO_BEEP_LOW    AO_BEEP_MID * 150 / 94  /* 2500Hz */
+#define AO_BEEP_HIGH   AO_BEEP_MID * 75 / 94   /* 5000Hz */
+
 #define AO_BEEP_OFF    0       /* off */
 
 #define AO_BEEP_g      240     /* 1562.5Hz */
index 4482f673f59c0fdbbe132f0c52bcd89d1095a762..411399d72faf3ec1650b0d015a8d54cb2aa28eb6 100644 (file)
@@ -22,6 +22,9 @@
 #include <ao_sample.h>
 #include <ao_data.h>
 #endif
+#if HAS_BEEP
+#include <ao_beep.h>
+#endif
 
 __xdata struct ao_config ao_config;
 __pdata uint8_t ao_config_loaded;
@@ -170,6 +173,10 @@ _ao_config_get(void)
                        ao_config.accel_plus_g = 0;
                        ao_config.accel_minus_g = 0;
                }
+#endif
+#if HAS_BEEP_CONFIG
+               if (minor < 16)
+                       ao_config.mid_beep = AO_BEEP_MID_DEFAULT;
 #endif
                ao_config.minor = AO_CONFIG_MINOR;
                ao_config_dirty = 1;
@@ -357,7 +364,7 @@ ao_config_accel_calibrate_set(void) __reentrant
        int16_t accel_across_up = 0, accel_across_down = 0;
        int16_t accel_through_up = 0, accel_through_down = 0;
 #endif
-       
+
        ao_cmd_decimal();
        if (ao_cmd_status != ao_cmd_success)
                return;
@@ -555,7 +562,7 @@ ao_config_radio_enable_set(void) __reentrant
        _ao_config_edit_finish();
 }
 #endif /* HAS_RADIO */
-       
+
 #if HAS_AES
 
 __xdata uint8_t        ao_config_aes_seq = 1;
@@ -650,6 +657,26 @@ ao_config_radio_power_set(void)
 
 #endif
 
+#if HAS_BEEP_CONFIG
+void
+ao_config_beep_show(void)
+{
+       printf ("Beeper setting: %d\n", ao_config.mid_beep);
+}
+
+void
+ao_config_beep_set(void)
+{
+       ao_cmd_decimal();
+       if (ao_cmd_status != ao_cmd_success)
+               return;
+       _ao_config_edit_start();
+       ao_config.mid_beep = ao_cmd_lex_i;
+       _ao_config_edit_finish();
+}
+#endif
+
+
 struct ao_config_var {
        __code char     *str;
        void            (*set)(void) __reentrant;
@@ -719,6 +746,10 @@ __code struct ao_config_var ao_config_vars[] = {
 #if HAS_APRS
        { "A <secs>\0APRS packet interval (0 disable)",
          ao_config_aprs_set, ao_config_aprs_show },
+#endif
+#if HAS_BEEP_CONFIG
+       { "b <val>\0Configure beeper tone (freq = 1/2 (24e6/32) / beep",
+         ao_config_beep_set, ao_config_beep_show },
 #endif
        { "s\0Show",
          ao_config_show,               0 },
index 237a35aba2a15401dc1c93695b1ae65aa1d7f47c..fe07c2af490d14368a994012815d81ec869ad159 100644 (file)
@@ -154,7 +154,7 @@ struct ao_telemetry_companion {
        uint16_t                                companion_data[AO_COMPANION_MAX_CHANNELS];      /*  8 */
        /* 32 */
 };
-       
+
 #define AO_TELEMETRY_MEGA_SENSOR       0x08
 
 struct ao_telemetry_mega_sensor {
@@ -181,7 +181,7 @@ struct ao_telemetry_mega_sensor {
        int16_t         mag_z;          /* 30 */
        /* 32 */
 };
-       
+
 #define AO_TELEMETRY_MEGA_DATA         0x09
 
 struct ao_telemetry_mega_data {
@@ -231,7 +231,7 @@ struct ao_telemetry_metrum_sensor {
        uint8_t         pad[6];         /* 26 */
        /* 32 */
 };
-       
+
 #define AO_TELEMETRY_METRUM_DATA       0x0B
 
 struct ao_telemetry_metrum_data {
index dc18aff7df94e80b319ae82dacfe066e18c31958..1b4f602fefa9b0d4f5518046d9a2170c2ca7ab67 100644 (file)
@@ -24,6 +24,7 @@
 #define HAS_USB                        1
 #define USB_FORCE_FLIGHT_IDLE  1
 #define HAS_BEEP               1
+#define HAS_BEEP_CONFIG                0
 #define HAS_BATTERY_REPORT     1
 #define HAS_GPS                        0
 #define HAS_SERIAL_1           0