- implemented video mode setting with the property tags, and once again it only
[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 void reboot(void);
16
17 static void cmdrun(char *cmd);
18
19 int main(void)
20 {
21         int lastnl = 0;
22         static char cmdbuf[256];
23         static int cmdend;
24
25         rpi_init();
26         init_serial(115200);
27         con_init();
28
29         printf("Detected raspberry pi %d, I/O base: %x\n", rpi_model, rpi_iobase);
30
31         video_init();
32
33         printf("Going interactive\n");
34         for(;;) {
35                 int c = getchar();
36
37                 switch(c) {
38                 case '\r':
39                 case '\n':
40                         if(!lastnl) {
41                                 ser_printstr("\r\n");
42                                 cmdbuf[cmdend] = 0;
43                                 cmdend = 0;
44                                 cmdrun(cmdbuf);
45                         }
46                         lastnl = 1;
47                         break;
48
49                 case -1:
50                         lastnl = 0;
51                         printf("error!\n");
52                         break;
53
54                 default:
55                         lastnl = 0;
56                         ser_putchar(c);
57                         if(cmdend < sizeof cmdbuf) {
58                                 cmdbuf[cmdend++] = c;
59                         }
60                 }
61         }
62
63         return 0;
64 }
65
66 void reboot(void)
67 {
68         printf("Rebooting ...\n");
69         rpi_reboot();
70 }
71
72 static void cmdrun(char *cmd)
73 {
74         char *ptr, *args;
75
76         while(*cmd && isspace(*cmd)) cmd++;
77         ptr = cmd;
78         while(*ptr && !isspace(*ptr)) ptr++;
79         *ptr = 0;
80         args = ptr + 1;
81
82         if(strcmp(cmd, "reboot") == 0) {
83                 reboot();
84         } else if(strcmp(cmd, "help") == 0) {
85                 printf("help not implemented yet\n");
86         } else if(strcmp(cmd, "ver") == 0) {
87                 printf("rpikern version 0.0\n");
88         } else {
89                 printf("Unknown command: %s\n", cmd);
90         }
91 }