First version of my operation system for stm32 board
Dependencies: RA8875 VS1053 sd-driver-hs
main.cpp
- Committer:
- Hagrid
- Date:
- 2018-03-01
- Revision:
- 0:86f82f777a7a
- Child:
- 2:a3d00f0610f9
File content as of revision 0:86f82f777a7a:
#include "include.h" //Serial device Serial keyboard(Tx_KB,Rx_KB);// Tx, Rx //SPI device VS1053 mp3(MOSI_AUDIO, MISO_AUDIO, CLK_AUDIO, CS_AUDIO, RST_AUDIO,DREQ_AUDIO,DSC_AUDIO,PA_4); RA8875 lcd(MOSI_LCD, MISO_LCD, CLK_LCD, CS_LCD, NC, "tft"); SDBlockDevice sd(MOSI_SD, MISO_SD, CLK_SD, CS_SD); //File system FATFileSystem fs("fs"); //Tread Thread kb_thread; void keyboard_task() { while(true) { input[position] = keyboard.getc(); } } int main() { wait(0.3); //init device lcd.init(480,272); mp3.initialize(); keyboard.baud(57600); lcd.foreground(Orange); kb_thread.start(keyboard_task); sd.init(); fs.mount(&sd); lcd.printf("HagridOS v.5.0\n\r>"); fs.mount(&sd); ///start main code while (true) { if(!keyboard.readable()) { //scan key if (input[position] == '\n') { //press enter input[position] = '\0'; //insert in end position NULL character kbsplit(input);//split keyboard input if(tmpE[0] == NULL) { //press only enter if lcd.printf("\n\r"); lcd.printf(">"); } else { switch(compare(&tmpE[0])) { //switch run basic commands case 0: fs.mkdir(tmpE[1],777); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 1: fs.remove(tmpE[1]); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 2: fs.mount(&sd); DIR *d; struct dirent *p; d = opendir("/fs/"); if (d != NULL) { while ((p = readdir(d)) != NULL) { lcd.printf("\n\r"); lcd.printf(p->d_name); } } closedir(d); fs.unmount(); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 3: lcd.cls(); lcd.printf("HagridOS v.5.0\n\r>"); erase(); break; case 4: lcd.printf("\n\rBasic Operation System for STM32 by HAGRID\n\r"); lcd.printf("Version: 5.0 release: 24.02.2018\n\r"); lcd.printf("SD size: %lluMb\n\r",(sd.size()/1024)/1024); lcd.printf("CPU speed: %d MHz", SystemCoreClock/1000000); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 5: lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 6: wait(atoi(tmpE[1])); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 7: lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 8: lcd.Backlight(atof(tmpE[1])); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 9: FILE* song = fopen(tmpE[1], "r"); while(!feof(song)) { int n=fread(&array, 1, sizeof(array), song); mp3.writeStream(array,n); } mp3.terminateStream(); fclose(song); //close the file lcd.printf("\n\r"); lcd.printf(">"); erase(); break; case 10: sprintf(c_dir,"%s%s",home,tmpE[1]); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; default: lcd.printf("\n\r"); lcd.printf("hsh: %s command not found",tmpE[0]); lcd.printf("\n\r"); lcd.printf(">"); erase(); break; }//end switch }//end press enter only } else { lcd.printf(&(input[position])); position++; }//end press enter }//end press key wait(0.1); }//end while fs.unmount(); }//end main