Files
kunlun/export/inc/uart/iot_uart_api.h
2024-09-28 14:24:04 +08:00

335 lines
11 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef IOT_UART_API_H
#define IOT_UART_API_H
#include "os_types_api.h"
#include "iot_pkt_api.h"
#include "iot_frame_parse_api.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \defgroup UART_APIs UART APIs
* @brief WQ30x1 UART API
*/
/** @addtogroup UART_APIs
* @{
*/
#ifdef _MSC_VER
#define UART_HANDLE_INVALID_VALUE INVALID_HANDLE_VALUE
#else
#define UART_HANDLE_INVALID_VALUE (int)-1
#endif
/* uart type */
#define UART_TYPE_MIN 0
#define UART_PRINT UART_TYPE_MIN
#define UART_CLI_PORT 1
#define UART_METER_PORT 2
#define UART_IR_PORT 3
#define UART_RS485_PORT 4
#define UART_EXT_CHIP 5 /* communicate with external chip by uart. */
#define UART_EXT_BT_PORT 6
#define UART_EXT_GPS_PORT 7
#define UART_TSFM_PORT UART_CLI_PORT /* TSFM PORT for STA only. */
#define UART_VP_COM1 8 /* Virtual serial port, connecting STM32 COM1 */
#define UART_VP_COM2 9 /* Virtual serial port, connecting STM32 COM2 */
#define UART_RS485_PORT_2 10
/* iot module, stamps package, goldenfinger package */
#define UART_CUS_PORT_0 11
#define UART_CUS_PORT_1 12
#define UART_PRINT_BBCPU 13
#define UART_ICC_PORT 14 /* Interkernel communication */
#define UART_CCTT_4G_PORT 15
#define UART_CCTT_CFG_PORT 16
#define UART_TYPE_MAX UART_CCTT_CFG_PORT
/* UART port id */
#define IOT_UART_PORT0 0
#define IOT_UART_PORT1 1
#define IOT_UART_PORT2 2
#define IOT_UART_PORT3 3
#define IOT_UART_PORT4 4
#define IOT_UART_PORT5 5
#define IOT_UART_PORT6 6
#define IOT_UART_PORT7 7
#define IOT_UART_PORT8 8
#define IOT_UART_PORT9 9
#define IOT_UART_PORT10 10
#define IOT_UART_PORT11 11
#define IOT_UART_PORT_SUPP_MAX 12
/* UART parity configuration */
#define IOT_UART_PARITY_NONE 0
#define IOT_UART_PARITY_ODD 1
#define IOT_UART_PARITY_EVEN 2
#define IOT_UART_PARITY_MARK 3
#define IOT_UART_PARITY_SPACE 4
#define IOT_UART_DLEN_5_BITS 5
#define IOT_UART_DLEN_6_BITS 6
#define IOT_UART_DLEN_7_BITS 7
#define IOT_UART_DLEN_8_BITS 8
#define IOT_UART_STOP_1_BITS 1
#define IOT_UART_STOP_1_5_BITS 2
#define IOT_UART_STOP_2_BITS 3
#define UART_THR_FLOWCTRL 0
#define UART_THR_RXTIMEOUT 1
#define UART_THR_RXFULL 2
#define UART_THR_TXEMPTY 3
#define UART_THR_NO_FMT_TIMEOUT 4
#define UART_THR_RXIDLE 5
#define UART_HW_FLOWCTRL_DISABLE 0
#define UART_HW_FLOWCTRL_RTS 1
#define UART_HW_FLOWCTRL_CTS 2
#define UART_HW_FLOWCTRL_CTS_RTS 3
#define IOT_UART_BANDRATE_DEFAULT 115200
#define IOT_UART_DEFAULT_THDVALUE (20) /* ms */
#define IOT_UART_MAX_THDVALUE (1000) /* ms */
/**
* @brief (*iot_uart_recv_func_t)() - the callback when
* the uart receive the data. if the iot_frame_fmt param is null, uart task
* call this call immediately after receive any data from uart interface, if
* iot_frame_fmt param is not null, uart task parse the frame, and call this
* func with the full frame, is_full_frame is true for this case, but if the
* timeout is happned, this func will be called with the all of buffer in buffer
* cache, and is_full_frame is false.
* @param buffer: recv buffer
* @param buffer_len: recv buffer length
* @param is_full_frame: is full frame
* @invalid_data_len the premable code may not at the beginning of buffer,
* please use buffer+invalid_data_len to get the first buffer
*/
typedef void(*iot_uart_recv_func_t)(uint8_t* buffer, uint32_t buffer_len,
bool_t is_full_frame, uint32_t invalid_data_len);
typedef void* iot_uart_h;
/**
* @brief iot_uart_open() - open a uart port
* @param uart_port: the define UART_xxxx_PORT
* 1 - reserved for cli,
* 2 - reserved for meter ...
* @param iot_uart_recv_func_t: once get a full frame, this func
* will be invoked.
* @param receive_buffer_len: the buffer size for receive a full frame
* @param p_frame_fmt: the format structor of a full frame, if it
* is null,recv_func will be invoked once
* receive any uart message.
*
* @return NULL -- for failure case
* @return othersie -- iot uart handle
*/
iot_uart_h iot_uart_open(const uint8_t uart_port, iot_uart_recv_func_t func,
uint32_t receive_buffer_len, iot_frame_fmt *p_frame_fmt);
/**
* @brief iot_uart_set_frame() - set the frame format, the receive buffer
* will be empty when call this function
* @param uart_h: uart handle
* @param p_frame_fmt: the format structor of the frame
*
* @return false -- for failure case
* @return true -- iot uart handle
*/
bool_t iot_uart_set_frame(iot_uart_h uart_h, iot_frame_fmt *p_frame_fmt);
/**
* @brief iot_uart_set_config() - set the uart paramter.
* will be empty when call this function
* @param uart_h: uart handle
* @param baud: baudrate
* @param parity: see IOT_UART_PARITY_XXX
* @param data: data bits
* @param stop: stop flag
*
* @return false -- for failure case
* @return true -- iot uart handle
*/
bool_t iot_uart_set_config(iot_uart_h uart_h, uint32_t baud, uint8_t parity,
uint8_t data, uint8_t stop);
/**
* @brief iot_uart_send() - send the buffer by uart, it is a asyn func.
* @param uart_h: uart handle
* @param pkt: the iot pkt buffer.
* @param p_frame_fmt: the format structor of the frame
*
* @return ERR_OK(0) -- success
* @return otherwise -- error code.
*/
uint32_t iot_uart_send(iot_uart_h uart_h, iot_pkt_t *pkt,
iot_frame_fmt *p_frame_fmt);
/**
* @brief iot_uart_close() - close uart port
* @param uart_handle: uart handle
*/
void iot_uart_close(iot_uart_h uart_handle);
/**
* @brief iot_uart_set_flwctrl() - Set flow-control on a port..
* @param uart_h: uart handle
* @param type: Flow-control type. See UART_HW_FLOWCTRL_XX .
* @param thrd: Value of threshold for if RTS enabled.
*
* @return true -- success
* @return false -- error.
*/
bool_t iot_uart_set_flwctrl(iot_uart_h uart_h, uint32_t type, uint32_t thrd);
/**
* @brief iot_uart_set_brk() - Set break param on a port..
* @param uart_h: uart handle
* @param value: enable/disable uart break.
*
* @return true -- success
* @return false -- error.
*/
bool_t iot_uart_set_brk(iot_uart_h uart_h, uint32_t value);
/**
* @brief iot_uart_set_threshold() - Set threshold.
* @param uart_h: uart handle
* @param type: Threshold type.See UART_THR_XX.
* @param thrd: Value of threshold.
*
* @return true -- success
* @return false -- error.
*/
bool_t iot_uart_set_threshold(iot_uart_h uart_h, uint32_t type, uint32_t thrd);
/**
* @brief iot_dbg_uart_set_config() - set the debug uart paramter.
* @param baud: baudrate
* @param parity: see IOT_UART_PARITY_XXX
* @param data: data bits
* @param stop: stop flag
*/
void iot_dbg_uart_set_config(uint32_t baud, uint8_t parity,
uint8_t data, uint8_t stop);
/**
* @brief iot_dbg_uart_set_port() - set the debug uart port and paramter.
* @param port: debug uart port: UART_PTx
* @param baud: baudrate
* @param parity: see IOT_UART_PARITY_XXX
* @param data: data bits
* @param stop: stop flag
*/
void iot_dbg_uart_set_port(uint8_t port, uint32_t baud,
uint8_t parity, uint8_t data, uint8_t stop);
/**
* @brief iot_uart_set_pin() - set the uart RX/TX pin.
* will be empty when call this function
* @param port: uart port
* @param rx_pin: RX GPIO
* @param tx_pin: TX GPIO
*/
void iot_uart_set_pin(uint8_t port, uint8_t rx_pin, uint8_t tx_pin);
/**
* @brief iot_uart_reassign_pin() - reassign the uart RX/TX pins.
* User-defined uart rx/tx pins instead of using pins
* definition in the OEM.
* @param port: uart port
* @param rx_pin: RX GPIO
* @param tx_pin: TX GPIO
*
* @return true -- success
* @return false -- error.
* Example usage:
// Uart will use default pins from OEM when no call iot_uart_reassign_pin.
// Open uart may warning rx/tx pins error when uart rx and tx pin all invalid.
#define IOT_UART_BUF_SIZE 1024
void uart_recv_func(uint8_t* p_buffer, uint32_t buffer_len,
bool_t is_full_frame, uint32_t invalid_data_len)
{
// TODO
return;
}
int uart_task_function( void )
{
uint8_t uart_port = iot_board_get_uart(UART_CUS_PORT_0);
iot_uart_h uart_h;
iot_uart_reassign_pin(uart_port, 35, 34);
// wait some time for pins set
uart_h = iot_uart_open(uart_port, uart_recv_func,
IOT_UART_BUF_SIZE, NULL);
if (uart_h == NULL) {
iot_printf("open uart port %d error.\n", uart_port);
return ERR_FAIL;
}
return ERR_OK;
}
*/
bool_t iot_uart_reassign_pin(uint8_t uart_port, uint8_t rx_pin, uint8_t tx_pin);
/**
* @brief iot_uart_get_max_port_num() - Get max uart port num, inn + ext + vp.
*
* @return the num of max uart
*/
uint8_t iot_uart_get_max_port_num(void);
/**
* @brief iot_uart_enable_RS485() - enable uart rs485 mode.
* @param uart_h: uart handle
* @param dir_gpio: gpio number of rs485 transport direction ctrl.
*
* @return true -- success
* @return false -- error.
*/
bool_t iot_uart_enable_rs485(iot_uart_h uart_h, int dir_gpio);
/**
* @brief iot_uart_disable_RS485() - disable uart rs485 mode.
* @param uart_h: uart handle
*
* @return true -- success
* @return false -- error.
*/
bool_t iot_uart_disable_rs485(iot_uart_h uart_h);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* IOT_UART_API_H */