round-robin-rtos
Published 09 Sep 2010, by
Tim Exton-McGuinness

No tags
« Back to documentation index
Show/hide line numbers
user.c Source File
user.c
00001 #include "globals.h"
00002
00003 extern "C" void sleep(void);
00004 extern "C" void serial_rx_isr(void);
00005 extern "C" void display_screen( void );
00006 extern "C" void update_data( void );
00007 extern "C" void readln( char *);
00008 extern "C" void parse( char * );
00009 extern "C" int peekchar( void );
00010 extern "C" int get_char( void );
00011 extern "C" void crlf( void );
00012 extern "C" void sleepy_write( char *);
00013
00014 extern Serial Terminal;
00015
00016
00017
00018 extern "C" {
00019
00020 void lredo_screen( void )
00021 {
00022 redraw = 1;
00023 }
00024 }
00025
00026
00027
00028 extern "C" {
00029
00030 void cli( char **options, void (*routines[])( void ) )
00031 {
00032 int i;
00033
00034 if ( strlen( *argv ) == 0 ) return;
00035
00036 i = 0;
00037 while( *options )
00038 {
00039 if ( strcmp( *argv, *options++ ) == 0 )
00040 {
00041 routines[i]();
00042 redraw = 1;
00043 return;
00044 }
00045 i++;
00046 }
00047 }
00048 }
00049
00050
00051 char *main_options[] =
00052 {
00053 "j",
00054 0
00055 };
00056
00057 void (*main_routines[])( void ) =
00058 {
00059 lredo_screen,
00060 0
00061 };
00062
00063
00064 extern "C" {
00065
00066 void user( void)
00067 {
00068
00069 Terminal.attach( serial_rx_isr, Serial::RxIrq );
00070
00071 redraw = TRUE;
00072 while(1)
00073 {
00074 if ( redraw ) display_screen();
00075 update_data();
00076 readln( rxline );
00077 parse( rxline );
00078 cli( main_options, main_routines);
00079 }
00080
00081 }
00082
00083 }