@@ -22,7 +22,7 @@ char uart_out_buffer[RING_BUF_SIZE];
2222
2323struct ring_buf out_ringbuf , in_ringbuf ;
2424
25- static void uart_fifo_callback (struct device * dev ){
25+ static void uart_fifo_callback (const struct device * dev , void * user_data ){
2626 while (uart_irq_update (dev ) && uart_irq_is_pending (dev )) {
2727 if (uart_irq_rx_ready (dev )) {
2828 int recv_len ;
@@ -53,13 +53,15 @@ static void uart_fifo_callback(struct device *dev){
5353}
5454
5555bool zephyr_transport_open (struct uxrCustomTransport * transport ){
56- zephyr_transport_params_t * params = (zephyr_transport_params_t * ) transport -> args ;
57-
5856 int ret ;
5957 uint32_t baudrate , dtr = 0U ;
58+ const struct device * uart_dev ;
6059
61- params -> uart_dev = device_get_binding ("CDC_ACM_0" );
62- if (!params -> uart_dev ) {
60+ /* for serial-usb transport we just override the device pointer
61+ * with USB to use the same interface
62+ */
63+ transport -> args = (void * )device_get_binding ("CDC_ACM_0" );
64+ if (!transport -> args ) {
6365 printk ("CDC ACM device not found\n" );
6466 return false;
6567 }
@@ -70,13 +72,15 @@ bool zephyr_transport_open(struct uxrCustomTransport * transport){
7072 return false;
7173 }
7274
75+ uart_dev = (const struct device * )transport -> args ;
7376 ring_buf_init (& out_ringbuf , sizeof (uart_out_buffer ), uart_out_buffer );
7477 ring_buf_init (& in_ringbuf , sizeof (uart_in_buffer ), uart_out_buffer );
7578
7679 printk ("Waiting for agent connection\n" );
7780
7881 while (true) {
79- uart_line_ctrl_get (params -> uart_dev , UART_LINE_CTRL_DTR , & dtr );
82+
83+ uart_line_ctrl_get (uart_dev , UART_LINE_CTRL_DTR , & dtr );
8084 if (dtr ) {
8185 break ;
8286 } else {
@@ -88,46 +92,46 @@ bool zephyr_transport_open(struct uxrCustomTransport * transport){
8892 printk ("Serial port connected!\n" );
8993
9094 /* They are optional, we use them to test the interrupt endpoint */
91- ret = uart_line_ctrl_set (params -> uart_dev , UART_LINE_CTRL_DCD , 1 );
95+ ret = uart_line_ctrl_set (uart_dev , UART_LINE_CTRL_DCD , 1 );
9296 if (ret ) {
9397 printk ("Failed to set DCD, ret code %d\n" , ret );
9498 }
9599
96- ret = uart_line_ctrl_set (params -> uart_dev , UART_LINE_CTRL_DSR , 1 );
100+ ret = uart_line_ctrl_set (uart_dev , UART_LINE_CTRL_DSR , 1 );
97101 if (ret ) {
98102 printk ("Failed to set DSR, ret code %d\n" , ret );
99103 }
100104
101105 /* Wait 1 sec for the host to do all settings */
102106 k_busy_wait (1000 * 1000 );
103107
104- ret = uart_line_ctrl_get (params -> uart_dev , UART_LINE_CTRL_BAUD_RATE , & baudrate );
108+ ret = uart_line_ctrl_get (uart_dev , UART_LINE_CTRL_BAUD_RATE , & baudrate );
105109 if (ret ) {
106110 printk ("Failed to get baudrate, ret code %d\n" , ret );
107111 }
108112
109- uart_irq_callback_set (params -> uart_dev , uart_fifo_callback );
113+ uart_irq_callback_set (uart_dev , uart_fifo_callback );
110114
111115 /* Enable rx interrupts */
112- uart_irq_rx_enable (params -> uart_dev );
116+ uart_irq_rx_enable (uart_dev );
113117
114118 return true;
115119}
116120
117121bool zephyr_transport_close (struct uxrCustomTransport * transport ){
118- zephyr_transport_params_t * params = ( zephyr_transport_params_t * ) transport -> args ;
122+ ( void ) transport ;
119123
120124 return true;
121125}
122126
123127size_t zephyr_transport_write (struct uxrCustomTransport * transport , const uint8_t * buf , size_t len , uint8_t * err ){
124- zephyr_transport_params_t * params = (zephyr_transport_params_t * ) transport -> args ;
128+ const struct device * uart_dev = (const struct device * ) transport -> args ;
125129
126130 size_t wrote ;
127131
128132 wrote = ring_buf_put (& out_ringbuf , buf , len );
129133
130- uart_irq_tx_enable (params -> uart_dev );
134+ uart_irq_tx_enable (uart_dev );
131135
132136 while (!ring_buf_is_empty (& out_ringbuf )){
133137 k_sleep (K_MSEC (5 ));
@@ -137,7 +141,7 @@ size_t zephyr_transport_write(struct uxrCustomTransport* transport, const uint8_
137141}
138142
139143size_t zephyr_transport_read (struct uxrCustomTransport * transport , uint8_t * buf , size_t len , int timeout , uint8_t * err ){
140- zephyr_transport_params_t * params = (zephyr_transport_params_t * ) transport -> args ;
144+ const struct device * uart_dev = (const struct device * ) transport -> args ;
141145
142146 size_t read = 0 ;
143147 int spent_time = 0 ;
@@ -147,9 +151,9 @@ size_t zephyr_transport_read(struct uxrCustomTransport* transport, uint8_t* buf,
147151 spent_time ++ ;
148152 }
149153
150- uart_irq_rx_disable (params -> uart_dev );
154+ uart_irq_rx_disable (uart_dev );
151155 read = ring_buf_get (& in_ringbuf , buf , len );
152- uart_irq_rx_enable (params -> uart_dev );
156+ uart_irq_rx_enable (uart_dev );
153157
154158 return read ;
155159}
0 commit comments