Причём тут C++? А вообще, libusb любит возвращать PIPE ERROR когда устройство делает Stall на запрос, что говорит об ошибке его обработки или что реквест не поддерживается. Косвенно подтверждается этим:
Report Descriptors:
** UNAVAILABLE **
а при этом делается setReport
Далее, судя по дескрипторам это обычное HID устройство. Попробуйте до него достучаться при помощи:
www.signal11.us/oss/hidapi/:sudo apt-get install libhidapi-dev
usbscale тоже пробовал - долго висит и возвращает
глупый вопрос, но вы свои VID:PID сюда добавляли:
https://github.com/erjiang/usbscale/blob/master/sc...
?
Ещё, тут:
https://github.com/erjiang/usbscale/blob/master/us... в этом месте:
//
// If the data transfer succeeded, then we pass along the data we
// received tot **print_scale_data**.
//
if(r == 0) {
они проверяют код ошибки на 0, это правильно, но какой именно ошибкой завершается запрос - непонятно. Судя по тому, что вы говорите ("долго висит"), у них там используется большой таймаут (10 сек), то код ошибки - LIBUSB_ERROR_TIMEOUT, а в документации сказано:
Also check transferred when dealing with a timeout error code. libusb may have to split your transfer into a number of chunks to satisfy underlying O/S requirements, meaning that the timeout may expire after the first few chunks have completed. libusb is careful not to lose any data that may have been transferred; do not assume that timeout conditions indicate a complete lack of I/O.
они ожидают блок размером WEIGH_REPORT_SIZE (6 байт), вдруг так случается, что размер у ваших весов поменьше? 5 байт? Т.е. нужно, для начала, подправить программку и залогировать код ошибки и значение переменной len. Если это действительно таймаут, а не PIPE ERROR, то уже проверять значение len на выходе, если оно больше нуля - пробовать процессить эти данные. Только процессинг, скорее всего, должен быть уже другой какой.
Основное же отличие от питоновской программы: не далется setReport. Как следствие, можете попробовать закомментировать эту строчку в питоновском скрипте, как быструю пробу.
Финальным же аккордом может стать реверсинг общения весов и виндовой программы при помощи Wireshark :-)
Если не сможете сами, можете сделать мне заказ, заинтересует - пишите в почту (в профиле).