picofuse

usb.h
Go to the documentation of this file.
1 
93 #pragma once
94 #include <stdbool.h>
95 #include <stdint.h>
96 
97 // Forward-declared rather than #include <picofuse/hid/device.h> - only
98 // used as opaque pointers below (hw_usb_register_hid()'s own parameter/
99 // return type), and pulling in the whole header would add a hw->hid
100 // header dependency this module doesn't otherwise have (hid already
101 // depends on hw, not the other way around - see hw_usb_register_hid()'s
102 // own doc on why the bridge itself still has to be compiled into
103 // picofuse-hid rather than picofuse-hw).
104 typedef struct hid_t hid_t;
105 typedef struct hid_device_t hid_device_t;
106 
113 #ifndef HW_USB_STRING_MAX_LENGTH
114 #define HW_USB_STRING_MAX_LENGTH 63
115 #endif
116 
124 #ifndef HW_USB_INTERFACE_MAX_COUNT
125 #define HW_USB_INTERFACE_MAX_COUNT 8
126 #endif
127 
129 // TYPES
130 
135 typedef enum {
139 
147 typedef enum {
148  hw_usb_device_class_per_interface = 0x00,
149  hw_usb_device_class_audio = 0x01,
150  hw_usb_device_class_communications = 0x02,
151  hw_usb_device_class_hid = 0x03,
152  hw_usb_device_class_physical = 0x05,
153  hw_usb_device_class_image = 0x06,
154  hw_usb_device_class_printer = 0x07,
155  hw_usb_device_class_mass_storage = 0x08,
156  hw_usb_device_class_hub = 0x09,
157  hw_usb_device_class_cdc_data = 0x0A,
158  hw_usb_device_class_smart_card = 0x0B,
159  hw_usb_device_class_content_security = 0x0D,
160  hw_usb_device_class_video = 0x0E,
161  hw_usb_device_class_personal_healthcare = 0x0F,
162  hw_usb_device_class_audio_video = 0x10,
163  hw_usb_device_class_bluetooth = 0xE0,
164  hw_usb_device_class_miscellaneous = 0xEF,
165  hw_usb_device_class_application_specific = 0xFE,
166  hw_usb_device_class_vendor_specific = 0xFF,
168 
181 const char *hw_usb_device_class_to_string(hw_usb_device_class_t device_class);
182 
190 typedef enum {
191  hw_usb_device_subclass_none = 0x00,
192  hw_usb_device_subclass_boot_interface = 0x01,
193  hw_usb_device_subclass_abstract_control_model = 0x02,
194  hw_usb_device_subclass_vendor_specific = 0xFF,
196 
218 typedef enum {
219  hw_usb_device_protocol_none = 0x00,
220  hw_usb_device_protocol_keyboard = 0x01,
221  hw_usb_device_protocol_mouse = 0x02,
223 
236 const char *
238 
251 typedef struct {
252  uint32_t device_id;
253  uint16_t vid;
258  uint16_t pid;
263  hw_usb_device_class_t interface_class;
271  char manufacturer[HW_USB_STRING_MAX_LENGTH + 1];
272  char product[HW_USB_STRING_MAX_LENGTH + 1];
273  char serial[HW_USB_STRING_MAX_LENGTH + 1];
275 
280 typedef struct hw_usb_t hw_usb_t;
281 
301 typedef void (*hw_usb_callback_t)(hw_usb_t *usb, hw_usb_event_t event,
302  const hw_usb_device_t *device,
303  void *userdata);
304 
306 // LIFECYCLE
307 
321 hw_usb_t *hw_usb_init(void);
322 
334 void hw_usb_deinit(hw_usb_t *usb);
335 
338 // METHODS
340 
363  void *userdata);
364 
367 // HID INTEGRATION
369 
391 
hw_usb_device_subclass_t
USB device subclass codes.
Definition: usb.h:190
hw_usb_device_class_t
USB device class codes.
Definition: usb.h:147
hid_device_t * hw_usb_register_hid(hid_t *instance, hw_usb_t *usb)
Register a USB host hotplug observer as a HID source.
hw_usb_device_protocol_t device_protocol
USB device protocol code.
Definition: usb.h:261
uint32_t device_id
Opaque identifier, stable across every interface event belonging to one physical attach/detach - disa...
Definition: usb.h:252
hw_usb_device_subclass_t device_subclass
USB device subclass code.
Definition: usb.h:260
#define HW_USB_STRING_MAX_LENGTH
Maximum length of USB string descriptor fields, excluding the null terminator.
Definition: usb.h:114
hw_usb_device_protocol_t
USB device protocol codes.
Definition: usb.h:218
void(* hw_usb_callback_t)(hw_usb_t *usb, hw_usb_event_t event, const hw_usb_device_t *device, void *userdata)
Callback invoked on USB hotplug events.
Definition: usb.h:301
void hw_usb_set_callback(hw_usb_t *usb, hw_usb_callback_t callback, void *userdata)
Attach or detach the USB hotplug callback.
const char * hw_usb_device_class_to_string(hw_usb_device_class_t device_class)
Convert a USB device class code to a display string.
hw_usb_device_class_t device_class
USB device class code.
Definition: usb.h:259
uint16_t pid
USB Product ID.
Definition: usb.h:258
hw_usb_device_protocol_t interface_protocol
USB interface protocol.
Definition: usb.h:270
struct hid_device_t hid_device_t
HID child-device descriptor tracked by a HID instance.
Definition: device.h:46
void hw_usb_deinit(hw_usb_t *usb)
Deinitialize the USB host subsystem.
struct hw_usb_t hw_usb_t
Opaque USB host handle.
Definition: usb.h:280
uint8_t interface_number
This interface&#39;s number, or 0xFF if interface information wasn&#39;t available (see this file&#39;s own top-l...
Definition: usb.h:262
struct hid_t hid_t
Opaque HID instance handle.
Definition: device.h:40
Describes one interface of a USB device observed by the host.
Definition: usb.h:251
const char * hw_usb_device_protocol_to_string(hw_usb_device_protocol_t device_protocol)
Convert a USB device protocol code to a display string.
A device has been detached.
Definition: usb.h:137
hw_usb_event_t
USB hotplug event type.
Definition: usb.h:135
A device has been attached.
Definition: usb.h:136
hw_usb_device_subclass_t interface_subclass
USB interface subclass.
Definition: usb.h:269
hw_usb_t * hw_usb_init(void)
Initialize the USB host subsystem.