aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/include/usbh/dev/hid.h
diff options
context:
space:
mode:
authorMichael Walker <walkerstop@gmail.com>2018-05-02 03:37:31 -0700
committerMichael Walker <walkerstop@gmail.com>2018-05-02 03:37:31 -0700
commitcd7559268dcc2da5f2b1f3872e6baa1cff1d5476 (patch)
tree0cf31de069f9df06a13743eab4e1879f05ce9c12 /os/hal/include/usbh/dev/hid.h
parent4d7ccdd1fce0c95c57129b80c81fab829daf9f99 (diff)
parent457afa6202fe9f8e6accb65411629172bb32c41b (diff)
downloadChibiOS-Contrib-cd7559268dcc2da5f2b1f3872e6baa1cff1d5476.tar.gz
ChibiOS-Contrib-cd7559268dcc2da5f2b1f3872e6baa1cff1d5476.tar.bz2
ChibiOS-Contrib-cd7559268dcc2da5f2b1f3872e6baa1cff1d5476.zip
Merge branch 'master' into mike
Diffstat (limited to 'os/hal/include/usbh/dev/hid.h')
-rw-r--r--os/hal/include/usbh/dev/hid.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/os/hal/include/usbh/dev/hid.h b/os/hal/include/usbh/dev/hid.h
new file mode 100644
index 0000000..c7371ee
--- /dev/null
+++ b/os/hal/include/usbh/dev/hid.h
@@ -0,0 +1,144 @@
+/*
+ ChibiOS - Copyright (C) 2006..2017 Giovanni Di Sirio
+ Copyright (C) 2015..2017 Diego Ismirlian, (dismirlian (at) google's mail)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef USBH_HID_H_
+#define USBH_HID_H_
+
+#include "hal_usbh.h"
+
+#if HAL_USE_USBH && HAL_USBH_USE_HID
+
+/* TODO:
+ *
+ */
+
+
+/*===========================================================================*/
+/* Driver pre-compile time settings. */
+/*===========================================================================*/
+#if !defined(HAL_USBHHID_USE_INTERRUPT_OUT)
+#define HAL_USBHHID_USE_INTERRUPT_OUT FALSE
+#endif
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+
+
+/*===========================================================================*/
+/* Driver data structures and types. */
+/*===========================================================================*/
+
+typedef enum {
+ USBHHID_STATE_UNINIT = 0,
+ USBHHID_STATE_STOP = 1,
+ USBHHID_STATE_ACTIVE = 2,
+ USBHHID_STATE_READY = 3
+} usbhhid_state_t;
+
+typedef enum {
+ USBHHID_DEVTYPE_GENERIC = 0,
+ USBHHID_DEVTYPE_BOOT_KEYBOARD = 1,
+ USBHHID_DEVTYPE_BOOT_MOUSE = 2,
+} usbhhid_devtype_t;
+
+typedef enum {
+ USBHHID_REPORTTYPE_INPUT = 1,
+ USBHHID_REPORTTYPE_OUTPUT = 2,
+ USBHHID_REPORTTYPE_FEATURE = 3,
+} usbhhid_reporttype_t;
+
+typedef enum {
+ USBHHID_PROTOCOL_BOOT = 0,
+ USBHHID_PROTOCOL_REPORT = 1,
+} usbhhid_protocol_t;
+
+typedef struct USBHHIDDriver USBHHIDDriver;
+typedef struct USBHHIDConfig USBHHIDConfig;
+
+typedef void (*usbhhid_report_callback)(USBHHIDDriver *hidp, uint16_t len);
+
+struct USBHHIDConfig {
+ usbhhid_report_callback cb_report;
+ void *report_buffer;
+ uint16_t report_len;
+ usbhhid_protocol_t protocol;
+};
+
+struct USBHHIDDriver {
+ /* inherited from abstract class driver */
+ _usbh_base_classdriver_data
+
+ usbh_ep_t epin;
+#if HAL_USBHHID_USE_INTERRUPT_OUT
+ usbh_ep_t epout;
+#endif
+ uint8_t ifnum;
+
+ usbhhid_devtype_t type;
+ usbhhid_state_t state;
+
+ usbh_urb_t in_urb;
+
+ const USBHHIDConfig *config;
+
+ semaphore_t sem;
+};
+
+
+/*===========================================================================*/
+/* Driver macros. */
+/*===========================================================================*/
+
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
+extern USBHHIDDriver USBHHIDD[HAL_USBHHID_MAX_INSTANCES];
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /* HID Common API */
+ usbh_urbstatus_t usbhhidGetReport(USBHHIDDriver *hidp,
+ uint8_t report_id, usbhhid_reporttype_t report_type,
+ void *data, uint16_t len);
+ usbh_urbstatus_t usbhhidSetReport(USBHHIDDriver *hidp,
+ uint8_t report_id, usbhhid_reporttype_t report_type,
+ const void *data, uint16_t len);
+ usbh_urbstatus_t usbhhidGetIdle(USBHHIDDriver *hidp, uint8_t report_id, uint8_t *duration);
+ usbh_urbstatus_t usbhhidSetIdle(USBHHIDDriver *hidp, uint8_t report_id, uint8_t duration);
+ usbh_urbstatus_t usbhhidGetProtocol(USBHHIDDriver *hidp, uint8_t *protocol);
+ usbh_urbstatus_t usbhhidSetProtocol(USBHHIDDriver *hidp, uint8_t protocol);
+
+ static inline uint8_t usbhhidGetType(USBHHIDDriver *hidp) {
+ return hidp->type;
+ }
+
+ static inline usbhhid_state_t usbhhidGetState(USBHHIDDriver *hidp) {
+ return hidp->state;
+ }
+
+ void usbhhidStart(USBHHIDDriver *hidp, const USBHHIDConfig *cfg);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif /* USBH_HID_H_ */