altos: Add temporary RF power settings
authorKeith Packard <keithp@keithp.com>
Fri, 29 Mar 2013 19:13:59 +0000 (12:13 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 29 Mar 2013 19:13:59 +0000 (12:13 -0700)
These expose the raw cc115l and rfpa0133 register settings so that we
can calibrate them against measured power outputs.

I've tested them to verify that they change how much power the board
consumes, so they're clearly doing something...

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao.h
src/core/ao_config.c
src/drivers/ao_cc115l.c
src/drivers/ao_rf_cc115l.h
src/drivers/ao_rfpa0133.c
src/telegps-v0.1/ao_pins.h

index 6d617cfc89a2793631029f170dfcba62d6371b34..7c5c69b8bf6adef74aa88559fb779c5370ad0c2e 100644 (file)
@@ -550,7 +550,7 @@ ao_radio_send_lots(ao_radio_fill_func fill);
  * ao_radio_pa
  */
 
-#if AO_RADIO_HAS_PA
+#if HAS_RADIO_AMP
 void
 ao_radio_pa_on(void);
 
@@ -715,7 +715,7 @@ extern __xdata uint8_t ao_force_freq;
 #endif
 
 #define AO_CONFIG_MAJOR        1
-#define AO_CONFIG_MINOR        13
+#define AO_CONFIG_MINOR        14
 
 #define AO_AES_LEN 16
 
@@ -743,6 +743,12 @@ struct ao_config {
        struct ao_pyro  pyro[AO_PYRO_NUM];      /* minor version 12 */
 #endif
        uint16_t        aprs_interval;          /* minor version 13 */
+#if HAS_RADIO_POWER
+       uint8_t         radio_power;            /* minor version 14 */
+#endif
+#if HAS_RADIO_AMP
+       uint8_t         radio_amp;              /* minor version 14 */
+#endif
 };
 
 #define AO_IGNITE_MODE_DUAL            0
index 9c84fe60974dcf70be41a5c33ca85f2319243e2f..73608a55c542923b9692458838f0e20f91106c3e 100644 (file)
@@ -47,6 +47,8 @@ __xdata uint8_t ao_config_mutex;
 #define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX       ((uint32_t) 192 * (uint32_t) 1024)
 #endif
 #endif
+#define AO_CONFIG_DEFAULT_RADIO_POWER          0x60
+#define AO_CONFIG_DEFAULT_RADIO_AMP            0
 
 #if HAS_EEPROM
 static void
@@ -141,6 +143,14 @@ _ao_config_get(void)
 #endif
                if (minor < 13)
                        ao_config.aprs_interval = 0;
+#if HAS_RADIO_POWER
+               if (minor < 14)
+                       ao_config.radio_power = AO_CONFIG_DEFAULT_RADIO_POWER;
+               #endif
+#if HAS_RADIO_AMP
+               if (minor  < 14)
+                       ao_config.radio_amp = AO_CONFIG_DEFAULT_RADIO_AMP;
+#endif
                ao_config.minor = AO_CONFIG_MINOR;
                ao_config_dirty = 1;
        }
@@ -524,6 +534,48 @@ ao_config_aprs_set(void)
 
 #endif /* HAS_APRS */
 
