Skip to content

Commit b92b61b

Browse files
committed
refactor load_serial_number() to Adafruit_USBD_Device::getSerialDescriptor()
1 parent a346cf7 commit b92b61b

File tree

2 files changed

+79
-70
lines changed

2 files changed

+79
-70
lines changed

cores/arduino/TinyUSB/Adafruit_TinyUSB_Core.cpp

Lines changed: 78 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -31,58 +31,42 @@
3131
//--------------------------------------------------------------------+
3232
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
3333
//--------------------------------------------------------------------+
34+
static void usb_hardware_init(void);
3435

35-
// Init usb hardware when starting up. Softdevice is not enabled yet
36-
static void usb_hardware_init(void)
36+
//--------------------------------------------------------------------+
37+
// Core Init & Touch1200
38+
//--------------------------------------------------------------------+
39+
void Adafruit_TinyUSB_Core_init(void)
3740
{
38-
#ifdef PIN_LED_TXL
39-
// txLEDPulse = 0;
40-
pinMode(PIN_LED_TXL, OUTPUT);
41-
digitalWrite(PIN_LED_TXL, HIGH);
42-
#endif
43-
44-
#ifdef PIN_LED_RXL
45-
// rxLEDPulse = 0;
46-
pinMode(PIN_LED_RXL, OUTPUT);
47-
digitalWrite(PIN_LED_RXL, HIGH);
48-
#endif
49-
50-
/* Enable USB clock */
51-
#if defined(__SAMD51__)
52-
MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
53-
MCLK->AHBMASK.reg |= MCLK_AHBMASK_USB;
41+
USBDevice.addInterface( (Adafruit_USBD_Interface&) Serial);
42+
USBDevice.setID(USB_VID, USB_PID);
43+
USBDevice.begin();
5444

55-
// Set up the USB DP/DN pins
56-
PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1;
57-
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u)));
58-
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u));
59-
PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1;
60-
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u)));
61-
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u));
45+
usb_hardware_init();
6246

47+
// Init tinyusb stack
48+
tusb_init();
49+
}
6350

64-
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
65-
#else
66-
PM->APBBMASK.reg |= PM_APBBMASK_USB;
51+
void Adafruit_TinyUSB_Core_touch1200(void)
52+
{
53+
initiateReset(250);
54+
}
6755

68-
// Set up the USB DP/DN pins
69-
PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1;
70-
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u)));
71-
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u));
72-
PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1;
73-
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u)));
74-
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u));
56+
//--------------------------------------------------------------------+
57+
// Adafruit_USBD_Device platform dependent
58+
//--------------------------------------------------------------------+
59+
void Adafruit_USBD_Device::detach(void)
60+
{
61+
USB->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH;
62+
}
7563

76-
// Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
77-
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(6) | // Generic Clock Multiplexer 6
78-
GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source
79-
GCLK_CLKCTRL_CLKEN;
80-
while (GCLK->STATUS.bit.SYNCBUSY)
81-
;
82-
#endif
64+
void Adafruit_USBD_Device::attach(void)
65+
{
66+
USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH;
8367
}
8468

85-
uint8_t load_serial_number(uint16_t* serial_str)
69+
uint8_t Adafruit_USBD_Device::getSerialDescriptor(uint16_t* serial_str)
8670
{
8771
enum { SERIAL_BYTE_LEN = 16 };
8872

@@ -116,46 +100,71 @@ uint8_t load_serial_number(uint16_t* serial_str)
116100
return sizeof(raw_id)*2;
117101
}
118102

119-
void Adafruit_TinyUSB_Core_init(void)
120-
{
121-
USBDevice.addInterface( (Adafruit_USBD_Interface&) Serial);
122-
USBDevice.setID(USB_VID, USB_PID);
123-
USBDevice.begin();
124103

125-
usb_hardware_init();
104+
extern "C"
105+
{
126106

127-
// Init tinyusb stack
128-
tusb_init();
107+
// running tinyusb background task if yield()
108+
void yield(void)
109+
{
110+
tud_task();
111+
tud_cdc_write_flush();
129112
}
130113

131-
void Adafruit_TinyUSB_Core_touch1200(void)
132-
{
133-
initiateReset(250);
134114
}
135115

136116
//--------------------------------------------------------------------+
137-
//
117+
// Helpers
138118
//--------------------------------------------------------------------+
139119

140-
void Adafruit_USBD_Device::detach(void)
120+
// Init usb hardware when starting up. Softdevice is not enabled yet
121+
static void usb_hardware_init(void)
141122
{
142-
USB->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH;
143-
}
123+
#ifdef PIN_LED_TXL
124+
// txLEDPulse = 0;
125+
pinMode(PIN_LED_TXL, OUTPUT);
126+
digitalWrite(PIN_LED_TXL, HIGH);
127+
#endif
144128

145-
void Adafruit_USBD_Device::attach(void)
146-
{
147-
USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH;
148-
}
129+
#ifdef PIN_LED_RXL
130+
// rxLEDPulse = 0;
131+
pinMode(PIN_LED_RXL, OUTPUT);
132+
digitalWrite(PIN_LED_RXL, HIGH);
133+
#endif
149134

150-
extern "C"
151-
{
135+
/* Enable USB clock */
136+
#if defined(__SAMD51__)
137+
MCLK->APBBMASK.reg |= MCLK_APBBMASK_USB;
138+
MCLK->AHBMASK.reg |= MCLK_AHBMASK_USB;
152139

153-
void yield(void)
154-
{
155-
tud_task();
156-
tud_cdc_write_flush();
157-
}
140+
// Set up the USB DP/DN pins
141+
PORT->Group[0].PINCFG[PIN_PA24H_USB_DM].bit.PMUXEN = 1;
142+
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24H_USB_DM & 0x01u)));
143+
PORT->Group[0].PMUX[PIN_PA24H_USB_DM/2].reg |= MUX_PA24H_USB_DM << (4 * (PIN_PA24H_USB_DM & 0x01u));
144+
PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1;
145+
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u)));
146+
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u));
147+
148+
149+
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
150+
#else
151+
PM->APBBMASK.reg |= PM_APBBMASK_USB;
158152

153+
// Set up the USB DP/DN pins
154+
PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1;
155+
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u)));
156+
PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u));
157+
PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1;
158+
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u)));
159+
PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u));
160+
161+
// Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference)
162+
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(6) | // Generic Clock Multiplexer 6
163+
GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source
164+
GCLK_CLKCTRL_CLKEN;
165+
while (GCLK->STATUS.bit.SYNCBUSY)
166+
;
167+
#endif
159168
}
160169

161170
#endif // USE_TINYUSB

0 commit comments

Comments
 (0)