22extern int hid_parse_report_descriptor(
HID_DEV_T *hdev, IFACE_T *iface);
34 if (g_hid_dev[i].iface ==
NULL)
36 memset((
char *)&g_hid_dev[i], 0,
sizeof(
HID_DEV_T));
46 hid_dev->iface =
NULL;
47 memset((
char *)hid_dev, 0,
sizeof(
HID_DEV_T));
51static int hid_probe(IFACE_T *iface)
53 UDEV_T *udev = iface->udev;
54 ALT_IFACE_T *aif = iface->aif;
63 if (ifd->bInterfaceClass != USB_CLASS_HID)
66 HID_DBGMSG(
"hid_probe - device (vid=0x%x, pid=0x%x), interface %d, subclass 0x%x, protocol 0x%x.\n",
67 udev->descriptor.idVendor, udev->descriptor.idProduct, ifd->bInterfaceNumber,
68 ifd->bInterfaceSubClass, ifd->bInterfaceProtocol);
73 for (i = 0; i < aif->ifd->bNumEndpoints; i++)
75 if ((aif->ep[i].bmAttributes & EP_ATTR_TT_MASK) == EP_ATTR_TT_INT)
85 hdev = alloc_hid_device();
90 hdev->idVendor = udev->descriptor.idVendor;
91 hdev->idProduct = udev->descriptor.idProduct;
92 hdev->bSubClassCode = ifd->bInterfaceSubClass;
93 hdev->bProtocolCode = ifd->bInterfaceProtocol;
95 iface->context = (
void *)hdev;
97 hid_parse_report_descriptor(hdev, iface);
102 if (g_hdev_list ==
NULL)
106 for (p = g_hdev_list; p->next !=
NULL; p = p->next)
111 HID_DBGMSG(
"usbhid_probe OK. hdev=0x%x\n", (
int)hdev);
117static void hid_disconnect(IFACE_T *iface)
121 RP_INFO_T *rp, *next_rp;
126 for (i = 0; i < iface->aif->ifd->bNumEndpoints; i++)
128 iface->udev->hc_driver->quit_xfer(
NULL, &(iface->aif->ep[i]));
136 utr = hdev->utr_list[i];
140 usbh_free_mem(utr->buff, utr->ep->wMaxPacketSize);
145 if (hdev->rpd.utr_led !=
NULL)
147 usbh_quit_utr(hdev->rpd.utr_led);
148 free_utr(hdev->rpd.utr_led);
151 if (hdev->rpd.report !=
NULL)
153 for (rp = hdev->rpd.report; rp !=
NULL; )
156 usbh_free_mem(rp,
sizeof(RP_INFO_T));
166 if (g_hid_dev[i].iface == iface)
168 hdev = &g_hid_dev[i];
170 if (hdev == g_hdev_list)
172 g_hdev_list = g_hdev_list->next;
176 for (p = g_hdev_list; p !=
NULL; p = p->next)
180 p->next = hdev->next;
185 HID_DBGMSG(
"hid_disconnect - device (vid=0x%x, pid=0x%x), interface %d.\n",
186 hdev->idVendor, hdev->idProduct, iface->if_num);
187 free_hid_device(hdev);
193UDEV_DRV_T hid_driver =
211 memset((
char *)&g_hid_dev[0], 0,
sizeof(g_hid_dev));
213 usbh_register_driver(&hid_driver);
NuMicro peripheral access layer header file.
#define NULL
NULL pointer.
#define USBH_ERR_NOT_MATCHED
#define HID_RET_OUT_OF_MEMORY
#define CONFIG_HID_MAX_DEV
#define CONFIG_HID_DEV_MAX_PIPE
HID_DEV_T * usbh_hid_get_device_list(void)
Get a list of currently connected USB Hid devices.
void usbh_hid_init(void)
Initialize USB Host HID driver.
uint32_t get_ticks(void)
A function return current tick count.
HIDDEN_SYMBOLS struct usbhid_dev HID_DEV_T
USB Host library header file.
USB Host HID class driver header file.
USB Host library exported header file.