summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-11-30 16:01:07 -0800
committerKeith Packard <keithp@keithp.com>2012-11-30 16:01:07 -0800
commit0b65402361f36a0c722977bcb63edb26fda0db28 (patch)
tree435d23c147829f11aac67fd6c30c74dd96f76e8e /src/core
parent0fa9ce23dd63846337872d6d666a469512614d07 (diff)
altos: Make stdio 8-bit clean by making pollchar return int
We were stealing one value (0xff) in the return value from pollchar to indicate 'not ready yet'. Instead of doing that, use the integer value -1 and have pollchar return an int instead of a char. That necessitated cleaning a few other bits to make sure that 0xff wouldn't get promoted to -1 on accident. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ao.h6
-rw-r--r--src/core/ao_packet.h2
-rw-r--r--src/core/ao_serial.h28
-rw-r--r--src/core/ao_stdio.c2
-rw-r--r--src/core/ao_usb.h2
5 files changed, 32 insertions, 8 deletions
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 */