@@ -24,62 +24,47 @@ void __attribute__((weak)) _on_1200_bps() {
24
24
NVIC_SystemReset ();
25
25
}
26
26
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)
37
28
{
38
29
(void )dev; // unused
39
30
if (rate == 1200 ) {
31
+ k_sleep (K_MSEC (100 ));
40
32
usb_disable ();
33
+ k_sleep (K_MSEC (10 ));
41
34
_on_1200_bps ();
42
35
}
43
36
}
44
37
45
38
#if defined(CONFIG_USB_DEVICE_STACK_NEXT)
46
39
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 );
50
42
}
51
43
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)
59
45
{
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
+ }
69
55
70
- if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
56
+ if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
71
57
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
+ }
75
61
}
76
62
77
- static int enable_usb_device_next (void )
63
+ int arduino::SerialUSB_:: enable_usb_device_next (void )
78
64
{
79
65
int err;
80
66
81
- // _usbd = usbd_init_device(usbd_next_cb);
82
- _usbd = usbd_init_device (nullptr );
67
+ _usbd = usbd_init_device (arduino::SerialUSB_::usbd_next_cb);
83
68
if (_usbd == NULL ) {
84
69
return -ENODEV;
85
70
}
@@ -94,22 +79,14 @@ static int enable_usb_device_next(void)
94
79
}
95
80
#endif /* defined(CONFIG_USB_DEVICE_STACK_NEXT) */
96
81
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
-
103
82
void arduino::SerialUSB_::begin (unsigned long baudrate, uint16_t config) {
104
83
if (!started) {
105
84
#ifndef CONFIG_USB_DEVICE_STACK_NEXT
106
85
usb_enable (NULL );
107
86
#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"
111
88
#else
112
- cdc_acm_dte_rate_callback_set (usb_dev, ::_baudChangeHandler);
89
+ cdc_acm_dte_rate_callback_set (usb_dev, SerialUSB_ ::_baudChangeHandler);
113
90
#endif
114
91
#else
115
92
enable_usb_device_next ();
0 commit comments