projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altoslib: Missed a couple of easy mini voltage API changes
[fw/altos]
/
src
/
core
/
ao_stdio.c
diff --git
a/src/core/ao_stdio.c
b/src/core/ao_stdio.c
index 656b23c9e88fadc5f65b560af8487692d2b27c89..9911813778698fadb89b1e40ec69ee6f91676f89 100644
(file)
--- a/
src/core/ao_stdio.c
+++ b/
src/core/ao_stdio.c
@@
-51,6
+51,9
@@
#ifndef USE_SERIAL_9_STDIN
#define USE_SERIAL_9_STDIN 0
#endif
#ifndef USE_SERIAL_9_STDIN
#define USE_SERIAL_9_STDIN 0
#endif
+#ifndef PACKET_HAS_SLAVE
+#define PACKET_HAS_SLAVE 0
+#endif
#define USE_SERIAL_STDIN (USE_SERIAL_0_STDIN + \
USE_SERIAL_1_STDIN + \
#define USE_SERIAL_STDIN (USE_SERIAL_0_STDIN + \
USE_SERIAL_1_STDIN + \
@@
-66,8
+69,15
@@
#define AO_NUM_STDIOS (HAS_USB + PACKET_HAS_SLAVE + USE_SERIAL_STDIN)
__xdata struct ao_stdio ao_stdios[AO_NUM_STDIOS];
#define AO_NUM_STDIOS (HAS_USB + PACKET_HAS_SLAVE + USE_SERIAL_STDIN)
__xdata struct ao_stdio ao_stdios[AO_NUM_STDIOS];
+
+#if AO_NUM_STDIOS > 1
__pdata int8_t ao_cur_stdio;
__pdata int8_t ao_num_stdios;
__pdata int8_t ao_cur_stdio;
__pdata int8_t ao_num_stdios;
+#else
+__pdata int8_t ao_cur_stdio;
+#define ao_cur_stdio 0
+#define ao_num_stdios 0
+#endif
void
putchar(char c)
void
putchar(char c)
@@
-96,21
+106,28
@@
flush(void)
__xdata uint8_t ao_stdin_ready;
char
__xdata uint8_t ao_stdin_ready;
char
-getchar(void) __reentrant
__critical
+getchar(void) __reentrant
{
{
-
char
c;
- int8_t stdio
= ao_cur_stdio
;
+
int
c;
+ int8_t stdio;
+ ao_arch_block_interrupts();
+ stdio = ao_cur_stdio;
for (;;) {
for (;;) {
- c = ao_stdios[stdio].pollchar();
+ c = ao_stdios[stdio].
_
pollchar();
if (c != AO_READ_AGAIN)
break;
if (c != AO_READ_AGAIN)
break;
+#if AO_NUM_STDIOS > 1
if (++stdio == ao_num_stdios)
stdio = 0;
if (stdio == ao_cur_stdio)
if (++stdio == ao_num_stdios)
stdio = 0;
if (stdio == ao_cur_stdio)
+#endif
ao_sleep(&ao_stdin_ready);
}
ao_sleep(&ao_stdin_ready);
}
+#if AO_NUM_STDIOS > 1
ao_cur_stdio = stdio;
ao_cur_stdio = stdio;
+#endif
+ ao_arch_release_interrupts();
return c;
}
return c;
}
@@
-121,15
+138,21
@@
ao_echo(void)
}
int8_t
}
int8_t
-ao_add_stdio(
char (*
pollchar)(void),
+ao_add_stdio(
int (*_
pollchar)(void),
void (*putchar)(char),
void (*flush)(void)) __reentrant
{
void (*putchar)(char),
void (*flush)(void)) __reentrant
{
+#if AO_NUM_STDIOS > 1
if (ao_num_stdios == AO_NUM_STDIOS)
ao_panic(AO_PANIC_STDIO);
if (ao_num_stdios == AO_NUM_STDIOS)
ao_panic(AO_PANIC_STDIO);
- ao_stdios[ao_num_stdios].pollchar = pollchar;
+#endif
+ ao_stdios[ao_num_stdios]._pollchar = _pollchar;
ao_stdios[ao_num_stdios].putchar = putchar;
ao_stdios[ao_num_stdios].flush = flush;
ao_stdios[ao_num_stdios].echo = 1;
ao_stdios[ao_num_stdios].putchar = putchar;
ao_stdios[ao_num_stdios].flush = flush;
ao_stdios[ao_num_stdios].echo = 1;
+#if AO_NUM_STDIOS > 1
return ao_num_stdios++;
return ao_num_stdios++;
+#else
+ return 0;
+#endif
}
}