// Skeleton for a simple command interpreter using RS232 I/O // Baby Orangutan @ 20 MHz // S. James Remington, based on "stdiodemo.c" from WinAVR distribution examples // sjames_remington at yahoo dot com /* CPU frequency */ #define F_CPU 20000000UL /* UART baud rate */ #define UART_BAUD 9600 #include #include #include #include #include #include #include "uart.c" FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); int main(void) { char buf[20]; int n; uart_init(); stdout = stdin = &uart_str; printf("\nHello world!\n"); // loop interprets commands of the form C nnn where "C" is a one-letter command, "nnn" is an integer // only "f" and "q" (upper or lower case) are recognized in this skeleton version for (;;) { printf_P(PSTR("Enter command (c nnn): ")); if (fgets(buf, sizeof buf - 1, stdin) == NULL) break; if (tolower(buf[0]) == 'q') break; switch (tolower(buf[0])) { default: printf("Unknown command: %s\n", buf); break; case 'f': if (sscanf(buf, "%*s %u", &n) > 0) { printf("input: %c %u\n", buf[0], n); } else { puts("valid argument not found\n"); } break; } } printf("\nAll done..."); return 0; }