Доброго времени суток. Пишу программу для 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
в ajax методом POST передаю данные регистрации, в js файле проверяю набранные пароли и хочу с помощью responsesend отправить сообщение об ошибке, но ничего...
Wordpress — как сделать без помощи плагинов поиск ajax ?