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

170 lines
5.3 KiB
C
Executable File

/****************************************************************************
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_SG_EXT_API_H_
#define _IOT_SG_EXT_API_H_
#include "iot_uart_api.h"
#include "iot_utils_api.h"
#ifdef __cplusplus
extern "C" {
#endif
#define IOT_SG_EXT_PROTO_ID_645_97 1
#define IOT_SG_EXT_PROTO_ID_645_07 2
#define IOT_SG_EXT_PROTO_ID_69845 3
/** Invalid threshold flag. */
#define IOT_SG_EXT_INVALID_THRD (-1)
/* ext common command sub id */
#define IOT_SG_EXT_SID_DEFAULT (0x0)
/* sub_id of configuring a uart port. */
#define IOT_SG_EXT_SID_UART_CFG (0x1)
/* sub_id of configuring msdu enable. */
#define IOT_SG_EXT_SID_MSDU_FWD_ENABLE (0x2)
/* ext common message id */
#define IOT_SG_EXT_MID_UART_DATA_FROM_CUS (0x00)
#define IOT_SG_EXT_MID_UART_DATA_FROM_SG (0x01)
#define IOT_SG_EXT_MID_COMMAND (0x02)
#define IOT_SG_EXT_MID_TRANS_MSDU_FROM_SG (0x03)
#define IOT_SG_EXT_MID_TRANS_MSDU_FROM_CUS (0x04)
#define IOT_SG_EXT_MID_MSDU_SEND (0x05)
/* msdu send type */
/* unicast packet */
#define IOT_SG_EXT_CUS_TYPE_UNICAST (0x01)
/* proxy broadcast */
#define IOT_SG_EXT_CUS_TYPE_BCAST (0x03)
/* whole network broadcast */
#define IOT_SG_EXT_CUS_TYPE_BCAST_ALL (0x06)
/* priority definition */
#define IOT_SG_EXT_CUS_PRO_MAX (0x03)
/* local default retry count */
#define IOT_SG_EXT_CUS_LOCAL_RETRY_CNT (0)
/* whole network broadcast max retry count */
#define IOT_SG_EXT_CUS_BCAST_ALL_MAX_RETRY_CNT (3)
/* uart data channel, for local protocol */
#define IOT_SG_EXT_UART_DATA_CCTT (0x00)
#define IOT_SG_EXT_UART_DATA_CUS (0x03)
/* query command result */
#define IOT_SG_EXT_QRY_RESULT_SUCCESS (0)
#define IOT_SG_EXT_QRY_RESULT_FAIL (1)
/* uart data channel convert for cco*/
#define IOT_SG_EXT_UART_CHNN_SET(src, channel) \
do { \
(src) &= ~0x06; \
(src) |= (channel << 1); \
} while(0)
#define IOT_SG_EXT_UART_CHNN_GET(data) ((data & 0x06) >> 1)
/* uart data full frame convert */
#define IOT_SG_EXT_UART_FULL_FRAME_SET(src) (src |= 0x01)
#define IOT_SG_EXT_UART_FULL_FRAME_GET(src) (src &= 0x01)
/** Only cus-app -> sg-app need this. */
enum _iot_sg_ext_data_frame_status {
/** This packet of data is a part of a full frame. */
IOT_SG_EXT_DF_PART,
/** This packet of data is a full frame. */
IOT_SG_EXT_DF_FULL
};
#pragma pack(push) // save the pack status
#pragma pack(1) // 1 byte align
typedef struct _iot_sg_ext_header {
/** message id, enum iot_sg_message_id_e. */
uint8_t mid;
/**
* IOT_SG_EXT_MID_COMMAND:
* sub_id.
* IOT_SG_EXT_MID_UART_DATA_FROM_CUS:
* bit0 - ull_frame flag.
* bit1-bit2 - channel.
*/
uint8_t arg;
/** reserved bytes. */
uint8_t rsv[2];
/** data pointer */
uint8_t data[0];
} iot_sg_ext_header_t;
typedef struct _iot_sg_ext_uart {
/** baud rate */
uint32_t baudrate;
/**
* threshold for receive timeout.IOT_SG_EXT_INVALID_THRD means ignore this.
*/
uint32_t thd_rx_tm;
/**
* threshold for receive fifo full.IOT_SG_EXT_INVALID_THRD means
* ignore this.
*/
uint32_t thd_rx_ful;
/** parity. see IOT_UART_PARITY_XXX */
uint8_t parity;
/** length of data. see IOT_UART_DLEN_X_BITS */
uint8_t data;
/** stop bit. see IOT_UART_STOP_XX_BITS */
uint8_t stop;
/** stands for if 'fmt' valid. 1 : valid, 0 : invalid. */
uint8_t fmt_valid;
/** the format structure of the frame */
iot_frame_fmt fmt;
} iot_sg_ext_uart_t;
typedef struct _iot_sg_ext_cus_msdu_fwd_enable {
/* enable msdu handle */
uint8_t enable;
} iot_sg_ext_cus_msdu_fwd_enable_t;
typedef struct _iot_sg_ext_cus_msdu_send_data {
/* dest mac addr, big - endian */
uint8_t dest_mac[IOT_MAC_ADDR_LEN];
/* msg send type, see IOT_SG_EXT_CUS_TYPE_XXX */
uint8_t msg_type;
/* msg priority, see IOT_SG_EXT_CUS_PRO_XXX */
uint8_t pro;
/* msg retry count, see IOT_SG_EXT_CUS_XXX */
uint8_t retry_cnt;
/* msdu data length */
uint16_t len;
/* msdu data */
uint8_t data[0];
} iot_sg_ext_cus_msdu_send_data_t;
typedef struct _iot_sg_ext_rsp_result {
/* query command result, see IOT_SG_EXT_QRY_RESULT_XXX */
uint8_t result;
} iot_sg_ext_rsp_result_t;
#pragma pack(pop) // restore the pack status
/** 4 byte reserved for header. */
#define IOT_SG_EXT_HEADROOM (sizeof(iot_sg_ext_header_t) + 10)
#ifdef __cplusplus
}
#endif
#endif /* _IOT_SG_EXT_API_H_ */