@@ -24,62 +24,47 @@ void __attribute__((weak)) _on_1200_bps() {
2424 NVIC_SystemReset ();
2525}
2626
27- void arduino::SerialUSB_::_baudChangeHandler ()
28- {
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)
27+ void arduino::SerialUSB_::_baudChangeHandler (const struct device *dev, uint32_t rate)
3728{
3829 (void )dev; // unused
3930 if (rate == 1200 ) {
31+ k_sleep (K_MSEC (100 ));
4032 usb_disable ();
33+ k_sleep (K_MSEC (10 ));
4134 _on_1200_bps ();
4235 }
4336}
4437
4538#if defined(CONFIG_USB_DEVICE_STACK_NEXT)
4639
47- extern " C" {
48- #include < zephyr/usb/usbd.h>
49- struct usbd_context *usbd_init_device (usbd_msg_cb_t msg_cb);
40+ int arduino::SerialUSB_::usb_disable () {
41+ return usbd_disable (Serial._usbd );
5042}
5143
52- struct usbd_context *_usbd;
53-
54- int usb_disable () {
55- return usbd_disable (_usbd);
56- }
57-
58- static void usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg)
44+ void arduino::SerialUSB_::usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg)
5945{
60- if (usbd_can_detect_vbus (ctx)) {
61- if (msg->type == USBD_MSG_VBUS_READY) {
62- usbd_enable (ctx);
63- }
64-
65- if (msg->type == USBD_MSG_VBUS_REMOVED) {
66- usbd_disable (ctx);
67- }
68- }
46+ if (usbd_can_detect_vbus (ctx)) {
47+ if (msg->type == USBD_MSG_VBUS_READY) {
48+ usbd_enable (ctx);
49+ }
50+
51+ if (msg->type == USBD_MSG_VBUS_REMOVED) {
52+ usbd_disable (ctx);
53+ }
54+ }
6955
70- if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
56+ if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
7157 uint32_t baudrate;
72- uart_line_ctrl_get (ctx-> dev , UART_LINE_CTRL_BAUD_RATE, &baudrate);
73- _baudChangeHandler (nullptr , baudrate);
74- }
58+ uart_line_ctrl_get (Serial. uart , UART_LINE_CTRL_BAUD_RATE, &baudrate);
59+ Serial. _baudChangeHandler (nullptr , baudrate);
60+ }
7561}
7662
77- static int enable_usb_device_next (void )
63+ int arduino::SerialUSB_:: enable_usb_device_next (void )
7864{
7965 int err;
8066
81- // _usbd = usbd_init_device(usbd_next_cb);
82- _usbd = usbd_init_device (nullptr );
67+ _usbd = usbd_init_device (arduino::SerialUSB_::usbd_next_cb);
8368 if (_usbd == NULL ) {
8469 return -ENODEV;
8570 }
@@ -94,22 +79,14 @@ static int enable_usb_device_next(void)
9479}
9580#endif /* defined(CONFIG_USB_DEVICE_STACK_NEXT) */
9681
97- void arduino::SerialUSB_::_baudChangeDispatch (struct k_timer *timer) {
98- arduino::SerialUSB_* dev = (arduino::SerialUSB_*)k_timer_user_data_get (timer);
99- dev->_baudChangeHandler ();
100- }
101-
102-
10382void arduino::SerialUSB_::begin (unsigned long baudrate, uint16_t config) {
10483 if (!started) {
10584 #ifndef CONFIG_USB_DEVICE_STACK_NEXT
10685 usb_enable (NULL );
10786 #ifndef CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT
108- k_timer_init (&baud_timer, SerialUSB_::_baudChangeDispatch, NULL );
109- k_timer_user_data_set (&baud_timer, this );
110- k_timer_start (&baud_timer, K_MSEC (100 ), K_MSEC (100 ));
87+ #warning "Can't read CDC baud change, please enable CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT"
11188 #else
112- cdc_acm_dte_rate_callback_set (usb_dev, ::_baudChangeHandler);
89+ cdc_acm_dte_rate_callback_set (usb_dev, SerialUSB_ ::_baudChangeHandler);
11390 #endif
11491 #else
11592 enable_usb_device_next ();
0 commit comments