Change API for getch to make it the caller's responsibility to poll for

input, allowing it to do other stuff if it wants to.
This commit is contained in:
2011-06-04 19:28:59 +00:00
parent 9f79b3d82e
commit fa84a1b8bb
3 changed files with 10 additions and 12 deletions

3
main.c
View File

@@ -172,7 +172,8 @@ int main(void) {
while (1) {
char c;
putstr("prompt> ");
c = getch();
while (!getch(&c))
FP0XVAL ^= 0x04000000;
if (c == 0x0a)
continue;
putch(c);

15
uart.c
View File

@@ -4,8 +4,6 @@
#define UARTBASE 0xE000C000
#define FP0XVAL (*((volatile unsigned int *) 0x3FFFC014))
#define RBR 0x00
#define THR 0x00
#define DLL 0x00
@@ -172,14 +170,11 @@ void puthex(unsigned int n) {
putstr(s+i);
}
char getch(void) {
char c;
bool getch(char *c) {
if (uart_rxread == uart_rxwrite)
return FALSE;
while (uart_rxread == uart_rxwrite) {
FP0XVAL ^= 0x04000000;
}
c = uart_rxbuf[uart_rxread];
*c = uart_rxbuf[uart_rxread];
uart_rxread = (uart_rxread + 1) % UART_RXBUFSIZE;
return c;
return TRUE;
}

4
uart.h
View File

@@ -1,11 +1,13 @@
#ifndef __UART_H
#define __UART_H
#include "types.h"
void init_uart(void);
void putch(char c);
void putstr(char *s);
void putint(unsigned int n);
void puthex(unsigned int n);
char getch(void);
bool getch(char *c);
#endif /* __UART_H */