335 lines
11 KiB
C
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 */
|