X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao.h;h=150c08171f1593f8c08fcbe15fc9bfc2c10192fe;hb=c7119405a3dd7128120374a2a001bc98ef523619;hp=cbe2f8dc34a222c82c668262912794b3f6838eb2;hpb=b132eefc5f63412bb4a98a4bb72b9055e40d5d42;p=fw%2Faltos diff --git a/src/core/ao.h b/src/core/ao.h index cbe2f8dc..150c0817 100644 --- a/src/core/ao.h +++ b/src/core/ao.h @@ -113,6 +113,8 @@ ao_start_scheduler(void); #define AO_PANIC_FLASH 9 /* Invalid flash part (or wrong blocksize) */ #define AO_PANIC_USB 10 /* Trying to send USB packet while busy */ #define AO_PANIC_BT 11 /* Communications with bluetooth device failed */ +#define AO_PANIC_STACK 12 /* Stack overflow */ +#define AO_PANIC_SPI 13 /* SPI communication failure */ /* Stop the operating system, beeping and blinking the reason */ void @@ -257,29 +259,33 @@ ao_beep_init(void); #define AO_LED_NONE 0 +#ifndef AO_LED_TYPE +#define AO_LED_TYPE uint8_t +#endif + /* Turn on the specified LEDs */ void -ao_led_on(uint8_t colors); +ao_led_on(AO_LED_TYPE colors); /* Turn off the specified LEDs */ void -ao_led_off(uint8_t colors); +ao_led_off(AO_LED_TYPE colors); /* Set all of the LEDs to the specified state */ void -ao_led_set(uint8_t colors); +ao_led_set(AO_LED_TYPE colors); /* Toggle the specified LEDs */ void -ao_led_toggle(uint8_t colors); +ao_led_toggle(AO_LED_TYPE colors); /* Turn on the specified LEDs for the indicated interval */ void -ao_led_for(uint8_t colors, uint16_t ticks) __reentrant; +ao_led_for(AO_LED_TYPE colors, uint16_t ticks) __reentrant; /* Initialize the LEDs */ void -ao_led_init(uint8_t enable); +ao_led_init(AO_LED_TYPE enable); /* * ao_usb.c @@ -349,6 +355,9 @@ ao_cmd_put8(uint8_t v); void ao_cmd_put16(uint16_t v); +uint8_t +ao_cmd_is_white(void); + void ao_cmd_white(void); @@ -373,7 +382,7 @@ struct ao_cmds { }; void -ao_cmd_register(__code struct ao_cmds *cmds); +ao_cmd_register(const __code struct ao_cmds *cmds); void ao_cmd_init(void); @@ -386,42 +395,6 @@ uint8_t ao_cmd_filter(void); #endif -/* - * ao_dma.c - */ - -/* Allocate a DMA channel. the 'done' parameter will be set when the - * dma is finished and will be used to wakeup any waiters - */ - -uint8_t -ao_dma_alloc(__xdata uint8_t * done); - -/* Setup a DMA channel */ -void -ao_dma_set_transfer(uint8_t id, - void __xdata *srcaddr, - void __xdata *dstaddr, - uint16_t count, - uint8_t cfg0, - uint8_t cfg1); - -/* Start a DMA channel */ -void -ao_dma_start(uint8_t id); - -/* Manually trigger a DMA channel */ -void -ao_dma_trigger(uint8_t id); - -/* Abort a running DMA transfer */ -void -ao_dma_abort(uint8_t id); - -/* DMA interrupt routine */ -void -ao_dma_isr(void) ao_arch_interrupt(8); - /* * ao_mutex.c */ @@ -895,7 +868,7 @@ ao_dbg_init(void); #error Please define HAS_SERIAL_1 #endif -#if HAS_SERIAL_1 +#if HAS_SERIAL_1 | HAS_SERIAL_2 | HAS_SERIAL_3 #ifndef USE_SERIAL_STDIN #error Please define USE_SERIAL_STDIN #endif @@ -914,7 +887,7 @@ char ao_serial_pollchar(void) __critical; void -ao_serial_set_stdin(uint8_t stdin); +ao_serial_set_stdin(uint8_t in); #endif void @@ -935,46 +908,38 @@ void ao_serial_init(void); #endif -/* - * ao_spi.c - */ +#ifndef HAS_SERIAL_0 +#define HAS_SERIAL_0 0 +#endif -extern __xdata uint8_t ao_spi_mutex; +#if HAS_SERIAL_0 -#define ao_spi_get_mask(reg,mask) do {\ - ao_mutex_get(&ao_spi_mutex); \ - (reg) &= ~(mask); \ - } while (0) +extern volatile __xdata struct ao_fifo ao_usart0_rx_fifo; +extern volatile __xdata struct ao_fifo ao_usart0_tx_fifo; -#define ao_spi_put_mask(reg,mask) do { \ - (reg) |= (mask); \ - ao_mutex_put(&ao_spi_mutex); \ - } while (0) +void +ao_serial0_rx0_isr(void) ao_arch_interrupt(2); -#define ao_spi_get_bit(bit) do {\ - ao_mutex_get(&ao_spi_mutex); \ - (bit) = 0; \ - } while (0) +void +ao_serial0_tx0_isr(void) ao_arch_interrupt(7); -#define ao_spi_put_bit(bit) do { \ - (bit) = 1; \ - ao_mutex_put(&ao_spi_mutex); \ - } while (0) +char +ao_serial0_getchar(void) __critical; -/* - * The SPI mutex must be held to call either of these - * functions -- this mutex covers the entire SPI operation, - * from chip select low to chip select high - */ +void +ao_serial0_putchar(char c) __critical; void -ao_spi_send(void __xdata *block, uint16_t len) __reentrant; +ao_serial0_drain(void) __critical; void -ao_spi_recv(void __xdata *block, uint16_t len) __reentrant; +ao_serial0_set_speed(uint8_t speed); void -ao_spi_init(void); +ao_serial0_init(void); + +#endif + /* * ao_spi_slave.c @@ -1349,10 +1314,10 @@ void ao_radio_set_packet(void); void -ao_radio_send(__xdata void *data, uint8_t size) __reentrant; +ao_radio_send(__xdata void *d, uint8_t size) __reentrant; uint8_t -ao_radio_recv(__xdata void *data, uint8_t size) __reentrant; +ao_radio_recv(__xdata void *d, uint8_t size) __reentrant; void ao_radio_recv_abort(void); @@ -1406,13 +1371,18 @@ ao_monitor(void); #define AO_MONITORING_OFF 0 #define AO_MONITORING_ORIG 1 -#define AO_MONITORING_TINY 2 void -ao_set_monitor(uint8_t monitoring); +ao_monitor_set(uint8_t monitoring); + +void +ao_monitor_disable(void); void -ao_monitor_init(uint8_t led, uint8_t monitoring) __reentrant; +ao_monitor_enable(void); + +void +ao_monitor_init(void) __reentrant; /* * ao_stdio.c @@ -1487,9 +1457,20 @@ ao_igniter_init(void); */ #define AO_CONFIG_MAJOR 1 -#define AO_CONFIG_MINOR 9 +#define AO_CONFIG_MINOR 10 #define AO_AES_LEN 16 +#if HAS_RADIO_CHANNELS +#define AO_CHANNEL_NAME_LEN 10 + +#define AO_NUM_CHANNELS 10 + +struct ao_radio_channel { + char name[AO_CHANNEL_NAME_LEN]; + uint32_t kHz; +}; +#endif + struct ao_config { uint8_t major; uint8_t minor; @@ -1506,6 +1487,10 @@ struct ao_config { uint32_t radio_setting; /* minor version 7 */ uint8_t radio_enable; /* minor version 8 */ uint8_t aes_key[AO_AES_LEN]; /* minor version 9 */ + uint32_t frequency; /* minor version 10 */ +#if HAS_RADIO_CHANNELS + struct ao_radio_channel radio_channels[AO_NUM_CHANNELS]; /* minor version 10 */ +#endif }; #define AO_IGNITE_MODE_DUAL 0 @@ -1685,7 +1670,7 @@ ao_companion_init(void); /* ao_lcd.c */ void -ao_lcd_putchar(uint8_t data); +ao_lcd_putchar(uint8_t d); void ao_lcd_putstring(char *string); @@ -1696,6 +1681,12 @@ ao_lcd_contrast_set(uint8_t contrast); void ao_lcd_clear(void); +void +ao_lcd_cursor_on(void); + +void +ao_lcd_cursor_off(void); + #define AO_LCD_ADDR(row,col) ((row << 6) | (col)) void @@ -1710,14 +1701,14 @@ ao_lcd_init(void); /* ao_lcd_port.c */ void -ao_lcd_port_put_nibble(uint8_t rs, uint8_t data); +ao_lcd_port_put_nibble(uint8_t rs, uint8_t d); void ao_lcd_port_init(void); /* ao_aes.c */ -__xdata uint8_t ao_aes_mutex; +extern __xdata uint8_t ao_aes_mutex; /* AES keys and blocks are 128 bits */ @@ -1897,4 +1888,18 @@ ao_battery_init(void); uint32_t ao_sqrt(uint32_t op); +/* + * ao_freq.c + */ + +int32_t ao_freq_to_set(int32_t freq, int32_t cal) __reentrant; + +#include + +/* + * ao_ms5607.c + */ + +void ao_ms5607_init(void); + #endif /* _AO_H_ */