summaryrefslogtreecommitdiff
path: root/examples/host
diff options
context:
space:
mode:
authorhathach <[email protected]>2018-12-05 18:14:23 +0700
committerhathach <[email protected]>2018-12-05 18:14:23 +0700
commite0aa38ca8d2106aca9842b310640346f6a8ac562 (patch)
treec048dd42ed48fe10438b3199fe5c117cc7df8a93 /examples/host
parent0fb9fb605cafeb7f6a3d09f940efed8982d128de (diff)
host 1800 blinky
Diffstat (limited to 'examples/host')
-rw-r--r--examples/host/cdc_msc_hid/src/main.c145
-rw-r--r--examples/host/cdc_msc_hid/src/tusb_config.h163
2 files changed, 308 insertions, 0 deletions
diff --git a/examples/host/cdc_msc_hid/src/main.c b/examples/host/cdc_msc_hid/src/main.c
new file mode 100644
index 000000000..a8a34ef8f
--- /dev/null
+++ b/examples/host/cdc_msc_hid/src/main.c
@@ -0,0 +1,145 @@
+/**************************************************************************/
+/*!
+ @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 <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "bsp/board.h"
+#include "tusb.h"
+
+//--------------------------------------------------------------------+
+// MACRO CONSTANT TYPEDEF PROTYPES
+//--------------------------------------------------------------------+
+void print_greeting(void);
+void led_blinking_task(void);
+
+extern void virtual_com_task(void);
+extern void usb_hid_task(void);
+
+/*------------- MAIN -------------*/
+int main(void)
+{
+ board_init();
+ print_greeting();
+
+ //tusb_init();
+
+ while (1)
+ {
+ //tusb_task();
+
+ led_blinking_task();
+
+#if CFG_TUD_CDC
+ virtual_com_task();
+#endif
+
+#if CFG_TUD_HID
+ usb_hid_task();
+#endif
+ }
+
+ return 0;
+}
+
+//--------------------------------------------------------------------+
+// USB CDC
+//--------------------------------------------------------------------+
+#if CFG_TUD_CDC
+void virtual_com_task(void)
+{
+
+}
+
+#endif
+
+//--------------------------------------------------------------------+
+// USB HID
+//--------------------------------------------------------------------+
+#if CFG_TUD_HID
+void usb_hid_task(void)
+{
+
+}
+
+#endif
+
+//--------------------------------------------------------------------+
+// tinyusb callbacks
+//--------------------------------------------------------------------+
+
+//--------------------------------------------------------------------+
+// BLINKING TASK
+//--------------------------------------------------------------------+
+void led_blinking_task(void)
+{
+ static tu_timeout_t tm = { .start = 0, .interval = 1000 }; // Blink every 1000 ms
+ static bool led_state = false;
+
+ if ( !tu_timeout_expired(&tm) ) return; // not enough time
+ tu_timeout_reset(&tm);
+
+ board_led_control(led_state);
+ led_state = 1 - led_state; // toggle
+}
+
+//--------------------------------------------------------------------+
+// HELPER FUNCTION
+//--------------------------------------------------------------------+
+void print_greeting(void)
+{
+ char const * const rtos_name[] =
+ {
+ [OPT_OS_NONE] = "None",
+ [OPT_OS_FREERTOS] = "FreeRTOS",
+ };
+
+ printf("\n--------------------------------------------------------------------\n");
+ printf("- Host example\n");
+ printf("- if you find any bugs or get any questions, feel free to file an\n");
+ printf("- issue at https://github.com/hathach/tinyusb\n");
+ printf("--------------------------------------------------------------------\n\n");
+
+ printf("This Host demo is configured to support:");
+ printf(" - RTOS = %s\n", rtos_name[CFG_TUSB_OS]);
+// if (CFG_TUH_CDC ) puts(" - Communication Device Class");
+// if (CFG_TUH_MSC ) puts(" - Mass Storage");
+// if (CFG_TUH_HID_KEYBOARD ) puts(" - HID Keyboard");
+// if (CFG_TUH_HID_MOUSE ) puts(" - HID Mouse");
+}
diff --git a/examples/host/cdc_msc_hid/src/tusb_config.h b/examples/host/cdc_msc_hid/src/tusb_config.h
new file mode 100644
index 000000000..22e67cbda
--- /dev/null
+++ b/examples/host/cdc_msc_hid/src/tusb_config.h
@@ -0,0 +1,163 @@
+/**************************************************************************/
+/*!
+ @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_CONFIG_H_
+#define _TUSB_CONFIG_H_
+
+#include "tusb_option.h"
+#include "bsp/board.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+//--------------------------------------------------------------------
+// COMMON CONFIGURATION
+//--------------------------------------------------------------------
+
+// defined by compiler flags for flexibility
+#ifndef CFG_TUSB_MCU
+ #error CFG_TUSB_MCU must be defined
+#endif
+
+#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX
+#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_NONE | OPT_MODE_HIGH_SPEED)
+#else
+#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
+#endif
+
+#define CFG_TUSB_DEBUG 2
+#define CFG_TUSB_OS OPT_OS_NONE
+
+/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
+ * Tinyusb use follows macros to declare transferring memory so that they can be put
+ * into those specific section.
+ * e.g
+ * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") ))
+ * - CFG_TUSB_MEM_ALIGN : __attribute__ ((aligned(4)))
+ */
+#ifndef CFG_TUSB_MEM_SECTION
+#define CFG_TUSB_MEM_SECTION
+#endif
+
+#ifndef CFG_TUSB_MEM_ALIGN
+#define CFG_TUSB_MEM_ALIGN ATTR_ALIGNED(4)
+#endif
+
+//--------------------------------------------------------------------
+// DEVICE CONFIGURATION
+//--------------------------------------------------------------------
+#define CFG_TUD_ENDOINT0_SIZE 64
+
+/*------------- Descriptors -------------*/
+
+/* Enable auto generated descriptor, tinyusb will try its best to create
+ * descriptor ( device, configuration, hid ) that matches enabled CFG_* in this file
+ *
+ * Note: All CFG_TUD_DESC_* are relevant only if CFG_TUD_DESC_AUTO is enabled
+ */
+#define CFG_TUD_DESC_AUTO 1
+
+/* If USB VID/PID is not defined, tinyusb will use default value
+ * Note: different class combination e.g CDC and (CDC + MSC) should have different
+ * PID since Host OS will "remembered" device driver after the first plug */
+// #define CFG_TUD_DESC_VID 0xCAFE
+// #define CFG_TUD_DESC_PID 0x0001
+
+// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
+// Therefor we need to force endpoint number to correct type on lpc17xx
+#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX
+#define CFG_TUD_DESC_CDC_EPNUM_NOTIF 1
+#define CFG_TUD_DESC_CDC_EPNUM 2
+#define CFG_TUD_DESC_MSC_EPNUM 5
+#define CFG_TUD_DESC_HID_KEYBOARD_EPNUM 4
+#define CFG_TUD_DESC_HID_MOUSE_EPNUM 7
+#endif
+
+//------------- CLASS -------------//
+#define CFG_TUD_CDC 0
+#define CFG_TUD_MSC 0
+#define CFG_TUD_CUSTOM_CLASS 0
+
+#define CFG_TUD_HID 0
+#define CFG_TUD_HID_KEYBOARD 0
+#define CFG_TUD_HID_MOUSE 0
+
+//--------------------------------------------------------------------
+// CDC
+//--------------------------------------------------------------------
+
+// FIFO size of CDC TX and RX
+#define CFG_TUD_CDC_RX_BUFSIZE 64
+#define CFG_TUD_CDC_TX_BUFSIZE 64
+
+//--------------------------------------------------------------------
+// MSC
+//--------------------------------------------------------------------
+// Number of supported Logical Unit Number (At least 1)
+#define CFG_TUD_MSC_MAXLUN 1
+
+// Buffer size of Device Mass storage
+#define CFG_TUD_MSC_BUFSIZE 512
+
+// Vendor name included in Inquiry response, max 8 bytes
+#define CFG_TUD_MSC_VENDOR "tinyusb"
+
+// Product name included in Inquiry response, max 16 bytes
+#define CFG_TUD_MSC_PRODUCT "tusb msc"
+
+// Product revision string included in Inquiry response, max 4 bytes
+#define CFG_TUD_MSC_PRODUCT_REV "1.0"
+
+//--------------------------------------------------------------------
+// HID
+//--------------------------------------------------------------------
+
+/* Use the HID_ASCII_TO_KEYCODE lookup if CFG_TUD_HID_KEYBOARD is enabled.
+ * This will occupies 256 bytes of ROM. It will also enable the use of 2 extra APIs
+ * - tud_hid_keyboard_send_char()
+ * - tud_hid_keyboard_send_string()
+ */
+#define CFG_TUD_HID_ASCII_TO_KEYCODE_LOOKUP 1
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* _TUSB_CONFIG_H_ */