X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fao.h;h=b88bef1f0adc5707de57ab47c2167236b08576c6;hp=5bbe5158e8452707518f88cccf477cc83e960a48;hb=7b009b2efe3af8722c358c304c2243652594e0d5;hpb=02611efea0c485d78fad08c696c1f56e868d36b8 diff --git a/src/ao.h b/src/ao.h index 5bbe5158..b88bef1f 100644 --- a/src/ao.h +++ b/src/ao.h @@ -34,7 +34,7 @@ /* Stack runs from above the allocated __data space to 0xfe, which avoids * writing to 0xff as that triggers the stack overflow indicator */ -#define AO_STACK_START 0x80 +#define AO_STACK_START 0x90 #define AO_STACK_END 0xfe #define AO_STACK_SIZE (AO_STACK_END - AO_STACK_START + 1) @@ -470,7 +470,7 @@ extern __xdata uint16_t ao_storage_unit; /* Initialize above values. Can only be called once the OS is running */ void -ao_storage_setup(void); +ao_storage_setup(void) __reentrant; /* Write data. Returns 0 on failure, 1 on success */ uint8_t @@ -516,6 +516,70 @@ ao_storage_device_info(void) __reentrant; * ao_log.c */ +/* We record flight numbers in the first record of + * the log. Tasks may wait for this to be initialized + * by sleeping on this variable. + */ +extern __xdata uint16_t ao_flight_number; + +extern __pdata uint32_t ao_log_current_pos; +extern __pdata uint32_t ao_log_end_pos; +extern __pdata uint32_t ao_log_start_pos; +extern __xdata uint8_t ao_log_running; +extern __xdata enum flight_state ao_log_state; + +/* required functions from the underlying log system */ + +/* Return the flight number from the given log slot, 0 if none */ +uint16_t +ao_log_flight(uint8_t slot); + +/* Flush the log */ +void +ao_log_flush(void); + +/* Logging thread main routine */ +void +ao_log(void); + +/* functions provided in ao_log.c */ + +/* Figure out the current flight number */ +void +ao_log_scan(void) __reentrant; + +/* Return the position of the start of the given log slot */ +uint32_t +ao_log_pos(uint8_t slot); + +/* Start logging to eeprom */ +void +ao_log_start(void); + +/* Stop logging */ +void +ao_log_stop(void); + +/* Initialize the logging system */ +void +ao_log_init(void); + +/* Write out the current flight number to the erase log */ +void +ao_log_write_erase(uint8_t pos); + +/* Returns true if there are any logs stored in eeprom */ +uint8_t +ao_log_present(void); + +/* Returns true if there is no more storage space available */ +uint8_t +ao_log_full(void); + +/* + * ao_log_big.c + */ + /* * The data log is recorded in the eeprom as a sequence * of data packets. @@ -614,44 +678,6 @@ struct ao_log_record { uint8_t ao_log_data(__xdata struct ao_log_record *log) __reentrant; -/* Flush the log */ -void -ao_log_flush(void); - -/* We record flight numbers in the first record of - * the log. Tasks may wait for this to be initialized - * by sleeping on this variable. - */ -extern __xdata uint16_t ao_flight_number; - -/* Logging thread main routine */ -void -ao_log(void); - -/* Start logging to eeprom */ -void -ao_log_start(void); - -/* Stop logging */ -void -ao_log_stop(void); - -/* Initialize the logging system */ -void -ao_log_init(void); - -/* Write out the current flight number to the erase log */ -void -ao_log_write_erase(uint8_t pos); - -/* Returns true if there are any logs stored in eeprom */ -uint8_t -ao_log_present(void); - -/* Returns true if there is no more storage space available */ -uint8_t -ao_log_full(void); - /* * ao_flight.c */ @@ -672,14 +698,19 @@ enum ao_flight_state { extern __data uint8_t ao_flight_adc; extern __pdata enum ao_flight_state ao_flight_state; extern __pdata uint16_t ao_flight_tick; -extern __pdata int16_t ao_flight_accel; -extern __pdata int16_t ao_flight_pres; -extern __pdata int32_t ao_flight_vel; -extern __pdata int16_t ao_ground_pres; +extern __xdata int16_t ao_ground_pres; extern __pdata int16_t ao_ground_accel; -extern __pdata int16_t ao_min_pres; extern __pdata uint16_t ao_launch_time; extern __xdata uint8_t ao_flight_force_idle; +extern __pdata int16_t ao_ground_height; +extern __pdata int16_t ao_max_height; +extern __pdata int16_t ao_height; /* meters */ +extern __pdata int16_t ao_speed; /* m/s * 16 */ +extern __pdata int16_t ao_accel; /* m/s² * 16 */ + +#define AO_M_TO_HEIGHT(m) ((int16_t) (m)) +#define AO_MS_TO_SPEED(ms) ((int16_t) ((ms) * 16)) +#define AO_MSS_TO_ACCEL(mss) ((int16_t) ((mss) * 16)) /* Flight thread */ void @@ -808,6 +839,7 @@ ao_spi_init(void); #define AO_GPS_VALID (1 << 4) #define AO_GPS_RUNNING (1 << 5) #define AO_GPS_DATE_VALID (1 << 6) +#define AO_GPS_COURSE_VALID (1 << 7) extern __xdata uint16_t ao_gps_tick; @@ -872,17 +904,22 @@ ao_gps_report_init(void); * ao_telemetry.c */ -#define AO_MAX_CALLSIGN 8 -#define AO_TELEMETRY_VERSION 3 +#define AO_MAX_CALLSIGN 8 struct ao_telemetry { uint16_t serial; uint16_t flight; uint8_t flight_state; - int16_t flight_accel; + int16_t accel; int16_t ground_accel; - int32_t flight_vel; - int16_t flight_pres; + union { + struct { + int16_t speed; + int16_t unused; + } k; + int32_t flight_vel; + } u; + int16_t height; int16_t ground_pres; int16_t accel_plus_g; int16_t accel_minus_g; @@ -892,6 +929,18 @@ struct ao_telemetry { struct ao_gps_tracking_data gps_tracking; }; +struct ao_telemetry_tiny { + uint16_t serial; + uint16_t flight; + uint8_t flight_state; + int16_t height; /* AGL in meters */ + int16_t speed; /* in m/s * 16 */ + int16_t accel; /* in m/s² * 16 */ + int16_t ground_pres; /* sensor units */ + struct ao_adc adc; /* raw ADC readings */ + char callsign[AO_MAX_CALLSIGN]; +}; + /* * ao_radio_recv tacks on rssi and status bytes */ @@ -901,10 +950,16 @@ struct ao_telemetry_recv { uint8_t status; }; +struct ao_telemetry_tiny_recv { + struct ao_telemetry_tiny telemetry_tiny; + int8_t rssi; + uint8_t status; +}; + /* Set delay between telemetry reports (0 to disable) */ #define AO_TELEMETRY_INTERVAL_PAD AO_MS_TO_TICKS(1000) -#define AO_TELEMETRY_INTERVAL_FLIGHT AO_MS_TO_TICKS(50) +#define AO_TELEMETRY_INTERVAL_FLIGHT AO_MS_TO_TICKS(100) #define AO_TELEMETRY_INTERVAL_RECOVER AO_MS_TO_TICKS(1000) void @@ -916,6 +971,9 @@ ao_rdf_set(uint8_t rdf); void ao_telemetry_init(void); +void +ao_telemetry_tiny_init(void); + /* * ao_radio.c */ @@ -929,18 +987,12 @@ void ao_radio_general_isr(void) __interrupt 16; void -ao_radio_get(void); +ao_radio_get(uint8_t len); #define ao_radio_put() ao_mutex_put(&ao_radio_mutex) void -ao_radio_set_fixed_pkt(size_t size); - -#define ao_radio_set_telemetry() \ - ao_radio_set_fixed_pkt(sizeof (struct ao_telemetry)) - -#define ao_radio_set_packet() \ - ao_radio_set_fixed_pkt(sizeof (struct ao_packet)) +ao_radio_set_packet(void); void ao_radio_send(__xdata void *data, uint8_t size) __reentrant; @@ -972,6 +1024,10 @@ extern const char const * const ao_state_names[]; void ao_monitor(void); +#define AO_MONITORING_OFF 0 +#define AO_MONITORING_FULL 1 +#define AO_MONITORING_TINY 2 + void ao_set_monitor(uint8_t monitoring); @@ -1164,6 +1220,6 @@ void ao_packet_slave_stop(void); void -ao_packet_slave_init(void); +ao_packet_slave_init(uint8_t enable); #endif /* _AO_H_ */