1515const struct device *const usb_dev =
1616 DEVICE_DT_GET (DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), cdc_acm, 0));
1717
18- void usb_status_cb (enum usb_dc_status_code cb_status, const uint8_t *param) {
19- (void )param; // unused
20- if (cb_status == USB_DC_CONFIGURED) {
21- }
22- }
23-
2418void __attribute__ ((weak)) _on_1200_bps() {
2519 NVIC_SystemReset ();
2620}
2721
28- void arduino::SerialUSB_::_baudChangeHandler () {
29- uart_line_ctrl_get (uart, UART_LINE_CTRL_BAUD_RATE, &baudrate);
30- if (baudrate == 1200 ) {
31- usb_disable ();
32- _on_1200_bps ();
33- }
34- }
35-
36- static void _baudChangeHandler (const struct device *dev, uint32_t rate) {
22+ void arduino::SerialUSB_::baudChangeHandler (const struct device *dev, uint32_t rate) {
3723 (void )dev; // unused
3824 if (rate == 1200 ) {
3925 usb_disable ();
@@ -42,19 +28,13 @@ static void _baudChangeHandler(const struct device *dev, uint32_t rate) {
4228}
4329
4430#if defined(CONFIG_USB_DEVICE_STACK_NEXT)
45-
46- extern " C " {
47- # include < zephyr/usb/usbd.h >
48- struct usbd_context * usbd_init_device ( usbd_msg_cb_t msg_cb );
31+ int arduino::SerialUSB_::usb_disable () {
32+ // To avoid Cannot perform port reset: 1200-bps touch: setting DTR to OFF: protocol error
33+ k_sleep ( K_MSEC ( 100 ));
34+ return usbd_disable (Serial. _usbd );
4935}
5036
51- struct usbd_context *_usbd;
52-
53- int usb_disable () {
54- return usbd_disable (_usbd);
55- }
56-
57- static void usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg) {
37+ void arduino::SerialUSB_::usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg) {
5838 if (usbd_can_detect_vbus (ctx)) {
5939 if (msg->type == USBD_MSG_VBUS_READY) {
6040 usbd_enable (ctx);
@@ -67,16 +47,15 @@ static void usbd_next_cb(struct usbd_context *const ctx, const struct usbd_msg *
6747
6848 if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
6949 uint32_t baudrate;
70- uart_line_ctrl_get (ctx-> dev , UART_LINE_CTRL_BAUD_RATE, &baudrate);
71- _baudChangeHandler (nullptr , baudrate);
50+ uart_line_ctrl_get (Serial. uart , UART_LINE_CTRL_BAUD_RATE, &baudrate);
51+ Serial. baudChangeHandler (nullptr , baudrate);
7252 }
7353}
7454
75- static int enable_usb_device_next (void ) {
55+ int arduino::SerialUSB_:: enable_usb_device_next (void ) {
7656 int err;
7757
78- // _usbd = usbd_init_device(usbd_next_cb);
79- _usbd = usbd_init_device (nullptr );
58+ _usbd = usbd_init_device (arduino::SerialUSB_::usbd_next_cb);
8059 if (_usbd == NULL ) {
8160 return -ENODEV;
8261 }
@@ -91,21 +70,14 @@ static int enable_usb_device_next(void) {
9170}
9271#endif /* defined(CONFIG_USB_DEVICE_STACK_NEXT) */
9372
94- void arduino::SerialUSB_::_baudChangeDispatch (struct k_timer *timer) {
95- arduino::SerialUSB_ *dev = (arduino::SerialUSB_ *)k_timer_user_data_get (timer);
96- dev->_baudChangeHandler ();
97- }
98-
9973void arduino::SerialUSB_::begin (unsigned long baudrate, uint16_t config) {
10074 if (!started) {
10175#ifndef CONFIG_USB_DEVICE_STACK_NEXT
10276 usb_enable (NULL );
10377#ifndef CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT
104- k_timer_init (&baud_timer, SerialUSB_::_baudChangeDispatch, NULL );
105- k_timer_user_data_set (&baud_timer, this );
106- k_timer_start (&baud_timer, K_MSEC (100 ), K_MSEC (100 ));
78+ #warning "Can't read CDC baud change, please enable CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT"
10779#else
108- cdc_acm_dte_rate_callback_set (usb_dev, ::_baudChangeHandler );
80+ cdc_acm_dte_rate_callback_set (usb_dev, SerialUSB_::baudChangeHandler );
10981#endif
11082#else
11183 enable_usb_device_next ();
0 commit comments