Skip to content

Commit 516cf5f

Browse files
author
Kei
committed
Modify usbd for CommXEL.
1 parent e17428d commit 516cf5f

File tree

5 files changed

+98
-21
lines changed

5 files changed

+98
-21
lines changed

boards.txt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ menu.upload_method=Upload method
1515

1616
XELNetwork.name=XELNetwork
1717

18-
XELNetwork.build.vid=0x0483
1918
XELNetwork.build.core=arduino
2019
XELNetwork.build.board=XELNetwork
2120
XELNetwork.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -32,7 +31,7 @@ XELNetwork.menu.pnum.SensorXEL.build.product_line=STM32L151xBA
3231
XELNetwork.menu.pnum.SensorXEL.build.variant=XELNetwork_SensorXEL
3332
XELNetwork.menu.pnum.SensorXEL.build.flash_offset=0x3200
3433
XELNetwork.menu.pnum.SensorXEL.build.cmsis_lib_gcc=arm_cortexM3l_math
35-
XELNetwork.menu.pnum.SensorXEL.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DSERIAL_TX_BUFFER_SIZE=1024 -DSERIAL_RX_BUFFER_SIZE=1024
34+
XELNetwork.menu.pnum.SensorXEL.build.extra_flags=-D{build.product_line} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DSERIAL_TX_BUFFER_SIZE=1024 -DSERIAL_RX_BUFFER_SIZE=1024
3635
XELNetwork.menu.pnum.SensorXEL.bootloader.tool = stm32flash
3736
XELNetwork.menu.pnum.SensorXEL.bootloader.file = sensorXel_boot.bin
3837

@@ -48,7 +47,7 @@ XELNetwork.menu.pnum.PowerXEL.build.product_line=STM32L151xBA
4847
XELNetwork.menu.pnum.PowerXEL.build.variant=XELNetwork_PowerXEL
4948
XELNetwork.menu.pnum.PowerXEL.build.flash_offset=0x3200
5049
XELNetwork.menu.pnum.PowerXEL.build.cmsis_lib_gcc=arm_cortexM3l_math
51-
XELNetwork.menu.pnum.PowerXEL.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DSERIAL_TX_BUFFER_SIZE=1024 -DSERIAL_RX_BUFFER_SIZE=1024
50+
XELNetwork.menu.pnum.PowerXEL.build.extra_flags=-D{build.product_line} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DSERIAL_TX_BUFFER_SIZE=1024 -DSERIAL_RX_BUFFER_SIZE=1024
5251
XELNetwork.menu.pnum.PowerXEL.bootloader.tool = stm32flash
5352
XELNetwork.menu.pnum.PowerXEL.bootloader.file = powerXel_boot.bin
5453

@@ -64,7 +63,7 @@ XELNetwork.menu.pnum.PowerXEL.bootloader.file = powerXel_boot.bin
6463
#XELNetwork.menu.pnum.SensorXEL_revE.build.variant=XELNetwork_SensorXEL_revE
6564
#XELNetwork.menu.pnum.SensorXEL_revE.build.flash_offset=0x3200
6665
#XELNetwork.menu.pnum.SensorXEL_revE.build.cmsis_lib_gcc=arm_cortexM3l_math
67-
#XELNetwork.menu.pnum.SensorXEL_revE.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DSERIAL_TX_BUFFER_SIZE=1024 -DSERIAL_RX_BUFFER_SIZE=1024
66+
#XELNetwork.menu.pnum.SensorXEL_revE.build.extra_flags=-D{build.product_line} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DSERIAL_TX_BUFFER_SIZE=1024 -DSERIAL_RX_BUFFER_SIZE=1024
6867
#XELNetwork.menu.pnum.SensorXEL_revE.bootloader.tool = stm32flash
6968
#XELNetwork.menu.pnum.SensorXEL_revE.bootloader.file = sensorXel_boot_revE.bin
7069

@@ -81,7 +80,10 @@ XELNetwork.menu.pnum.CommXEL.build.product_line=STM32F746xx
8180
XELNetwork.menu.pnum.CommXEL.build.variant=XELNetwork_CommXEL
8281
XELNetwork.menu.pnum.CommXEL.build.flash_offset=0x40200
8382
XELNetwork.menu.pnum.CommXEL.build.cmsis_lib_gcc=arm_cortexM7lfsp_math
84-
XELNetwork.menu.pnum.CommXEL.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -DVECT_TAB_OFFSET={build.flash_offset} -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0xFFF1 -DUSB_PRODUCT="ROBOTIS" -DHAL_PCD_MODULE_ENABLED -DSERIAL_TX_BUFFER_SIZE=4096 -DSERIAL_RX_BUFFER_SIZE=4096
83+
XELNetwork.menu.pnum.CommXEL.build.vid=0xFFF1
84+
XELNetwork.menu.pnum.CommXEL.build.pid=0xFF48
85+
XELNetwork.menu.pnum.CommXEL.build.usb_manufacturer="ROBOTIS"
86+
XELNetwork.menu.pnum.CommXEL.build.extra_flags=-D{build.product_line} -DVECT_TAB_OFFSET={build.flash_offset} -DUSBD_USE_CDC {build.usb_flags} {build.xSerial} -DSERIAL_TX_BUFFER_SIZE=4096 -DSERIAL_RX_BUFFER_SIZE=4096
8587
XELNetwork.menu.pnum.CommXEL.bootloader.tool = dfu_util
8688
XELNetwork.menu.pnum.CommXEL.bootloader.file = commXel_boot.bin
8789

