@@ -23,61 +23,46 @@ void __attribute__((weak)) _on_1200_bps() {
2323 NVIC_SystemReset ();
2424}
2525
26- void arduino::SerialUSB_::_baudChangeHandler ()
27- {
28- uart_line_ctrl_get (uart, UART_LINE_CTRL_BAUD_RATE, &baudrate);
29- if (baudrate == 1200 ) {
30- usb_disable ();
31- _on_1200_bps ();
32- }
33- }
34-
35- static void _baudChangeHandler (const struct device *dev, uint32_t rate)
26+ void arduino::SerialUSB_::_baudChangeHandler (const struct device *dev, uint32_t rate)
3627{
3728 if (rate == 1200 ) {
29+ k_sleep (K_MSEC (100 ));
3830 usb_disable ();
31+ k_sleep (K_MSEC (10 ));
3932 _on_1200_bps ();
4033 }
4134}
4235
4336#if defined(CONFIG_USB_DEVICE_STACK_NEXT)
4437
45- extern " C" {
46- #include < zephyr/usb/usbd.h>
47- struct usbd_context *usbd_init_device (usbd_msg_cb_t msg_cb);
38+ int arduino::SerialUSB_::usb_disable () {
39+ return usbd_disable (Serial._usbd );
4840}
4941
50- struct usbd_context *_usbd;
51-
52- int usb_disable () {
53- return usbd_disable (_usbd);
54- }
55-
56- static void usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg)
42+ void arduino::SerialUSB_::usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg)
5743{
58- if (usbd_can_detect_vbus (ctx)) {
59- if (msg->type == USBD_MSG_VBUS_READY) {
60- usbd_enable (ctx);
61- }
62-
63- if (msg->type == USBD_MSG_VBUS_REMOVED) {
64- usbd_disable (ctx);
65- }
66- }
44+ if (usbd_can_detect_vbus (ctx)) {
45+ if (msg->type == USBD_MSG_VBUS_READY) {
46+ usbd_enable (ctx);
47+ }
48+
49+ if (msg->type == USBD_MSG_VBUS_REMOVED) {
50+ usbd_disable (ctx);
51+ }
52+ }
6753
68- if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
54+ if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
6955 uint32_t baudrate;
70- uart_line_ctrl_get (ctx-> dev , UART_LINE_CTRL_BAUD_RATE, &baudrate);
71- _baudChangeHandler (nullptr , baudrate);
72- }
56+ uart_line_ctrl_get (Serial. uart , UART_LINE_CTRL_BAUD_RATE, &baudrate);
57+ Serial. _baudChangeHandler (nullptr , baudrate);
58+ }
7359}
7460
75- static int enable_usb_device_next (void )
61+ int arduino::SerialUSB_:: enable_usb_device_next (void )
7662{
7763 int err;
7864
79- // _usbd = usbd_init_device(usbd_next_cb);
80- _usbd = usbd_init_device (nullptr );
65+ _usbd = usbd_init_device (arduino::SerialUSB_::usbd_next_cb);
8166 if (_usbd == NULL ) {
8267 return -ENODEV;
8368 }
@@ -92,22 +77,14 @@ static int enable_usb_device_next(void)
9277}
9378#endif /* defined(CONFIG_USB_DEVICE_STACK_NEXT) */
9479
95- void arduino::SerialUSB_::_baudChangeDispatch (struct k_timer *timer) {
96- arduino::SerialUSB_* dev = (arduino::SerialUSB_*)k_timer_user_data_get (timer);
97- dev->_baudChangeHandler ();
98- }
99-
100-
10180void arduino::SerialUSB_::begin (unsigned long baudrate, uint16_t config) {
10281 if (!started) {
10382 #ifndef CONFIG_USB_DEVICE_STACK_NEXT
10483 usb_enable (NULL );
10584 #ifndef CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT
106- k_timer_init (&baud_timer, SerialUSB_::_baudChangeDispatch, NULL );
107- k_timer_user_data_set (&baud_timer, this );
108- k_timer_start (&baud_timer, K_MSEC (100 ), K_MSEC (100 ));
85+ #warning "Can't read CDC baud change, please enable CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT"
10986 #else
110- cdc_acm_dte_rate_callback_set (usb_dev, ::_baudChangeHandler);
87+ cdc_acm_dte_rate_callback_set (usb_dev, SerialUSB_ ::_baudChangeHandler);
11188 #endif
11289 #else
11390 enable_usb_device_next ();
0 commit comments