update hid open()
This commit is contained in:
		| @@ -158,11 +158,12 @@ void hidd_reset(uint8_t rhport) | |||||||
|   tu_memclr(_hidd_itf, sizeof(_hidd_itf)); |   tu_memclr(_hidd_itf, sizeof(_hidd_itf)); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t *p_len) | uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t max_len) | ||||||
| { | { | ||||||
|   TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass); |   TU_VERIFY(TUSB_CLASS_HID == desc_itf->bInterfaceClass, 0); | ||||||
|  |  | ||||||
|   uint8_t const *p_desc = (uint8_t const *) desc_itf; |   // max length is at least interface + hid descriptor + 1 endpoint | ||||||
|  |   TU_ASSERT(max_len >= sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_desc_endpoint_t), 0); | ||||||
|  |  | ||||||
|   // Find available interface |   // Find available interface | ||||||
|   hidd_interface_t * p_hid = NULL; |   hidd_interface_t * p_hid = NULL; | ||||||
| @@ -175,16 +176,18 @@ bool hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t | |||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   TU_ASSERT(p_hid); |   TU_ASSERT(p_hid, 0); | ||||||
|  |  | ||||||
|  |   uint8_t const *p_desc = (uint8_t const *) desc_itf; | ||||||
|  |  | ||||||
|   //------------- HID descriptor -------------// |   //------------- HID descriptor -------------// | ||||||
|   p_desc = tu_desc_next(p_desc); |   p_desc = tu_desc_next(p_desc); | ||||||
|   p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *) p_desc; |   p_hid->hid_descriptor = (tusb_hid_descriptor_hid_t const *) p_desc; | ||||||
|   TU_ASSERT(HID_DESC_TYPE_HID == p_hid->hid_descriptor->bDescriptorType); |   TU_ASSERT(HID_DESC_TYPE_HID == p_hid->hid_descriptor->bDescriptorType, 0); | ||||||
|  |  | ||||||
|   //------------- Endpoint Descriptor -------------// |   //------------- Endpoint Descriptor -------------// | ||||||
|   p_desc = tu_desc_next(p_desc); |   p_desc = tu_desc_next(p_desc); | ||||||
|   TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, &p_hid->ep_out, &p_hid->ep_in)); |   TU_ASSERT(usbd_open_edpt_pair(rhport, p_desc, desc_itf->bNumEndpoints, TUSB_XFER_INTERRUPT, &p_hid->ep_out, &p_hid->ep_in), 0); | ||||||
|  |  | ||||||
|   if ( desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT ) p_hid->boot_protocol = desc_itf->bInterfaceProtocol; |   if ( desc_itf->bInterfaceSubClass == HID_SUBCLASS_BOOT ) p_hid->boot_protocol = desc_itf->bInterfaceProtocol; | ||||||
|  |  | ||||||
| @@ -192,12 +195,10 @@ bool hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t | |||||||
|   p_hid->itf_num   = desc_itf->bInterfaceNumber; |   p_hid->itf_num   = desc_itf->bInterfaceNumber; | ||||||
|   memcpy(&p_hid->report_desc_len, &(p_hid->hid_descriptor->wReportLength), 2); |   memcpy(&p_hid->report_desc_len, &(p_hid->hid_descriptor->wReportLength), 2); | ||||||
|  |  | ||||||
|   *p_len = sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + desc_itf->bNumEndpoints*sizeof(tusb_desc_endpoint_t); |  | ||||||
|  |  | ||||||
|   // Prepare for output endpoint |   // Prepare for output endpoint | ||||||
|   if (p_hid->ep_out) TU_ASSERT(usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf))); |   if (p_hid->ep_out) TU_ASSERT(usbd_edpt_xfer(rhport, p_hid->ep_out, p_hid->epout_buf, sizeof(p_hid->epout_buf)), 0); | ||||||
|  |  | ||||||
|   return true; |   return sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + desc_itf->bNumEndpoints*sizeof(tusb_desc_endpoint_t); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Handle class control request | // Handle class control request | ||||||
|   | |||||||
| @@ -302,7 +302,7 @@ TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t idle_rate); | |||||||
| //--------------------------------------------------------------------+ | //--------------------------------------------------------------------+ | ||||||
| void     hidd_init             (void); | void     hidd_init             (void); | ||||||
| void     hidd_reset            (uint8_t rhport); | void     hidd_reset            (uint8_t rhport); | ||||||
| bool hidd_open             (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t *p_length); | uint16_t hidd_open             (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len); | ||||||
| bool     hidd_control_request  (uint8_t rhport, tusb_control_request_t const * request); | bool     hidd_control_request  (uint8_t rhport, tusb_control_request_t const * request); | ||||||
| bool     hidd_control_complete (uint8_t rhport, tusb_control_request_t const * request); | bool     hidd_control_complete (uint8_t rhport, tusb_control_request_t const * request); | ||||||
| bool     hidd_xfer_cb          (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); | bool     hidd_xfer_cb          (uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes); | ||||||
|   | |||||||
| @@ -165,7 +165,7 @@ uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint1 | |||||||
|   enum { _MSC_DRIVER_LEN = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t) }; |   enum { _MSC_DRIVER_LEN = sizeof(tusb_desc_interface_t) + 2*sizeof(tusb_desc_endpoint_t) }; | ||||||
|  |  | ||||||
|   // Max length mus be at least 1 interface + 2 endpoints |   // Max length mus be at least 1 interface + 2 endpoints | ||||||
|   TU_VERIFY(max_len >= _MSC_DRIVER_LEN, 0); |   TU_ASSERT(max_len >= _MSC_DRIVER_LEN, 0); | ||||||
|  |  | ||||||
|   mscd_interface_t * p_msc = &_mscd_itf; |   mscd_interface_t * p_msc = &_mscd_itf; | ||||||
|   p_msc->itf_num = itf_desc->bInterfaceNumber; |   p_msc->itf_num = itf_desc->bInterfaceNumber; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach