Проблемы с cython-hidapi, send_feature_report или chr()

У меня есть этот фрагмент кода, который отлично работает на Windows и Mac OS X с использованием Python 2.7.6. Я использую интерфейс 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) выводит различные значения по моим системам. Но мне интересно, сможет ли кто-нибудь пролить больше света на то, что здесь не так, и предложить решение.

0 ответов

Другие вопросы по тегам