blob: 1aebe9e2030277f7f0938bec2398215caa4230e9 [file] [log] [blame]
/*
* Copyright (c) 2022 Trackunit Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/types.h>
#include <zephyr/device.h>
#include <zephyr/drivers/uart.h>
#include <zephyr/sys/ring_buffer.h>
#include <zephyr/sys/atomic.h>
#include <zephyr/modem/pipe.h>
#ifndef ZEPHYR_MODEM_BACKEND_UART_
#define ZEPHYR_MODEM_BACKEND_UART_
#ifdef __cplusplus
extern "C" {
#endif
struct modem_backend_uart_isr {
struct ring_buf receive_rdb[2];
struct ring_buf transmit_rb;
atomic_t transmit_buf_len;
uint8_t receive_rdb_used;
uint32_t transmit_buf_put_limit;
};
struct modem_backend_uart_async {
uint8_t *receive_bufs[2];
uint32_t receive_buf_size;
struct ring_buf receive_rdb[2];
uint8_t *transmit_buf;
uint32_t transmit_buf_size;
struct k_work rx_disabled_work;
atomic_t state;
};
struct modem_backend_uart {
const struct device *uart;
struct modem_pipe pipe;
struct k_work receive_ready_work;
union {
struct modem_backend_uart_isr isr;
struct modem_backend_uart_async async;
};
};
struct modem_backend_uart_config {
const struct device *uart;
uint8_t *receive_buf;
uint32_t receive_buf_size;
uint8_t *transmit_buf;
uint32_t transmit_buf_size;
};
struct modem_pipe *modem_backend_uart_init(struct modem_backend_uart *backend,
const struct modem_backend_uart_config *config);
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_MODEM_BACKEND_UART_ */