Merge remote-tracking branch 'origin/telemini'
authorKeith Packard <keithp@keithp.com>
Thu, 29 Aug 2013 04:52:58 +0000 (22:52 -0600)
committerKeith Packard <keithp@keithp.com>
Thu, 29 Aug 2013 04:52:58 +0000 (22:52 -0600)
Signed-off-by: Keith Packard <keithp@keithp.com>
Conflicts:
src/core/ao_telemetry.c
src/core/ao_telemetry.h

Added both Mini and Metrum telemetry defines

1  2 
src/core/ao_data.h
src/core/ao_task.c
src/core/ao_telemetry.c
src/core/ao_telemetry.h

Simple merge
Simple merge
@@@ -175,56 -171,35 +175,85 @@@ ao_send_mega_data(void
  }
  #endif /* AO_SEND_MEGA */
  
-                       
-       telemetry.generic.tick = packet->tick;
 +#ifdef AO_SEND_METRUM
 +/* Send telemetrum sensor packet */
 +static void
 +ao_send_metrum_sensor(void)
 +{
 +      __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)];
-               telemetry.generic.type = AO_TELEMETRY_MEGA_DATA;
++
 +      telemetry.generic.type = AO_TELEMETRY_METRUM_SENSOR;
 +
 +      telemetry.metrum_sensor.state = ao_flight_state;
 +      telemetry.metrum_sensor.accel = ao_data_accel(packet);
 +      telemetry.metrum_sensor.pres = ao_data_pres(packet);
 +      telemetry.metrum_sensor.temp = ao_data_temp(packet);
 +
 +      telemetry.metrum_sensor.acceleration = ao_accel;
 +      telemetry.metrum_sensor.speed = ao_speed;
 +      telemetry.metrum_sensor.height = ao_height;
 +
 +      telemetry.metrum_sensor.v_batt = packet->adc.v_batt;
 +      telemetry.metrum_sensor.sense_a = packet->adc.sense_a;
 +      telemetry.metrum_sensor.sense_m = packet->adc.sense_m;
 +
 +      ao_radio_send(&telemetry, sizeof (telemetry));
 +}
 +
 +static __pdata int8_t ao_telemetry_metrum_data_max;
 +static __pdata int8_t ao_telemetry_metrum_data_cur;
 +
 +/* Send telemetrum data packet */
 +static void
 +ao_send_metrum_data(void)
 +{
 +      if (--ao_telemetry_metrum_data_cur <= 0) {
 +              __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)];
 +              uint8_t i;
 +
 +              telemetry.generic.tick = packet->tick;
- #endif /* AO_SEND_MEGA */
++              telemetry.generic.type = AO_TELEMETRY_METRUM_DATA;
 +
 +              telemetry.metrum_data.ground_pres = ao_ground_pres;
 +              telemetry.metrum_data.ground_accel = ao_ground_accel;
 +              telemetry.metrum_data.accel_plus_g = ao_config.accel_plus_g;
 +              telemetry.metrum_data.accel_minus_g = ao_config.accel_minus_g;
 +
 +              ao_radio_send(&telemetry, sizeof (telemetry));
 +              ao_telemetry_metrum_data_cur = ao_telemetry_metrum_data_max;
 +      }
 +}
 -#endif
++#endif /* AO_SEND_METRUM */
++
+ #ifdef AO_SEND_MINI
+ static void
+ ao_send_mini(void)
+ {
+       __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)];
+                       
+       telemetry.generic.tick = packet->tick;
+       telemetry.generic.type = AO_TELEMETRY_MINI;
+       telemetry.mini.state = ao_flight_state;
+       telemetry.mini.v_batt = packet->adc.v_batt;
+       telemetry.mini.sense_a = packet->adc.sense_a;
+       telemetry.mini.sense_m = packet->adc.sense_m;
+       telemetry.mini.pres = ao_data_pres(packet);
+       telemetry.mini.temp = ao_data_temp(packet);
+       telemetry.mini.acceleration = ao_accel;
+       telemetry.mini.speed = ao_speed;
+       telemetry.mini.height = ao_height;
+       telemetry.mini.ground_pres = ao_ground_pres;
+       ao_radio_send(&telemetry, sizeof (telemetry));
+ }
++#endif /* AO_SEND_MINI */
  
  #ifdef AO_SEND_ALL_BARO
  static uint8_t                ao_baro_sample;
