Skip to content

Commit 7a2e3e1

Browse files
authored
Merge pull request arduino#106 from hathach/adafruit-tinyusb
Add TinyUSB as optional usb stack (drop down selection)
2 parents 498429e + ab16f98 commit 7a2e3e1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+10511
-5
lines changed

boards.txt

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ menu.speed=CPU Speed
1919
menu.opt=Optimize
2020
menu.maxspi=Max SPI
2121
menu.maxqspi=Max QSPI
22+
menu.usbstack=USB Stack
2223

2324
# Adafruit Feather M0 (SAMD21)
2425
# ------------------------------
@@ -49,6 +50,9 @@ adafruit_feather_m0.build.vid=0x239A
4950
adafruit_feather_m0.build.pid=0x800B
5051
adafruit_feather_m0.bootloader.tool=openocd
5152
adafruit_feather_m0.bootloader.file=featherM0/bootloader-feather_m0-v2.0.0-adafruit.5.bin
53+
adafruit_feather_m0.menu.usbstack.arduino=Arduino
54+
adafruit_feather_m0.menu.usbstack.tinyusb=TinyUSB
55+
adafruit_feather_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
5256

5357
# Adafruit Feather M0 Express (SAMD21)
5458
# ------------------------------
@@ -79,6 +83,9 @@ adafruit_feather_m0_express.build.vid=0x239A
7983
adafruit_feather_m0_express.build.pid=0x801B
8084
adafruit_feather_m0_express.bootloader.tool=openocd
8185
adafruit_feather_m0_express.bootloader.file=featherM0/bootloader-feather_m0-v2.0.0-adafruit.5.bin
86+
adafruit_feather_m0_express.menu.usbstack.arduino=Arduino
87+
adafruit_feather_m0_express.menu.usbstack.tinyusb=TinyUSB
88+
adafruit_feather_m0_express.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
8289

8390
#adafruit_radio_m0.name=Adafruit M0 Radio (Native USB Port)
8491
#adafruit_radio_m0.vid.0=0x239A
@@ -136,6 +143,9 @@ adafruit_metro_m0.build.vid=0x239A
136143
adafruit_metro_m0.build.pid=0x8013
137144
adafruit_metro_m0.bootloader.tool=openocd
138145
adafruit_metro_m0.bootloader.file=metroM0/bootloader-metro_m0-v2.0.0-adafruit.5.bin
146+
adafruit_metro_m0.menu.usbstack.arduino=Arduino
147+
adafruit_metro_m0.menu.usbstack.tinyusb=TinyUSB
148+
adafruit_metro_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
139149

140150
# Adafruit Circuit Playground Express (SAMD21)
141151
# ------------------------------
@@ -166,6 +176,9 @@ adafruit_circuitplayground_m0.build.vid=0x239A
166176
adafruit_circuitplayground_m0.build.pid=0x8018
167177
adafruit_circuitplayground_m0.bootloader.tool=openocd
168178
adafruit_circuitplayground_m0.bootloader.file=circuitplayM0/bootloader-circuitplay_m0-v2.0.0-adafruit.5.bin
179+
adafruit_circuitplayground_m0.menu.usbstack.arduino=Arduino
180+
adafruit_circuitplayground_m0.menu.usbstack.tinyusb=TinyUSB
181+
adafruit_circuitplayground_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
169182

170183
# Adafruit Gemma M0 (SAMD21)
171184
# ------------------------------
@@ -196,6 +209,9 @@ adafruit_gemma_m0.build.vid=0x239A
196209
adafruit_gemma_m0.build.pid=0x801C
197210
adafruit_gemma_m0.bootloader.tool=openocd
198211
adafruit_gemma_m0.bootloader.file=gemmaM0/bootloader-gemma_m0-v2.0.0-adafruit.5.bin
212+
adafruit_gemma_m0.menu.usbstack.arduino=Arduino
213+
adafruit_gemma_m0.menu.usbstack.tinyusb=TinyUSB
214+
adafruit_gemma_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
199215

