Usb interrupt pipe |
答題得分者是:taishyang
|
waterful0
一般會員 發表:7 回覆:12 積分:3 註冊:2006-07-12 發送簡訊給我 |
麻煩知道的人指點一下小弟,謝謝。
問題如下: 我想要透過interrup pipe 在STI 下收到scanner 的 給我的訊息。 我的做法如下: // Endpoint list://///////////////////////////////////////////////////////////////////////////////////// //bulk in 00000003 0.00096549 [660] MaximumPacketSize =512 00000004 0.00103002 [660] EndpointAddress =0x82 00000005 0.00106997 [660] Interval =0 00000006 0.00219497 [660] PipeType = USBSCAN_PIPE_BULK //bulk out 00000007 0.00227403 [660] MaximumPacketSize =512 00000008 0.00231482 [660] EndpointAddress =0x02 00000009 0.00273750 [660] Interval =0 00000010 0.00279840 [660] PipeType = USBSCAN_PIPE_BULK //interrupt in 00000011 0.00284031 [660] MaximumPacketSize =8 00000012 0.00344792 [660] EndpointAddress =0x87 00000013 0.00351553 [660] Interval =11 00000014 0.00355604 [660] PipeType = USBSCAN_PIPE_INTERRUPT //interrupt 00000015 0.00406253 [660] MaximumPacketSize =8 00000016 0.00413293 [660] EndpointAddress =0x07 00000017 0.00430837 [660] Interval =11 00000018 0.00497298 [660] PipeType = USBSCAN_PIPE_INTERRUPT /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //code typedef struct _MY_EVENT_DATA { BYTE byTag[8]; }MY_EVENT_DATA, *PMY_EVENT_DATA; class UsdMyDevice : public IStiUSD, public INonDelegatingUnknown { privater: MY_EVENT_DATA m_EventData; OVERLAPPED m_EventOverlapped; ... } STDMETHODIMP UsdMyDevice::Initialize() { ... //default pipe================================================ m_DeviceDataHandle = CreateFileA( m_pszDeviceNameA, GENERIC_READ | GENERIC_WRITE, // Access mask FILE_SHARE_READ | FILE_SHARE_WRITE, // Share mode NULL, // SA OPEN_EXISTING, // Create disposition FILE_ATTRIBUTE_SYSTEM, // Attributes NULL ); //interrupt pipe================================================ char szDeviceName[MAX_PATH]; sprintf(szDeviceName,"%s\\2", m_pszDeviceNameA); m_hDeviceInt = CreateFile( szDeviceName, GENERIC_READ, //GENERIC_READ | GENERIC_WRITE, // Access mask 0, // Share mode NULL, // SA OPEN_EXISTING, // Create disposition FILE_FLAG_OVERLAPPED, // Attributes NULL ); ... } STDMETHODIMP UsdMyDevice:: SetNotificationHandle( HANDLE hEvent ) { HRESULT hr = S_OK; if (hEvent && (hEvent != INVALID_HANDLE_VALUE)) { m_guidLastEvent = GUID_NULL; memset(&m_EventOverlapped,0,sizeof(m_EventOverlapped)); m_EventOverlapped.hEvent = hEvent; memset(&m_EventData, 0, sizeof(MY_EVENT_DATA)); // // use the following call for interrupt events on your device // DWORD dwError = 0; ::DebugOutputA("***FITUSD*** SetNotificationHandle: DeviceIoControl In"); BOOL bResult = DeviceIoControl( m_hDeviceInt, (DWORD)IOCTL_WAIT_ON_DEVICE_EVENT, NULL, 0, &m_EventData, sizeof(m_EventData), &dwError, &m_EventOverlapped ); if (bResult) { hr = S_OK; } else { hr = HRESULT_FROM_WIN32(::GetLastError()); } } else { if(m_hDeviceInt) { if(!CancelIo(m_hDeviceInt)) { // // canceling of the IO failed, call GetLastError() here to determine the cause. // LONG lError = ::GetLastError(); } } } return hr; } STDMETHODIMP UsdMyDevice::GetNotificationData( LPSTINOTIFY pBuffer ) // SYNCHRONIZED { //應該要進來,卻沒進來 .. } 系統呼叫 SetNotificationHandle 後,出現0x800703E5 (重疊I/O正在進行中) 的錯誤,沒有再呼叫 GetNotificationData。 為什麼?是我的Createfile 錯了嗎?還是DeviceIoControl 錯誤? |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
waterful0
一般會員 發表:7 回覆:12 積分:3 註冊:2006-07-12 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
waterful0
一般會員 發表:7 回覆:12 積分:3 註冊:2006-07-12 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
waterful0
一般會員 發表:7 回覆:12 積分:3 註冊:2006-07-12 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
waterful0
一般會員 發表:7 回覆:12 積分:3 註冊:2006-07-12 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Driver是自己開發的嗎?
CreateFile中用到的Symbolic name通常會加上PIPE名稱讓driver區分你要取得的是哪一個endpoint的handle ===================引 用 waterful0 文 章=================== 恩,這就是問題點了,所以我懷疑是我的pipe 是否開錯了。 F/W : endpoint 0x87 (interrupt in) 我 : 我不知道CreateFile 幫我打開的是endpoint 多少? 有辨法可以看出CreateFile 打開的是哪個endpoint 嗎? |
waterful0
一般會員 發表:7 回覆:12 積分:3 註冊:2006-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |