* Copyright (c) 2021-2022 Bestechnic (Shanghai) Co., Ltd. All rights reserved.
*
* This file is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
#ifndef __UART_BES_H__
#define __UART_BES_H__
#include "uart_if.h"
#include "uart_core.h"
#include "hal_uart.h"
#include "kfifo.h"
#include "osal_sem.h"
#ifdef __cplusplus
extern "C" {
#endif
#define UART_DEV_SERVICE_NAME_PREFIX "HDF_PLATFORM_UART%d"
#define MAX_DEV_NAME_SIZE 32
struct UartResource {
uint32_t num;
uint32_t baudRate;
uint32_t wLen;
uint32_t parity;
uint32_t stopBit;
bool txDMA;
bool rxDMA;
};
enum UartDeviceState {
UART_DEVICE_UNINITIALIZED = 0x0u,
UART_DEVICE_INITIALIZED = 0x1u,
};
struct UART_CTX_OBJ {
uint8_t *buffer;
bool txDMA;
bool rxDMA;
bool isBlock;
struct kfifo fifo;
struct OsalSem rxSem;
struct OsalSem txSem;
void (*UartDmaRxHandler)(uint32_t xferSize, int dmaError, union HAL_UART_IRQ_T status);
void (*UartDmaTxHandler)(uint32_t xferSize, int dmaError);
};
struct UartDevice {
struct IDeviceIoService ioService;
struct UartResource resource;
struct HAL_UART_CFG_T config;
uint32_t uartId;
bool initFlag;
uint32_t transMode;
};
enum {
UART_READ = 0,
UART_WRITE
};
int32_t UartDispatch(struct HdfDeviceIoClient *client, int cmdId, struct HdfSBuf *data, struct HdfSBuf *reply);
#ifdef __cplusplus
}
#endif
#endif