diff options
| author | hathach <[email protected]> | 2018-03-07 11:11:13 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-03-07 11:11:13 +0700 |
| commit | acea45c094f574e4c3da13d3cbd2b4d65dd33566 (patch) | |
| tree | 496746a4e806196c50c6bf4f1c4635e69e83c038 /examples/obsolete/host/src | |
| parent | 271015a014902c61fc42c01aa85ab73d51bb519f (diff) | |
move old host example to obsolete
Diffstat (limited to 'examples/obsolete/host/src')
| -rw-r--r-- | examples/obsolete/host/src/app_os_prio.h | 82 | ||||
| -rw-r--r-- | examples/obsolete/host/src/cdc_serial_host_app.c | 169 | ||||
| -rw-r--r-- | examples/obsolete/host/src/cdc_serial_host_app.h | 74 | ||||
| -rw-r--r-- | examples/obsolete/host/src/keyboard_host_app.c | 176 | ||||
| -rw-r--r-- | examples/obsolete/host/src/keyboard_host_app.h | 80 | ||||
| -rw-r--r-- | examples/obsolete/host/src/main.c | 143 | ||||
| -rw-r--r-- | examples/obsolete/host/src/mouse_host_app.c | 181 | ||||
| -rw-r--r-- | examples/obsolete/host/src/mouse_host_app.h | 83 | ||||
| -rw-r--r-- | examples/obsolete/host/src/msc_cli.c | 485 | ||||
| -rw-r--r-- | examples/obsolete/host/src/msc_cli.h | 62 | ||||
| -rw-r--r-- | examples/obsolete/host/src/msc_host_app.c | 182 | ||||
| -rw-r--r-- | examples/obsolete/host/src/msc_host_app.h | 75 | ||||
| -rw-r--r-- | examples/obsolete/host/src/rndis_host_app.c | 76 | ||||
| -rw-r--r-- | examples/obsolete/host/src/rndis_host_app.h | 75 | ||||
| -rw-r--r-- | examples/obsolete/host/src/tusb_config.h | 115 |
15 files changed, 2058 insertions, 0 deletions
diff --git a/examples/obsolete/host/src/app_os_prio.h b/examples/obsolete/host/src/app_os_prio.h new file mode 100644 index 000000000..99be2de0c --- /dev/null +++ b/examples/obsolete/host/src/app_os_prio.h @@ -0,0 +1,82 @@ +/**************************************************************************/ +/*! + @file app_os_prio.h + @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. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_APP_OS_PRIO_H_ +#define _TUSB_APP_OS_PRIO_H_ + + +#ifdef __cplusplus + extern "C" { +#endif + +#include "tusb.h" + +#if TUSB_CFG_OS == TUSB_OS_NONE + #define LOWER_PRIO(x) 0 // does not matter +#elif TUSB_CFG_OS == TUSB_OS_FREERTOS + #define LOWER_PRIO(x) ((x)-1) // freeRTOS lower number --> lower priority +#elif TUSB_CFG_OS == TUSB_OS_CMSIS_RTX + #define LOWER_PRIO(x) ((x)-1) // CMSIS-RTOS lower number --> lower priority +#else + #error Priority is not configured for this RTOS +#endif + +enum { + STANDARD_APP_TASK_PRIO = LOWER_PRIO(TUSB_CFG_OS_TASK_PRIO), // Application Task is lower than usb system task + LED_BLINKING_APP_TASK_PRIO = LOWER_PRIO(STANDARD_APP_TASK_PRIO), // Blinking task is lower than normal task + + KEYBOARD_APP_TASK_PRIO = STANDARD_APP_TASK_PRIO, + MOUSE_APP_TASK_PRIO = STANDARD_APP_TASK_PRIO, + CDC_SERIAL_APP_TASK_PRIO = STANDARD_APP_TASK_PRIO, + MSC_APP_TASK_PRIO = STANDARD_APP_TASK_PRIO +}; + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_APP_OS_PRIO_H_ */ + +/** @} */ diff --git a/examples/obsolete/host/src/cdc_serial_host_app.c b/examples/obsolete/host/src/cdc_serial_host_app.c new file mode 100644 index 000000000..768e3a146 --- /dev/null +++ b/examples/obsolete/host/src/cdc_serial_host_app.c @@ -0,0 +1,169 @@ +/**************************************************************************/ +/*! + @file cdc_serial_host_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 "cdc_serial_host_app.h" +#include "app_os_prio.h" + +#if TUSB_CFG_HOST_CDC + +#define QUEUE_SERIAL_DEPTH 100 + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ +static osal_semaphore_t sem_hdl; + +enum { SERIAL_BUFFER_SIZE = 64 }; +TUSB_CFG_ATTR_USBRAM static uint8_t serial_in_buffer[SERIAL_BUFFER_SIZE]; +TUSB_CFG_ATTR_USBRAM static uint8_t serial_out_buffer[SERIAL_BUFFER_SIZE]; + +static uint8_t received_bytes; // set by transfer complete callback + +//--------------------------------------------------------------------+ +// tinyusb callbacks +//--------------------------------------------------------------------+ +void tuh_cdc_mounted_cb(uint8_t dev_addr) +{ // application set-up + printf("\na CDC device (address %d) is mounted\n", dev_addr); + + memclr_(serial_in_buffer, sizeof(serial_in_buffer)); + memclr_(serial_out_buffer, sizeof(serial_out_buffer)); + received_bytes = 0; + + osal_semaphore_reset(sem_hdl); + tuh_cdc_receive(dev_addr, serial_in_buffer, SERIAL_BUFFER_SIZE, true); // schedule first transfer +} + +void tuh_cdc_unmounted_cb(uint8_t dev_addr) +{ // application tear-down + printf("\na CDC device (address %d) is unmounted \n", dev_addr); +} + +// invoked ISR context +void tuh_cdc_xfer_isr(uint8_t dev_addr, tusb_event_t event, cdc_pipeid_t pipe_id, uint32_t xferred_bytes) +{ + (void) dev_addr; // compiler warnings + + switch ( pipe_id ) + { + case CDC_PIPE_DATA_IN: + switch(event) + { + case TUSB_EVENT_XFER_COMPLETE: + received_bytes = xferred_bytes; + osal_semaphore_post(sem_hdl); // notify main task + break; + + case TUSB_EVENT_XFER_ERROR: + received_bytes = 0; // ignore + tuh_cdc_receive(dev_addr, serial_in_buffer, SERIAL_BUFFER_SIZE, true); // waiting for next data + break; + + case TUSB_EVENT_XFER_STALLED: + default : + break; + } + break; + + case CDC_PIPE_DATA_OUT: + case CDC_PIPE_NOTIFICATION: + default: + break; + } +} + +//--------------------------------------------------------------------+ +// APPLICATION +//--------------------------------------------------------------------+ +void cdc_serial_host_app_init(void) +{ + sem_hdl = osal_semaphore_create(1, 0); + ASSERT_PTR( sem_hdl, VOID_RETURN); + + VERIFY( osal_task_create(cdc_serial_host_app_task, "cdc", 128, NULL, CDC_SERIAL_APP_TASK_PRIO), ); +} + +//------------- main task -------------// +void cdc_serial_host_app_task( void* param ) +{ + (void) param; + + OSAL_TASK_BEGIN + + //------------- send characters got from uart terminal to the first CDC device -------------// + for(uint8_t dev_addr=1; dev_addr <= TUSB_CFG_HOST_DEVICE_MAX; dev_addr++) + { + if ( tuh_cdc_serial_is_mounted(dev_addr) ) + { + int ch_tx = getchar(); + if ( ch_tx > 0 ) + { // USB is much faster than serial, here we assume usb is always complete. There could be some characters missing though + serial_out_buffer[0] = (uint8_t) ch_tx; + + if ( !tuh_cdc_is_busy(dev_addr, CDC_PIPE_DATA_OUT) ) + { + tuh_cdc_send(dev_addr, serial_out_buffer, 1, false); // no need for callback on serial out pipe + } + } + break; // demo app only communicate with the first CDC-capable device + } + } + + //------------- print out received characters -------------// + tusb_error_t error; + osal_semaphore_wait(sem_hdl, 100, &error); // waiting for incoming data + + if ( TUSB_ERROR_NONE == error) + { + for(uint8_t i=0; i<received_bytes; i++) putchar(serial_in_buffer[i]); + + for(uint8_t dev_addr=1; dev_addr <= TUSB_CFG_HOST_DEVICE_MAX; dev_addr++) + { + if ( tuh_cdc_serial_is_mounted(dev_addr) ) + { + tuh_cdc_receive(dev_addr, serial_in_buffer, SERIAL_BUFFER_SIZE, true); + + break; // demo app only communicate with the first CDC-capable device + } + } + } + + OSAL_TASK_END +} + +#endif diff --git a/examples/obsolete/host/src/cdc_serial_host_app.h b/examples/obsolete/host/src/cdc_serial_host_app.h new file mode 100644 index 000000000..4efc6cb8c --- /dev/null +++ b/examples/obsolete/host/src/cdc_serial_host_app.h @@ -0,0 +1,74 @@ +/**************************************************************************/ +/*! + @file cdc_serial_host_app.h + @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. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_CDC_SERIAL_HOST_APP_H_ +#define _TUSB_CDC_SERIAL_HOST_APP_H_ + +#include "board.h" +#include "tusb.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#if TUSB_CFG_HOST_CDC + +void cdc_serial_host_app_init(void); +void cdc_serial_host_app_task(void* param); + +#else + +#define cdc_serial_host_app_init() +#define cdc_serial_host_app_task(x) + +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_CDC_SERIAL_HOST_APP_H_ */ + +/** @} */ diff --git a/examples/obsolete/host/src/keyboard_host_app.c b/examples/obsolete/host/src/keyboard_host_app.c new file mode 100644 index 000000000..f0d2fcd73 --- /dev/null +++ b/examples/obsolete/host/src/keyboard_host_app.c @@ -0,0 +1,176 @@ +/**************************************************************************/ +/*! + @file keyboard_host_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 +//--------------------------------------------------------------------+ +#include "keyboard_host_app.h" +#include "app_os_prio.h" + +#if TUSB_CFG_HOST_HID_KEYBOARD + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ +#define QUEUE_KEYBOARD_REPORT_DEPTH 4 + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +static osal_queue_t queue_kbd_hdl; +TUSB_CFG_ATTR_USBRAM static hid_keyboard_report_t usb_keyboard_report; + +static inline uint8_t keycode_to_ascii(uint8_t modifier, uint8_t keycode) ATTR_CONST ATTR_ALWAYS_INLINE; +static inline void process_kbd_report(hid_keyboard_report_t const * report); + +//--------------------------------------------------------------------+ +// tinyusb callbacks +//--------------------------------------------------------------------+ +void tuh_hid_keyboard_mounted_cb(uint8_t dev_addr) +{ + // application set-up + printf("\na Keyboard device (address %d) is mounted\n", dev_addr); + + osal_queue_flush(queue_kbd_hdl); + tuh_hid_keyboard_get_report(dev_addr, (uint8_t*) &usb_keyboard_report); // first report +} + +void tuh_hid_keyboard_unmounted_cb(uint8_t dev_addr) +{ + // application tear-down + printf("\na Keyboard device (address %d) is unmounted\n", dev_addr); +} + +// invoked ISR context +void tuh_hid_keyboard_isr(uint8_t dev_addr, tusb_event_t event) +{ + switch(event) + { + case TUSB_EVENT_XFER_COMPLETE: + osal_queue_send(queue_kbd_hdl, &usb_keyboard_report); + tuh_hid_keyboard_get_report(dev_addr, (uint8_t*) &usb_keyboard_report); + break; + + case TUSB_EVENT_XFER_ERROR: + tuh_hid_keyboard_get_report(dev_addr, (uint8_t*) &usb_keyboard_report); // ignore & continue + break; + + default : + break; + } +} + +//--------------------------------------------------------------------+ +// APPLICATION +//--------------------------------------------------------------------+ +void keyboard_host_app_init(void) +{ + memclr_(&usb_keyboard_report, sizeof(hid_keyboard_report_t)); + + queue_kbd_hdl = osal_queue_create( QUEUE_KEYBOARD_REPORT_DEPTH, sizeof(hid_keyboard_report_t) ); + ASSERT_PTR( queue_kbd_hdl, VOID_RETURN ); + + VERIFY( osal_task_create(keyboard_host_app_task, "kbd", 128, NULL, KEYBOARD_APP_TASK_PRIO), ); +} + +//------------- main task -------------// +void keyboard_host_app_task(void* param) +{ + (void) param; + + OSAL_TASK_BEGIN + + hid_keyboard_report_t kbd_report; + tusb_error_t error; + + osal_queue_receive(queue_kbd_hdl, &kbd_report, OSAL_TIMEOUT_WAIT_FOREVER, &error); + (void) error; // suppress compiler warning + + process_kbd_report(&kbd_report); + + OSAL_TASK_END +} + +//--------------------------------------------------------------------+ +// HELPER +//--------------------------------------------------------------------+ +// look up new key in previous keys +static inline bool find_key_in_report(hid_keyboard_report_t const *p_report, uint8_t keycode) +{ + for(uint8_t i=0; i<6; i++) + { + if (p_report->keycode[i] == keycode) return true; + } + + return false; +} + +static inline void process_kbd_report(hid_keyboard_report_t const *p_new_report) +{ + static hid_keyboard_report_t prev_report = { 0, 0, {0} }; // previous report to check key released + + //------------- example code ignore control (non-printable) key affects -------------// + for(uint8_t i=0; i<6; i++) + { + if ( p_new_report->keycode[i] ) + { + if ( find_key_in_report(&prev_report, p_new_report->keycode[i]) ) + { + // exist in previous report means the current key is holding + }else + { + // not existed in previous report means the current key is pressed + uint8_t ch = keycode_to_ascii(p_new_report->modifier, p_new_report->keycode[i]); + putchar(ch); + if ( ch == '\r' ) putchar('\n'); // added new line for enter key + } + } + // TODO example skips key released + } + + prev_report = *p_new_report; +} + +static inline uint8_t keycode_to_ascii(uint8_t modifier, uint8_t keycode) +{ + // TODO max of keycode_ascii_tbl + return keycode > 128 ? 0 : + hid_keycode_to_ascii_tbl [modifier & (KEYBOARD_MODIFIER_LEFTSHIFT | KEYBOARD_MODIFIER_RIGHTSHIFT) ? 1 : 0] [keycode]; +} + +#endif diff --git a/examples/obsolete/host/src/keyboard_host_app.h b/examples/obsolete/host/src/keyboard_host_app.h new file mode 100644 index 000000000..2b99373a3 --- /dev/null +++ b/examples/obsolete/host/src/keyboard_host_app.h @@ -0,0 +1,80 @@ +/**************************************************************************/ +/*! + @file keyboard_host_app.h + @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. +*/ +/**************************************************************************/ + +/** \file + * \brief TBD + * + * \note TBD + */ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_KEYBOARD_HOST_APP_H_ +#define _TUSB_KEYBOARD_HOST_APP_H_ + +#include "board.h" +#include "tusb.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#if TUSB_CFG_HOST_HID_KEYBOARD + +void keyboard_host_app_init(void); +void keyboard_host_app_task(void* param); + +#else + +#define keyboard_host_app_init() +#define keyboard_host_app_task(x) + +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_KEYBOARD_HOST_APP_H_ */ + +/** @} */ diff --git a/examples/obsolete/host/src/main.c b/examples/obsolete/host/src/main.c new file mode 100644 index 000000000..897e538b3 --- /dev/null +++ b/examples/obsolete/host/src/main.c @@ -0,0 +1,143 @@ +/**************************************************************************/ +/*! + @file main.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 +//--------------------------------------------------------------------+ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "board.h" +#include "tusb.h" + +#include "mouse_host_app.h" +#include "keyboard_host_app.h" +#include "msc_host_app.h" +#include "cdc_serial_host_app.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +void print_greeting(void); + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ + +#if TUSB_CFG_OS == TUSB_OS_NONE +// like a real RTOS, this function is a main loop invoking each task in application and never return +void os_none_start_scheduler(void) +{ + while (1) + { + tusb_task_runner(); + led_blinking_task(NULL); + + keyboard_host_app_task(NULL); + mouse_host_app_task(NULL); + msc_host_app_task(NULL); + cdc_serial_host_app_task(NULL); + } +} +#endif + +int main(void) +{ +#if TUSB_CFG_OS == TUSB_OS_CMSIS_RTX + osKernelInitialize(); // CMSIS RTX requires kernel init before any other OS functions +#endif + + board_init(); + print_greeting(); + + tusb_init(); + + //------------- application task init -------------// + led_blinking_init(); + + keyboard_host_app_init(); + mouse_host_app_init(); + msc_host_app_init(); + cdc_serial_host_app_init(); + + //------------- start OS scheduler (never return) -------------// +#if TUSB_CFG_OS == TUSB_OS_FREERTOS + vTaskStartScheduler(); +#elif TUSB_CFG_OS == TUSB_OS_NONE + os_none_start_scheduler(); +#elif TUSB_CFG_OS == TUSB_OS_CMSIS_RTX + osKernelStart(); +#else + #error need to start RTOS schduler +#endif + + return 0; +} + +//--------------------------------------------------------------------+ +// HELPER FUNCTION +//--------------------------------------------------------------------+ +void print_greeting(void) +{ + char const * const rtos_name[] = + { + [TUSB_OS_NONE] = "None", + [TUSB_OS_FREERTOS] = "FreeRTOS", + }; + + puts("\n\ +--------------------------------------------------------------------\n\ +- Host Demo (a tinyusb example)\n\ +- if you find any bugs or get any questions, feel free to file an\n\ +- issue at https://github.com/hathach/tinyusb\n\ +--------------------------------------------------------------------\n" + ); + + puts("This HOST demo is configured to support:"); + printf(" - RTOS = %s\n", rtos_name[TUSB_CFG_OS]); + if (TUSB_CFG_HOST_HUB ) puts(" - Hub (1 level only)"); + if (TUSB_CFG_HOST_HID_MOUSE ) puts(" - HID Mouse"); + if (TUSB_CFG_HOST_HID_KEYBOARD ) puts(" - HID Keyboard"); + if (TUSB_CFG_HOST_MSC ) puts(" - Mass Storage"); + if (TUSB_CFG_HOST_CDC ) puts(" - Communication Device Class"); +} diff --git a/examples/obsolete/host/src/mouse_host_app.c b/examples/obsolete/host/src/mouse_host_app.c new file mode 100644 index 000000000..f392e0ace --- /dev/null +++ b/examples/obsolete/host/src/mouse_host_app.c @@ -0,0 +1,181 @@ +/**************************************************************************/ +/*! + @file mouse_host_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 +//--------------------------------------------------------------------+ +#include "mouse_host_app.h" +#include "app_os_prio.h" + +#if TUSB_CFG_HOST_HID_MOUSE + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ +#define QUEUE_MOUSE_REPORT_DEPTH 4 + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +static osal_queue_t queue_mouse_hdl; +TUSB_CFG_ATTR_USBRAM static hid_mouse_report_t usb_mouse_report; + +static inline void process_mouse_report(hid_mouse_report_t const * p_report); + +//--------------------------------------------------------------------+ +// tinyusb callbacks +//--------------------------------------------------------------------+ +void tuh_hid_mouse_mounted_cb(uint8_t dev_addr) +{ + // application set-up + printf("\na Mouse device (address %d) is mounted\n", dev_addr); + + osal_queue_flush(queue_mouse_hdl); + (void) tuh_hid_mouse_get_report(dev_addr, (uint8_t*) &usb_mouse_report); // first report +} + +void tuh_hid_mouse_unmounted_cb(uint8_t dev_addr) +{ + // application tear-down + printf("\na Mouse device (address %d) is unmounted\n", dev_addr); +} + +// invoked ISR context +void tuh_hid_mouse_isr(uint8_t dev_addr, tusb_event_t event) +{ + switch(event) + { + case TUSB_EVENT_XFER_COMPLETE: + osal_queue_send(queue_mouse_hdl, &usb_mouse_report); + (void) tuh_hid_mouse_get_report(dev_addr, (uint8_t*) &usb_mouse_report); + break; + + case TUSB_EVENT_XFER_ERROR: + (void) tuh_hid_mouse_get_report(dev_addr, (uint8_t*) &usb_mouse_report); // ignore & continue + break; + + default : + break; + } +} + +//--------------------------------------------------------------------+ +// APPLICATION CODE +// NOTICE: MOUSE REPORT IS NOT CORRECT UNTIL A DECENT HID PARSER IS +// IMPLEMENTED, MEANWHILE IT CAN MISS DISPLAY BUTTONS OR X,Y etc +//--------------------------------------------------------------------+ +void mouse_host_app_init(void) +{ + memclr_(&usb_mouse_report, sizeof(hid_mouse_report_t)); + + queue_mouse_hdl = osal_queue_create( QUEUE_MOUSE_REPORT_DEPTH, sizeof(hid_mouse_report_t) ); + ASSERT_PTR( queue_mouse_hdl, VOID_RETURN); + + VERIFY( osal_task_create(mouse_host_app_task, "mouse", 128, NULL, MOUSE_APP_TASK_PRIO), ); +} + +//------------- main task -------------// +void mouse_host_app_task(void* param) +{ + (void) param; + + OSAL_TASK_BEGIN + + tusb_error_t error; + hid_mouse_report_t mouse_report; + + osal_queue_receive(queue_mouse_hdl, &mouse_report, OSAL_TIMEOUT_WAIT_FOREVER, &error); + (void) error; // suppress compiler's warnings + + process_mouse_report(&mouse_report); + + OSAL_TASK_END +} + +//--------------------------------------------------------------------+ +// HELPER +//--------------------------------------------------------------------+ +void cursor_movement(int8_t x, int8_t y, int8_t wheel) +{ + //------------- X -------------// + if ( x < 0) + { + printf(ANSI_CURSOR_BACKWARD(%d), (-x)); // move left + }else if ( x > 0) + { + printf(ANSI_CURSOR_FORWARD(%d), x); // move right + }else { } + + //------------- Y -------------// + if ( y < 0) + { + printf(ANSI_CURSOR_UP(%d), (-y)); // move up + }else if ( y > 0) + { + printf(ANSI_CURSOR_DOWN(%d), y); // move down + }else { } + + //------------- wheel -------------// + if (wheel < 0) + { + printf(ANSI_SCROLL_UP(%d), (-wheel)); // scroll up + }else if (wheel > 0) + { + printf(ANSI_SCROLL_DOWN(%d), wheel); // scroll down + }else { } +} + +static inline void process_mouse_report(hid_mouse_report_t const * p_report) +{ + static hid_mouse_report_t prev_report = { 0, 0, 0, 0 }; + + //------------- button state -------------// + uint8_t button_changed_mask = p_report->buttons ^ prev_report.buttons; + if ( button_changed_mask & p_report->buttons) + { + printf(" %c%c%c ", + p_report->buttons & MOUSE_BUTTON_LEFT ? 'L' : '-', + p_report->buttons & MOUSE_BUTTON_MIDDLE ? 'M' : '-', + p_report->buttons & MOUSE_BUTTON_RIGHT ? 'R' : '-'); + } + + //------------- cursor movement -------------// + cursor_movement(p_report->x, p_report->y, p_report->wheel); +} + +#endif diff --git a/examples/obsolete/host/src/mouse_host_app.h b/examples/obsolete/host/src/mouse_host_app.h new file mode 100644 index 000000000..967444454 --- /dev/null +++ b/examples/obsolete/host/src/mouse_host_app.h @@ -0,0 +1,83 @@ +/**************************************************************************/ +/*! + @file mouse_host_app.h + @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. +*/ +/**************************************************************************/ + +/** \file + * \brief TBD + * + * \note TBD + */ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_MOUSE_HOST_APP_H_ +#define _TUSB_MOUSE_HOST_APP_H_ + +#include <stdint.h> +#include <stdbool.h> + +#include "board.h" +#include "tusb.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#if TUSB_CFG_HOST_HID_MOUSE + +void mouse_host_app_init(void); +void mouse_host_app_task(void* param); + +#else + +#define mouse_host_app_init() +#define mouse_host_app_task(x) + +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_MOUSE_HOST_APP_H_ */ + +/** @} */ diff --git a/examples/obsolete/host/src/msc_cli.c b/examples/obsolete/host/src/msc_cli.c new file mode 100644 index 000000000..e4cb2cb28 --- /dev/null +++ b/examples/obsolete/host/src/msc_cli.c @@ -0,0 +1,485 @@ +/**************************************************************************/ +/*! + @file msc_cli.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. +*/ +/**************************************************************************/ + +#include "msc_cli.h" +#include "ctype.h" + +#if TUSB_CFG_HOST_MSC + +#include "ff.h" +#include "diskio.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ +#define CLI_MAX_BUFFER 256 +#define CLI_FILE_READ_BUFFER (4*1024) + +enum { + ASCII_BACKSPACE = 8, +}; + +typedef enum +{ + CLI_ERROR_NONE = 0, + CLI_ERROR_INVALID_PARA, + CLI_ERROR_INVALID_PATH, + CLI_ERROR_FILE_EXISTED, + CLI_ERROR_FAILED +}cli_error_t; + +static char const * const cli_error_message[] = +{ + [CLI_ERROR_NONE ] = 0, + [CLI_ERROR_INVALID_PARA ] = "Invalid parameter(s)", + [CLI_ERROR_INVALID_PATH ] = "No such file or directory", + [CLI_ERROR_FILE_EXISTED ] = "file or directory already exists", + [CLI_ERROR_FAILED ] = "failed to execute" +}; + +//--------------------------------------------------------------------+ +// CLI Database definition +//--------------------------------------------------------------------+ + +// command, function, description +#define CLI_COMMAND_TABLE(ENTRY) \ + ENTRY(unknown , cli_cmd_unknown , NULL ) \ + ENTRY(help , cli_cmd_help , NULL ) \ + ENTRY(cls , cli_cmd_clear , "Clear the screen.\n cls\n" ) \ + ENTRY(ls , cli_cmd_list , "List information of the FILEs.\n ls\n" ) \ + ENTRY(cd , cli_cmd_changedir, "change the current directory.\n cd a_folder\n" ) \ + ENTRY(cat , cli_cmd_cat , "display contents of a file.\n cat a_file.txt\n" ) \ + ENTRY(cp , cli_cmd_copy , "Copies one or more files to another location.\n cp a_file.txt dir1/another_file.txt\n cp a_file.txt dir1\n" ) \ + ENTRY(mkdir , cli_cmd_mkdir , "Create a DIRECTORY, if it does not already exist.\n mkdir <new folder>\n" ) \ + ENTRY(mv , cli_cmd_move , "Rename or move a DIRECTORY or a FILE.\n mv old_name.txt new_name.txt\n mv old_name.txt dir1/new_name.txt\n" ) \ + ENTRY(rm , cli_cmd_remove , "Remove (delete) an empty DIRECTORY or FILE.\n rm deleted_name.txt\n rm empty_dir\n" ) \ + +//--------------------------------------------------------------------+ +// Expands the function to have the standard function signature +//--------------------------------------------------------------------+ +#define CLI_PROTOTYPE_EXPAND(command, function, description) \ + cli_error_t function(char * p_para); + +CLI_COMMAND_TABLE(CLI_PROTOTYPE_EXPAND) + +//--------------------------------------------------------------------+ +// Expand to enum value +//--------------------------------------------------------------------+ +#define CLI_ENUM_EXPAND(command, function, description) CLI_CMDTYPE_##command, +typedef enum +{ + CLI_COMMAND_TABLE(CLI_ENUM_EXPAND) + CLI_CMDTYPE_COUNT +}cli_cmdtype_t; + +//--------------------------------------------------------------------+ +// Expand to string table +//--------------------------------------------------------------------+ +#define CLI_STRING_EXPAND(command, function, description) #command, +char const* const cli_string_tbl[] = +{ + CLI_COMMAND_TABLE(CLI_STRING_EXPAND) +}; + +//--------------------------------------------------------------------+ +// Expand to Description table +//--------------------------------------------------------------------+ +#define CLI_DESCRIPTION_EXPAND(command, function, description) description, +char const* const cli_description_tbl[] = +{ + CLI_COMMAND_TABLE(CLI_DESCRIPTION_EXPAND) +}; + + +//--------------------------------------------------------------------+ +// Expand to Command Lookup Table +//--------------------------------------------------------------------+ +#define CMD_LOOKUP_EXPAND(command, function, description)\ + [CLI_CMDTYPE_##command] = function,\ + +typedef cli_error_t (* const cli_cmdfunc_t)(char *); +static cli_cmdfunc_t cli_command_tbl[] = +{ + CLI_COMMAND_TABLE(CMD_LOOKUP_EXPAND) +}; + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +TUSB_CFG_ATTR_USBRAM uint8_t fileread_buffer[CLI_FILE_READ_BUFFER]; +static char cli_buffer[CLI_MAX_BUFFER]; +static char volume_label[20]; + +static inline void drive_number2letter(char * p_path) ATTR_ALWAYS_INLINE; +static inline void drive_number2letter(char * p_path) +{ + if (p_path[1] == ':') + { + p_path[0] = 'E' + p_path[0] - '0' ; + } +} + +static inline void drive_letter2number(char * p_path) ATTR_ALWAYS_INLINE; +static inline void drive_letter2number(char * p_path) +{ + if (p_path[1] == ':') + { + p_path[0] = p_path[0] - 'E' + '0'; + } +} + + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ +// NOTES: prompt re-use cli_buffer --> should not be called when cli_buffer has contents +void cli_command_prompt(void) +{ + f_getcwd(cli_buffer, CLI_MAX_BUFFER); + drive_number2letter(cli_buffer); + printf("\n%s %s\n$ ", + (volume_label[0] !=0) ? volume_label : "No Label", + cli_buffer); + + memclr_(cli_buffer, CLI_MAX_BUFFER); +} + +void cli_init(void) +{ + memclr_(cli_buffer, CLI_MAX_BUFFER); + f_getlabel(NULL, volume_label, NULL); + cli_command_prompt(); +} + +void cli_poll(char ch) +{ + if ( isprint(ch) ) + { // accumulate & echo + if (strlen(cli_buffer) < CLI_MAX_BUFFER) + { + cli_buffer[ strlen(cli_buffer) ] = ch; + putchar(ch); + }else + { + puts("cli buffer overflows"); + memclr_(cli_buffer, CLI_MAX_BUFFER); + } + } + else if ( ch == ASCII_BACKSPACE && strlen(cli_buffer)) + { + printf(ANSI_CURSOR_BACKWARD(1) ANSI_ERASE_LINE(0) ); // move cursor back & clear to the end of line + cli_buffer[ strlen(cli_buffer)-1 ] = 0; + } + else if ( ch == '\r') + { // execute command + //------------- Separate Command & Parameter -------------// + putchar('\n'); + char* p_space = strchr(cli_buffer, ' '); + uint32_t command_len = (p_space == NULL) ? strlen(cli_buffer) : (uint32_t) (p_space - cli_buffer); + char* p_para = (p_space == NULL) ? (cli_buffer+command_len) : (p_space+1); // point to NULL-character or after space + + //------------- Find entered command in lookup table & execute it -------------// + uint8_t cmd_id; + for(cmd_id = CLI_CMDTYPE_COUNT - 1; cmd_id > CLI_CMDTYPE_unknown; cmd_id--) + { + if( 0 == strncmp(cli_buffer, cli_string_tbl[cmd_id], command_len) ) break; + } + + cli_error_t error = cli_command_tbl[cmd_id]( p_para ); // command execution, (unknown command if cannot find) + + if (CLI_ERROR_NONE != error) puts(cli_error_message[error]); // error message output if any + cli_command_prompt(); // print out current path + } + else if (ch=='\t') // \t may be used for auto-complete later + { + + } +} + +//--------------------------------------------------------------------+ +// UNKNOWN Command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_unknown(char * p_para) +{ + (void) p_para; + puts("unknown command, please type \"help\" for list of supported commands"); + return CLI_ERROR_NONE; +} + +//--------------------------------------------------------------------+ +// HELP command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_help(char * p_para) +{ + (void) p_para; + + puts("current supported commands are:"); + for(uint8_t cmd_id = CLI_CMDTYPE_help+1; cmd_id < CLI_CMDTYPE_COUNT; cmd_id++) + { + printf("%s\t%s\n", cli_string_tbl[cmd_id], cli_description_tbl[cmd_id]); + } + + return CLI_ERROR_NONE; +} + +//--------------------------------------------------------------------+ +// Clear Screen Command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_clear(char* p_para) +{ + (void) p_para; + printf(ANSI_ERASE_SCREEN(2) ANSI_CURSOR_POSITION(1,1) ); + return CLI_ERROR_NONE; +} + +//--------------------------------------------------------------------+ +// LS Command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_list(char * p_para) +{ + if ( strlen(p_para) == 0 ) // list current directory + { + DIR target_dir; + if ( FR_OK != f_opendir(&target_dir, ".") ) return CLI_ERROR_FAILED; + + TCHAR long_filename[_MAX_LFN]; + FILINFO dir_entry = + { + .lfname = long_filename, + .lfsize = _MAX_LFN + }; + while( (f_readdir(&target_dir, &dir_entry) == FR_OK) && dir_entry.fname[0] != 0) + { + if ( dir_entry.fname[0] != '.' ) // ignore . and .. entry + { + TCHAR const * const p_name = (dir_entry.lfname[0] != 0) ? dir_entry.lfname : dir_entry.fname; + if ( dir_entry.fattrib & AM_DIR ) // directory + { + printf("/%s", p_name); + }else + { + printf("%-40s%d KB", p_name, dir_entry.fsize / 1000); + } + putchar('\n'); + } + } + +// (void) f_closedir(&target_dir); + } + else + { + puts("ls only supports list current directory only, try to cd to that folder first"); + return CLI_ERROR_INVALID_PARA; + } + + return CLI_ERROR_NONE; +} + +//--------------------------------------------------------------------+ +// CD Command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_changedir(char * p_para) +{ + if ( strlen(p_para) == 0 ) return CLI_ERROR_INVALID_PARA; + + drive_letter2number(p_para); + + if ( FR_OK != f_chdir(p_para) ) + { + return CLI_ERROR_INVALID_PATH; + } + + if ( p_para[1] == ':') + { // path has drive letter --> change drive, update volume label + f_chdrive(p_para[0] - '0'); + f_getlabel(NULL, volume_label, NULL); + } + + return CLI_ERROR_NONE; +} + +//--------------------------------------------------------------------+ +// CAT Command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_cat(char *p_para) +{ + if ( strlen(p_para) == 0 ) return CLI_ERROR_INVALID_PARA; + + FIL file; + + switch( f_open(&file, p_para, FA_READ) ) + { + case FR_OK: + { + uint32_t bytes_read = 0; + + if ( (FR_OK == f_read(&file, fileread_buffer, CLI_FILE_READ_BUFFER, &bytes_read)) && (bytes_read > 0) ) + { + if ( file.fsize < 0x80000 ) // ~ 500KB + { + putchar('\n'); + do { + for(uint32_t i=0; i<bytes_read; i++) putchar( fileread_buffer[i] ); + }while( (FR_OK == f_read(&file, fileread_buffer, CLI_FILE_READ_BUFFER, &bytes_read)) && (bytes_read > 0) ); + }else + { // not display file contents if first character is not printable (high chance of binary file) + printf("%s 's contents is too large\n", p_para); + } + } + f_close(&file); + } + break; + + case FR_INVALID_NAME: + return CLI_ERROR_INVALID_PATH; + + default : + return CLI_ERROR_FAILED; + } + + return CLI_ERROR_NONE; +} + +//--------------------------------------------------------------------+ +// Make Directory command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_mkdir(char *p_para) +{ + if ( strlen(p_para) == 0 ) return CLI_ERROR_INVALID_PARA; + + return (f_mkdir(p_para) == FR_OK) ? CLI_ERROR_NONE : CLI_ERROR_FAILED; +} + +//--------------------------------------------------------------------+ +// COPY command +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_copy(char *p_para) +{ + char* p_space = strchr(p_para, ' '); + if ( p_space == NULL ) return CLI_ERROR_INVALID_PARA; + *p_space = 0; // replace space by NULL-character + + char* p_dest = p_space+1; + if ( strlen(p_dest) == 0 ) return CLI_ERROR_INVALID_PARA; + + drive_letter2number(p_para); + drive_letter2number(p_dest); + + //------------- Check Existence of source file -------------// + FIL src_file; + if ( FR_OK != f_open(&src_file , p_para, FA_READ) ) return CLI_ERROR_INVALID_PATH; + + //------------- Check if dest path is a folder or a non-existing file (overwritten is not allowed) -------------// + FILINFO dest_entry; + if ( (f_stat(p_dest, &dest_entry) == FR_OK) && (dest_entry.fattrib & AM_DIR) ) + { // the destination is an existed folder --> auto append dest filename to be the folder + strcat(p_dest, "/"); + strcat(p_dest, p_para); + } + + //------------- Open dest file and start the copy -------------// + cli_error_t error = CLI_ERROR_NONE; + FIL dest_file; + + switch ( f_open(&dest_file, p_dest, FA_WRITE | FA_CREATE_NEW) ) + { + case FR_EXIST: + error = CLI_ERROR_FILE_EXISTED; + break; + + case FR_OK: + while(1) // copying + { + uint32_t bytes_read = 0; + uint32_t bytes_write = 0; + FRESULT res; + + res = f_read(&src_file, fileread_buffer, CLI_FILE_READ_BUFFER, &bytes_read); /* Read a chunk of src file */ + if ( (res != FR_OK) || (bytes_read == 0) ) break; /* error or eof */ + + res = f_write(&dest_file, fileread_buffer, bytes_read, &bytes_write); /* Write it to the dst file */ + if ( (res != FR_OK) || (bytes_write < bytes_read) ) break; /* error or disk full */ + } + + f_close(&dest_file); + break; + + default: + error = CLI_ERROR_FAILED; + break; + } + + f_close(&src_file); + + return error; +} + +//--------------------------------------------------------------------+ +// MOVE/RENAME +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_move(char *p_para) +{ + char* p_space = strchr(p_para, ' '); + if ( p_space == NULL ) return CLI_ERROR_INVALID_PARA; + *p_space = 0; // replace space by NULL-character + + char* p_dest = p_space+1; + if ( strlen(p_dest) == 0 ) return CLI_ERROR_INVALID_PARA; + + return (f_rename(p_para, p_dest) == FR_OK ) ? CLI_ERROR_NONE : CLI_ERROR_FAILED; +} + +//--------------------------------------------------------------------+ +// REMOVE +//--------------------------------------------------------------------+ +cli_error_t cli_cmd_remove(char *p_para) +{ + if ( strlen(p_para) == 0 ) return CLI_ERROR_INVALID_PARA; + + switch( f_unlink(p_para) ) + { + case FR_OK: return CLI_ERROR_NONE; + + case FR_DENIED: + printf("cannot remove readonly file/foler or non-empty folder\n"); + break; + + default: break; + } + + return CLI_ERROR_FAILED; +} +#endif diff --git a/examples/obsolete/host/src/msc_cli.h b/examples/obsolete/host/src/msc_cli.h new file mode 100644 index 000000000..052ad05ee --- /dev/null +++ b/examples/obsolete/host/src/msc_cli.h @@ -0,0 +1,62 @@ +/**************************************************************************/ +/*! + @file msc_cli.h + @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. +*/ +/**************************************************************************/ +#ifndef _TUSB_MSC_CLI_H_ +#define _TUSB_MSC_CLI_H_ + +#include "board.h" +#include "tusb.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +//--------------------------------------------------------------------+ +// PUBLIC API +//--------------------------------------------------------------------+ +void cli_init(void); +void cli_poll(char ch); + +//--------------------------------------------------------------------+ +// Callback API +//--------------------------------------------------------------------+ + + +#ifdef __cplusplus +} +#endif + +#endif // _TUSB_CLI_H_ diff --git a/examples/obsolete/host/src/msc_host_app.c b/examples/obsolete/host/src/msc_host_app.c new file mode 100644 index 000000000..6faac68c3 --- /dev/null +++ b/examples/obsolete/host/src/msc_host_app.c @@ -0,0 +1,182 @@ +/**************************************************************************/ +/*! + @file msc_host_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 +//--------------------------------------------------------------------+ +#include "msc_host_app.h" +#include "app_os_prio.h" + +#if TUSB_CFG_HOST_MSC + +#include "msc_cli.h" +#include "ff.h" +#include "diskio.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +TUSB_CFG_ATTR_USBRAM static FATFS fatfs[TUSB_CFG_HOST_DEVICE_MAX]; + +//--------------------------------------------------------------------+ +// tinyusb callbacks +//--------------------------------------------------------------------+ +void tuh_msc_mounted_cb(uint8_t dev_addr) +{ + puts("\na MassStorage device is mounted"); + + //------------- Disk Information -------------// + // SCSI VendorID[8] & ProductID[16] from Inquiry Command + uint8_t const* p_vendor = tuh_msc_get_vendor_name(dev_addr); + uint8_t const* p_product = tuh_msc_get_product_name(dev_addr); + + for(uint8_t i=0; i<8; i++) putchar(p_vendor[i]); + + putchar(' '); + for(uint8_t i=0; i<16; i++) putchar(p_product[i]); + putchar('\n'); + + uint32_t last_lba, block_size; + tuh_msc_get_capacity(dev_addr, &last_lba, &block_size); + printf("Disk Size: %d MB\n", (last_lba+1)/ ((1024*1024)/block_size) ); + printf("LBA 0-0x%X Block Size: %d\n", last_lba, block_size); + + //------------- file system (only 1 LUN support) -------------// + uint8_t phy_disk = dev_addr-1; + disk_initialize(phy_disk); + + if ( disk_is_ready(phy_disk) ) + { + if ( f_mount(phy_disk, &fatfs[phy_disk]) != FR_OK ) + { + puts("mount failed"); + return; + } + + puts("---------------------------------------------------------------------"); + puts("- MASSSTORAGE CLASS CLI IS A IMMATURE CODE. DISK-WRITING COMMANDS"); + puts("- SUCH AS cp(COPY), mkdir(MAKE DIRECTORY) ARE POTENTIAL TO DAMAGE"); + puts("- YOUR USB THUMBDRIVE. USING THOSE COMMANDS ARE AT YOUR OWN RISK."); + puts("- THE AUTHOR HAS NO RESPONSIBILITY WITH YOUR DEVICE NOR ITS DATA"); + puts("---------------------------------------------------------------------"); + + f_chdrive(phy_disk); // change to newly mounted drive + f_chdir("/"); // root as current dir + + cli_init(); + } +} + +void tuh_msc_unmounted_cb(uint8_t dev_addr) +{ + puts("\na MassStorage device is unmounted"); + + uint8_t phy_disk = dev_addr-1; + + f_mount(phy_disk, NULL); // unmount disk + disk_deinitialize(phy_disk); + + if ( phy_disk == f_get_current_drive() ) + { // active drive is unplugged --> change to other drive + for(uint8_t i=0; i<TUSB_CFG_HOST_DEVICE_MAX; i++) + { + if ( disk_is_ready(i) ) + { + f_chdrive(i); + cli_init(); // refractor, rename + } + } + } +} + +// invoked ISR context +void tuh_msc_isr(uint8_t dev_addr, tusb_event_t event, uint32_t xferred_bytes) +{ + (void) dev_addr; + (void) event; + (void) xferred_bytes; +} + +//--------------------------------------------------------------------+ +// APPLICATION CODE +//--------------------------------------------------------------------+ +void msc_host_app_init(void) +{ + osal_task_create( msc_host_app_task, "msc", 512, NULL, MSC_APP_TASK_PRIO); + diskio_init(); +} + +//------------- main task -------------// +void msc_host_app_task(void* param) +{ + (void) param;; + + OSAL_TASK_BEGIN + + bool is_any_disk_mounted; + + osal_task_delay(10); + + is_any_disk_mounted = false; + + for(uint8_t phy_disk=0; phy_disk < TUSB_CFG_HOST_DEVICE_MAX; phy_disk++) + { + if ( disk_is_ready(phy_disk) ) + { + is_any_disk_mounted = true; + break; + } + } + + if ( is_any_disk_mounted ) + { + int ch = getchar(); + if ( ch > 0 ) + { + cli_poll( (char) ch); + } + } + + OSAL_TASK_END +} + +#endif diff --git a/examples/obsolete/host/src/msc_host_app.h b/examples/obsolete/host/src/msc_host_app.h new file mode 100644 index 000000000..25ece8816 --- /dev/null +++ b/examples/obsolete/host/src/msc_host_app.h @@ -0,0 +1,75 @@ +/**************************************************************************/ +/*! + @file msc_host_app.h + @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. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_MSC_HOST_APP_H_ +#define _TUSB_MSC_HOST_APP_H_ + +#include "board.h" +#include "tusb.h" + + +#ifdef __cplusplus + extern "C" { +#endif + +#if TUSB_CFG_HOST_MSC + +void msc_host_app_init(void); +void msc_host_app_task(void* param); + +#else + +#define msc_host_app_init() +#define msc_host_app_task(x) + +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_MSC_HOST_APP_H_ */ + +/** @} */ diff --git a/examples/obsolete/host/src/rndis_host_app.c b/examples/obsolete/host/src/rndis_host_app.c new file mode 100644 index 000000000..e6b37e4d3 --- /dev/null +++ b/examples/obsolete/host/src/rndis_host_app.c @@ -0,0 +1,76 @@ +/**************************************************************************/ +/*! + @file rndis_host_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 "rndis_host_app.h" +#include "app_os_prio.h" + +#if TUSB_CFG_HOST_CDC && TUSB_CFG_HOST_CDC_RNDIS + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ +void tusbh_cdc_rndis_mounted_cb(uint8_t dev_addr) +{ // application set-up + uint8_t mac_address[6]; + + printf("\nan RNDIS device is mounted\n"); + tusbh_cdc_rndis_get_mac_addr(dev_addr, mac_address); + + printf("MAC Address "); + for(uint8_t i=0; i<6; i++) printf("%X ", mac_address[i]); + printf("\n"); +} + +void tusbh_cdc_rndis_unmounted_cb(uint8_t dev_addr) +{ + // application tear-down + printf("\nan RNDIS device is unmounted\n"); +} + +void rndis_host_app_init(void) +{ + +} + +void rndis_host_app_task(void* param) +{ + OSAL_TASK_BEGIN + OSAL_TASK_END +} + +#endif diff --git a/examples/obsolete/host/src/rndis_host_app.h b/examples/obsolete/host/src/rndis_host_app.h new file mode 100644 index 000000000..e4fcacf46 --- /dev/null +++ b/examples/obsolete/host/src/rndis_host_app.h @@ -0,0 +1,75 @@ +/**************************************************************************/ +/*! + @file rndis_host_app.h + @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. +*/ +/**************************************************************************/ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_RNDIS_HOST_APP_H_ +#define _TUSB_RNDIS_HOST_APP_H_ + +#include "board.h" +#include "tusb.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#if TUSB_CFG_HOST_CDC && TUSB_CFG_HOST_CDC_RNDIS + +void rndis_host_app_init(void); +void rndis_host_app_task(void* param); + +#else + +#define rndis_host_app_init() +#define rndis_host_app_task(x) + +#endif + + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_RNDIS_HOST_APP_H_ */ + +/** @} */ diff --git a/examples/obsolete/host/src/tusb_config.h b/examples/obsolete/host/src/tusb_config.h new file mode 100644 index 000000000..04fd7e889 --- /dev/null +++ b/examples/obsolete/host/src/tusb_config.h @@ -0,0 +1,115 @@ +/**************************************************************************/ +/*! + @file tusb_config.h + @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. +*/ +/**************************************************************************/ + +#ifndef _TUSB_TUSB_CONFIG_H_ +#define _TUSB_TUSB_CONFIG_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +//--------------------------------------------------------------------+ +// CONTROLLER CONFIGURATION +//--------------------------------------------------------------------+ +//#define TUSB_CFG_MCU will be passed from IDE for easy board/mcu switching +#define TUSB_CFG_CONTROLLER_0_MODE (TUSB_MODE_HOST) + +//--------------------------------------------------------------------+ +// HOST CONFIGURATION +//--------------------------------------------------------------------+ + +//------------- CLASS -------------// +#define TUSB_CFG_HOST_HUB 1 +#define TUSB_CFG_HOST_HID_KEYBOARD 1 +#define TUSB_CFG_HOST_HID_MOUSE 1 +#define TUSB_CFG_HOST_HID_GENERIC 0 // (not yet supported) +#define TUSB_CFG_HOST_MSC 1 +#define TUSB_CFG_HOST_CDC 1 + +#define TUSB_CFG_HOST_DEVICE_MAX (TUSB_CFG_HOST_HUB ? 5 : 1) // normal hub has 4 ports + +//--------------------------------------------------------------------+ +// COMMON CONFIGURATION +//--------------------------------------------------------------------+ +#define TUSB_CFG_DEBUG 2 + +//#define TUSB_CFG_OS TUSB_OS_NONE // defined using eclipse build +//#define TUSB_CFG_OS_TASK_PRIO 0 // defined using eclipse build + +#define TUSB_CFG_TICKS_HZ 1000 + +//--------------------------------------------------------------------+ +// USB RAM PLACEMENT +//--------------------------------------------------------------------+ +#ifdef __CODE_RED // make use of code red's support for ram region macros + + #if TUSB_CFG_MCU == MCU_LPC175X_6X + #define TUSB_CFG_ATTR_USBRAM // LPC17xx USB DMA can access all address + #elif (TUSB_CFG_MCU == MCU_LPC43XX) + #define TUSB_CFG_ATTR_USBRAM ATTR_SECTION(.data.$RAM3) + #endif + +#elif defined __CC_ARM // Compiled with Keil armcc + + #if (TUSB_CFG_MCU == MCU_LPC175X_6X) + #define TUSB_CFG_ATTR_USBRAM // LPC17xx USB DMA can access all address + #elif (TUSB_CFG_MCU == MCU_LPC43XX) + #define TUSB_CFG_ATTR_USBRAM // Use keil tool configure to have AHB SRAM as default memory + #endif + +#elif defined __ICCARM__ // compiled with IAR + + #if (TUSB_CFG_MCU == MCU_LPC175X_6X) + // LP175x_6x can access all but CMSIS-RTX causes overflow in 32KB SRAM --> move to AHB ram + #define TUSB_CFG_ATTR_USBRAM _Pragma("location=\".sram\"") + #elif (TUSB_CFG_MCU == MCU_LPC43XX) + #define TUSB_CFG_ATTR_USBRAM _Pragma("location=\".ahb_sram1\"") + #endif + +#else + + #error compiler not specified + +#endif + + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_TUSB_CONFIG_H_ */ |
