ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type
mikics opened this issue · 7 comments
Hi, I'm trying to use pyhidapi for controlling a Digital Micromirror Device. I'm trying to send to the device its stop command, but I receive the following error:
CRITICAL:root:Unhandled exception:Traceback (most recent call last):
File "C:\Users\OPT\anaconda3\envs\ScopeFoundry\lib\site-packages\ScopeFoundry\hardware.py", line 208, in enable_connection
raise err
File "C:\Users\OPT\anaconda3\envs\ScopeFoundry\lib\site-packages\ScopeFoundry\hardware.py", line 204, in enable_connection
self.connect()
File "D:\LabPrograms\ScopeFoundry_POLIMI\DMD_ScopeFoundry\DMDHardware.py", line 57, in connect
self.dmd.stopsequence()
File "D:\LabPrograms\ScopeFoundry_POLIMI\DMD_ScopeFoundry\DMDDeviceHID.py", line 171, in stopsequence
self.command('w',0x00,0x1a,0x24,[0])
File "D:\LabPrograms\ScopeFoundry_POLIMI\DMD_ScopeFoundry\DMDDeviceHID.py", line 69, in command
self.device.write(buffer)
File "C:\Users\OPT\anaconda3\envs\ScopeFoundry\lib\site-packages\hid_init.py", line 155, in write
return self.__hidcall(hidapi.hid_write, self._dev, data, len(data))
File "C:\Users\OPT\anaconda3\envs\ScopeFoundry\lib\site-packages\hid_init.py", line 142, in _hidcall
ret = function(*args, **kwargs)
ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type
The arguments that I pass at ret = function(*args, **kwargs) are in this figure (*args and **kwargs).
Why do I get this error? How can I solve it? Thank you.
write('\x00\x64\x00\x03\x00...')
is the correct way to call the API
versus what you currently have
write([0, 64, 0, 3, 0, ...])
IE, write
needs a binary string, not a list of numbers
Even with your suggestion, the error still remains. Other solutions?
without seeing the code in question and/or the resulting datatype being passed to write
at runtime it is hard to say - are you able to get trivial examples working?
write('hello')
or something
I have the same problem.
here is my test code and the ERR message.
import hid
vid = 0xFEED# Change it for your device
pid = 0x6060# Change it for your device
h = hid.Device(vid, pid)
h.send_feature_report('\x66\x44')
ArgumentError Traceback (most recent call last)
in
----> 1 h.send_feature_report('\x66\x44')
~/anaconda3/lib/python3.6/site-packages/hid/init.py in send_feature_report(self, data)
168 def send_feature_report(self, data):
169 return self.__hidcall(hidapi.hid_send_feature_report,
--> 170 self.__dev, data, len(data))
171
172 def get_feature_report(self, report_id, size):
~/anaconda3/lib/python3.6/site-packages/hid/init.py in __hidcall(self, function, *args, **kwargs)
140 raise HIDException('device closed')
141
--> 142 ret = function(*args, **kwargs)
143
144 if ret == -1:
ArgumentError: argument 2: <class 'TypeError'>: wrong type
can you try b"\x66\x44"
?
Here's an example:
byte_array = bytearray();
# 64 bytes of 0's as an example
for i in range(64):
byte_array.append(0)
with hid.Device(hid_vendor_id, hid_product_id) as h:
h.write(bytes(byte_array))
I think it would be helpful if something like this was added to the readme @apmorton