@@@ -369,7 -344,7 +398,6 @@@ ao_telemetry(void
                ao_aprs_time = time;
  #endif
                while (ao_telemetry_interval) {
--
  #if HAS_APRS
                        if (!(ao_config.radio_enable & AO_RADIO_DISABLE_TELEMETRY))
  #endif
  #ifdef AO_SEND_ALL_BARO
                                ao_send_baro();
  #endif
++
  #if HAS_FLIGHT
- #ifdef AO_SEND_MEGA
+ # ifdef AO_SEND_MEGA
                                ao_send_mega_sensor();
                                ao_send_mega_data();
- #else
- #ifdef AO_SEND_METRUM
 -# else
 -#  ifdef AO_SEND_MINI
++# endif
++# ifdef AO_SEND_METRUM
 +                              ao_send_metrum_sensor();
 +                              ao_send_metrum_data();
- #else
++# endif
++# ifdef AO_SEND_MINI
+                               ao_send_mini();
 -#  else
++# endif
++# ifdef AO_TELEMETRY_SENSOR
                                ao_send_sensor();
- #endif
- #endif
- #endif
 -#  endif
+ # endif
 -#endif
++#endif /* HAS_FLIGHT */
  
  #if HAS_COMPANION
                                if (ao_companion_running)
                        if (ao_rdf &&
  #if HAS_APRS
                            !(ao_config.radio_enable & AO_RADIO_DISABLE_RDF) &&
--#endif
++#endif /* HAS_APRS */
                            (int16_t) (ao_time() - ao_rdf_time) >= 0)
                        {
  #if HAS_IGNITE_REPORT
                                uint8_t c;
--#endif
++#endif /* HAS_IGNITE_REPORT */
                                ao_rdf_time = ao_time() + AO_RDF_INTERVAL_TICKS;
  #if HAS_IGNITE_REPORT
                                if (ao_flight_state == ao_flight_pad && (c = ao_report_igniter()))
                                        ao_radio_continuity(c);
                                else
--#endif
++#endif /* HAS_IGNITE_REPORT*/
                                        ao_radio_rdf();
                        }
  #endif /* HAS_RDF */
                                ao_aprs_time = ao_time() + AO_SEC_TO_TICKS(ao_config.aprs_interval);
                                ao_aprs_send();
                        }
--#endif
--#endif
++#endif /* HAS_APRS */
++#endif /* !AO_SEND_ALL_BARO */
                        time += ao_telemetry_interval;
                        delay = time - ao_time();
                        if (delay > 0) {
@@@ -207,47 -207,31 +207,71 @@@ struct ao_telemetry_mega_data 
  };
  
  
 -
 +#define AO_TELEMETRY_METRUM_SENSOR    0x0A
 +
 +struct ao_telemetry_metrum_sensor {
 +      uint16_t        serial;         /*  0 */
 +      uint16_t        tick;           /*  2 */
 +      uint8_t         type;           /*  4 */
 +
 +      uint8_t         state;          /*  5 flight state */
 +      int16_t         accel;          /*  6 Z axis */
 +
 +      int32_t         pres;           /*  8 Pa * 10 */
 +      int16_t         temp;           /* 12 °C * 100 */
 +
 +      int16_t         acceleration;   /* 14 m/s² * 16 */
 +      int16_t         speed;          /* 16 m/s * 16 */
 +      int16_t         height;         /* 18 m */
 +
 +      int16_t         v_batt;         /* 20 battery voltage */
 +      int16_t         sense_a;        /* 22 apogee continuity sense */
 +      int16_t         sense_m;        /* 24 main continuity sense */
 +
 +      uint8_t         pad[6];         /* 26 */
 +      /* 32 */
 +};
 +      
 +#define AO_TELEMETRY_METRUM_DATA      0x0B
 +
 +struct ao_telemetry_metrum_data {
 +      uint16_t        serial;         /*  0 */
 +      uint16_t        tick;           /*  2 */
 +      uint8_t         type;           /*  4 */
 +
 +      int32_t         ground_pres;    /* 8 average pres on pad */
 +      int16_t         ground_accel;   /* 12 average accel on pad */
 +      int16_t         accel_plus_g;   /* 14 accel calibration at +1g */
 +      int16_t         accel_minus_g;  /* 16 accel calibration at -1g */
 +
 +      uint8_t         pad[14];        /* 18 */
 +      /* 32 */
 +};
 +
+ #define AO_TELEMETRY_MINI             0x10
+ struct ao_telemetry_mini {
+       uint16_t        serial;         /*  0 */
+       uint16_t        tick;           /*  2 */
+       uint8_t         type;           /*  4 */
+       uint8_t         state;          /*  5 flight state */
+       int16_t         v_batt;         /*  6 battery voltage */
+       int16_t         sense_a;        /*  8 apogee continuity */
+       int16_t         sense_m;        /* 10 main continuity */
+       int32_t         pres;           /* 12 Pa * 10 */
+       int16_t         temp;           /* 16 °C * 100 */
+       int16_t         acceleration;   /* 18 m/s² * 16 */
+       int16_t         speed;          /* 20 m/s * 16 */
+       int16_t         height;         /* 22 m */
+       int32_t         ground_pres;    /* 24 average pres on pad */
+       int32_t         pad28;          /* 28 */
+       /* 32 */
+ };
  
  /* #define AO_SEND_ALL_BARO */
  
@@@ -282,8 -266,7 +306,9 @@@ union ao_telemetry_all 
        struct ao_telemetry_companion           companion;
        struct ao_telemetry_mega_sensor         mega_sensor;
        struct ao_telemetry_mega_data           mega_data;
 +      struct ao_telemetry_metrum_sensor       metrum_sensor;
 +      struct ao_telemetry_metrum_data         metrum_data;
+       struct ao_telemetry_mini                mini;
        struct ao_telemetry_baro                baro;
  };