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