diff options
| author | hathach <[email protected]> | 2018-03-06 19:14:01 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-03-06 19:14:01 +0700 |
| commit | 4dc917c9ba8b746a4e5ce1934af019840bd20355 (patch) | |
| tree | 5c8d270f36a6c38e98a64a991de54270e5a2d3f0 /examples/device/src/keyboard_device_app.c | |
| parent | fce85875c49a7d18115c4f0c2cf91d7f8e5df9d9 (diff) | |
rename demo to examples
Diffstat (limited to 'examples/device/src/keyboard_device_app.c')
| -rw-r--r-- | examples/device/src/keyboard_device_app.c | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/examples/device/src/keyboard_device_app.c b/examples/device/src/keyboard_device_app.c new file mode 100644 index 000000000..b4a9cb69a --- /dev/null +++ b/examples/device/src/keyboard_device_app.c @@ -0,0 +1,151 @@ +/**************************************************************************/ +/*! + @file keyboard_device_app.c + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2013, 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. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''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 COPYRIGHT HOLDER 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 tinyusb stack. +*/ +/**************************************************************************/ + +#include "keyboard_device_app.h" + +#if TUSB_CFG_DEVICE_HID_KEYBOARD +//--------------------------------------------------------------------+ +// INCLUDE +//--------------------------------------------------------------------+ +#include "app_os_prio.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +TUSB_CFG_ATTR_USBRAM hid_keyboard_report_t keyboard_report; + +//--------------------------------------------------------------------+ +// tinyusb callbacks +//--------------------------------------------------------------------+ +void keyboard_app_mount(uint8_t coreid) +{ + +} + +void keyboard_app_umount(uint8_t coreid) +{ + +} + +void tud_hid_keyboard_cb(uint8_t coreid, tusb_event_t event, uint32_t xferred_bytes) +{ + switch(event) + { + case TUSB_EVENT_XFER_COMPLETE: + case TUSB_EVENT_XFER_ERROR: + case TUSB_EVENT_XFER_STALLED: + default: break; + } +} + +uint16_t tud_hid_keyboard_get_report_cb(uint8_t coreid, hid_request_report_type_t report_type, void** pp_report, uint16_t requested_length) +{ + // get other than input report is not supported by this keyboard demo + if ( report_type != HID_REQUEST_REPORT_INPUT ) return 0; + + (*pp_report) = &keyboard_report; + return requested_length; +} + +void tud_hid_keyboard_set_report_cb(uint8_t coreid, hid_request_report_type_t report_type, uint8_t p_report_data[], uint16_t length) +{ + // set other than output report is not supported by this keyboard demo + if ( report_type != HID_REQUEST_REPORT_OUTPUT ) return; + + uint8_t kbd_led = p_report_data[0]; + uint32_t interval_divider = 1; // each LED will reduce blinking interval by a half + + if (kbd_led & KEYBOARD_LED_NUMLOCK ) interval_divider *= 2; + if (kbd_led & KEYBOARD_LED_CAPSLOCK ) interval_divider *= 2; + if (kbd_led & KEYBOARD_LED_SCROLLLOCK) interval_divider *= 2; + + led_blinking_set_interval( 1000 / interval_divider); +} + +//--------------------------------------------------------------------+ +// APPLICATION CODE +//--------------------------------------------------------------------+ +void keyboard_app_init(void) +{ + osal_task_create(keyboard_app_task, "kbd", 128, NULL, KEYBOARD_APP_TASK_PRIO); +} + +tusb_error_t keyboard_device_subtask(void); + +void keyboard_app_task(void* param) +{ + (void) param; + + OSAL_TASK_BEGIN + keyboard_device_subtask(); + OSAL_TASK_END +} + +tusb_error_t keyboard_device_subtask(void) +{ + OSAL_SUBTASK_BEGIN + + osal_task_delay(50); + + if ( tud_mounted(0) && !tud_hid_keyboard_busy(0) ) + { + static uint32_t button_mask = 0; + uint32_t new_button_mask = board_buttons(); + + //------------- button pressed -------------// + if (button_mask != new_button_mask) + { + button_mask = new_button_mask; + + for (uint8_t i=0; i<6; i++) + { // demo support up to 6 buttons, button0 = 'a', button1 = 'b', etc ... + keyboard_report.keycode[i] = BIT_TEST_(button_mask, i) ? (0x04+i) : 0; + } + + tud_hid_keyboard_send(0, &keyboard_report ); + } + } + + OSAL_SUBTASK_END +} + +#endif |
