First version of my operation system for stm32 board

Dependencies:   RA8875 VS1053 sd-driver-hs

Committer:
Hagrid
Date:
Tue Mar 13 06:37:56 2018 +0000
Revision:
4:3cdd044a3df4
Parent:
3:a60dc00bf3a2
Add LCD manager;

Who changed what in which revision?

UserRevisionLine numberNew 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