X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fcore%2Fao.h;h=5e1fbb9d05d6a39ea91ec6ef368efa746ca0de2e;hp=204c85301854546d4858963ddfea03cb4a018d0d;hb=4d4ad34aec0c75c66162b992f1e52947e4685730;hpb=d2bd95edb6f77daeb1e8f043c4a239c248728e0c diff --git a/src/core/ao.h b/src/core/ao.h index 204c8530..5e1fbb9d 100644 --- a/src/core/ao.h +++ b/src/core/ao.h @@ -125,6 +125,13 @@ ao_panic(uint8_t reason); * ao_timer.c */ +#ifndef AO_TICK_TYPE +#define AO_TICK_TYPE uint16_t +#define AO_TICK_SIGNED int16_t +#endif + +extern volatile __data AO_TICK_TYPE ao_tick_count; + /* Our timer runs at 100Hz */ #define AO_HERTZ 100 #define AO_MS_TO_TICKS(ms) ((ms) / (1000 / AO_HERTZ)) @@ -264,6 +271,26 @@ ao_cmd_filter(void); * ao_report.c */ +#define AO_RDF_INTERVAL_TICKS AO_SEC_TO_TICKS(5) +#define AO_RDF_LENGTH_MS 500 +#define AO_RDF_CONTINUITY_MS 32 +#define AO_RDF_CONTINUITY_PAUSE 96 +#define AO_RDF_CONTINUITY_TOTAL ((AO_RDF_CONTINUITY_PAUSE + AO_RDF_CONTINUITY_MS) * 3 + AO_RDF_CONTINUITY_PAUSE) + +/* This assumes that we're generating a 1kHz tone, which + * modulates the carrier at 2kbps, or 250kBps + */ +#define AO_MS_TO_RDF_LEN(ms) ((ms) / 4) + +#define AO_RADIO_RDF_LEN AO_MS_TO_RDF_LEN(AO_RDF_LENGTH_MS) +#define AO_RADIO_CONT_TONE_LEN AO_MS_TO_RDF_LEN(AO_RDF_CONTINUITY_MS) +#define AO_RADIO_CONT_PAUSE_LEN AO_MS_TO_RDF_LEN(AO_RDF_CONTINUITY_PAUSE) +#define AO_RADIO_CONT_TOTAL_LEN AO_MS_TO_RDF_LEN(AO_RDF_CONTINUITY_TOTAL) + +/* returns a value 0-3 to indicate igniter continuity */ +uint8_t +ao_report_igniter(void); + void ao_report_init(void); @@ -396,10 +423,21 @@ ao_gps_report(void); void ao_gps_report_init(void); +/* + * ao_gps_report_mega.c + */ + +void +ao_gps_report_mega(void); + +void +ao_gps_report_mega_init(void); + /* * ao_telemetry_orig.c */ +#if LEGACY_MONITOR struct ao_adc_orig { uint16_t tick; /* tick when the sample was read */ int16_t accel; /* accelerometer */ @@ -457,6 +495,14 @@ struct ao_telemetry_tiny_recv { uint8_t status; }; +#endif /* LEGACY_MONITOR */ + +/* Unfortunately, we've exposed the CC1111 rssi units as the 'usual' method + * for reporting RSSI. So, now we use these values everywhere + */ +#define AO_RSSI_FROM_RADIO(radio) ((int16_t) ((int8_t) (radio) >> 1) - 74) +#define AO_RADIO_FROM_RSSI(rssi) (((int8_t) (rssi) + 74) << 1) + /* * ao_radio_recv tacks on rssi and status bytes */ @@ -501,19 +547,18 @@ extern __xdata uint8_t ao_radio_dma_done; extern __xdata uint8_t ao_radio_done; extern __xdata uint8_t ao_radio_mutex; -void -ao_radio_general_isr(void) ao_arch_interrupt(16); - -void -ao_radio_get(uint8_t len); - -#define ao_radio_put() ao_mutex_put(&ao_radio_mutex) +#ifdef PKT_APPEND_STATUS_1_CRC_OK +#define AO_RADIO_STATUS_CRC_OK PKT_APPEND_STATUS_1_CRC_OK +#else +#include +#define AO_RADIO_STATUS_CRC_OK AO_FEC_DECODE_CRC_OK +#endif void -ao_radio_set_packet(void); +ao_radio_general_isr(void) ao_arch_interrupt(16); void -ao_radio_send(__xdata void *d, uint8_t size) __reentrant; +ao_radio_send(const __xdata void *d, uint8_t size) __reentrant; uint8_t ao_radio_recv(__xdata void *d, uint8_t size) __reentrant; @@ -529,16 +574,14 @@ ao_radio_recv_abort(void); * 2 * ms bits, or ms / 4 bytes */ -#define AO_MS_TO_RDF_LEN(ms) ((ms) > 255 * 4 ? 255 : ((ms) >> 2)) - void -ao_radio_rdf(uint8_t pkt_len); +ao_radio_rdf(void); void -ao_radio_rdf_abort(void); +ao_radio_continuity(uint8_t c); void -ao_radio_idle(void); +ao_radio_rdf_abort(void); void ao_radio_init(void); @@ -547,6 +590,8 @@ ao_radio_init(void); * ao_monitor.c */ +#if HAS_MONITOR + extern const char const * const ao_state_names[]; #define AO_MONITOR_RING 8 @@ -583,6 +628,8 @@ ao_monitor_enable(void); void ao_monitor_init(void) __reentrant; +#endif + /* * ao_stdio.c */ @@ -655,8 +702,19 @@ ao_igniter_init(void); * ao_config.c */ +#if AO_PYRO_NUM +#include +#endif + +#if HAS_FORCE_FREQ +/* + * Set this to force the frequency to 434.550MHz + */ +extern __xdata uint8_t ao_force_freq; +#endif + #define AO_CONFIG_MAJOR 1 -#define AO_CONFIG_MINOR 11 +#define AO_CONFIG_MINOR 12 #define AO_AES_LEN 16 @@ -678,6 +736,9 @@ struct ao_config { uint8_t aes_key[AO_AES_LEN]; /* minor version 9 */ uint32_t frequency; /* minor version 10 */ uint16_t apogee_lockout; /* minor version 11 */ +#if AO_PYRO_NUM + struct ao_pyro pyro[AO_PYRO_NUM]; /* minor version 12 */ +#endif }; #define AO_IGNITE_MODE_DUAL 0 @@ -691,6 +752,12 @@ extern __xdata struct ao_config ao_config; #define AO_CONFIG_MAX_SIZE 128 +void +_ao_config_edit_start(void); + +void +_ao_config_edit_finish(void); + void ao_config_get(void);