12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /*
- * Copyright (c) 2017 Linaro Limited.
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #include <zephyr.h>
- #include <device.h>
- #include <console/console.h>
- #include <console/tty.h>
- #include <drivers/uart.h>
- static struct tty_serial console_serial;
- static uint8_t console_rxbuf[CONFIG_CONSOLE_GETCHAR_BUFSIZE];
- static uint8_t console_txbuf[CONFIG_CONSOLE_PUTCHAR_BUFSIZE];
- ssize_t console_write(void *dummy, const void *buf, size_t size)
- {
- ARG_UNUSED(dummy);
- return tty_write(&console_serial, buf, size);
- }
- ssize_t console_read(void *dummy, void *buf, size_t size)
- {
- ARG_UNUSED(dummy);
- return tty_read(&console_serial, buf, size);
- }
- int console_putchar(char c)
- {
- return tty_write(&console_serial, &c, 1);
- }
- int console_getchar(void)
- {
- uint8_t c;
- int res;
- res = tty_read(&console_serial, &c, 1);
- if (res < 0) {
- return res;
- }
- return c;
- }
- int console_init(void)
- {
- const struct device *uart_dev;
- int ret;
- uart_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_console));
- if (!device_is_ready(uart_dev)) {
- return -ENODEV;
- }
- ret = tty_init(&console_serial, uart_dev);
- if (ret) {
- return ret;
- }
- /* Checks device driver supports for interrupt driven data transfers. */
- if (CONFIG_CONSOLE_GETCHAR_BUFSIZE + CONFIG_CONSOLE_PUTCHAR_BUFSIZE) {
- const struct uart_driver_api *api =
- (const struct uart_driver_api *)uart_dev->api;
- if (!api->irq_callback_set) {
- return -ENOTSUP;
- }
- }
- tty_set_tx_buf(&console_serial, console_txbuf, sizeof(console_txbuf));
- tty_set_rx_buf(&console_serial, console_rxbuf, sizeof(console_rxbuf));
- return 0;
- }
|