diff options
| author | Keith Packard <keithp@keithp.com> | 2011-04-01 17:25:07 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-04-01 17:25:07 -0700 | 
| commit | a5d60fdb9c969c1516feb76a16001c9688112c4c (patch) | |
| tree | 3adf3dd72e6343bede901c7b77b029d1ae507eca /src/ao_stdio.c | |
| parent | 4e2c18249e16c98cf5f7dccdf8d3b84bc473863a (diff) | |
altos: Make cmd echo per-connection instead of global
Allow different connections to use different echo values, permitting
the packet link to turn off echo while the USB link still has it on.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/ao_stdio.c')
| -rw-r--r-- | src/ao_stdio.c | 25 | 
1 files changed, 16 insertions, 9 deletions
| diff --git a/src/ao_stdio.c b/src/ao_stdio.c index 3dd457f7..ec3b6607 100644 --- a/src/ao_stdio.c +++ b/src/ao_stdio.c @@ -23,7 +23,7 @@  #define AO_NUM_STDIOS	(HAS_USB + PACKET_HAS_SLAVE + USE_SERIAL_STDIN) -static __xdata struct ao_stdio stdios[AO_NUM_STDIOS]; +__xdata struct ao_stdio ao_stdios[AO_NUM_STDIOS];  __data int8_t ao_cur_stdio;  __data int8_t ao_num_stdios; @@ -31,15 +31,15 @@ void  putchar(char c)  {  	if (c == '\n') -		(*stdios[ao_cur_stdio].putchar)('\r'); -	(*stdios[ao_cur_stdio].putchar)(c); +		(*ao_stdios[ao_cur_stdio].putchar)('\r'); +	(*ao_stdios[ao_cur_stdio].putchar)(c);  }  void  flush(void)  { -	if (stdios[ao_cur_stdio].flush) -		stdios[ao_cur_stdio].flush(); +	if (ao_stdios[ao_cur_stdio].flush) +		ao_stdios[ao_cur_stdio].flush();  }  __xdata uint8_t ao_stdin_ready; @@ -51,7 +51,7 @@ getchar(void) __reentrant __critical  	int8_t stdio = ao_cur_stdio;  	for (;;) { -		c = stdios[stdio].pollchar(); +		c = ao_stdios[stdio].pollchar();  		if (c != AO_READ_AGAIN)  			break;  		if (++stdio == ao_num_stdios) @@ -63,6 +63,12 @@ getchar(void) __reentrant __critical  	return c;  } +uint8_t +ao_echo(void) +{ +	return ao_stdios[ao_cur_stdio].echo; +} +  void  ao_add_stdio(char (*pollchar)(void),  	     void (*putchar)(char), @@ -70,8 +76,9 @@ ao_add_stdio(char (*pollchar)(void),  {  	if (ao_num_stdios == AO_NUM_STDIOS)  		ao_panic(AO_PANIC_STDIO); -	stdios[ao_num_stdios].pollchar = pollchar; -	stdios[ao_num_stdios].putchar = putchar; -	stdios[ao_num_stdios].flush = flush; +	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_num_stdios++;  } | 
