usb_hid.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // SPDX-License-Identifier: BSD-3-Clause
  2. // Copyright (c) 2019-2022, Alex Taradov <alex@taradov.com>. All rights reserved.
  3. /*- Includes ----------------------------------------------------------------*/
  4. #include "usb.h"
  5. #include "usb_std.h"
  6. #include "usb_hid.h"
  7. #include "usb_descriptors.h"
  8. /*- Implementations ---------------------------------------------------------*/
  9. //-----------------------------------------------------------------------------
  10. void usb_hid_init(void)
  11. {
  12. usb_set_send_callback(USB_HID_EP_SEND, usb_hid_send_callback);
  13. usb_set_recv_callback(USB_HID_EP_RECV, usb_hid_recv_callback);
  14. }
  15. //-----------------------------------------------------------------------------
  16. void usb_hid_send(uint8_t *data, int size)
  17. {
  18. usb_send(USB_HID_EP_SEND, data, size);
  19. }
  20. //-----------------------------------------------------------------------------
  21. void usb_hid_recv(uint8_t *data, int size)
  22. {
  23. usb_recv(USB_HID_EP_RECV, data, size);
  24. }
  25. //-----------------------------------------------------------------------------
  26. bool usb_hid_handle_request(usb_request_t *request)
  27. {
  28. int length = request->wLength;
  29. switch (USB_CMD_VALUE(request))
  30. {
  31. case USB_CMD(IN, INTERFACE, STANDARD, GET_DESCRIPTOR):
  32. {
  33. length = USB_LIMIT(length, sizeof(usb_hid_report_descriptor));
  34. usb_control_send((uint8_t *)usb_hid_report_descriptor, length);
  35. } break;
  36. default:
  37. return false;
  38. }
  39. return true;
  40. }