static void hidd_kbd_send_report(USBD* usbd, HIDD_KBD* hidd) { uint8_t* report = io_data(hidd->io); if (report == NULL) return; report[0] = hidd->kbd.modifier; report[1] = 0; hidd->io->data_size = 2; if (hidd->boot_protocol) io_data_append(hidd->io, &hidd->kbd.keys, 6); else io_data_append(hidd->io, &hidd->kbd.leds, sizeof(BOOT_KEYBOARD) - 2); usbd_usb_ep_write(usbd, hidd->in_ep, hidd->io); }
static inline void lpc_usb_out(CORE* core, int num) { EP* ep = core->usb.out[USB_EP_NUM(num)]; unsigned int cnt = ep->mps - (((*USB_EP_LISTSTS(num, 0)) & USB_EP_LISTST_NBYTES_MASK) >> USB_EP_LISTST_NBYTES_POS); io_data_append(ep->io, ep->fifo, cnt); if (ep->io->data_size >= ep->size || cnt < ep->mps) { ep->io_active = false; iio_complete(core->usb.device, HAL_IO_CMD(HAL_USB, IPC_READ), num, ep->io); ep->io = NULL; } else lpc_usb_rx_prepare(core, num); }