200216
# Adafruit Trinket M0 (SAMD21)
201217
# ------------------------------
@@ -226,6 +242,9 @@ adafruit_trinket_m0.build.vid=0x239A
226242
adafruit_trinket_m0.build.pid=0x801E
227243
adafruit_trinket_m0.bootloader.tool=openocd
228244
adafruit_trinket_m0.bootloader.file=trinketM0/bootloader-trinket_m0-v2.0.0-adafruit.5.bin
245+
adafruit_trinket_m0.menu.usbstack.arduino=Arduino
246+
adafruit_trinket_m0.menu.usbstack.tinyusb=TinyUSB
247+
adafruit_trinket_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
229248

230249
# Adafruit ItsyBitsy M0 (SAMD21)
231250
# ------------------------------
@@ -258,6 +277,9 @@ adafruit_itsybitsy_m0.build.vid=0x239A
258277
adafruit_itsybitsy_m0.build.pid=0x800F
259278
adafruit_itsybitsy_m0.bootloader.tool=openocd
260279
adafruit_itsybitsy_m0.bootloader.file=itsybitsyM0/bootloader-itsybitsy_m0-v2.0.0-adafruit.5.bin
280+
adafruit_itsybitsy_m0.menu.usbstack.arduino=Arduino
281+
adafruit_itsybitsy_m0.menu.usbstack.tinyusb=TinyUSB
282+
adafruit_itsybitsy_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
261283

262284
# Adafruit PIRkey (SAMD21)
263285
# ------------------------------
@@ -288,6 +310,9 @@ adafruit_pirkey.build.vid=0x239A
288310
adafruit_pirkey.build.pid=0x801E
289311
adafruit_pirkey.bootloader.tool=openocd
290312
adafruit_pirkey.bootloader.file=pirkey/bootloader-pirkey-v2.0.0-adafruit.5.bin
313+
adafruit_pirkey.menu.usbstack.arduino=Arduino
314+
adafruit_pirkey.menu.usbstack.tinyusb=TinyUSB
315+
adafruit_pirkey.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
291316

292317
# Adafruit Metro M4 (SAMD51)
293318
# ------------------------------
@@ -347,6 +372,9 @@ adafruit_metro_m4.menu.maxqspi.50=50 MHz (standard)
347372
adafruit_metro_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
348373
adafruit_metro_m4.menu.maxqspi.fcpu=CPU Speed / 2
349374
adafruit_metro_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
375+
adafruit_metro_m4.menu.usbstack.arduino=Arduino
376+
adafruit_metro_m4.menu.usbstack.tinyusb=TinyUSB
377+
adafruit_metro_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
350378

351379
# Adafruit Grand Central M4 (SAMD51)
352380
# ------------------------------
@@ -406,6 +434,9 @@ adafruit_grandcentral_m4.menu.maxqspi.50=50 MHz (standard)
406434
adafruit_grandcentral_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
407435
adafruit_grandcentral_m4.menu.maxqspi.fcpu=CPU Speed / 2
408436
adafruit_grandcentral_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
437+
adafruit_grandcentral_m4.menu.usbstack.arduino=Arduino
438+
adafruit_grandcentral_m4.menu.usbstack.tinyusb=TinyUSB
439+
adafruit_grandcentral_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
409440

410441
# Adafruit ItsyBitsy M4 (SAMD51)
411442
# ------------------------------
@@ -465,6 +496,9 @@ adafruit_itsybitsy_m4.menu.maxqspi.50=50 MHz (standard)
465496
adafruit_itsybitsy_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
466497
adafruit_itsybitsy_m4.menu.maxqspi.fcpu=CPU Speed / 2
467498
adafruit_itsybitsy_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
499+
adafruit_itsybitsy_m4.menu.usbstack.arduino=Arduino
500+
adafruit_itsybitsy_m4.menu.usbstack.tinyusb=TinyUSB
501+
adafruit_itsybitsy_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
468502

469503
# Adafruit Feather M4 Express (SAMD51)
470504
# ------------------------------
@@ -524,7 +558,9 @@ adafruit_feather_m4.menu.maxqspi.50=50 MHz (standard)
524558
adafruit_feather_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
525559
adafruit_feather_m4.menu.maxqspi.fcpu=CPU Speed / 2
526560
adafruit_feather_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
527-
561+
adafruit_feather_m4.menu.usbstack.arduino=Arduino
562+
adafruit_feather_m4.menu.usbstack.tinyusb=TinyUSB
563+
adafruit_feather_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
528564

