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