Приём сообщений в HID API

348
05 августа 2017, 04:37

Доброго времени суток. Пишу программу для Raspberry Pi 3 в Qt Creator для взаимодействия с HID-устройствами, используя библиотеку HID API. Столкнулся со следующей проблемой: программа не обрабатывает (не принимает) данные от девайса. Причём данные действительно идут, проверено логическим анализатором. Распознает устройство и отправляет ему нормально, но вот с приёмом беда. Программа зависает в цикле по приёму сообщения, постоянно выводя "waiting...". Ещё есть особенность: функция "res = hid_get_feature_report(handle, buf, sizeof(buf));" выводит в командную строку "Broken pipe". Код ниже:

main.cpp:

#include <QCoreApplication>
#include "hidapi.h"
#include "/usr/include/stdio.h"
#include <QDebug>
#include <QThread>
#define MAX_STR 255
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int res;
        unsigned char buf[256];
        #define MAX_STR 255
        wchar_t wstr[MAX_STR];
        hid_device *handle;

        struct hid_device_info *devs, *cur_dev;
        devs = hid_enumerate(0x0, 0x0);
        cur_dev = devs;
        while (cur_dev) {
            printf("Device Found\n  type: %04hx %04hx\n  path: %s\n  serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
            printf("\n");
            printf("  Manufacturer: %ls\n", cur_dev->manufacturer_string);
            printf("  Product:      %ls\n", cur_dev->product_string);
            printf("  Release:      %hx\n", cur_dev->release_number);
            printf("  Interface:    %d\n",  cur_dev->interface_number);
            printf("\n");
            cur_dev = cur_dev->next;
        }
        hid_free_enumeration(devs);
        // Set up the command buffer.
        memset(buf,0x00,sizeof(buf));
        buf[0] = 0x01;
        buf[1] = 0x81;

        // Open the device using the VID, PID,
        // and optionally the Serial number.
        // handle = hid_open(0x4d8, 0x3f, L"12345");
        handle = hid_open(0x0483, 0x5750,NULL);
        if (!handle) {
            printf("unable to open device\n");
            return 1;
        }
        // Read the Manufacturer String
        wstr[0] = 0x0000;
        res = hid_get_manufacturer_string(handle, wstr, MAX_STR);
        if (res < 0)
            printf("Unable to read manufacturer string\n");
        printf("Manufacturer String: %ls\n", wstr);
        memset(buf,0x00,sizeof(buf));           
       // Чтение Feature Report из устройства
       res = hid_get_feature_report(handle, buf, sizeof(buf));
       // Вывод на экран прочитанных данных.
       hid_set_nonblocking(handle,1);
       res = 0;
           while (res == 0) {
               res = hid_read(handle, buf, sizeof(buf));
               if (res == 0)
                   printf("waiting...\n");
               if (res < 0)
                   printf("Unable to read()\n");
               QThread::msleep(500);
           }
    return a.exec();
}

usb-can.pro:

#-------------------------------------------------
#
# Project created by QtCreator 2017-08-03T07:20:12
#
#-------------------------------------------------
QT       += core
QT       -= gui
TARGET = usb-can
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app

SOURCES += main.cpp
SOURCES +=linux/hid.c
LIBS+= -ludev
INCLUDEPATH+= /usr/include
READ ALSO
response при post-запросе

response при post-запросе

в ajax методом POST передаю данные регистрации, в js файле проверяю набранные пароли и хочу с помощью responsesend отправить сообщение об ошибке, но ничего...

278
Проблема с загрузкой картинки на imgur по API

Проблема с загрузкой картинки на imgur по API

Может кто-то подскажет в чем проблема?

363
Wordpress — как сделать без помощи плагинов поиск ajax?

Wordpress — как сделать без помощи плагинов поиск ajax?

Wordpress — как сделать без помощи плагинов поиск ajax ?

315