diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/avr/ao_usb_avr.c | 10 | ||||
| -rw-r--r-- | src/cc1111/ao_serial.c | 8 | ||||
| -rw-r--r-- | src/cc1111/ao_usb.c | 12 | ||||
| -rw-r--r-- | src/core/ao.h | 6 | ||||
| -rw-r--r-- | src/core/ao_packet.h | 2 | ||||
| -rw-r--r-- | src/core/ao_serial.h | 28 | ||||
| -rw-r--r-- | src/core/ao_stdio.c | 2 | ||||
| -rw-r--r-- | src/core/ao_usb.h | 2 | ||||
| -rw-r--r-- | src/drivers/ao_packet.c | 6 | ||||
| -rw-r--r-- | src/stm/ao_arch.h | 36 | ||||
| -rw-r--r-- | src/stm/ao_arch_funcs.h | 20 | ||||
| -rw-r--r-- | src/stm/ao_serial_stm.c | 24 | ||||
| -rw-r--r-- | src/stm/ao_usb_stm.c | 10 | 
13 files changed, 85 insertions, 81 deletions
| diff --git a/src/avr/ao_usb_avr.c b/src/avr/ao_usb_avr.c index 9ba407af..2ef546c9 100644 --- a/src/avr/ao_usb_avr.c +++ b/src/avr/ao_usb_avr.c @@ -480,10 +480,10 @@ ao_usb_putchar(char c) __critical __reentrant  	ao_usb_in_flushed = 0;  } -static char +static int  _ao_usb_pollchar(void)  { -	char c; +	uint8_t c;  	uint8_t	intx;  	if (!ao_usb_running) @@ -517,10 +517,10 @@ _ao_usb_pollchar(void)  	return c;  } -char +int  ao_usb_pollchar(void)  { -	char	c; +	int	c;  	cli();  	c = _ao_usb_pollchar();  	sei(); @@ -530,7 +530,7 @@ ao_usb_pollchar(void)  char  ao_usb_getchar(void) __critical  { -	char	c; +	int	c;  	cli();  	while ((c = _ao_usb_pollchar()) == AO_READ_AGAIN) diff --git a/src/cc1111/ao_serial.c b/src/cc1111/ao_serial.c index 48383802..2a93bf52 100644 --- a/src/cc1111/ao_serial.c +++ b/src/cc1111/ao_serial.c @@ -85,10 +85,10 @@ ao_serial0_getchar(void) __critical  }  #if USE_SERIAL_0_STDIN -char +int  ao_serial0_pollchar(void) __critical  { -	char	c; +	uint8_t	c;  	if (ao_fifo_empty(ao_serial0_rx_fifo))  		return AO_READ_AGAIN;  	ao_fifo_remove(ao_serial0_rx_fifo,c); @@ -173,10 +173,10 @@ ao_serial1_getchar(void) __critical  }  #if USE_SERIAL_1_STDIN -char +int  ao_serial1_pollchar(void) __critical  { -	char	c; +	uint8_t	c;  	if (ao_fifo_empty(ao_serial1_rx_fifo))  		return AO_READ_AGAIN;  	ao_fifo_remove(ao_serial1_rx_fifo,c); diff --git a/src/cc1111/ao_usb.c b/src/cc1111/ao_usb.c index ce26e808..81e9074e 100644 --- a/src/cc1111/ao_usb.c +++ b/src/cc1111/ao_usb.c @@ -382,19 +382,19 @@ ao_usb_putchar(char c) __critical __reentrant  		ao_usb_in_send();  } -char +int  ao_usb_pollchar(void) __critical  { -	char c; +	uint8_t c;  	if (ao_usb_out_bytes == 0) {  		USBINDEX = AO_USB_OUT_EP;  		if ((USBCSOL & USBCSOL_OUTPKT_RDY) == 0) -			return AO_READ_AGAIN; +			return -1;  		ao_usb_out_bytes = (USBCNTH << 8) | USBCNTL;  		if (ao_usb_out_bytes == 0) {  			USBINDEX = AO_USB_OUT_EP;  			USBCSOL &= ~USBCSOL_OUTPKT_RDY; -			return AO_READ_AGAIN; +			return -1;  		}  	}  	--ao_usb_out_bytes; @@ -409,9 +409,9 @@ ao_usb_pollchar(void) __critical  char  ao_usb_getchar(void) __critical  { -	char	c; +	int	c; -	while ((c = ao_usb_pollchar()) == AO_READ_AGAIN) +	while ((c = ao_usb_pollchar()) == -1)  		ao_sleep(&ao_stdin_ready);  	return c;  } diff --git a/src/core/ao.h b/src/core/ao.h index 1aff3d49..54018b37 100644 --- a/src/core/ao.h +++ b/src/core/ao.h @@ -599,10 +599,10 @@ ao_monitor_init(void) __reentrant;   * ao_stdio.c   */ -#define AO_READ_AGAIN	((char) -1) +#define AO_READ_AGAIN	(-1)  struct ao_stdio { -	char	(*pollchar)(void); +	int	(*pollchar)(void);  	void	(*putchar)(char c) __reentrant;  	void	(*flush)(void);  	uint8_t	echo; @@ -621,7 +621,7 @@ uint8_t  ao_echo(void);  int8_t -ao_add_stdio(char (*pollchar)(void), +ao_add_stdio(int (*pollchar)(void),  	     void (*putchar)(char) __reentrant,  	     void (*flush)(void)) __reentrant; diff --git a/src/core/ao_packet.h b/src/core/ao_packet.h index 0eafd3b2..08b184d6 100644 --- a/src/core/ao_packet.h +++ b/src/core/ao_packet.h @@ -62,7 +62,7 @@ ao_packet_flush(void);  void  ao_packet_putchar(char c) __reentrant; -char +int  ao_packet_pollchar(void);  #if PACKET_HAS_MASTER diff --git a/src/core/ao_serial.h b/src/core/ao_serial.h index 53aa8a89..a799bf2c 100644 --- a/src/core/ao_serial.h +++ b/src/core/ao_serial.h @@ -22,6 +22,7 @@  #define AO_SERIAL_SPEED_9600	1  #define AO_SERIAL_SPEED_19200	2  #define AO_SERIAL_SPEED_57600	3 +#define AO_SERIAL_SPEED_115200	4  #if HAS_SERIAL_0  extern volatile __xdata struct ao_fifo	ao_serial0_rx_fifo; @@ -30,6 +31,9 @@ extern volatile __xdata struct ao_fifo	ao_serial0_tx_fifo;  char  ao_serial0_getchar(void); +int +ao_serial0_pollchar(void); +  void  ao_serial0_putchar(char c); @@ -47,7 +51,7 @@ extern volatile __xdata struct ao_fifo	ao_serial1_tx_fifo;  char  ao_serial1_getchar(void); -char +int  ao_serial1_pollchar(void);  void @@ -67,7 +71,7 @@ extern volatile __xdata struct ao_fifo	ao_serial2_tx_fifo;  char  ao_serial2_getchar(void); -char +int  ao_serial2_pollchar(void);  void @@ -80,6 +84,26 @@ void  ao_serial2_set_speed(uint8_t speed);  #endif +#if HAS_SERIAL_3 +extern volatile __xdata struct ao_fifo	ao_serial3_rx_fifo; +extern volatile __xdata struct ao_fifo	ao_serial3_tx_fifo; + +char +ao_serial3_getchar(void); + +int +ao_serial3_pollchar(void); + +void +ao_serial3_putchar(char c); + +void +ao_serial3_drain(void); + +void +ao_serial3_set_speed(uint8_t speed); +#endif +  void  ao_serial_init(void); diff --git a/src/core/ao_stdio.c b/src/core/ao_stdio.c index 8cf66a23..4a832487 100644 --- a/src/core/ao_stdio.c +++ b/src/core/ao_stdio.c @@ -123,7 +123,7 @@ ao_echo(void)  }  int8_t -ao_add_stdio(char (*pollchar)(void), +ao_add_stdio(int (*pollchar)(void),  	     void (*putchar)(char),  	     void (*flush)(void)) __reentrant  { diff --git a/src/core/ao_usb.h b/src/core/ao_usb.h index e051db93..4476ee6b 100644 --- a/src/core/ao_usb.h +++ b/src/core/ao_usb.h @@ -33,7 +33,7 @@ ao_usb_getchar(void);  /* Poll for a charcter on the USB input queue.   * returns AO_READ_AGAIN if none are available   */ -char +int  ao_usb_pollchar(void);  /* Flush the USB output queue */ diff --git a/src/drivers/ao_packet.c b/src/drivers/ao_packet.c index 3c1e7a18..91319923 100644 --- a/src/drivers/ao_packet.c +++ b/src/drivers/ao_packet.c @@ -21,8 +21,8 @@ __xdata struct ao_packet_recv ao_rx_packet;  __xdata struct ao_packet ao_tx_packet;  __pdata uint8_t ao_packet_rx_len, ao_packet_rx_used, ao_packet_tx_used; -static __xdata char tx_data[AO_PACKET_MAX]; -static __xdata char rx_data[AO_PACKET_MAX]; +static __xdata uint8_t tx_data[AO_PACKET_MAX]; +static __xdata uint8_t rx_data[AO_PACKET_MAX];  static __pdata uint8_t rx_seq;  __xdata struct ao_task	ao_packet_task; @@ -169,7 +169,7 @@ ao_packet_putchar(char c) __reentrant  		tx_data[ao_packet_tx_used++] = c;  } -char +int  ao_packet_pollchar(void)  {  	/* No need to block interrupts, all variables here diff --git a/src/stm/ao_arch.h b/src/stm/ao_arch.h index e270199e..007f7e2e 100644 --- a/src/stm/ao_arch.h +++ b/src/stm/ao_arch.h @@ -123,42 +123,6 @@ void ao_lcd_font_init(void);  void ao_lcd_font_string(char *s); -char -ao_serial1_getchar(void); - -void -ao_serial1_putchar(char c); - -char -ao_serial1_pollchar(void); - -void -ao_serial1_set_speed(uint8_t speed); - -char -ao_serial2_getchar(void); - -void -ao_serial2_putchar(char c); - -char -ao_serial2_pollchar(void); - -void -ao_serial2_set_speed(uint8_t speed); - -char -ao_serial3_getchar(void); - -void -ao_serial3_putchar(char c); - -char -ao_serial3_pollchar(void); - -void -ao_serial3_set_speed(uint8_t speed); -  extern const uint32_t	ao_radio_cal;  void diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h index d6ab1465..87bbe73e 100644 --- a/src/stm/ao_arch_funcs.h +++ b/src/stm/ao_arch_funcs.h @@ -210,6 +210,26 @@ ao_i2c_recv(void *block, uint16_t len, uint8_t i2c_index, uint8_t stop);  void  ao_i2c_init(void); +/* ao_serial_stm.c */ +struct ao_stm_usart { +	struct ao_fifo		rx_fifo; +	struct ao_fifo		tx_fifo; +	struct stm_usart	*reg; +	uint8_t			tx_started; +}; + +#if HAS_SERIAL_1 +extern struct ao_stm_usart	ao_stm_usart1; +#endif + +#if HAS_SERIAL_2 +extern struct ao_stm_usart	ao_stm_usart2; +#endif + +#if HAS_SERIAL_3 +extern struct ao_stm_usart	ao_stm_usart3; +#endif +  #define ARM_PUSH32(stack, val)	(*(--(stack)) = (val))  static inline uint32_t diff --git a/src/stm/ao_serial_stm.c b/src/stm/ao_serial_stm.c index 00409f4a..94138edc 100644 --- a/src/stm/ao_serial_stm.c +++ b/src/stm/ao_serial_stm.c @@ -17,13 +17,6 @@  #include <ao.h> -struct ao_stm_usart { -	struct ao_fifo		rx_fifo; -	struct ao_fifo		tx_fifo; -	struct stm_usart	*reg; -	uint8_t			tx_started; -}; -  void  ao_debug_out(char c)  { @@ -78,16 +71,19 @@ ao_usart_getchar(struct ao_stm_usart *usart)  	return c;  } -char +int  ao_usart_pollchar(struct ao_stm_usart *usart)  { -	char	c; +	int	c;  	ao_arch_block_interrupts();  	if (ao_fifo_empty(usart->rx_fifo))  		c = AO_READ_AGAIN; -	else -		ao_fifo_remove(usart->rx_fifo,c); +	else { +		uint8_t	u; +		ao_fifo_remove(usart->rx_fifo,u); +		c = u; +	}  	ao_arch_release_interrupts();  	return c;  } @@ -201,7 +197,7 @@ ao_serial1_putchar(char c)  	ao_usart_putchar(&ao_stm_usart1, c);  } -char +int  ao_serial1_pollchar(void)  {  	return ao_usart_pollchar(&ao_stm_usart1); @@ -232,7 +228,7 @@ ao_serial2_putchar(char c)  	ao_usart_putchar(&ao_stm_usart2, c);  } -char +int  ao_serial2_pollchar(void)  {  	return ao_usart_pollchar(&ao_stm_usart2); @@ -263,7 +259,7 @@ ao_serial3_putchar(char c)  	ao_usart_putchar(&ao_stm_usart3, c);  } -char +int  ao_serial3_pollchar(void)  {  	return ao_usart_pollchar(&ao_stm_usart3); diff --git a/src/stm/ao_usb_stm.c b/src/stm/ao_usb_stm.c index d93a0c17..9379e5cd 100644 --- a/src/stm/ao_usb_stm.c +++ b/src/stm/ao_usb_stm.c @@ -873,10 +873,10 @@ _ao_usb_out_recv(void)  	ao_usb_set_stat_rx(AO_USB_OUT_EPR, STM_USB_EPR_STAT_RX_VALID);  } -static char +static int  _ao_usb_pollchar(void)  { -	char c; +	uint8_t c;  	if (!ao_usb_running)  		return AO_READ_AGAIN; @@ -896,10 +896,10 @@ _ao_usb_pollchar(void)  	return c;  } -char +int  ao_usb_pollchar(void)  { -	char	c; +	int	c;  	ao_arch_block_interrupts();  	c = _ao_usb_pollchar();  	ao_arch_release_interrupts(); @@ -909,7 +909,7 @@ ao_usb_pollchar(void)  char  ao_usb_getchar(void)  { -	char	c; +	int	c;  	ao_arch_block_interrupts();  	while ((c = _ao_usb_pollchar()) == AO_READ_AGAIN) | 
