Проблемы с 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) выводит различные значения по моим системам. Но мне интересно, сможет ли кто-нибудь пролить больше света на то, что здесь не так, и предложить решение.