usb_winusb.c 979 B

12345678910111213141516171819202122232425262728293031323334353637
  1. // SPDX-License-Identifier: BSD-3-Clause
  2. // Copyright (c) 2022, Alex Taradov <alex@taradov.com>. All rights reserved.
  3. /*- Includes ----------------------------------------------------------------*/
  4. #include "usb.h"
  5. #include "usb_std.h"
  6. #include "usb_winusb.h"
  7. #include "usb_descriptors.h"
  8. /*- Implementations ---------------------------------------------------------*/
  9. //-----------------------------------------------------------------------------
  10. bool usb_winusb_handle_request(usb_request_t *request)
  11. {
  12. int length = request->wLength;
  13. switch (USB_CMD_VALUE(request))
  14. {
  15. case USB_CMD(IN, DEVICE, VENDOR, WINUSB_VENDOR_CODE):
  16. {
  17. if (USB_WINUSB_DESCRIPTOR_INDEX == request->wIndex)
  18. {
  19. length = USB_LIMIT(length, sizeof(usb_msos_descriptor_set_t));
  20. usb_control_send((uint8_t *)&usb_msos_descriptor_set, length);
  21. }
  22. else
  23. {
  24. return false;
  25. }
  26. } break;
  27. default:
  28. return false;
  29. }
  30. return true;
  31. }