Пример #1
0
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;
		}
	}
}
Пример #2
0
//**************************************************
// ファイルローダー
// 戻り値 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;
}