Python cython hidapi问题,发送功能报告或chr()

Python cython hidapi问题,发送功能报告或chr(),python,linux,cython,chr,hidapi,Python,Linux,Cython,Chr,Hidapi,我有这段代码,它在Windows和MacOSX上使用Python2.7.6运行良好。我正在使用cython hidapi intereface从Voltcraft VC870功率表读取数据。要获取数据,如果首先需要向设备发送功能报告,如下所示: buf = [0x00, 0x80, 0x25, 0x00, 0x00, 0x03] res = hid.device().send_feature_report(buf); 在Windows 8.1和Mac OS X Mavericks上,这可以正常

我有这段代码,它在Windows和MacOSX上使用Python2.7.6运行良好。我正在使用cython hidapi intereface从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

是罪魁祸首,因为chr(0x80)在我的系统中输出不同的值。但我想知道是否有人能进一步说明这里的问题并提出解决方案。

我刚刚开始使用cython hidapi进行测试,我想我知道您的问题可能是什么。buff需要从featurereport id开始,这是获取_feature_report所传递的第一个参数,我不知道这里的0x00是否正确。你到底想用这个设备做什么?你是对的,谢谢你的评论。后来有人建议我对第一个字符使用0x05,因为featureid中的第一个字符必须是数据包的长度。这很奇怪,因为错误的字符(0x00)在Windows上工作,但在Linux上不工作。我只是试着连接到一个串行设备,检索一些我不是hidapi专家,并且从一个在线发现的例子中改编了一些代码,定期从中更新数据。有时“有效”真的不起作用。第一个字节应为报告ID,其余字节为实际数据。
  buff = ''.join(map(chr, buff))