@@ -100,6 +102,20 @@ XELNetwork.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_
100102
XELNetwork.menu.xserial.disabled=Disabled (no Serial support)
101103
XELNetwork.menu.xserial.disabled.build.xSerial=
102104

105+
# USB connectivity
106+
#XELNetwork.menu.usb.none=None
107+
#XELNetwork.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
108+
#XELNetwork.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
109+
#XELNetwork.menu.usb.CDC=CDC (no generic 'Serial')
110+
#XELNetwork.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
111+
#XELNetwork.menu.usb.HID=HID (keyboard and mouse)
112+
#XELNetwork.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
113+
#XELNetwork.menu.xusb.FS=Low/Full Speed
114+
#XELNetwork.menu.xusb.HS=High Speed
115+
#XELNetwork.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
116+
#XELNetwork.menu.xusb.HSFS=High Speed in Full Speed mode
117+
#XELNetwork.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
118+
103119
# Optimizations
104120
XELNetwork.menu.opt.osstd=Smallest (-Os default)
105121
XELNetwork.menu.opt.oslto=Smallest (-Os) with LTO

cores/arduino/stm32/usb/cdc/usbd_cdc_if.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@
2525
#include "usbd_cdc_if.h"
2626
#include "bootloader.h"
2727

28+
#if defined(ARDUINO_CommXEL)
29+
#include "stm32f7xx_hal.h"
30+
bool enable_auto_reset = true;
31+
uint8_t CDC_Reset_Status = 0;
32+
const uint32_t RESET_FLAG_BAUDRATE = 1200;
33+
const char *JUMP_BOOT_STR = "RESET XELNETWORK";
34+
#endif
35+
2836
#ifdef USE_USB_HS
2937
#define CDC_MAX_PACKET_SIZE USB_OTG_HS_MAX_PACKET_SIZE
3038
#elif defined(USB_OTG_FS) || defined(USB_OTG_FS_MAX_PACKET_SIZE)
@@ -170,6 +178,14 @@ static int8_t USBD_CDC_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
170178
linecoding.format = pbuf[4];
171179
linecoding.paritytype = pbuf[5];
172180
linecoding.datatype = pbuf[6];
181+
182+
#if defined(ARDUINO_CommXEL)
183+
if( linecoding.bitrate == RESET_FLAG_BAUDRATE ){
184+
if(enable_auto_reset == true){
185+
CDC_Reset_Status = 1;
186+
}
187+
}
188+
#endif
173189
break;
174190

175191
case CDC_GET_LINE_CODING:
@@ -233,6 +249,31 @@ static int8_t USBD_CDC_Receive(uint8_t *Buf, uint32_t *Len)
233249
/* It always contains required amount of free space for writing */
234250
CDC_ReceiveQueue_CommitBlock(&ReceiveQueue, (uint16_t)(*Len));
235251
receivePended = false;
252+
253+
#if defined(ARDUINO_CommXEL)
254+
if( CDC_Reset_Status == 1 ){
255+
uint32_t str_len = strlen(JUMP_BOOT_STR);
256+
CDC_Reset_Status = 0;
257+
258+
if( *Len >= str_len ){
259+
uint32_t i;
260+
for( i=0; i<str_len; i++ )
261+
{
262+
if( JUMP_BOOT_STR[i] != Buf[i] ) break;
263+
}
264+
265+
if( i == str_len ){
266+
IWDG_HandleTypeDef IwdgHandle;
267+
IwdgHandle.Instance = IWDG;
268+
IwdgHandle.Init.Prescaler = IWDG_PRESCALER_32; // 32Khz/32 = 1Khz(1ms)
269+
IwdgHandle.Init.Reload = 10;
270+
271+
HAL_IWDG_Init(&IwdgHandle);
272+
}
273+
}
274+
}
275+
#endif
276+
236277
/* If enough space in the queue for a full buffer then continue receive */
237278
if (!CDC_resume_receive()) {
238279
USBD_CDC_ClearBuffer(&hUSBD_Device_CDC);

cores/arduino/stm32/usb/usbd_desc.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
#define USBD_LANGID_STRING 0x409 /* 1033 US.S English */
4040

4141
#ifdef USBD_USE_HID_COMPOSITE
42+
#ifndef USBD_CLASS_PID
4243
#define USBD_CLASS_PID 0x5711
44+
#endif
4345
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(USB_PRODUCT, "HID in HS Mode")
4446
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(USB_PRODUCT, "HID in FS Mode")
4547
#define USBD_CLASS_CONFIGURATION_HS_STRING CONCATS(USB_PRODUCT, "HID Config")
@@ -49,7 +51,9 @@
4951
#endif /* USBD_USE_HID_COMPOSITE */
5052

5153
#ifdef USBD_USE_CDC
54+
#ifndef USBD_CLASS_PID
5255
#define USBD_CLASS_PID 0x5740
56+
#endif
5357
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(USB_PRODUCT, "CDC in HS Mode")
5458
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(USB_PRODUCT, "CDC in FS Mode")
5559
#define USBD_CLASS_CONFIGURATION_HS_STRING CONCATS(USB_PRODUCT, "CDC Config")
@@ -145,6 +149,20 @@ __ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = {
145149
uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] = {
146150
USB_SIZ_STRING_SERIAL,
147151
USB_DESC_TYPE_STRING,
152+
#if defined(ARDUINO_CommXEL)
153+
'0', 0, // 2
154+
'0', 0, // 4
155+
'0', 0, // 6
156+
'0', 0, // 8
157+
'0', 0, // 10
158+
'0', 0, // 12
159+
'0', 0, // 14
160+
'0', 0, // 16
161+
'0', 0, // 18
162+
'0', 0, // 20
163+
'0', 0, // 22
164+
'0', 0 // 24
165+
#endif
148166
};
149167

150168
__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
@@ -220,7 +238,9 @@ uint8_t *USBD_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
220238
*length = USB_SIZ_STRING_SERIAL;
221239

222240
/* Update the serial number string descriptor with the data from the unique ID*/
241+
#if !defined(ARDUINO_CommXEL)
223242
Get_SerialNum();
243+
#endif
224244

225245
return (uint8_t *)USBD_StringSerial;
226246
}

