初級會員
Joined
: 2009/2/2 17:01 最後登入時間
: 2010/5/5 11:45
Group:
註冊會員
Level : 4 HP : 0 / 85 MP : 10 / 3827 EXP : 40
|
範例裡面WinUSB-Highbandwidth 示範了如何從電腦傳送三筆資料到DEVICE 可是我想要同時傳送與接收資料 所以我修改了ENDPOINT2 把它改成傳資料給電腦 但是好像沒有工作 沒有傳出去 不太懂是哪裡寫錯了 附件是所有成式 我是用PIC18F4550的實驗板做的。 下面是我在MPLAB MAIN 函式裡面修改的情況 if(EP2INEvenNeedsServicingNext == TRUE) { if(!USBHandleBusy(EP2INEvenHandle)) //Check if the endpoint has received any data from the host. { //Re-arm the OUT endpoint for the next packet:IN_TO_HOST 1 EP2INEvenHandle = USBTransferOnePacket(2, IN_TO_HOST,(BYTE*)&EP2INEvenBuffer,64); EP2INEvenNeedsServicingNext = FALSE; } } else //else EP2OUTOdd needs servicing next { if(!USBHandleBusy(EP2INOddHandle)) //Check if the endpoint has received any data from the host. { //Re-arm the OUT endpoint for the next packet:IN_TO_HOST 1 EP2INOddHandle = USBTransferOnePacket(2, IN_TO_HOST,(BYTE*)&EP2INOddBuffer,64); EP2INEvenNeedsServicingNext = TRUE; } }
下面是我在VC++2005的修改
OverlappedReadStructure2.Internal = 0; OverlappedReadStructure2.InternalHigh = 0; OverlappedReadStructure2.Offset = 0; OverlappedReadStructure2.OffsetHigh = 0; OverlappedReadStructure2.Pointer = 0; OverlappedReadStructure2.hEvent = IOEvent2;
OverlappedWriteStructure3.Internal = 0; OverlappedWriteStructure3.InternalHigh = 0; OverlappedWriteStructure3.Offset = 0; OverlappedWriteStructure3.OffsetHigh = 0; OverlappedWriteStructure3.Pointer = 0; OverlappedWriteStructure3.hEvent = IOEvent3;
//Actually start sending the data. HighBandwidthWinUSB::WinUsb_WritePipe(MyWinUSBInterfaceHandle, 0x01, &OutputPacketBuffer[0], 64000, &BytesWritten, &OverlappedWriteStructure); //Send data OUT (of the host) on endpoint 1 (pipe ID = 0x01) HighBandwidthWinUSB::WinUsb_ReadPipe(MyWinUSBInterfaceHandle, 0x02, &InputPacketBuffer2[0], 64000, &BytesRead2, &OverlappedReadStructure2); //Send data OUT (of the host) on endpoint 2 (pipe ID = 0x02) HighBandwidthWinUSB::WinUsb_WritePipe(MyWinUSBInterfaceHandle, 0x03, &OutputPacketBuffer3[0], 64000, &BytesWritten3, &OverlappedWriteStructure3); //Send data OUT (of the host) on endpoint 3 (pipe ID = 0x03) //Wait for the data to finish being transferred. WaitForSingleObject(IOEvent, 9000); //Blocking function until complete or timeout occurs. WaitForSingleObject(IOEvent2, 9000); //Blocking function until complete or timeout occurs. WaitForSingleObject(IOEvent3, 9000); //Blocking function until complete or timeout occurs.
發表於: 2009/8/4 16:31
|