Merge branch 'new-packet-format' of ssh://git.gag.com/scm/git/fw/altos into new-packa...
[fw/altos] / src / ao.h
index b43f5ecd1132f190bda58524834d6fa8a585f570..9c418db2e804298f04335062dd6e14d9f150be71 100644 (file)
--- a/src/ao.h
+++ b/src/ao.h
@@ -43,7 +43,7 @@ struct ao_task {
        __xdata void *wchan;            /* current wait channel (NULL if running) */
        uint16_t alarm;                 /* abort ao_sleep time */
        uint8_t stack_count;            /* amount of saved stack */
-       uint8_t task_id;                /* index in the task array */
+       uint8_t task_id;                /* unique id */
        __code char *name;              /* task name */
        uint8_t stack[AO_STACK_SIZE];   /* saved stack */
 };
@@ -110,6 +110,7 @@ ao_start_scheduler(void);
 #define AO_PANIC_STDIO         7       /* Too many stdio handlers registered */
 #define AO_PANIC_REBOOT                8       /* Reboot failed */
 #define AO_PANIC_FLASH         9       /* Invalid flash part (or wrong blocksize) */
+#define AO_PANIC_USB           10      /* Trying to send USB packet while busy */
 
 /* Stop the operating system, beeping and blinking the reason */
 void
@@ -263,8 +264,6 @@ ao_beep_init(void);
  */
 
 #define AO_LED_NONE    0
-#define AO_LED_GREEN   1
-#define AO_LED_RED     2
 
 /* Turn on the specified LEDs */
 void
@@ -290,6 +289,17 @@ ao_led_for(uint8_t colors, uint16_t ticks) __reentrant;
 void
 ao_led_init(uint8_t enable);
 
+/*
+ * ao_romconfig.c
+ */
+
+#define AO_ROMCONFIG_VERSION   1
+
+extern __code __at (0x00a0) uint16_t ao_romconfig_version;
+extern __code __at (0x00a2) uint16_t ao_romconfig_check;
+extern __code __at (0x00a4) uint16_t ao_serial_number;
+extern __code __at (0x00a6) uint32_t ao_radio_cal;
+
 /*
  * ao_usb.c
  */
@@ -563,7 +573,7 @@ struct ao_log_record {
 
 /* Write a record to the eeprom log */
 void
-ao_log_data(struct ao_log_record *log);
+ao_log_data(__xdata struct ao_log_record *log) __reentrant;
 
 /* Flush the log */
 void
@@ -805,7 +815,7 @@ ao_gps_report_init(void);
  */
 
 #define AO_MAX_CALLSIGN                8
-#define AO_TELEMETRY_VERSION   2
+#define AO_TELEMETRY_VERSION   3
 
 struct ao_telemetry {
        uint8_t                 addr;
@@ -999,7 +1009,6 @@ ao_rssi_init(uint8_t rssi_led);
  */
 
 extern const uint8_t ao_usb_descriptors [];
-extern const uint16_t ao_serial_number;
 extern const char ao_version[];
 extern const char ao_manufacturer[];
 extern const char ao_product[];
@@ -1035,7 +1044,7 @@ struct ao_fifo {
  * Packet-based command interface
  */
 
-#define AO_PACKET_MAX  8
+#define AO_PACKET_MAX          64
 #define AO_PACKET_SYN          (uint8_t) 0xff
 
 struct ao_packet {
@@ -1044,6 +1053,7 @@ struct ao_packet {
        uint8_t         seq;
        uint8_t         ack;
        uint8_t         d[AO_PACKET_MAX];
+       uint8_t         callsign[AO_MAX_CALLSIGN];
 };
 
 struct ao_packet_recv {