529565
# Adafruit HalloWing M0 (SAMD21)
530566
# ------------------------------
@@ -557,6 +593,9 @@ adafruit_hallowing.build.vid=0x239A
557593
adafruit_hallowing.build.pid=0xDEAD
558594
adafruit_hallowing.bootloader.tool=openocd
559595
adafruit_hallowing.bootloader.file=hallowingM0/bootloader-hallowing_m0-v2.0.0-adafruit.0-21-g887cc30.bin
596+
adafruit_hallowing.menu.usbstack.arduino=Arduino
597+
adafruit_hallowing.menu.usbstack.tinyusb=TinyUSB
598+
adafruit_hallowing.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
560599

561600
# Adafruit Trellis M4 (SAMD51)
562601
# ------------------------------
@@ -618,6 +657,9 @@ adafruit_trellis_m4.menu.maxqspi.50=50 MHz (standard)
618657
adafruit_trellis_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
619658
adafruit_trellis_m4.menu.maxqspi.fcpu=CPU Speed / 2
620659
adafruit_trellis_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
660+
adafruit_trellis_m4.menu.usbstack.arduino=Arduino
661+
adafruit_trellis_m4.menu.usbstack.tinyusb=TinyUSB
662+
adafruit_trellis_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
621663

622664
# Adafruit Crickit M0 (SAMD21)
623665
# ------------------------------
@@ -650,6 +692,9 @@ adafruit_crickit_m0.build.vid=0x239A
650692
adafruit_crickit_m0.build.pid=0x802D
651693
adafruit_crickit_m0.bootloader.tool=openocd
652694
adafruit_crickit_m0.bootloader.file=crickit/samd21_sam_ba.bin
695+
adafruit_crickit_m0.menu.usbstack.arduino=Arduino
696+
adafruit_crickit_m0.menu.usbstack.tinyusb=TinyUSB
697+
adafruit_crickit_m0.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
653698

654699
# Adafruit PyPortal M4 (SAMD51)
655700
# ------------------------------
@@ -709,6 +754,9 @@ adafruit_pyportal_m4.menu.maxqspi.50=50 MHz (standard)
709754
adafruit_pyportal_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
710755
adafruit_pyportal_m4.menu.maxqspi.fcpu=CPU Speed / 2
711756
adafruit_pyportal_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
757+
adafruit_pyportal_m4.menu.usbstack.arduino=Arduino
758+
adafruit_pyportal_m4.menu.usbstack.tinyusb=TinyUSB
759+
adafruit_pyportal_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
712760

713761
# Adafruit pyBadge M4 (SAMD51)
714762
# ------------------------------
@@ -770,6 +818,10 @@ adafruit_pybadge_m4.menu.maxqspi.50=50 MHz (standard)
770818
adafruit_pybadge_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
771819
adafruit_pybadge_m4.menu.maxqspi.fcpu=CPU Speed / 2
772820
adafruit_pybadge_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
821+
adafruit_pybadge_m4.menu.usbstack.arduino=Arduino
822+
adafruit_pybadge_m4.menu.usbstack.tinyusb=TinyUSB
823+
adafruit_pybadge_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
824+
773825

774826
# Adafruit Metro M4 AirLift lite (SAMD51)
775827
# ------------------------------
@@ -829,6 +881,9 @@ adafruit_metro_m4_airliftlite.menu.maxqspi.50=50 MHz (standard)
829881
adafruit_metro_m4_airliftlite.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
830882
adafruit_metro_m4_airliftlite.menu.maxqspi.fcpu=CPU Speed / 2
831883
adafruit_metro_m4_airliftlite.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
884+
adafruit_metro_m4_airliftlite.menu.usbstack.arduino=Arduino
885+
adafruit_metro_m4_airliftlite.menu.usbstack.tinyusb=TinyUSB
886+
adafruit_metro_m4_airliftlite.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
832887

