picofuse

device.h
Go to the documentation of this file.
1 
6 #pragma once
7 #include <picofuse/hw/wifi.h>
8 #include <picofuse/sys.h>
9 #include <stdbool.h>
10 #include <stdint.h>
11 
18 #ifndef HID_DEVICE_CAPACITY
19 #define HID_DEVICE_CAPACITY 32u
20 #endif
21 
29 #ifndef HID_DEVICE_CONTEXT_SIZE
30 #define HID_DEVICE_CONTEXT_SIZE 32u
31 #endif
32 
34 // TYPES
35 
40 typedef struct hid_t hid_t;
41 
46 typedef struct hid_device_t hid_device_t;
47 
52 typedef enum {
53  hid_type_none = 0,
54  hid_type_gpio = 1,
55  hid_type_timer = 2,
56  hid_type_signal = 3,
57  hid_type_evdev = 4,
58  hid_type_usb = 5,
59  hid_type_wifi = 6,
60  hid_type_bluetooth = 7,
61  hid_type_infrared = 8,
62  hid_type_other = 9,
63  hid_type_iostream = 10,
64 } hid_type_t;
65 
72 typedef struct {
73  bool (*init)(hid_device_t *device, void *userdata);
74  bool (*read)(hid_device_t *device, void *userdata);
76  bool (*deinit)(hid_device_t *device, void *userdata);
82 
93 typedef enum {
94  hid_class_unknown = 0,
95  hid_class_keyboard = 1,
96  hid_class_mouse = 2,
97  hid_class_joystick = 3,
98  hid_class_touchscreen = 4,
99  hid_class_sensor = 5,
100 } hid_class_t;
101 
103 // LIFECYCLE
104 
115 
121 void hid_deinit(hid_t *instance);
122 
130 bool hid_poll(hid_t *instance);
131 
134 // METHODS
136 
155 hid_device_t *hid_register(hid_t *instance, const char *name, uint32_t id,
156  hid_type_t type, hid_class_t hid_class,
157  uint32_t polling_interval_ms, void *userdata,
158  hid_device_callbacks_t callbacks);
159 
172 hid_device_t *hid_register_gpio_input(hid_t *instance, uint8_t bank,
173  uint8_t pin, uint16_t keycode,
174  void *userdata);
175 
187 hid_device_t *hid_register_gpio_pullup(hid_t *instance, uint8_t bank,
188  uint8_t pin, uint16_t keycode,
189  void *userdata);
190 
202 hid_device_t *hid_register_gpio_pulldown(hid_t *instance, uint8_t bank,
203  uint8_t pin, uint16_t keycode,
204  void *userdata);
205 
234 hid_device_t *hid_register_adc(hid_t *instance, uint8_t channel,
235  const char *metric_name, uint16_t num_samples,
236  uint32_t polling_interval_ms, void *userdata);
237 
258  uint32_t polling_interval_ms,
259  void *userdata);
260 
270 hid_device_t *hid_register_user_button(hid_t *instance, uint16_t keycode,
271  void *userdata);
272 
291 hid_device_t *hid_register_timer(hid_t *instance, uint32_t id,
292  uint32_t interval_ms, bool repeating,
293  void *userdata);
294 
306 hid_device_t *hid_register_signal(hid_t *instance, void *userdata);
307 
342  void *userdata);
343 
376  void *userdata);
377 
386 bool hid_deregister(hid_t *instance, hid_device_t *device);
387 
390 // PROPERTIES
392 
403 
417 bool hid_device_info(const hid_device_t *device, const char **out_name,
418  uint32_t *out_id, hid_type_t *out_type,
419  hid_class_t *out_class);
420 
433 void *hid_device_userdata(const hid_device_t *device);
434 
452 void *hid_device_handle(const hid_device_t *device);
453 
Callback operation table for HID device backends.
Definition: device.h:72
hid_device_t * hid_register(hid_t *instance, const char *name, uint32_t id, hid_type_t type, hid_class_t hid_class, uint32_t polling_interval_ms, void *userdata, hid_device_callbacks_t callbacks)
Register a generic HID device using callback operations.
bool hid_device_info(const hid_device_t *device, const char **out_name, uint32_t *out_id, hid_type_t *out_type, hid_class_t *out_class)
Get metadata for a registered HID device.
void * hid_device_userdata(const hid_device_t *device)
Get the userdata pointer associated with a registered HID device.
hid_device_t * hid_register_adc(hid_t *instance, uint8_t channel, const char *metric_name, uint16_t num_samples, uint32_t polling_interval_ms, void *userdata)
Register an ADC channel as a polling HID metric source.
hid_class_t
Coarse semantic classification of a HID device.
Definition: device.h:93
hid_device_t * hid_register_temperature(hid_t *instance, uint32_t polling_interval_ms, void *userdata)
Register the internal temperature-sensor channel as a polling HID metric source.
System abstraction headers and process lifecycle hooks.
hid_device_t * hid_register_gpio_input(hid_t *instance, uint8_t bank, uint8_t pin, uint16_t keycode, void *userdata)
Register a GPIO pin as HID input.
hid_device_t * hid_register_signal(hid_t *instance, void *userdata)
Register an environment-signal HID source.
void * hid_device_handle(const hid_device_t *device)
Get a device&#39;s backend-owned handle, if it has one.
hid_t * hid_init(sys_event_queue_t *queue)
Initialize a HID device instance.
hid_device_t * hid_register_user_button(hid_t *instance, uint16_t keycode, void *userdata)
Register a user button as a HID input source.
struct sys_iostream_t sys_iostream_t
An opaque byte stream.
Definition: io.h:70
bool hid_deregister(hid_t *instance, hid_device_t *device)
Deregister and remove a HID device.
hid_type_t
HID device type classification.
Definition: device.h:52
struct hw_wifi_t hw_wifi_t
Opaque Wi-Fi handle.
Definition: wifi.h:135
hid_device_t * hid_register_gpio_pulldown(hid_t *instance, uint8_t bank, uint8_t pin, uint16_t keycode, void *userdata)
Register a GPIO pin as HID input with pull-down.
hid_device_t * hid_device_next(hid_device_t *device)
Enumerate registered HID devices.
Wi-Fi management interface.
bool hid_poll(hid_t *instance)
Poll a HID device for pending input.
struct hid_device_t hid_device_t
HID child-device descriptor tracked by a HID instance.
Definition: device.h:46
struct sys_event_queue_t sys_event_queue_t
Opaque event queue.
Definition: event.h:75
hid_device_t * hid_register_wifi(hid_t *instance, hw_wifi_t *wifi, void *userdata)
Register a Wi-Fi connection-state observer.
hid_device_t * hid_register_gpio_pullup(hid_t *instance, uint8_t bank, uint8_t pin, uint16_t keycode, void *userdata)
Register a GPIO pin as HID input with pull-up.
hid_device_t * hid_register_iostream(hid_t *instance, sys_iostream_t *stream, void *userdata)
Register a stream-readiness observer.
hid_device_t * hid_register_timer(hid_t *instance, uint32_t id, uint32_t interval_ms, bool repeating, void *userdata)
Register a timer-backed HID source.
struct hid_t hid_t
Opaque HID instance handle.
Definition: device.h:40
void hid_deinit(hid_t *instance)
Deinitialize a HID device instance.