2012-10-09 1910 views
1

我有一個相當簡單的USB HID設備,我一直在試圖弄清楚如何讀取和寫入使用Python。我已經能夠使用PyWinUSB從它讀取,但是當我嘗試寫入它時,問題就出現了。試圖寫入它會使事情爆炸。簡單的讀寫Python中的USB HID設備?

例如:

device = hid.HidDeviceFilter(vendor_id = 0x0003, product_id = 0x1001).get_devices()[0] 

這工作得很好。然後讀取原始數據,這是所有我所關心的,現在(我也有工作,一旦我能弄清楚如何寫詛咒事):

def readData(data): 
    print(data) 
    return None 

這工作正常(其實,當我看到它工作時,這真的很令人興奮)。所以我會像這樣分配數據處理程序:

device.set_raw_data_handler(readData) 

而且每次我點擊一個按鈕,都沒問題。數據通過您所期望的。太棒了!

問題出現在我要寫入設備時。 繼樣本simple_send文件作爲模板(這可能不是最好的選擇),我會做到以下幾點:

report = device.find_output_reports()[0] 

這將返回一個報告對象與辭典保持4項。那是對的嗎?您是否使用output_reports對象寫入設備?試圖通過報告值設置到任何東西可以這樣做:

report[<key>] = "pneumonoultramicroscopicvolcanoconiosis" 
report.send() 

這將回頭率,我無法解釋某些令人厭惡的錯誤:

Traceback (most recent call last): 
    File "<pyshell#21>", line 1, in <module> 
    report.send() 
    File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\core.py", line 1446, in send 
    self.__prepare_raw_data() 
    File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\core.py", line 1401, in __prepare_raw_data 
    byref(self.__raw_data), self.__raw_report_size)) 
    File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\winapi.py", line 382, in __init__ 
    raise helpers.HIDError("hidP error: %s" % self.error_message_dict[error_code]) 
HIDError: hidP error: data index not found 

我使用Windows 7.我已經設法找到(最終)HID DLL導出函數的引用,並且我不必(或者甚至真的想要)使用PyWinUSB庫。我只是想完成這項工作,似乎並不像那麼艱難,但它一直如此。

有人能告訴我我在這裏做錯了什麼嗎?

謝謝。

此外,我試圖跟蹤錯誤調用,並且在程序剛剛關閉之前就已經做出了很多令人沮喪的事情。

回答

3

我做到了與此

buffer= [0xFF]*33 # 33 = report size + 1 byte (report id) 
    buffer[0]=0x0 # report id 
    buffer[1]=0xFE 
    buffer[2]=0x00 
    buffer[3]=0xFF 
    out_report.set_raw_data(buffer) 
    out_report.send() 
    dev.close() 
0

工作,爲我工作只有這個:

report.send([0x70, ..., 0x73 ]) 

set_raw_data([0x70, ..., 0x73)和隨後send()函數調用序列並沒有爲我工作。