+#if HAS_RADIO_AMP
+
+void
+ao_config_radio_amp_show(void)
+{
+       printf ("Radio amp setting: %d\n", ao_config.radio_amp);
+}
+
+void
+ao_config_radio_amp_set(void)
+{
+       ao_cmd_decimal();
+       if (ao_cmd_status != ao_cmd_success)
+               return;
+       _ao_config_edit_start();
+       ao_config.radio_amp = ao_cmd_lex_i;
+       _ao_config_edit_finish();
+}
+
+#endif
+
+#if HAS_RADIO_POWER
+
+void
+ao_config_radio_power_show(void)
+{
+       printf ("Radio power setting: %d\n", ao_config.radio_power);
+}
+
+void
+ao_config_radio_power_set(void)
+{
+       ao_cmd_decimal();
+       if (ao_cmd_status != ao_cmd_success)
+               return;
+       _ao_config_edit_start();
+       ao_config.radio_power = ao_cmd_lex_i;
+       _ao_config_edit_finish();
+}
+
+#endif
+
 struct ao_config_var {
        __code char     *str;
        void            (*set)(void) __reentrant;
@@ -557,6 +609,14 @@ __code struct ao_config_var ao_config_vars[] = {
          ao_config_radio_enable_set, ao_config_radio_enable_show },
        { "f <cal>\0Radio calib (cal = rf/(xtal/2^16))",
          ao_config_radio_cal_set,      ao_config_radio_cal_show },
+#if HAS_RADIO_POWER
+       { "p <setting>\0Radio power setting (0-255)",
+         ao_config_radio_power_set,    ao_config_radio_power_show },
+#endif
+#if HAS_RADIO_AMP
+       { "d <setting>\0Radio amplifier setting (0-3)",
+         ao_config_radio_amp_set,      ao_config_radio_amp_show },
+#endif
 #endif /* HAS_RADIO */
 #if HAS_ACCEL
        { "a <+g> <-g>\0Accel calib (0 for auto)",
index feff82afd35f2edc7122e98d095d992aee982a1e..5b0ec3d7fb8aa93d958dab7647b9048a714af398 100644 (file)
@@ -452,6 +452,7 @@ static void
 ao_radio_get(uint8_t len)
 {
        static uint32_t last_radio_setting;
+       static uint8_t  last_power_setting;
 
        ao_mutex_get(&ao_radio_mutex);
        if (!ao_radio_configured)
@@ -462,6 +463,10 @@ ao_radio_get(uint8_t len)
                ao_radio_reg_write(CC115L_FREQ0, ao_config.radio_setting);
                last_radio_setting = ao_config.radio_setting;
        }
+       if (ao_config.radio_power != last_power_setting) {
+               ao_radio_reg_write(CC115L_PA, ao_config.radio_power);
+               last_power_setting = ao_config.radio_power;
+       }
        ao_radio_set_len(len);
 }
 
index 6eb30bf29bcb276dc6837b45c874434b362bb95e..50a730ab3364d75530b62af6f4e5540baf54d9fc 100644 (file)
@@ -80,4 +80,4 @@
         CC115L_TEST1,                       0x35,       /* Various Test Settings */
         CC115L_TEST0,                       0x09,       /* Various Test Settings */
 
-       CC115L_PA,                          0x60,        /* Power setting (0dBm) */
+       CC115L_PA,                          0x00,        /* Power setting (0dBm) */
index 70d5edba2065b0f6a8c0836b611460285f8f3814..a98e261a853a478ce457cbb9c61c42efeef81151 100644 (file)
 
 #include "ao.h"
 
-static uint8_t power = 0;
-
 static void
-ao_rfpa0133_set_power(void)
+ao_rfpa0133_set_power(uint8_t power)
 {
        ao_gpio_set(AO_PA_GAIN_8_GPIO, AO_PA_GAIN_8_PIN, AO_PA_GAIN_8, power & 1);
        ao_gpio_set(AO_PA_GAIN_16_GPIO, AO_PA_GAIN_16_PIN, AO_PA_GAIN_16, (power >> 1) & 1);
@@ -29,7 +27,7 @@ ao_rfpa0133_set_power(void)
 void
 ao_radio_pa_on(void)
 {
-       ao_rfpa0133_set_power();
+       ao_rfpa0133_set_power(ao_config.radio_amp);
        ao_gpio_set(AO_PA_POWER_GPIO, AO_PA_POWER_PIN, AO_PA_POWER, 1);
 }
 
@@ -37,6 +35,7 @@ void
 ao_radio_pa_off(void)
 {
        ao_gpio_set(AO_PA_POWER_GPIO, AO_PA_POWER_PIN, AO_PA_POWER, 0);
+       ao_rfpa0133_set_power(0);
 }
 
 void
index 01f4a303499b481abbf864870a1548696797e0ea..095745686da569b1ee49c9785a630b57ac4ef928 100644 (file)
 
 #define AO_RADIO_CAL_DEFAULT   0x10b6a5
 
+#define HAS_RADIO_POWER                1
+
 #define AO_FEC_DEBUG           0
 #define AO_CC115L_SPI_CS_PORT  (&stm_gpiob)
 #define AO_CC115L_SPI_CS_PIN   12
 #define AO_CC115L_MARC_GPIO    0
 #define AO_CC115L_MARC_GPIO_IOCFG      CC115L_IOCFG0
 
-#define AO_RADIO_HAS_PA        1
+#define HAS_RADIO_AMP          1
 
 /*
  * Power amplifier (RFPA0133)