/******************************************************************** * モニタコマンド受信と実行. ******************************************************************** */ void ProcessIO(void) { // 返答パケットが空であること、かつ、 // 処理対象の受信データがある. { //if((ToPcRdy == 0)) { //受信データがあれば、受信データを受け取る. PacketToPC.raw[0]=Cmd0; // CMD ECHOBACK #if APPLICATION_MODE #if PICAVR_WRITER //コマンドに対応する処理を呼び出す. if(Cmd0 >= HIDASP_PAGE_TX) {cmd_avrspx();} // AVRライターコマンド. else #endif if(Cmd0 >= PICSPX_SETADRS24){cmd_picspx();} // PICライターコマンド. else #endif switch(Cmd0) { case HIDASP_PEEK: {cmd_peek();break;} // メモリー読み出し. case HIDASP_POKE: {cmd_poke();break;} // メモリー書き込み. case HIDASP_JMP: {cmd_exec( BSWAP32(PacketFromPC.adrs),BSWAP16(PacketFromPC.size) ); break;} // 実行. case HIDASP_PAGE_ERASE:{cmd_page_erase();break;} //Flash消去. case HIDASP_PAGE_WRITE:{cmd_page_write();break;} //Flash書込. case HIDASP_FLASH_LOCK:{cmd_flash_lock();break;} //FlashLock. case HIDASP_SET_MODE: {cmd_set_mode();break;} case HIDASP_SAMPLING: {cmd_sampling();break;} case HIDASP_TEST: {cmd_echo();break;} // 接続テスト. #if APPLICATION_MODE case HIDASP_GET_STRING:{cmd_get_string();break;} case HIDASP_USER_CMD: {cmd_user_cmd();break;} #endif default: break; } } // 必要なら、返答パケットをインタラプト転送(EP1)でホストPCに返却する. if( ToPcRdy ) { USBputpacket(PacketToPC.raw,PACKET_SIZE); ToPcRdy = 0; if(poll_mode!=0) { if(mHIDRxIsBusy()) { //コマンドが来ない限り送り続ける. make_report(); } } } }
/******************************************************************** * モニタコマンド受信と実行. ******************************************************************** */ void ProcessIO(void) { // 返答パケットが空であること、かつ、 // 処理対象の受信データがある. if((ToPcRdy == 0) && (USBHandleBusy(USBGenericOutHandle)==0) ) { //受信データがあれば、受信データを受け取る. memcpy64((char*)&PacketFromPC,(char*)OUTPacket); //次の読み込みを発行する. USBGenericOutHandle = USBGenRead(USBGEN_EP_NUM,(BYTE*)&OUTPacket ,USBGEN_EP_SIZE); PacketToPC.raw[0]=Cmd0; // CMD ECHOBACK //コマンドに対応する処理を呼び出す. if(Cmd0==HIDASP_PEEK) {cmd_peek();} // メモリー読み出し. else if(Cmd0==HIDASP_POKE) {cmd_poke();} // メモリー書き込み. else if(Cmd0==HIDASP_JMP) {cmd_exec();} // 実行. else if(Cmd0==HIDASP_TEST) {cmd_echo();} // 接続テスト. else if(Cmd0==HIDASP_GET_STRING){cmd_get_string();} else if(Cmd0==HIDASP_USER_CMD) {cmd_user_cmd();} else if(Cmd0==HIDASP_SET_MODE) {cmd_set_mode();} } // 必要なら、返答パケットをバルク転送(EP1)でホストPCに返却する. if( ToPcRdy ) { if(!USBHandleBusy(USBGenericInHandle)) { memcpy64(INPacket,(char*)&PacketToPC); USBGenericInHandle=USBGenWrite(USBGEN_EP_NUM,(BYTE*)INPacket,USBGEN_EP_SIZE); ToPcRdy = 0; if(poll_mode!=0) { if( USBHandleBusy(USBGenericOutHandle) ) {//コマンドが来ない限り送り続ける. make_report(); } } } } }
/******************************************************************** * モニタコマンド受信と実行. ******************************************************************** */ void ProcessIO(void) { // 返答パケットが空であること、かつ、 // 処理対象の受信データがある. if((ToPcRdy == 0) && (!mHIDRxIsBusy())) { //受信データがあれば、受信データを受け取る. HIDRxReport64((char *)&PacketFromPC); PacketToPC.raw[0]=Cmd0; // CMD ECHOBACK //コマンドに対応する処理を呼び出す. if(Cmd0 >= HIDASP_PAGE_TX) {cmd_avrspx();} // AVRライターコマンド. else if(Cmd0 >= PICSPX_SETADRS24){cmd_picspx();} // PICライターコマンド. else if(Cmd0==HIDASP_PEEK) {cmd_peek();} // メモリー読み出し. else if(Cmd0==HIDASP_POKE) {cmd_poke();} // メモリー書き込み. else if(Cmd0==HIDASP_JMP) {cmd_exec();} // 実行. else if(Cmd0==HIDASP_SET_MODE) {cmd_set_mode();} else if(Cmd0==HIDASP_GET_STRING){cmd_get_string();} else if(Cmd0==HIDASP_USER_CMD) {cmd_user_cmd();} else if(Cmd0==HIDASP_TEST) {cmd_echo();} // 接続テスト. } // 必要なら、返答パケットをインタラプト転送(EP1)でホストPCに返却する. if( ToPcRdy ) { if(!mHIDTxIsBusy()) { HIDTxReport64((char *)&PacketToPC); ToPcRdy = 0; if(poll_mode!=0) { if(mHIDRxIsBusy()) { //コマンドが来ない限り送り続ける. make_report(); } } } } }
/*! \brief Start reading from the socket. * * This slot is called when the client TCP socket emits a readyRead() signal, * i.e. when there is data to read. */ void RemoteControl::startRead() { char buffer[1024] = {0}; int bytes_read; QString answer = ""; bytes_read = rc_socket->readLine(buffer, 1024); if (bytes_read < 2) // command + '\n' return; QStringList cmdlist = QString(buffer).trimmed().split(" ", QString::SkipEmptyParts); if (cmdlist.size() == 0) return; QString cmd = cmdlist[0]; if (cmd == "f") answer = cmd_get_freq(); else if (cmd == "F") answer = cmd_set_freq(cmdlist); else if (cmd == "m") answer = cmd_get_mode(); else if (cmd == "M") answer = cmd_set_mode(cmdlist); else if (cmd == "l") answer = cmd_get_level(cmdlist); else if (cmd == "L") answer = cmd_set_level(cmdlist); else if (cmd == "u") answer = cmd_get_func(cmdlist); else if (cmd == "U") answer = cmd_set_func(cmdlist); else if (cmd == "v") answer = cmd_get_vfo(); else if (cmd == "V") answer = cmd_set_vfo(cmdlist); else if (cmd == "s") answer = cmd_get_split_vfo(); else if (cmd == "S") answer = cmd_set_split_vfo(); else if (cmd == "_") answer = cmd_get_info(); else if (cmd == "AOS") answer = cmd_AOS(); else if (cmd == "LOS") answer = cmd_LOS(); else if (cmd == "LNB_LO") answer = cmd_lnb_lo(cmdlist); else if (cmd == "\\dump_state") answer = cmd_dump_state(); else if (cmd == "q" || cmd == "Q") { // FIXME: for now we assume 'close' command rc_socket->close(); return; } else { // print unknown command and respond with an error qWarning() << "Unknown remote command:" << cmdlist; answer = QString("RPRT 1\n"); } rc_socket->write(answer.toLatin1()); }