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