First version of my operation system for stm32 board
Dependencies: RA8875 VS1053 sd-driver-hs
main.cpp@3:a60dc00bf3a2, 2018-03-13 (annotated)
- Committer:
- Hagrid
- Date:
- Tue Mar 13 06:35:47 2018 +0000
- Revision:
- 3:a60dc00bf3a2
- Parent:
- 2:a3d00f0610f9
Add LCD manager suport;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Hagrid | 0:86f82f777a7a | 1 | #include "include.h" |
Hagrid | 2:a3d00f0610f9 | 2 | ///# include |
Hagrid | 3:a60dc00bf3a2 | 3 | |
Hagrid | 3:a60dc00bf3a2 | 4 | //GPIO define |
Hagrid | 3:a60dc00bf3a2 | 5 | BusOut adress(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15); |
Hagrid | 3:a60dc00bf3a2 | 6 | BusInOut data(D0,D1,D2,D3,D4,D5,D6,D7); |
Hagrid | 3:a60dc00bf3a2 | 7 | |
Hagrid | 0:86f82f777a7a | 8 | //Serial device |
Hagrid | 0:86f82f777a7a | 9 | Serial keyboard(Tx_KB,Rx_KB);// Tx, Rx |
Hagrid | 0:86f82f777a7a | 10 | |
Hagrid | 0:86f82f777a7a | 11 | //SPI device |
Hagrid | 0:86f82f777a7a | 12 | VS1053 mp3(MOSI_AUDIO, MISO_AUDIO, CLK_AUDIO, CS_AUDIO, RST_AUDIO,DREQ_AUDIO,DSC_AUDIO,PA_4); |
Hagrid | 3:a60dc00bf3a2 | 13 | //RA8875 lcd(MOSI_LCD, MISO_LCD, CLK_LCD, CS_LCD, NC, "tft"); |
Hagrid | 0:86f82f777a7a | 14 | SDBlockDevice sd(MOSI_SD, MISO_SD, CLK_SD, CS_SD); |
Hagrid | 0:86f82f777a7a | 15 | |
Hagrid | 0:86f82f777a7a | 16 | //File system |
Hagrid | 0:86f82f777a7a | 17 | FATFileSystem fs("fs"); |
Hagrid | 0:86f82f777a7a | 18 | |
Hagrid | 0:86f82f777a7a | 19 | //Tread |
Hagrid | 0:86f82f777a7a | 20 | Thread kb_thread; |
Hagrid | 0:86f82f777a7a | 21 | |
Hagrid | 3:a60dc00bf3a2 | 22 | //lcd methods |
Hagrid | 3:a60dc00bf3a2 | 23 | void init_lcd(); |
Hagrid | 3:a60dc00bf3a2 | 24 | void print(char data[59]); |
Hagrid | 3:a60dc00bf3a2 | 25 | void print_int(int a); |
Hagrid | 3:a60dc00bf3a2 | 26 | void print_double(double a); |
Hagrid | 3:a60dc00bf3a2 | 27 | void backspace(); |
Hagrid | 3:a60dc00bf3a2 | 28 | void lcd_cls(); |
Hagrid | 3:a60dc00bf3a2 | 29 | void set_backlight(float back); |
Hagrid | 3:a60dc00bf3a2 | 30 | |
Hagrid | 3:a60dc00bf3a2 | 31 | //keyboard thread |
Hagrid | 0:86f82f777a7a | 32 | void keyboard_task() |
Hagrid | 0:86f82f777a7a | 33 | { |
Hagrid | 0:86f82f777a7a | 34 | while(true) { |
Hagrid | 0:86f82f777a7a | 35 | input[position] = keyboard.getc(); |
Hagrid | 0:86f82f777a7a | 36 | } |
Hagrid | 0:86f82f777a7a | 37 | } |
Hagrid | 0:86f82f777a7a | 38 | |
Hagrid | 0:86f82f777a7a | 39 | int main() |
Hagrid | 0:86f82f777a7a | 40 | { |
Hagrid | 0:86f82f777a7a | 41 | wait(0.3); |
Hagrid | 3:a60dc00bf3a2 | 42 | //init device |
Hagrid | 3:a60dc00bf3a2 | 43 | init_lcd(); |
Hagrid | 0:86f82f777a7a | 44 | mp3.initialize(); |
Hagrid | 0:86f82f777a7a | 45 | keyboard.baud(57600); |
Hagrid | 3:a60dc00bf3a2 | 46 | |
Hagrid | 0:86f82f777a7a | 47 | kb_thread.start(keyboard_task); |
Hagrid | 0:86f82f777a7a | 48 | sd.init(); |
Hagrid | 0:86f82f777a7a | 49 | fs.mount(&sd); |
Hagrid | 3:a60dc00bf3a2 | 50 | print("HagridOS v.5.0\n>"); |
Hagrid | 3:a60dc00bf3a2 | 51 | |
Hagrid | 0:86f82f777a7a | 52 | ///start main code |
Hagrid | 0:86f82f777a7a | 53 | while (true) { |
Hagrid | 0:86f82f777a7a | 54 | |
Hagrid | 0:86f82f777a7a | 55 | if(!keyboard.readable()) { //scan key |
Hagrid | 3:a60dc00bf3a2 | 56 | if(input[position]=='Q') {//press backspace |
Hagrid | 3:a60dc00bf3a2 | 57 | backspace(); |
Hagrid | 3:a60dc00bf3a2 | 58 | input[position] = '\0'; |
Hagrid | 3:a60dc00bf3a2 | 59 | position-=1; |
Hagrid | 3:a60dc00bf3a2 | 60 | } else { |
Hagrid | 3:a60dc00bf3a2 | 61 | |
Hagrid | 3:a60dc00bf3a2 | 62 | if (input[position] == '\n') { //press enter |
Hagrid | 3:a60dc00bf3a2 | 63 | input[position] = '\0'; //insert in end position NULL character |
Hagrid | 3:a60dc00bf3a2 | 64 | kbsplit(input);//split keyboard input |
Hagrid | 0:86f82f777a7a | 65 | |
Hagrid | 3:a60dc00bf3a2 | 66 | if(tmpE[0] == NULL) { //press only enter if |
Hagrid | 3:a60dc00bf3a2 | 67 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 68 | } else { |
Hagrid | 3:a60dc00bf3a2 | 69 | switch(compare(&tmpE[0])) { //switch run basic commands |
Hagrid | 3:a60dc00bf3a2 | 70 | case 0://mkdir |
Hagrid | 3:a60dc00bf3a2 | 71 | fs.mkdir(tmpE[1],777); |
Hagrid | 3:a60dc00bf3a2 | 72 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 73 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 74 | break; |
Hagrid | 3:a60dc00bf3a2 | 75 | case 1://remove |
Hagrid | 3:a60dc00bf3a2 | 76 | fs.remove(tmpE[1]); |
Hagrid | 3:a60dc00bf3a2 | 77 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 78 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 79 | break; |
Hagrid | 3:a60dc00bf3a2 | 80 | case 2://ls |
Hagrid | 3:a60dc00bf3a2 | 81 | fs.mount(&sd); |
Hagrid | 3:a60dc00bf3a2 | 82 | DIR *d; |
Hagrid | 3:a60dc00bf3a2 | 83 | struct dirent *p; |
Hagrid | 3:a60dc00bf3a2 | 84 | d = opendir(adir); |
Hagrid | 3:a60dc00bf3a2 | 85 | if (d != NULL) { |
Hagrid | 3:a60dc00bf3a2 | 86 | while ((p = readdir(d)) != NULL) { |
Hagrid | 3:a60dc00bf3a2 | 87 | print("\n"); |
Hagrid | 3:a60dc00bf3a2 | 88 | print(p->d_name); |
Hagrid | 3:a60dc00bf3a2 | 89 | } |
Hagrid | 0:86f82f777a7a | 90 | } |
Hagrid | 3:a60dc00bf3a2 | 91 | closedir(d); |
Hagrid | 3:a60dc00bf3a2 | 92 | fs.unmount(); |
Hagrid | 3:a60dc00bf3a2 | 93 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 94 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 95 | break; |
Hagrid | 3:a60dc00bf3a2 | 96 | case 3://cls |
Hagrid | 3:a60dc00bf3a2 | 97 | lcd_cls(); |
Hagrid | 3:a60dc00bf3a2 | 98 | print("HagridOS v.5.0\n>"); |
Hagrid | 3:a60dc00bf3a2 | 99 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 100 | break; |
Hagrid | 3:a60dc00bf3a2 | 101 | case 4://info |
Hagrid | 3:a60dc00bf3a2 | 102 | print("\nBasic Operation System for STM32 by HAGRID\n"); |
Hagrid | 3:a60dc00bf3a2 | 103 | print("Version: 5.0 release: 10.03.2018\n"); |
Hagrid | 3:a60dc00bf3a2 | 104 | //lcd.printf("SD size: %lluMb\n\r",(sd.size()/1024)/1024); |
Hagrid | 3:a60dc00bf3a2 | 105 | print("CPU speed: "); |
Hagrid | 3:a60dc00bf3a2 | 106 | print_double(SystemCoreClock/1000000); |
Hagrid | 3:a60dc00bf3a2 | 107 | print(" MHz"); |
Hagrid | 3:a60dc00bf3a2 | 108 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 109 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 110 | break; |
Hagrid | 3:a60dc00bf3a2 | 111 | case 5://edit |
Hagrid | 3:a60dc00bf3a2 | 112 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 113 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 114 | break; |
Hagrid | 3:a60dc00bf3a2 | 115 | case 6://sleep |
Hagrid | 3:a60dc00bf3a2 | 116 | wait(atoi(tmpE[1])); |
Hagrid | 3:a60dc00bf3a2 | 117 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 118 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 119 | break; |
Hagrid | 3:a60dc00bf3a2 | 120 | case 7://GPIO |
Hagrid | 3:a60dc00bf3a2 | 121 | if(!strcasecmp("data",tmpE[1])) { |
Hagrid | 3:a60dc00bf3a2 | 122 | if(tmpE[2]==NULL) { |
Hagrid | 3:a60dc00bf3a2 | 123 | data.input(); |
Hagrid | 3:a60dc00bf3a2 | 124 | print("\n"); |
Hagrid | 3:a60dc00bf3a2 | 125 | int in = data.read(); |
Hagrid | 3:a60dc00bf3a2 | 126 | print_int(in); |
Hagrid | 3:a60dc00bf3a2 | 127 | } else { |
Hagrid | 3:a60dc00bf3a2 | 128 | data.output(); |
Hagrid | 3:a60dc00bf3a2 | 129 | data = atoi(tmpE[2]); |
Hagrid | 3:a60dc00bf3a2 | 130 | } |
Hagrid | 3:a60dc00bf3a2 | 131 | } |
Hagrid | 3:a60dc00bf3a2 | 132 | if(!strcasecmp("adress",tmpE[1])) { |
Hagrid | 3:a60dc00bf3a2 | 133 | adress = atoi(tmpE[2]); |
Hagrid | 3:a60dc00bf3a2 | 134 | } |
Hagrid | 3:a60dc00bf3a2 | 135 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 136 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 137 | break; |
Hagrid | 3:a60dc00bf3a2 | 138 | case 8://backlight |
Hagrid | 3:a60dc00bf3a2 | 139 | set_backlight(atof(tmpE[1])); |
Hagrid | 3:a60dc00bf3a2 | 140 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 141 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 142 | break; |
Hagrid | 3:a60dc00bf3a2 | 143 | case 9://play |
Hagrid | 3:a60dc00bf3a2 | 144 | sprintf(apath,"%s%s",apath,tmpE[1]); |
Hagrid | 3:a60dc00bf3a2 | 145 | FILE* song = fopen(apath, "r"); |
Hagrid | 0:86f82f777a7a | 146 | |
Hagrid | 3:a60dc00bf3a2 | 147 | while(!feof(song)) { |
Hagrid | 3:a60dc00bf3a2 | 148 | int n=fread(&array, 1, sizeof(array), song); |
Hagrid | 3:a60dc00bf3a2 | 149 | mp3.writeStream(array,n); |
Hagrid | 3:a60dc00bf3a2 | 150 | } |
Hagrid | 3:a60dc00bf3a2 | 151 | mp3.terminateStream(); |
Hagrid | 0:86f82f777a7a | 152 | |
Hagrid | 3:a60dc00bf3a2 | 153 | fclose(song); //close the file |
Hagrid | 3:a60dc00bf3a2 | 154 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 155 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 156 | break; |
Hagrid | 3:a60dc00bf3a2 | 157 | case 10://cd |
Hagrid | 3:a60dc00bf3a2 | 158 | sprintf(adir,"%s%s",adir,tmpE[1]); |
Hagrid | 3:a60dc00bf3a2 | 159 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 160 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 161 | break; |
Hagrid | 3:a60dc00bf3a2 | 162 | case 11://help |
Hagrid | 3:a60dc00bf3a2 | 163 | print("\n"); |
Hagrid | 3:a60dc00bf3a2 | 164 | print("mkdir file_name rm file_name\n"); |
Hagrid | 3:a60dc00bf3a2 | 165 | print("ls cls\n"); |
Hagrid | 3:a60dc00bf3a2 | 166 | print("info edit file_name\n"); |
Hagrid | 3:a60dc00bf3a2 | 167 | print("sleep time gpio mode dec_value\n"); |
Hagrid | 3:a60dc00bf3a2 | 168 | print("backlight value play file_name\n"); |
Hagrid | 3:a60dc00bf3a2 | 169 | print("cd folder_name help\n"); |
Hagrid | 3:a60dc00bf3a2 | 170 | print("out data/adress value "); |
Hagrid | 3:a60dc00bf3a2 | 171 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 172 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 173 | break; |
Hagrid | 3:a60dc00bf3a2 | 174 | default://command not found |
Hagrid | 3:a60dc00bf3a2 | 175 | print("\n"); |
Hagrid | 3:a60dc00bf3a2 | 176 | print("hsh: "); |
Hagrid | 3:a60dc00bf3a2 | 177 | print(tmpE[0]); |
Hagrid | 3:a60dc00bf3a2 | 178 | print(" command not found"); |
Hagrid | 3:a60dc00bf3a2 | 179 | print("\n>"); |
Hagrid | 3:a60dc00bf3a2 | 180 | erase(); |
Hagrid | 3:a60dc00bf3a2 | 181 | break; |
Hagrid | 3:a60dc00bf3a2 | 182 | }//end switch |
Hagrid | 3:a60dc00bf3a2 | 183 | }//end press enter only |
Hagrid | 3:a60dc00bf3a2 | 184 | } else { |
Hagrid | 3:a60dc00bf3a2 | 185 | print(&(input[position])); |
Hagrid | 3:a60dc00bf3a2 | 186 | position++; |
Hagrid | 3:a60dc00bf3a2 | 187 | }//end press enter |
Hagrid | 3:a60dc00bf3a2 | 188 | }//end press backspace |
Hagrid | 0:86f82f777a7a | 189 | }//end press key |
Hagrid | 0:86f82f777a7a | 190 | wait(0.1); |
Hagrid | 0:86f82f777a7a | 191 | }//end while |
Hagrid | 0:86f82f777a7a | 192 | fs.unmount(); |
Hagrid | 0:86f82f777a7a | 193 | }//end main |