X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao.h;h=bbf358e971dc1328fc8cb30db69d2fb77458c8d9;hp=853738b29171358967c0a80b931bcefa6d529b66;hb=c4e983daa4579896b227fdcb2be43fad75e94307;hpb=022f83ca6fd589005d8eb3e25e633950fef69fa7 diff --git a/ao.h b/ao.h index 853738b2..bbf358e9 100644 --- a/ao.h +++ b/ao.h @@ -29,7 +29,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 0x6f +#define AO_STACK_START 0x62 #define AO_STACK_END 0xfe #define AO_STACK_SIZE (AO_STACK_END - AO_STACK_START + 1) @@ -38,6 +38,7 @@ struct ao_task { __xdata void *wchan; /* current wait channel (NULL if running) */ uint8_t stack_count; /* amount of saved stack */ uint8_t task_id; /* index in the task array */ + __code char *name; /* task name */ uint8_t stack[AO_STACK_SIZE]; /* saved stack */ }; @@ -64,7 +65,11 @@ ao_yield(void) _naked; /* Add a task to the run queue */ void -ao_add_task(__xdata struct ao_task * task, void (*start)(void)); +ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name); + +/* Dump task info to console */ +void +ao_task_info(void); /* Start the scheduler. This will not return */ void @@ -472,15 +477,15 @@ enum ao_flight_state { ao_flight_invalid }; -extern __xdata struct ao_adc ao_flight_data; -extern __data enum flight_state ao_flight_state; -extern __data uint16_t ao_flight_tick; -extern __data int16_t ao_flight_accel; -extern __data int16_t ao_flight_pres; -extern __data int16_t ao_ground_pres; -extern __data int16_t ao_ground_accel; -extern __data int16_t ao_min_pres; -extern __data uint16_t ao_launch_time; +extern __xdata struct ao_adc ao_flight_data; +extern __pdata enum 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 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; /* Flight thread */ void @@ -580,6 +585,37 @@ ao_serial_init(void); * ao_gps.c */ +struct ao_gps_pos { + uint8_t degrees; + uint8_t minutes; + uint16_t minutes_fraction; /* in units of 1/10000 minutes */ +}; + +#define AO_GPS_NUM_SAT_MASK (0xf << 0) +#define AO_GPS_NUM_SAT_SHIFT (0) + +#define AO_GPS_VALID (1 << 4) +#define AO_GPS_LONGITUDE_MASK (1 << 5) +#define AO_GPS_LONGITUDE_EAST (0 << 5) +#define AO_GPS_LONGITUDE_WEST (1 << 5) + +#define AO_GPS_LATITUDE_MASK (1 << 6) +#define AO_GPS_LATITUDE_NORTH (0 << 6) +#define AO_GPS_LATITUDE_SOUTH (1 << 6) + +struct ao_gps_data { + uint8_t hour; + uint8_t minute; + uint8_t second; + uint8_t flags; + struct ao_gps_pos latitude; + struct ao_gps_pos longitude; + int16_t altitude; +}; + +extern __xdata uint8_t ao_gps_mutex; +extern __xdata struct ao_gps_data ao_gps_data; + void ao_gps(void);