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 件のコメント:
コメントを投稿