PC側
送信:WinUsb_WritePipe();
受信:WinUsb_ReadPipe();
マイクロソフト MSDNの解説
http://msdn.microsoft.com/en-us/library/ff540322%28VS.85%29.aspx
LED点灯・消灯部分(PC側)
private: System::Void ToggleLED_btn_Click(System::Object^ sender, System::EventArgs^ e) { ULONG BytesWritten = 0;//実際に書き込まれたバイト数 unsigned char OutputPacketBuffer[64]; //送信バッファー OutputPacketBuffer[0] = 0x80; //0x08はPIC側ではLEDの点灯・消灯のコマンド //送信エンドポイントへの書き込み WinUsb_WritePipe(MyWinUSBInterfaceHandle, 0x01, &OutputPacketBuffer[0], 64, &BytesWritten, NULL); }
PIC側
送信:USBGenWrite();
受信:USBGenRead();
void ProcessIO(void) { //PC側のアプリケーションが接続状態にない場合のLED制御 if(blinkStatusValid) { BlinkUSBStatus(); } if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return; if(!USBHandleBusy(USBGenericOutHandle)) //エンドポイントがホストからのデータを受信したかどうかを確認します。 { switch(OUTPacket[0]) //データが到着したら、コマンドの種類を調べる { case 0x80: //PC側アプリケーションの点灯・消灯コマンド blinkStatusValid = FALSE; //通常のLED点灯パターンを終了 if(mGetLED_1() == mGetLED_2()) { mLED_1_Toggle(); mLED_2_Toggle(); } else { mLED_1_On(); mLED_2_On(); } break; case 0x81: //PC側アプリケーションからボタンの状態を調べるコマンドを受け取った場合 INPacket[0] = 0x81; // if(sw2 == 1) //プッシュボタンが押されていない時 { INPacket[1] = 0x01; } else //プッシュボタンが押されている時 { INPacket[1] = 0x00; } if(!USBHandleBusy(USBGenericInHandle)) { //USBGenWrite():USB送信関数 USBGenericInHandle = USBGenWrite(USBGEN_EP_NUM,(BYTE*)&INPacket,USBGEN_EP_SIZE); } break; } USBGenericOutHandle = USBGenRead(USBGEN_EP_NUM,(BYTE*)&OUTPacket,USBGEN_EP_SIZE); } }//end ProcessIO
0 件のコメント:
コメントを投稿