bool QUsbHid::setOutputReport(const QByteArray& arr) { //QByteArray s = resize_array(arr, hidCaps.OutputReportByteLength); //bool res = HidD_SetOutputReport(Win_Handle,s.data(), arr.length()); //lastErr = GetLastError(); //return res; return hid_set_report(handle, interface, HID_REPORT_TYPE_OUTPUT, arr[0], arr.mid(1), &lastErr); //(void)arr; //return false; }
static void hid_in_message_handler(uint8_t device_id, const uint8_t *data, uint32_t length) { (void)device_id; (void)data; if (length < 4) { LOG_PRINTF("data too short, type=%d\n", hid_get_type(device_id)); return; } // print only first 4 bytes, since every mouse should have at least these four set. // Report descriptors are not read by driver for now, so we do not know what each byte means LOG_PRINTF("HID EVENT %02X %02X %02X %02X \n", data[0], data[1], data[2], data[3]); if (hid_get_type(device_id) == HID_TYPE_KEYBOARD) { static int x = 0; if (x != data[2]) { x = data[2]; hid_set_report(device_id, x); } } }
static void writedata(int f, report_desc_t rd) { struct variable *var; int dlen, i, r, rid; u_char *dbuf; enum hid_kind kind; kind = 0; rid = 0; for (kind = 0; kind < 3; kind ++) { for (rid = 0; rid < 256; rid ++) { for (var = vars; var; var = var->next) { if (rid == var->h.report_ID && kind == var->h.kind) break; } if (var == NULL) continue; dlen = hid_report_size(rd, kind, rid); if (dlen <= 0) continue; dbuf = malloc(dlen); memset(dbuf, 0, dlen); dbuf[0] = rid; if (!zflag && hid_get_report(f, kind, dbuf, dlen) == 0) { if (verbose) { printf("Got %s report %d (%d bytes):", kind == hid_input ? "input" : kind == hid_output ? "output" : "feature", rid, dlen); for (i = 0; i < dlen; i++) printf(" %02x", dbuf[i]); printf("\n"); } } else if (!zflag) { warn("hid_get_report(rid %d)", rid); if (verbose) { printf("Can't get %s report %d (%d bytes). " "Will be initialized with zeros.\n", kind == hid_input ? "input" : kind == hid_output ? "output" : "feature", rid, dlen); } } for (var = vars; var; var = var->next) { if (rid != var->h.report_ID || kind != var->h.kind) continue; hid_set_data(dbuf, &var->h, var->val); } if (verbose) { printf("Setting %s report %d (%d bytes):", kind == hid_output ? "output" : kind == hid_feature ? "feature" : "input", rid, dlen); for (i = 0; i < dlen; i++) printf(" %02x", dbuf[i]); printf("\n"); } r = hid_set_report(f, kind, dbuf, dlen); if (r != 0) warn("hid_set_report(rid %d)", rid); free(dbuf); } } }