我有这段代码,它在使用 Python 2.7.6 的 Windows 和 Mac OS X 上运行良好。我正在使用 cython-hidapi 接口从 Voltcraft VC870 功率计读取数据。要获取数据,如果首先需要向设备发送功能报告,如下所示:
buf = [0x00, 0x80, 0x25, 0x00, 0x00, 0x03]
res = hid.device().send_feature_report(buf);
在 Windows 8.1 和 Mac OS X Mavericks 上,这可以正常工作并返回一个非负值。但是,Linux 上的相同代码返回一个负数。我相信这意味着设备不理解发送的功能报告。
调用的来自 hid (cython-hidapi) 的代码如下:
def send_feature_report(self, buff):
'''Accept a list of integers (0-255) and send them to the device'''
# convert to bytes
if sys.version_info < (3, 0):
buff = ''.join(map(chr, buff))
else:
buff = bytes(buff)
cdef hid_device * c_hid = self._c_hid
cdef unsigned char* cbuff = buff # covert to c string
cdef size_t c_buff_len = len(buff)
cdef int result
with nogil:
result = hid_send_feature_report(c_hid, cbuff, c_buff_len)
return result
我对 C 类型或字节级处理不是很熟悉。我最初怀疑这条线:
buff = ''.join(map(chr, buff))
是罪魁祸首,因为 chr(0x80) 在我的系统中输出不同的值。但我想知道是否有人可以进一步了解这里出了什么问题并提出修复建议。