int _start (int a1, int a2) { char buf[100]; for (;;) { printf ("sendexample> "); lineinput (buf, 100); switch (buf[0]) { case 'h': print_help (buf); break; case 's': sendex (buf); break; case 'q': exitprocess (0); break; default: command_error (); break; } } }
//************************************************** // ファイルローダー // 戻り値 0:何もしない, 1:強制終了する //************************************************** int fileloader(const char* str0, const char* str1) { char fname[COMMAND_LENGTH]; int size = 0; #if BOARD == BOARD_GR int led = digitalRead(PIN_LED0) | ( digitalRead(PIN_LED1)<<1) | (digitalRead(PIN_LED2)<<2)| (digitalRead(PIN_LED3)<<3); #else int led = digitalRead(RB_LED); #endif char tc[2]; char *fs[4]; StopFlg = false; tc[0] = CommandData[0]; tc[1] = CommandData[1]; //USB_Serial->println(">"); while(true){ //LEDを点灯する #if BOARD == BOARD_GR digitalWrite(PIN_LED0, HIGH); digitalWrite(PIN_LED1, HIGH); digitalWrite(PIN_LED2, HIGH); digitalWrite(PIN_LED3, HIGH); #else digitalWrite(RB_LED, HIGH); #endif //コマンド待ち USB_Serial->println(); USB_Serial->print("WAKAYAMA.RB Board Ver."); USB_Serial->print(str0); if(str1[0] != 0){ USB_Serial->print(", mruby "); USB_Serial->print(str1); } USB_Serial->println(" (H [ENTER])"); USB_Serial->print(">"); lineinput((char*)CommandData); USB_Serial->println(); //DEBUG_PRINT("CommandData[0]", (char)CommandData[0]); if(CommandData[0] == '.'){ CommandData[0] = tc[0]; CommandData[1] = tc[1]; USB_Serial->print(">"); USB_Serial->println((char*)CommandData); } tc[0] = CommandData[0]; tc[1] = CommandData[1]; //DEBUG_PRINT("CommandData", (char*)CommandData); if (CommandData[0] == 'Z'){ EEP.format(); } else if (CommandData[0] == 'D'){ if(strlen(CommandData) > 2){ //ファイル名を取得 int len = strlen(CommandData); for(int i=0; i<len; i++){ if(CommandData[i] == ' '){ fs[0] = &CommandData[i+1]; break; } } strcpy(fname, fs[0]); EEP.fdelete((const char*)fname); } } else if (CommandData[0] == 'G' || CommandData[0] == 'F'){ if(strlen(CommandData) > 2){ //ファイル名を取得 int len = strlen(CommandData); for(int i=0; i<len; i++){ if(CommandData[i] == ' '){ fs[0] = &CommandData[i+1]; break; } } strcpy(fname, fs[0]); readfile(fname, CommandData[0]); } } else if (CommandData[0] == 'R'){ if(strlen(CommandData) > 2){ //ファイル名を取得 int len = strlen(CommandData); for(int i=0; i<len; i++){ if(CommandData[i] == ' '){ fs[0] = &CommandData[i+1]; break; } } strcpy(fname, fs[0]); strcpy( (char*)RubyFilename, fname ); len = strlen(RubyFilename); if(RubyFilename[len-4] != '.' || RubyFilename[len-3] != 'm' || RubyFilename[len-2] != 'r' || RubyFilename[len-1] != 'b'){ strcat(RubyFilename, ".mrb"); } //強制終了フラグを立てる StopFlg = true; break; } } else if(CommandData[0] == 'W' || CommandData[0] == 'U'){ if(strlen(CommandData) > 3){ //スペースを0に変えて、ポインタを取得 int j = 0; int len = strlen(CommandData); for(int i=0; i<len; i++){ if(CommandData[i] == ' '){ CommandData[i] = 0; fs[j] = &CommandData[i+1]; j++; if(j>2){ break; } } } strcpy(fname, fs[0]); size = atoi(fs[1]); //0xFEアックを返さないようにする if(Ack_FE_mode == 1 && CommandData[0] == 'W'){ Ack_FE_mode = 0; } //ファイルを保存します writefile(fname, size, CommandData[0]); //Ack_FE_mode==0だったら、0xFEアックを返すように戻す if(Ack_FE_mode == 0 && CommandData[0] == 'W'){ Ack_FE_mode = 1; } for(int i=0; i<j; i++){ *(fs[i] - 1) = ' '; } } } else if(CommandData[0] == 'X' || CommandData[0] == 'V'){ if(strlen(CommandData) > 3){ //スペースを0に変えて、ポインタを取得 int j = 0; int len = strlen(CommandData); for(int i=0; i<len; i++){ if(CommandData[i] == ' '){ CommandData[i] = 0; fs[j] = &CommandData[i+1]; j++; if(j>2){ break; } } } strcpy(fname, fs[0]); size = atoi(fs[1]); strcpy( (char*)RubyFilename, fname ); len = strlen(RubyFilename); if(RubyFilename[len-4] != '.' || RubyFilename[len-3] != 'm' || RubyFilename[len-2] != 'r' || RubyFilename[len-1] != 'b'){ strcat(RubyFilename, ".mrb"); } //0xFEアックを返さないようにする if(Ack_FE_mode == 1 && CommandData[0] == 'X'){ Ack_FE_mode = 0; } //ファイルを保存します writefile(RubyFilename, size, CommandData[0]); //Ack_FE_mode==0だったら、0xFEアックを返すように戻す if(Ack_FE_mode == 0 && CommandData[0] == 'X'){ Ack_FE_mode = 1; } for(int i=0; i<j; i++){ *(fs[i] - 1) = ' '; } //強制終了フラグを立てる StopFlg = true; break; } } else if(CommandData[0] == 'E'){ //ファームウェア書き込み待ちにする system_reboot( REBOOT_USERAPP ); //リセット後にユーザアプリを起動する //system_reboot( REBOOT_FIRMWARE ); //リセット後にファームウェアを起動する } else if (CommandData[0] == 'L'){ USB_Serial->println(); for(int i=0; i<64; i++){ size = EEP.fdir( i, fname ); if(fname[0] != 0){ USB_Serial->print(" "); USB_Serial->print(fname); USB_Serial->print(" "); USB_Serial->print(size); USB_Serial->println(" byte"); } } } else if(CommandData[0] == 'A'){ EEP.viewFat(); } else if(CommandData[0] == 'S'){ if(strlen(CommandData) > 2){ int len = strlen(CommandData); for(int i=0; i<len; i++){ if(CommandData[i] == ' '){ fs[0] = &CommandData[i+1]; break; } } EEP.viewSector( atoi(fs[0]) ); } } else if(CommandData[0] == 'Q'){ break; } else if (CommandData[0] == 'C'){ USB_Serial->println(); USB_Serial->println(LICENSE_MRUBY); USB_Serial->println(LICENSE_MRUBYURL); USB_Serial->println(LICENSE_WRBB); USB_Serial->println(LICENSE_WRBBURL); } else{ USB_Serial->println(); if(Ack_FE_mode == 1){ USB_Serial->print("*"); } USB_Serial->println("EEPROM FileWriter Ver. 1.61.v1"); USB_Serial->println(" Command List"); USB_Serial->println(" L:List Filename..........>L [ENTER]"); USB_Serial->println(" W:Write File.............>W Filename Size [ENTER]"); USB_Serial->println(" G:Get File...............>G Filename [ENTER]"); USB_Serial->println(" F:Get File B2A...........>F Filename [ENTER]"); USB_Serial->println(" D:Delete File............>D Filename [ENTER]"); USB_Serial->println(" Z:Delete All Files.......>Z [ENTER]"); USB_Serial->println(" A:List FAT...............>A [ENTER]"); USB_Serial->println(" R:Run File...............>R Filename [ENTER]"); USB_Serial->println(" X:Execute File...........>X Filename Size [ENTER]"); USB_Serial->println(" S:List Sector............>S Number [ENTER]"); USB_Serial->println(" .:Repeat.................>. [ENTER]"); USB_Serial->println(" Q:Quit...................>Q [ENTER]"); USB_Serial->println(" E:System Reset...........>E [ENTER]"); USB_Serial->println(" U:Write File B2A.........>U Filename Size [ENTER]"); //USB_Serial->println(" V:Execute File B2A.......>V Filename Size [ENTER]"); USB_Serial->println(" C:License................>C [ENTER]"); } } #if BOARD == BOARD_GR digitalWrite(PIN_LED0, led & 1); digitalWrite(PIN_LED1, (led >> 1) & 1); digitalWrite(PIN_LED2, (led >> 2) & 1); digitalWrite(PIN_LED3, (led >> 3) & 1); #else digitalWrite(RB_LED, led); #endif if(StopFlg == true){ return 1; } return 0; }