platform.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-5.5.1.path}/CMSIS/DSP/Lib/GCC
6969

7070
# USB Flags
7171
# ---------
72-
build.usb_flags=-DUSBCON {build.usb_speed} -DUSBD_VID={build.vid} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT="{build.board}"' -DHAL_PCD_MODULE_ENABLED
72+
build.usb_flags=-DUSBCON {build.usb_speed} -DUSBD_VID={build.vid} -DUSBD_CLASS_PID={build.pid} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT="{build.board}"' -DHAL_PCD_MODULE_ENABLED
7373

7474
# Default usb manufacturer will be replaced at compile time using
7575
# numeric vendor ID if available or by board's specific value.

variants/XELNetwork_CommXEL/variant.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,26 +37,26 @@ extern "C" {
3737
#define PB6 5 //DXL_TX
3838
#define PB8 6 //DIR_PIN
3939

40-
#define PC12 8 //BUTTON
41-
#define PC11 9 //LED
40+
#define PC12 7 //BUTTON
41+
#define PC11 8 //LED
4242

43-
#define PA1 10 //ETH_REF_CLK
43+
#define PA1 9 //ETH_REF_CLK
44+
#define PA2 10 //ETH_MDIO
4445
#define PA7 11 //ETH_CRS_DV
45-
#define PA2 12 //ETH_MDIO
46-
#define PC1 13 //ETH_MDC
47-
#define PC0 14 //ETH_RXER
48-
#define PC4 15 //ETH_RXD0
49-
#define PC5 16 //ETH_RXD1
50-
#define PB11 17 //ETH_RX_EN
51-
#define PB12 18 //ETH_TXD0
52-
#define PB13 19 //ETH_TXD1
46+
#define PC1 12 //ETH_MDC
47+
#define PC0 13 //ETH_RXER
48+
#define PC4 14 //ETH_RXD0
49+
#define PC5 15 //ETH_RXD1
50+
#define PB11 16 //ETH_RX_EN
51+
#define PB12 17 //ETH_TXD0
52+
#define PB13 18 //ETH_TXD1
5353

5454

5555
// This must be a literal
56-
#define NUM_DIGITAL_PINS 20
56+
#define NUM_DIGITAL_PINS 19
5757
// This must be a literal with a value less than or equal to to MAX_ANALOG_INPUTS
5858
#define NUM_ANALOG_INPUTS 0
59-
#define NUM_ANALOG_FIRST 20
59+
#define NUM_ANALOG_FIRST 19
6060

6161
// On-board LED pin number
6262
#define LED_BUILTIN PC11
@@ -81,10 +81,10 @@ extern "C" {
8181
//#define SERIAL_UART_INSTANCE 1
8282
#define ENABLE_SERIALUSB
8383

84-
8584
/* Extra HAL modules */
8685
#define HAL_ETH_MODULE_ENABLED
87-
//#define HAL_PCD_MODULE_ENABLED
86+
#define HAL_IWDG_MODULE_ENABLED
87+
// #define HAL_PCD_MODULE_ENABLED
8888

8989
#ifdef __cplusplus
9090
} // extern "C"

0 commit comments

Comments
 (0)