static void destroy(int fd) { struct uhid_event ev; memset(&ev, 0, sizeof(ev)); ev.type = UHID_DESTROY; uhid_write(fd, &ev); }
void uhid_report_in(bthid_dev_t *dev, uint8_t *report, int size) { if (!dev->ds) return; struct uhid_event ev; memset(&ev, 0, sizeof(ev)); ev.type = UHID_INPUT; ev.u.input.size = size; memcpy(ev.u.input.data, report, size); uhid_write(dev->ds->fd, &ev); }
static int create(int fd) { struct uhid_event ev; memset(&ev, 0, sizeof(ev)); ev.type = UHID_CREATE; strcpy((char*)ev.u.create.name, "test-uhid-device"); ev.u.create.rd_data = rdesc; ev.u.create.rd_size = sizeof(rdesc); ev.u.create.bus = BUS_USB; ev.u.create.vendor = 0x15d9; ev.u.create.product = 0x0a37; ev.u.create.version = 0; ev.u.create.country = 0; return uhid_write(fd, &ev); }
static int create(int fd, bthid_dev_t *dev) { struct uhid_event ev; memset(&ev, 0, sizeof(ev)); ev.type = UHID_CREATE; strncpy((char*)ev.u.create.name, dev->name, sizeof(ev.u.create.name)); ev.u.create.vendor = dev->vendor_id; ev.u.create.product = dev->product_id; ev.u.create.version = dev->version; ev.u.create.rd_data = dev->descriptor; ev.u.create.rd_size = dev->descriptor_len; ev.u.create.bus = BUS_BLUETOOTH; snprintf((char*)ev.u.create.phys, sizeof(ev.u.create.phys), "tinyhidd-%s", bd_addr_to_str(dev->addr)); strncpy((char*)ev.u.create.uniq, bd_addr_to_str(dev->addr), sizeof(ev.u.create.uniq)); return uhid_write(fd, &ev); }
static int send_event(int fd) { struct uhid_event ev; memset(&ev, 0, sizeof(ev)); ev.type = UHID_INPUT; ev.u.input.size = 4; if (btn1_down) ev.u.input.data[0] |= 0x1; if (btn2_down) ev.u.input.data[0] |= 0x2; if (btn3_down) ev.u.input.data[0] |= 0x4; ev.u.input.data[1] = abs_hor; ev.u.input.data[2] = abs_ver; ev.u.input.data[3] = wheel; return uhid_write(fd, &ev); }