@@ -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 (const struct device * dev , void * user_data ){
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,14 +53,15 @@ static void uart_fifo_callback(const struct device *dev, void * user_data){
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-
62- params -> uart_dev = device_get_binding ("CDC_ACM_0" );
63- 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 ) {
6465 printk ("CDC ACM device not found\n" );
6566 return false;
6667 }
@@ -71,13 +72,15 @@ bool zephyr_transport_open(struct uxrCustomTransport * transport){
7172 return false;
7273 }
7374
75+ uart_dev = (const struct device * )transport -> args ;
7476 ring_buf_init (& out_ringbuf , sizeof (uart_out_buffer ), uart_out_buffer );
7577 ring_buf_init (& in_ringbuf , sizeof (uart_in_buffer ), uart_out_buffer );
7678
7779 printk ("Waiting for agent connection\n" );
7880
7981 while (true) {
80- 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 );
8184 if (dtr ) {
8285 break ;
8386 } else {
@@ -89,47 +92,46 @@ bool zephyr_transport_open(struct uxrCustomTransport * transport){
8992 printk ("Serial port connected!\n" );
9093
9194 /* They are optional, we use them to test the interrupt endpoint */
92- 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 );
9396 if (ret ) {
9497 printk ("Failed to set DCD, ret code %d\n" , ret );
9598 }
9699
97- 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 );
98101 if (ret ) {
99102 printk ("Failed to set DSR, ret code %d\n" , ret );
100103 }
101104
102105 /* Wait 1 sec for the host to do all settings */
103106 k_busy_wait (1000 * 1000 );
104107
105- 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 );
106109 if (ret ) {
107110 printk ("Failed to get baudrate, ret code %d\n" , ret );
108111 }
109112
110- uart_irq_callback_set (params -> uart_dev , uart_fifo_callback );
113+ uart_irq_callback_set (uart_dev , uart_fifo_callback );
111114
112115 /* Enable rx interrupts */
113- uart_irq_rx_enable (params -> uart_dev );
116+ uart_irq_rx_enable (uart_dev );
114117
115118 return true;
116119}
117120
118121bool zephyr_transport_close (struct uxrCustomTransport * transport ){
119- zephyr_transport_params_t * params = (zephyr_transport_params_t * ) transport -> args ;
120- (void ) params ;
122+ (void )transport ;
121123
122124 return true;
123125}
124126
125127size_t zephyr_transport_write (struct uxrCustomTransport * transport , const uint8_t * buf , size_t len , uint8_t * err ){
126- zephyr_transport_params_t * params = (zephyr_transport_params_t * ) transport -> args ;
128+ const struct device * uart_dev = (const struct device * ) transport -> args ;
127129
128130 size_t wrote ;
129131
130132 wrote = ring_buf_put (& out_ringbuf , buf , len );
131-
132- uart_irq_tx_enable (params -> uart_dev );
133+
134+ uart_irq_tx_enable (uart_dev );
133135
134136 while (!ring_buf_is_empty (& out_ringbuf )){
135137 k_sleep (K_MSEC (5 ));
@@ -139,7 +141,7 @@ size_t zephyr_transport_write(struct uxrCustomTransport* transport, const uint8_
139141}
140142
141143size_t zephyr_transport_read (struct uxrCustomTransport * transport , uint8_t * buf , size_t len , int timeout , uint8_t * err ){
142- zephyr_transport_params_t * params = (zephyr_transport_params_t * ) transport -> args ;
144+ const struct device * uart_dev = (const struct device * ) transport -> args ;
143145
144146 size_t read = 0 ;
145147 int spent_time = 0 ;
@@ -149,9 +151,9 @@ size_t zephyr_transport_read(struct uxrCustomTransport* transport, uint8_t* buf,
149151 spent_time ++ ;
150152 }
151153
152- uart_irq_rx_disable (params -> uart_dev );
154+ uart_irq_rx_disable (uart_dev );
153155 read = ring_buf_get (& in_ringbuf , buf , len );
154- uart_irq_rx_enable (params -> uart_dev );
156+ uart_irq_rx_enable (uart_dev );
155157
156158 return read ;
157159}
0 commit comments