8f85b1fc7944f1ee5b7f5724106e2fe35a5a8c7a
[rpikern] / src / main.c
1 #include "config.h"
2
3 #include <string.h>
4 #include <stdint.h>
5 #include <ctype.h>
6 #include "asm.h"
7 #include "serial.h"
8
9 void dbgled(int x);
10 void exit(int x);
11
12 static void cmdrun(char *cmd);
13
14 int main(void)
15 {
16         int lastnl = 0;
17         static char cmdbuf[256];
18         static int cmdend;
19
20         dbgled(2);
21
22         init_serial(115200);
23         ser_printstr("starting rpikern\n");
24
25         for(;;) {
26                 int c = ser_getchar();
27
28                 switch(c) {
29                 case '\r':
30                 case '\n':
31                         if(!lastnl) {
32                                 ser_printstr("\r\n");
33                                 cmdbuf[cmdend] = 0;
34                                 cmdend = 0;
35                                 cmdrun(cmdbuf);
36                         }
37                         lastnl = 1;
38                         break;
39
40                 case -1:
41                         lastnl = 0;
42                         ser_printstr("error!\n");
43                         break;
44
45                 default:
46                         lastnl = 0;
47                         ser_putchar(c);
48                         if(cmdend < sizeof cmdbuf) {
49                                 cmdbuf[cmdend++] = c;
50                         }
51                 }
52         }
53
54         return 0;
55 }
56
57 void panic(void)
58 {
59         dbgled(1);
60         exit(0);
61 }
62
63 static void cmdrun(char *cmd)
64 {
65         char *ptr, *args;
66
67         while(*cmd && isspace(*cmd)) cmd++;
68         ptr = cmd;
69         while(*ptr && !isspace(*ptr)) ptr++;
70         *ptr = 0;
71         args = ptr + 1;
72
73         if(strcmp(cmd, "help") == 0) {
74                 ser_printstr("help not implemented yet\n");
75         } else if(strcmp(cmd, "ver") == 0) {
76                 ser_printstr("rpikern version 0.0\n");
77         } else {
78                 ser_printstr("Unknown command: ");
79                 ser_printstr(cmd);
80                 ser_printstr("\n");
81         }
82 }