170 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			170 lines
		
	
	
		
			5.3 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_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_ */
 |