/** * @brief Callback used to indicate a transmission from device INto host completed * Checks if any data remains, pads it into HID packet and sends. */ static void PIOS_USB_HID_EP_IN_Callback(void) { struct pios_usb_hid_dev * usb_hid_dev = (struct pios_usb_hid_dev *)pios_usb_hid_id; bool valid = PIOS_USB_HID_validate(usb_hid_dev); PIOS_Assert(valid); if (!PIOS_USB_CheckAvailable(usb_hid_dev->lower_id)) { return; } PIOS_USB_HID_SendReport(usb_hid_dev); }
/** * @brief Callback used to indicate a transmission from device INto host completed * Checks if any data remains, pads it into HID packet and sends. */ static bool PIOS_USB_HID_EP_IN_Callback(uint32_t usb_hid_id, uint8_t epnum, uint16_t len) { struct pios_usb_hid_dev * usb_hid_dev = (struct pios_usb_hid_dev *)usb_hid_id; if (!PIOS_USB_HID_validate(usb_hid_dev)) { return false; } if (PIOS_USB_CheckAvailable(usb_hid_dev->lower_id) && PIOS_USB_HID_SendReport(usb_hid_dev)) { /* More data has been queued, leave tx_active set to true */ return true; } else { /* Nothing new sent, transmitter is now inactive */ usb_hid_dev->tx_active = false; return false; } }
static void PIOS_USB_HID_TxStart(uint32_t usbhid_id, uint16_t tx_bytes_avail) { struct pios_usb_hid_dev * usb_hid_dev = (struct pios_usb_hid_dev *)usbhid_id; bool valid = PIOS_USB_HID_validate(usb_hid_dev); PIOS_Assert(valid); if (!PIOS_USB_CheckAvailable(usb_hid_dev->lower_id)) { return; } if (GetEPTxStatus(usb_hid_dev->cfg->data_tx_ep) == EP_TX_VALID) { /* Endpoint is already transmitting */ return; } PIOS_USB_HID_SendReport(usb_hid_dev); }
static void PIOS_USB_HID_TxStart(uint32_t usbhid_id, uint16_t tx_bytes_avail) { struct pios_usb_hid_dev * usb_hid_dev = (struct pios_usb_hid_dev *)usbhid_id; bool valid = PIOS_USB_HID_validate(usb_hid_dev); PIOS_Assert(valid); /* Make sure this USB interface has been initialized */ if (!usb_hid_dev->usb_if_enabled) { return; } if (!PIOS_USB_CheckAvailable(usb_hid_dev->lower_id)) { return; } if (!usb_hid_dev->tx_active) { /* Transmitter is not currently active, send a report */ PIOS_USB_HID_SendReport(usb_hid_dev); } }