furi_hal_usb.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #pragma once
  2. #include "usb.h"
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. typedef struct FuriHalUsbInterface FuriHalUsbInterface;
  7. struct FuriHalUsbInterface {
  8. void (*init)(usbd_device* dev, FuriHalUsbInterface* intf, void* ctx);
  9. void (*deinit)(usbd_device* dev);
  10. void (*wakeup)(usbd_device* dev);
  11. void (*suspend)(usbd_device* dev);
  12. struct usb_device_descriptor* dev_descr;
  13. void* str_manuf_descr;
  14. void* str_prod_descr;
  15. void* str_serial_descr;
  16. void* cfg_descr;
  17. };
  18. /** USB device interface modes */
  19. extern FuriHalUsbInterface usb_cdc_single;
  20. extern FuriHalUsbInterface usb_cdc_dual;
  21. extern FuriHalUsbInterface usb_hid;
  22. extern FuriHalUsbInterface usb_hid_u2f;
  23. typedef enum {
  24. FuriHalUsbStateEventReset,
  25. FuriHalUsbStateEventWakeup,
  26. FuriHalUsbStateEventSuspend,
  27. FuriHalUsbStateEventDescriptorRequest,
  28. } FuriHalUsbStateEvent;
  29. typedef void (*FuriHalUsbStateCallback)(FuriHalUsbStateEvent state, void* context);
  30. /** USB device low-level initialization
  31. */
  32. void furi_hal_usb_init();
  33. /** Set USB device configuration
  34. *
  35. * @param mode new USB device mode
  36. * @param ctx context passed to device mode init function
  37. * @return true - mode switch started, false - mode switch is locked
  38. */
  39. bool furi_hal_usb_set_config(FuriHalUsbInterface* new_if, void* ctx);
  40. /** Get USB device configuration
  41. *
  42. * @return current USB device mode
  43. */
  44. FuriHalUsbInterface* furi_hal_usb_get_config();
  45. /** Lock USB device mode switch
  46. */
  47. void furi_hal_usb_lock();
  48. /** Unlock USB device mode switch
  49. */
  50. void furi_hal_usb_unlock();
  51. /** Check if USB device mode switch locked
  52. *
  53. * @return lock state
  54. */
  55. bool furi_hal_usb_is_locked();
  56. /** Disable USB device
  57. */
  58. void furi_hal_usb_disable();
  59. /** Enable USB device
  60. */
  61. void furi_hal_usb_enable();
  62. /** Set USB state callback
  63. */
  64. void furi_hal_usb_set_state_callback(FuriHalUsbStateCallback cb, void* ctx);
  65. /** Restart USB device
  66. */
  67. void furi_hal_usb_reinit();
  68. #ifdef __cplusplus
  69. }
  70. #endif