From 3d68ea280790351d0320fc4e712c51b820a5522a Mon Sep 17 00:00:00 2001 From: Amir Hammad Date: Fri, 9 Sep 2016 18:37:22 +0200 Subject: make hid_mouse driver generic HID driver + keyboard support + SET_REPORT commands - usually leds on keyboards (WIP) - missing parsing of HID report descriptor Signed-off-by: Amir Hammad --- include/usbh_config.h | 8 ++-- include/usbh_driver_hid.h | 85 +++++++++++++++++++++++++++++++++++++++++ include/usbh_driver_hid_mouse.h | 53 ------------------------- 3 files changed, 89 insertions(+), 57 deletions(-) create mode 100644 include/usbh_driver_hid.h delete mode 100644 include/usbh_driver_hid_mouse.h (limited to 'include') diff --git a/include/usbh_config.h b/include/usbh_config.h index 4fa38cb..8146ffb 100644 --- a/include/usbh_config.h +++ b/include/usbh_config.h @@ -38,10 +38,10 @@ // Set this wisely #define BUFFER_ONE_BYTES (2048) -// MOUSE -#define USBH_HID_MOUSE_MAX_DEVICES (2) - -#define USBH_HID_MOUSE_BUFFER (32) +// HID class devices +#define USBH_HID_MAX_DEVICES (2) +#define USBH_HID_BUFFER (256) +#define USBH_HID_REPORT_BUFFER (4) // MIDI // Maximal number of midi devices connected to whatever hub diff --git a/include/usbh_driver_hid.h b/include/usbh_driver_hid.h new file mode 100644 index 0000000..8155d82 --- /dev/null +++ b/include/usbh_driver_hid.h @@ -0,0 +1,85 @@ +/* + * This file is part of the libusbhost library + * hosted at http://github.com/libusbhost/libusbhost + * + * Copyright (C) 2016 Amir Hammad + * + * + * libusbhost is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * + */ + +#ifndef USBH_DRIVER_HID_ +#define USBH_DRIVER_HID_ + +#include "usbh_core.h" + +#include + +BEGIN_DECLS + +struct _hid_mouse_config { + /** + * @brief this is called when some data is read when polling the device + * @param device_id handle of HID device + * @param data pointer to the data + * @param length count of bytes in the data + * + * TODO: make better interface that provides data contained in the report descriptor + * + */ + void (*hid_in_message_handler)(uint8_t device_id, const uint8_t *data, uint32_t length); +}; +typedef struct _hid_mouse_config hid_config_t; + +/** + * @brief hid_mouse_driver_init initialization routine - this will initialize internal structures of this device driver + * @param config + * @see hid_mouse_config_t + */ +void hid_driver_init(const hid_config_t *config); + +/** + * @brief hid_set_report + * @param device_id handle of HID device + * @returns true on success, false otherwise + */ +bool hid_set_report(uint8_t device_id, uint8_t val); + +enum HID_TYPE { + HID_TYPE_NONE, + HID_TYPE_MOUSE, + HID_TYPE_KEYBOARD, +}; + +/** + * @brief hid_get_type + * @param device_id handle of HID device + * @return type of attached HID + * @see enum HID_TYPE + */ +enum HID_TYPE hid_get_type(uint8_t device_id); + +/** + * @brief hid_is_connected + * @param device_id handle of HID device + * @return true if the device with device_id is connected + */ +bool hid_is_connected(uint8_t device_id); + +extern const usbh_dev_driver_t usbh_hid_driver; + +END_DECLS + +#endif diff --git a/include/usbh_driver_hid_mouse.h b/include/usbh_driver_hid_mouse.h deleted file mode 100644 index 4a9f0d3..0000000 --- a/include/usbh_driver_hid_mouse.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of the libusbhost library - * hosted at http://github.com/libusbhost/libusbhost - * - * Copyright (C) 2015 Amir Hammad - * - * - * libusbhost is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * - */ - -#ifndef USBH_DRIVER_HID_MOUSE_ -#define USBH_DRIVER_HID_MOUSE_ - -#include "usbh_core.h" - -#include - -BEGIN_DECLS - -struct _hid_mouse_config { - /** - * @brief this is called when some data is read when polling the device - * @param device_id - * @param data pointer to the data (only 4 bytes are valid!) - */ - void (*mouse_in_message_handler)(uint8_t device_id, const uint8_t *data); -}; -typedef struct _hid_mouse_config hid_mouse_config_t; - -/** - * @brief hid_mouse_driver_init initialization routine - this will initialize internal structures of this device driver - * @param config - * @see hid_mouse_config_t - */ -void hid_mouse_driver_init(const hid_mouse_config_t *config); - -extern const usbh_dev_driver_t usbh_hid_mouse_driver; - -END_DECLS - -#endif -- cgit