summaryrefslogtreecommitdiff
path: root/src/class/hid/hid_host.h
diff options
context:
space:
mode:
authorhathach <[email protected]>2021-05-17 13:54:39 +0700
committerhathach <[email protected]>2021-05-18 12:58:24 +0700
commitffdcf9a0d00ad8eba544c4404e27275685ef9cab (patch)
tree784cb69f048a71099e2c4dfa6a906dca26dfaaa9 /src/class/hid/hid_host.h
parentda6a7fb2bbb5ee07914e684a5162a9534c10bbb1 (diff)
move report_info to application
update API accordingly, update hid parser for usage, and usage_page.
Diffstat (limited to 'src/class/hid/hid_host.h')
-rw-r--r--src/class/hid/hid_host.h54
1 files changed, 23 insertions, 31 deletions
diff --git a/src/class/hid/hid_host.h b/src/class/hid/hid_host.h
index b000cdfcb..122f57088 100644
--- a/src/class/hid/hid_host.h
+++ b/src/class/hid/hid_host.h
@@ -53,17 +53,12 @@
typedef struct
{
- uint8_t count; // number of info
+ uint16_t usage_page;
+ uint8_t usage;
- struct
- {
- uint8_t usage_page;
- uint8_t usage;
-
- // TODO still use the endpoint size for now
- uint8_t in_len; // length of IN report
- uint8_t out_len; // length of OUT report
- } info[CFG_TUH_HID_REPORT_MAX];
+ // TODO still use the endpoint size for now
+// uint8_t in_len; // length of IN report
+// uint8_t out_len; // length of OUT report
} tuh_hid_report_info_t;
//--------------------------------------------------------------------+
@@ -79,47 +74,44 @@ uint8_t tuh_n_hid_instance_count(uint8_t dev_addr);
// Check if HID instance is mounted
bool tuh_n_hid_n_mounted(uint8_t dev_addr, uint8_t instance);
-// Get boot protocol check out hid_protocol_type_t for possible value
-uint8_t tuh_n_hid_n_boot_protocol(uint8_t dev_addr, uint8_t instance);
+// Get boot interface protocol check out hid_protocol_type_t for possible value
+uint8_t tuh_n_hid_n_interface_protocol(uint8_t dev_addr, uint8_t instance);
+
+// Get current protocol mode: Boot (true) or Report (false)
+// By HID spec, device will be initialized in Report mode
+bool tuh_n_hid_n_get_protocol(uint8_t dev_addr, uint8_t instance);
-// Check if current mode is Boot (true) or Report (false)
-bool tuh_n_hid_n_boot_mode(uint8_t dev_addr, uint8_t instance);
+// Set protocol to Boot or Report mode.
+// This function is only supported by Boot interface tuh_n_hid_n_boot_interface()
+bool tuh_n_hid_n_set_protocol(uint8_t dev_addr, uint8_t instance, bool boot_mode);
-// Get Report information parsed from report descriptor. Data must not be modified by application
-// If report information does not match the actual device descriptor, that is because the built-in parser
-// has its limit. Application could use tuh_hid_descriptor_report_cb() callback to parse descriptor by itself.
-tuh_hid_report_info_t const* tuh_n_hid_n_get_report_info(uint8_t dev_addr, uint8_t instance);
+// Parse report descriptor into array of report_info struct and return number of reports.
+// If return 0, this is a ingle report, otherwise it is composite report with 1st byte as ID.
+// For complicated report, application should write its own parser.
+uint8_t tuh_hid_parse_report_descriptor(tuh_hid_report_info_t* report_info, uint8_t arr_count, uint8_t const* desc_report, uint16_t desc_len) TU_ATTR_UNUSED;
// Check if the interface is ready to use
-bool tuh_n_hid_n_ready(uint8_t dev_addr, uint8_t instance);
+//bool tuh_n_hid_n_ready(uint8_t dev_addr, uint8_t instance);
// Set Report using control endpoint
//bool tuh_n_hid_n_set_report_control(uint8_t dev_addr, uint8_t instance, void* report, uint16_t len);
//------------- -------------//
-// Check if HID instance with Keyboard is mounted
-bool tuh_n_hid_n_keyboard_mounted(uint8_t dev_addr, uint8_t instance);
-
-// Check if HID instance with Mouse is mounted
-bool tuh_n_hid_n_mouse_mounted(uint8_t dev_addr, uint8_t instance);
-
//--------------------------------------------------------------------+
// Callbacks (Weak is optional)
//--------------------------------------------------------------------+
-// Invoked when report descriptor is received
-// Note: enumeration is still not complete yet at this time
-TU_ATTR_WEAK void tuh_hid_descriptor_report_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report_desc, uint16_t desc_len);
-
// Invoked when device with hid interface is mounted
-TU_ATTR_WEAK void tuh_hid_mounted_cb (uint8_t dev_addr, uint8_t instance);
+// Report descriptor is also available for use. tuh_hid_parse_report_descriptor()
+// can be used to parse common/simple enough descriptor.
+void tuh_hid_mounted_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report_desc, uint16_t desc_len);
// Invoked when device with hid interface is un-mounted
TU_ATTR_WEAK void tuh_hid_unmounted_cb(uint8_t dev_addr, uint8_t instance);
// Invoked when received Report from device via either regular or control endpoint
-TU_ATTR_WEAK void tuh_hid_get_report_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
+void tuh_hid_get_report_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
// Invoked when Sent Report to device via either regular or control endpoint
TU_ATTR_WEAK void tuh_hid_set_report_complete_cb(uint8_t dev_addr, uint8_t instance, uint8_t xferred_bytes);