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,11 @@ 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+ return usbd_disable (Serial._usbd );
4933}
5034
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) {
35+ void arduino::SerialUSB_::usbd_next_cb (struct usbd_context *const ctx, const struct usbd_msg *msg) {
5836 if (usbd_can_detect_vbus (ctx)) {
5937 if (msg->type == USBD_MSG_VBUS_READY) {
6038 usbd_enable (ctx);
@@ -67,16 +45,15 @@ static void usbd_next_cb(struct usbd_context *const ctx, const struct usbd_msg *
6745
6846 if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING) {
6947 uint32_t baudrate;
70- uart_line_ctrl_get (ctx-> dev , UART_LINE_CTRL_BAUD_RATE, &baudrate);
71- _baudChangeHandler (nullptr , baudrate);
48+ uart_line_ctrl_get (Serial. uart , UART_LINE_CTRL_BAUD_RATE, &baudrate);
49+ Serial. baudChangeHandler (nullptr , baudrate);
7250 }
7351}
7452
75- static int enable_usb_device_next (void ) {
53+ int arduino::SerialUSB_:: enable_usb_device_next (void ) {
7654 int err;
7755
78- // _usbd = usbd_init_device(usbd_next_cb);
79- _usbd = usbd_init_device (nullptr );
56+ _usbd = usbd_init_device (arduino::SerialUSB_::usbd_next_cb);
8057 if (_usbd == NULL ) {
8158 return -ENODEV;
8259 }
@@ -91,21 +68,14 @@ static int enable_usb_device_next(void) {
9168}
9269#endif /* defined(CONFIG_USB_DEVICE_STACK_NEXT) */
9370
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- 9971void arduino::SerialUSB_::begin (unsigned long baudrate, uint16_t config) {
10072 if (!started) {
10173#ifndef CONFIG_USB_DEVICE_STACK_NEXT
10274 usb_enable (NULL );
10375#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 ));
76+ #warning "Can't read CDC baud change, please enable CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT"
10777#else
108- cdc_acm_dte_rate_callback_set (usb_dev, ::_baudChangeHandler );
78+ cdc_acm_dte_rate_callback_set (usb_dev, SerialUSB_::baudChangeHandler );
10979#endif
11080#else
11181 enable_usb_device_next ();
0 commit comments