From 4b63a2bc5ccb1dd8c207f68b01be5ff6014a03da Mon Sep 17 00:00:00 2001 From: hathach Date: Sun, 7 Apr 2013 19:33:40 +0700 Subject: [PATCH] - fix HID_MOUSEBUTTON right & left - add mouse app to mount mouse interface --- demos/host/keyboard_app.c | 2 +- demos/host/main.c | 3 +- demos/host/mouse_app.c | 90 +++++++++++++++++++++++++++++++++++++++ demos/host/mouse_app.h | 67 +++++++++++++++++++++++++++++ demos/host/tusb_config.h | 1 + tinyusb/class/hid.h | 12 +++--- 6 files changed, 166 insertions(+), 9 deletions(-) create mode 100644 demos/host/mouse_app.c create mode 100644 demos/host/mouse_app.h diff --git a/demos/host/keyboard_app.c b/demos/host/keyboard_app.c index 5dee23c3..32827b98 100644 --- a/demos/host/keyboard_app.c +++ b/demos/host/keyboard_app.c @@ -47,7 +47,7 @@ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ //TUSB_CFG_ATTR_USBRAM -__attribute__ ((section(".data.$RAM3"))) +__attribute__ ((section(".data.$RAM3"))) // TODO hack for USB RAM tusb_keyboard_report_t keyboard_report; //--------------------------------------------------------------------+ diff --git a/demos/host/main.c b/demos/host/main.c index 60e00f40..247b91cd 100644 --- a/demos/host/main.c +++ b/demos/host/main.c @@ -26,12 +26,13 @@ int main(void) { tusb_task_runner(); keyboard_app_task(); + mouse_app_task(); if (current_tick + 10*CFG_TICKS_PER_SECOND < system_ticks) { current_tick = system_ticks; // board_leds(0x01, (current_tick/CFG_TICKS_PER_SECOND)%2); /* Toggle LED once per second */ - printf("tinyusb: " __DATE__ "\t" __TIME__ "\n"); + printf("tinyusb: " __DATE__ "\t" __TIME__ "\n"); // toggle leds on EA4357 is quite troublesome } } diff --git a/demos/host/mouse_app.c b/demos/host/mouse_app.c new file mode 100644 index 00000000..c7d845b2 --- /dev/null +++ b/demos/host/mouse_app.c @@ -0,0 +1,90 @@ +/* + * mouse_app.c + * + * Created on: Mar 24, 2013 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the tiny usb stack. + */ + +//--------------------------------------------------------------------+ +// INCLUDE +//--------------------------------------------------------------------+ +#include "mouse_app.h" +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +//TUSB_CFG_ATTR_USBRAM +__attribute__ ((section(".data.$RAM3"))) // TODO hack for USB RAM +tusb_mouse_report_t mouse_report; + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ +void mouse_app_task(void) +{ + for (uint8_t dev_addr = 1; dev_addr <= TUSB_CFG_HOST_DEVICE_MAX; dev_addr++) + { + if ( tusbh_hid_mouse_is_supported(dev_addr) ) + { + switch (tusbh_hid_mouse_status(dev_addr,0)) + { + case TUSB_INTERFACE_STATUS_READY: + case TUSB_INTERFACE_STATUS_ERROR: // skip error, get next key + tusbh_hid_mouse_get_report(dev_addr, 0, (uint8_t*) &mouse_report); + break; + + case TUSB_INTERFACE_STATUS_COMPLETE: + // TODO buffer in queue + if ( mouse_report.buttons || mouse_report.x || mouse_report.y) + { + printf("buttons: %c%c%c (x, y) = (%d, %d)\n", + mouse_report.buttons & HID_MOUSEBUTTON_LEFT ? 'L' : '-', + mouse_report.buttons & HID_MOUSEBUTTON_MIDDLE ? 'M' : '-', + mouse_report.buttons & HID_MOUSEBUTTON_RIGHT ? 'R' : '-', + mouse_report.x, mouse_report.y); + } + + memclr_(&mouse_report, sizeof(tusb_mouse_report_t)); // TODO use callback to synchronize + tusbh_hid_mouse_get_report(dev_addr, 0, (uint8_t*) &mouse_report); + break; + + case TUSB_INTERFACE_STATUS_BUSY: + break; + + } + } + } +} diff --git a/demos/host/mouse_app.h b/demos/host/mouse_app.h new file mode 100644 index 00000000..373aa1f0 --- /dev/null +++ b/demos/host/mouse_app.h @@ -0,0 +1,67 @@ +/* + * mouse_app.h + * + * Created on: April 07, 2013 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the tiny usb stack. + */ + +/** \file + * \brief TBD + * + * \note TBD + */ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_MOUSE_APP_H_ +#define _TUSB_MOUSE_APP_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#include "boards/board.h" +#include "tusb.h" + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_MOUSE_APP_H_ */ + +/** @} */ diff --git a/demos/host/tusb_config.h b/demos/host/tusb_config.h index bbaf5787..3a72e0b8 100644 --- a/demos/host/tusb_config.h +++ b/demos/host/tusb_config.h @@ -72,6 +72,7 @@ //------------- CLASS -------------// #define TUSB_CFG_HOST_HID_KEYBOARD 1 +#define TUSB_CFG_HOST_HID_MOUSE 1 //--------------------------------------------------------------------+ // DEVICE CONFIGURATION diff --git a/tinyusb/class/hid.h b/tinyusb/class/hid.h index 1d423a53..2bd98ac5 100644 --- a/tinyusb/class/hid.h +++ b/tinyusb/class/hid.h @@ -112,18 +112,16 @@ typedef ATTR_PACKED_STRUCT(struct) /** * \brief buttons codes for HID mouse */ -enum -{ - HID_MOUSEBUTTON_RIGHT = 0, - HID_MOUSEBUTTON_LEFT = 1, - HID_MOUSEBUTTON_MIDDLE = 2 +enum { + HID_MOUSEBUTTON_LEFT = BIT_(0), + HID_MOUSEBUTTON_RIGHT = BIT_(1), + HID_MOUSEBUTTON_MIDDLE = BIT_(2) }; /** * \brief KB modifier codes for HID KB */ -enum -{ +enum { KEYBOARD_MODIFIER_LEFTCTRL = BIT_(0), KEYBOARD_MODIFIER_LEFTSHIFT = BIT_(1), KEYBOARD_MODIFIER_LEFTALT = BIT_(2),