Lines Matching refs:sh_uart

33 	struct shell_uart_async *sh_uart = (struct shell_uart_async *)user_data;  in async_callback()  local
37 k_sem_give(&sh_uart->tx_sem); in async_callback()
40 uart_async_rx_on_rdy(&sh_uart->async_rx, evt->data.rx.buf, evt->data.rx.len); in async_callback()
41 sh_uart->common.handler(SHELL_TRANSPORT_EVT_RX_RDY, sh_uart->common.context); in async_callback()
45 uint8_t *buf = uart_async_rx_buf_req(&sh_uart->async_rx); in async_callback()
46 size_t len = uart_async_rx_get_buf_len(&sh_uart->async_rx); in async_callback()
52 uart_async_rx_on_buf_rel(&sh_uart->async_rx, buf); in async_callback()
55 atomic_inc(&sh_uart->pending_rx_req); in async_callback()
61 uart_async_rx_on_buf_rel(&sh_uart->async_rx, evt->data.rx_buf.buf); in async_callback()
70 static void uart_rx_handle(const struct device *dev, struct shell_uart_int_driven *sh_uart) in uart_rx_handle() argument
77 struct smp_shell_data *const smp = &sh_uart->common.smp; in uart_rx_handle()
81 len = ring_buf_put_claim(&sh_uart->rx_ringbuf, &data, in uart_rx_handle()
82 sh_uart->rx_ringbuf.size); in uart_rx_handle()
108 int err = ring_buf_put_finish(&sh_uart->rx_ringbuf, rd_len); in uart_rx_handle()
130 sh_uart->common.handler(SHELL_TRANSPORT_EVT_RX_RDY, sh_uart->common.context); in uart_rx_handle()
156 struct shell_uart_int_driven *sh_uart = k_timer_user_data_get(timer); in dtr_timer_handler() local
158 if (!uart_dtr_check(sh_uart->common.dev)) { in dtr_timer_handler()
164 uart_irq_tx_enable(sh_uart->common.dev); in dtr_timer_handler()
167 static void uart_tx_handle(const struct device *dev, struct shell_uart_int_driven *sh_uart) in uart_tx_handle() argument
175 k_timer_start(&sh_uart->dtr_timer, K_MSEC(100), K_MSEC(100)); in uart_tx_handle()
179 len = ring_buf_get_claim(&sh_uart->tx_ringbuf, (uint8_t **)&data, in uart_tx_handle()
180 sh_uart->tx_ringbuf.size); in uart_tx_handle()
185 err = ring_buf_get_finish(&sh_uart->tx_ringbuf, len); in uart_tx_handle()
190 sh_uart->tx_busy = 0; in uart_tx_handle()
193 sh_uart->common.handler(SHELL_TRANSPORT_EVT_TX_RDY, sh_uart->common.context); in uart_tx_handle()
198 struct shell_uart_int_driven *sh_uart = (struct shell_uart_int_driven *)user_data; in uart_callback() local
203 uart_rx_handle(dev, sh_uart); in uart_callback()
207 uart_tx_handle(dev, sh_uart); in uart_callback()
211 static void irq_init(struct shell_uart_int_driven *sh_uart) in irq_init() argument
213 const struct device *dev = sh_uart->common.dev; in irq_init()
215 ring_buf_init(&sh_uart->rx_ringbuf, CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE, in irq_init()
216 sh_uart->rx_buf); in irq_init()
217 ring_buf_init(&sh_uart->tx_ringbuf, CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE, in irq_init()
218 sh_uart->tx_buf); in irq_init()
219 sh_uart->tx_busy = 0; in irq_init()
220 uart_irq_callback_user_data_set(dev, uart_callback, (void *)sh_uart); in irq_init()
224 k_timer_init(&sh_uart->dtr_timer, dtr_timer_handler, NULL); in irq_init()
225 k_timer_user_data_set(&sh_uart->dtr_timer, (void *)sh_uart); in irq_init()
234 static void async_init(struct shell_uart_async *sh_uart) in async_init() argument
236 const struct device *dev = sh_uart->common.dev; in async_init()
237 struct uart_async_rx *async_rx = &sh_uart->async_rx; in async_init()
240 sh_uart->async_rx_config = (struct uart_async_rx_config){ in async_init()
241 .buffer = sh_uart->rx_data, in async_init()
246 k_sem_init(&sh_uart->tx_sem, 0, 1); in async_init()
248 err = uart_async_rx_init(async_rx, &sh_uart->async_rx_config); in async_init()
254 err = uart_callback_set(dev, async_callback, (void *)sh_uart); in async_init()
266 struct shell_uart_polling *sh_uart = k_timer_user_data_get(timer); in polling_rx_timeout_handler() local
268 while (uart_poll_in(sh_uart->common.dev, &c) == 0) { in polling_rx_timeout_handler()
269 if (ring_buf_put(&sh_uart->rx_ringbuf, &c, 1) == 0U) { in polling_rx_timeout_handler()
273 sh_uart->common.handler(SHELL_TRANSPORT_EVT_RX_RDY, sh_uart->common.context); in polling_rx_timeout_handler()
277 static void polling_init(struct shell_uart_polling *sh_uart) in polling_init() argument
279 k_timer_init(&sh_uart->rx_timer, polling_rx_timeout_handler, NULL); in polling_init()
280 k_timer_user_data_set(&sh_uart->rx_timer, (void *)sh_uart); in polling_init()
281 k_timer_start(&sh_uart->rx_timer, RX_POLL_PERIOD, RX_POLL_PERIOD); in polling_init()
283 ring_buf_init(&sh_uart->rx_ringbuf, CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE, in polling_init()
284 sh_uart->rx_buf); in polling_init()
314 static void irq_uninit(struct shell_uart_int_driven *sh_uart) in irq_uninit() argument
316 const struct device *dev = sh_uart->common.dev; in irq_uninit()
318 k_timer_stop(&sh_uart->dtr_timer); in irq_uninit()
323 static void async_uninit(struct shell_uart_async *sh_uart) in async_uninit() argument
327 static void polling_uninit(struct shell_uart_polling *sh_uart) in polling_uninit() argument
329 k_timer_stop(&sh_uart->rx_timer); in polling_uninit()
347 struct shell_uart_common *sh_uart = (struct shell_uart_common *)transport->ctx; in enable() local
349 sh_uart->blocking_tx = in enable()
353 uart_irq_tx_disable(sh_uart->dev); in enable()
359 static int polling_write(struct shell_uart_common *sh_uart, in polling_write() argument
365 uart_poll_out(sh_uart->dev, data8[i]); in polling_write()
370 sh_uart->handler(SHELL_TRANSPORT_EVT_TX_RDY, sh_uart->context); in polling_write()
375 static int irq_write(struct shell_uart_int_driven *sh_uart, in irq_write() argument
378 *cnt = ring_buf_put(&sh_uart->tx_ringbuf, data, length); in irq_write()
380 if (atomic_set(&sh_uart->tx_busy, 1) == 0) { in irq_write()
381 uart_irq_tx_enable(sh_uart->common.dev); in irq_write()
387 static int async_write(struct shell_uart_async *sh_uart, in async_write() argument
392 err = uart_tx(sh_uart->common.dev, data, length, SYS_FOREVER_US); in async_write()
398 err = k_sem_take(&sh_uart->tx_sem, K_FOREVER); in async_write()
401 sh_uart->common.handler(SHELL_TRANSPORT_EVT_TX_RDY, sh_uart->common.context); in async_write()
409 struct shell_uart_common *sh_uart = (struct shell_uart_common *)transport->ctx; in write_uart() local
411 if (IS_ENABLED(CONFIG_SHELL_BACKEND_SERIAL_API_POLLING) || sh_uart->blocking_tx) { in write_uart()
412 return polling_write(sh_uart, data, length, cnt); in write_uart()
420 static int irq_read(struct shell_uart_int_driven *sh_uart, in irq_read() argument
423 *cnt = ring_buf_get(&sh_uart->rx_ringbuf, data, length); in irq_read()
428 static int polling_read(struct shell_uart_polling *sh_uart, in polling_read() argument
431 *cnt = ring_buf_get(&sh_uart->rx_ringbuf, data, length); in polling_read()
436 static int async_read(struct shell_uart_async *sh_uart, in async_read() argument
441 struct uart_async_rx *async_rx = &sh_uart->async_rx; in async_read()
445 struct smp_shell_data *const smp = &sh_uart->common.smp; in async_read()
461 if (sh_uart->pending_rx_req && buf_available) { in async_read()
467 atomic_dec(&sh_uart->pending_rx_req); in async_read()
468 err = uart_rx_buf_rsp(sh_uart->common.dev, buf, len); in async_read()
472 sh_uart->pending_rx_req = 0; in async_read()
473 err = rx_enable(sh_uart->common.dev, buf, len); in async_read()
502 struct shell_uart_common *sh_uart = (struct shell_uart_common *)transport->ctx; in update() local
504 smp_shell_process(&sh_uart->smp); in update()