usbd_display.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2026, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #ifndef USBD_DISPLAY_H
  7. #define USBD_DISPLAY_H
  8. #define USBD_DISPLAY_TYPE_RGB565 0
  9. #define USBD_DISPLAY_TYPE_RGB888 1
  10. #define USBD_DISPLAY_TYPE_YUV420 2
  11. #define USBD_DISPLAY_TYPE_JPG 3
  12. struct usbd_disp_frame_header {
  13. uint16_t crc16; //payload crc16
  14. uint8_t type; //raw rgb,yuv,jpg,other
  15. uint8_t cmd;
  16. uint16_t x; //32bit
  17. uint16_t y;
  18. uint16_t width; //32bit
  19. uint16_t height;
  20. uint32_t frame_id : 10;
  21. uint32_t payload_total : 22; //payload max 4MB
  22. } __PACKED;
  23. struct usbd_display_frame {
  24. uint8_t *frame_buf;
  25. uint32_t frame_bufsize;
  26. uint32_t frame_format;
  27. uint32_t frame_size;
  28. };
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. /* Init display interface driver */
  33. struct usbd_interface *usbd_display_init_intf(struct usbd_interface *intf,
  34. const uint8_t out_ep,
  35. const uint8_t in_ep,
  36. struct usbd_display_frame *frame,
  37. uint32_t count);
  38. int usbd_display_dequeue(struct usbd_display_frame **frame, uint32_t timeout);
  39. int usbd_display_enqueue(struct usbd_display_frame *frame);
  40. #ifdef __cplusplus
  41. }
  42. #endif
  43. #endif /* USBD_DISPLAY_H */