GSMD
написал 4 сентября 2006 года в 23:26 (2199 просмотров)
Ведет себя
неопределенно; открыл 2 темы в форуме.
Для чтения данных с hid-устройства используется следующий фрагмент кода.
struct hiddev_report_info rinfo;
struct hiddev_field_info finfo;
struct hiddev_usage_ref uref;
int i, j, ret, count;
while (1){
rinfo.report_type = HID_REPORT_TYPE_INPUT;
rinfo.report_id = HID_REPORT_ID_FIRST;
ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
// Get Reports
while (ret >= 0&&rinfo.num_fields>0&&rinfo.num_fields<64){
// Get Fields
for (i = 0; i < rinfo.num_fields; i++){
finfo.report_type = rinfo.report_type;
finfo.report_id = rinfo.report_id;
finfo.field_index = i;
ioctl(fd, HIDIOCGFIELDINFO, &finfo);
// Get usages
for (j = 0; j < count+1; j++){
uref.report_type = finfo.report_type;
uref.report_id = finfo.report_id;
uref.field_index = i;
uref.usage_index = j;
ioctl(fd, HIDIOCGUCODE, &uref);
ioctl(fd, HIDIOCGUSAGE, &uref);
printf("0x%X ",uref.value);
// First output usage: grab it.
if(uref.report_type == HID_REPORT_TYPE_OUTPUT && j==0) {
memcpy(&uref_out, &uref, sizeof(uref));
}
}
for (; j < finfo.maxusage; j++){
uref.report_type = finfo.report_type;
uref.report_id = finfo.report_id;
uref.field_index = i;
uref.usage_index = j;
ioctl(fd, HIDIOCGUCODE, &uref);
ioctl(fd, HIDIOCGUSAGE, &uref);
}
}
printf("\n");
rinfo.report_id = HID_REPORT_ID_NEXT;
ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
}
usleep(1000000);
}
}
В результате получаю лишь последний report из серии.
ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
ret = ioctl(fd, HIDIOCGREPORT &rinfo);
вообще никакой разумной информации получить не удалось.
rinfo.report_id = HID_REPORT_ID_FIRST;
что-либо другое, не привели ни к чему (полное отсутствие разумной информации).
Reports к устройству доходят и доходят без искажений (видно из того, что устройство правильно на них отвечает). Отправка репортов происходит при помощи
ret = ioctl(fd, HIDIOSGREPORT &rinfo);
Подскажите пожалуйста, что я делаю не так?
Премного благодарен.
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.
