GSMD
написал 4 сентября 2006 года в 23:26 (2036 просмотров)
Ведет себя
неопределенно; открыл 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 декабря в 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
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.