833888
# Adafruit pyGamer M4 Express (SAMD51)
834889
# ------------------------------
@@ -890,3 +945,6 @@ adafruit_pygamer_m4.menu.maxqspi.50=50 MHz (standard)
890945
adafruit_pygamer_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
891946
adafruit_pygamer_m4.menu.maxqspi.fcpu=CPU Speed / 2
892947
adafruit_pygamer_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
948+
adafruit_pygamer_m4.menu.usbstack.arduino=Arduino
949+
adafruit_pygamer_m4.menu.usbstack.tinyusb=TinyUSB
950+
adafruit_pygamer_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2018, hathach for Adafruit
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*/
24+
25+
#if defined(USE_TINYUSB) && defined(USBCON)
26+
27+
#include "Arduino.h"
28+
#include "Adafruit_TinyUSB_Core.h"
29+
30+
//--------------------------------------------------------------------+
31+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
32+
//--------------------------------------------------------------------+
33+
34+
// Serial is 64-bit DeviceID -> 16 chars len
35+
uint16_t usb_desc_str_serial[1+16] = { TUD_DESC_STR_HEADER(16) };
36+
37+
// Init usb hardware when starting up. Softdevice is not enabled yet
38+
static void usb_hardware_init(void)
39+
{
40+
#ifdef PIN_LED_TXL
41+
// txLEDPulse = 0;
42+
pinMode(PIN_LED_TXL, OUTPUT);
43+
digitalWrite(PIN_LED_TXL, HIGH);
44+
#endif
45+
46+
#ifdef PIN_LED_RXL
47+
// rxLEDPulse = 0;
48+
pinMode(PIN_LED_RXL, OUTPUT);
49+
digitalWrite(PIN_LED_RXL, HIGH);
50+
#endif
51+
52+
/* Enable USB clock */
53+
#if defined(__SAMD51__)
54+
MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
55+
MCLK->AHBMASK.reg |= MCLK_AHBMASK_USB;
56+
57+
// Set up the USB DP/DN pins
58+
PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1;
59+
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u)));
60+
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u));
61+
PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1;
62+
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u)));
63+
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u));
64+
65+
66+
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
67+
#else
68+
PM->APBBMASK.reg |= PM_APBBMASK_USB;
69+
70+
// Set up the USB DP/DN pins
71+
PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1;
72+
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u)));
73+
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u));
74+
PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1;
75+
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u)));
76+
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u));
77+
78+
// Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
79+
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(6) | // Generic Clock Multiplexer 6
80+
GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source
81+
GCLK_CLKCTRL_CLKEN;
82+
while (GCLK->STATUS.bit.SYNCBUSY)
83+
;
84+
#endif
85+
}
86+
87+
void Adafruit_TinyUSB_Core_init(void)
88+
{
89+
// Create Serial string descriptor
90+
// char tmp_serial[17];
91+
// sprintf(tmp_serial, "%08lX%08lX", NRF_FICR->DEVICEID[1], NRF_FICR->DEVICEID[0]);
92+
//
93+
// for(uint8_t i=0; i<16; i++)
94+
// {
95+
// usb_desc_str_serial[1+i] = tmp_serial[i];
96+
// }
97+
98+
99+
USBDevice.addInterface( (Adafruit_USBD_Interface&) Serial);
100+
USBDevice.setID(USB_VID, USB_PID);
101+
USBDevice.begin();
102+
103+
usb_hardware_init();
104+
105+
// Init tinyusb stack
106+
tusb_init();
107+
}
108+
109+
#endif
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2019 Ha Thach for Adafruit Industries
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*/
24+
25+
#ifndef ADAFRUIT_TINYUSB_CORE_H_
26+
#define ADAFRUIT_TINYUSB_CORE_H_
27+
28+
#include "tusb.h"
29+
30+
#ifdef __cplusplus
31+
#include "Adafruit_USBD_Device.h"
32+
#include "Adafruit_USBD_CDC.h"
33+
#endif
34+
35+
// Called by main.cpp to initialize usb device typically with CDC device for Serial
36+
void Adafruit_TinyUSB_Core_init(void);
37+
38+
#endif /* ADAFRUIT_TINYUSB_CORE_H_ */

0 commit comments

Comments
 (0)