1250 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			1250 lines
		
	
	
		
			36 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_PLCTXRX_H
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_BROADCAST_MAC_6BYTES   {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define priorities for message to be handle */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_QUEUE_HP           0
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_QUEUE_LP           1
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_QUEUE_MAX_PRIO     2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_LIKE_ID            2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_PSRAM_ENABLE)
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_POOL_SIZE          254
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_POOL_SIZE          64
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TASK_PRIO               7
							 | 
						||
| 
								 | 
							
								/* message type */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_MAC_MSG                 0
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TIMER_MSG               1
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_XMIT_MSG                2
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_CMD_MSG                 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Xmit message ID */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_ID_RECV_MSG             0
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_ID_SEND_MSG             1
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_ID_ACK_MSG              2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* timer message ID */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* data method timer,eg retry */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TIMER_DATA_PATH         1
							 | 
						||
| 
								 | 
							
								/* for plctxrx period action */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TIMER_TXRX_PATH         2
							 | 
						||
| 
								 | 
							
								/* for plctxrx aggr_timeout action */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TIMER_AGGR_PATH         3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* flag in pkt header, show msdu sources moudle */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_MSDU_SRCMODULE_PROTO    0
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_MSDU_SRCMODULE_AT       1
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_MSDU_SRCMODULE_DEV_TEST 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* default unicast send retry interval. unit is ms */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCXRX_RETRY_INTVAL_DEFAULT     500
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* request id, see IOT_PLC_CCO_REQ_ID_XXX */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_CCO_REQ_ID_GET_TOPO     (15)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* aggr timer interval. unit is ms */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_AGGR_TIMER_INTVAL       (200)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* txrx timer interval, print statistic info. one loop, unit is ms */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_TXRX_TIMER_INTVAL       (500)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* indicate how long will the conn_less pkt would be cached */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_CONN_LESS_PKT_SPAN_CNT  (6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* indicatie how many conn_less pkt infor would be stored */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_CONN_LESS_PKT_BUF_CNT   (50)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* indicatie the interval  count for print stastics infor */
							 | 
						||
| 
								 | 
							
								#define IOT_PLCTXRX_STASTIC_PRINT_INTVL_CNT (80)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* every two seconds show signal led state */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_SINGAL_LED_SHOW_INTVAL_CNT  (4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_PSRAM_ENABLE)
							 | 
						||
| 
								 | 
							
								/* Macro to define msdu pkt pool number*/
							 | 
						||
| 
								 | 
							
								#define TXRX_SEND_BUFF_POOL_NUM             36
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								/* Macro to define msdu pkt pool number*/
							 | 
						||
| 
								 | 
							
								#define TXRX_SEND_BUFF_POOL_NUM             6
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Macro to define package size, used by aggregating for proto layer frame*/
							 | 
						||
| 
								 | 
							
								#define TXRX_AGGR_PKT_LEN                   500
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* vendor info in bc entry */
							 | 
						||
| 
								 | 
							
								#define GREE_TIME_DATA_LENGTH               7
							 | 
						||
| 
								 | 
							
								/* magic id for gree outside */
							 | 
						||
| 
								 | 
							
								#define GREE_PASSWD_LENGTH                  6
							 | 
						||
| 
								 | 
							
								/* mac addr len */
							 | 
						||
| 
								 | 
							
								#define MAC_ADDR_3BYTE_LEN                  3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* rate adapt mode */
							 | 
						||
| 
								 | 
							
								/* rate adapt based on packet size  */
							 | 
						||
| 
								 | 
							
								#define GE_PLC_RATE_ADAPT_FIX_MODE          1
							 | 
						||
| 
								 | 
							
								/* rate adapt based on netwoak communication quality  */
							 | 
						||
| 
								 | 
							
								#define GE_PLC_RATE_ADAPT_AUTO_MODE         2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** const, STA DEVs max supported in network */
							 | 
						||
| 
								 | 
							
								#if (PLC_SUPPORT_CCO_ROLE)
							 | 
						||
| 
								 | 
							
								#define STA_DEV_MAX                         800
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define STA_DEV_MAX                         40
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define QUERY_NODE_INFO_MAX_CNT_ONCE        8
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** ge default enable cmd data send to beacon */
							 | 
						||
| 
								 | 
							
								#define ENABLE_GE_DATA_SEND_TO_BEACON       1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_GE_FB_SCAN_BITMAP_SIZE          16
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* length of mac addr enum */
							 | 
						||
| 
								 | 
							
								enum mac_addr_len_e {
							 | 
						||
| 
								 | 
							
								    MAC_ADDR_LEN_2BYTE   = 2,
							 | 
						||
| 
								 | 
							
								    MAC_ADDR_LEN_3BYTE   = 3,
							 | 
						||
| 
								 | 
							
								    MAC_ADDR_LEN_4BYTE   = 4,
							 | 
						||
| 
								 | 
							
								    MAC_ADDR_LEN_6BYTE   = 6,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* list of the command id */
							 | 
						||
| 
								 | 
							
								enum plctxrx_command_id_e
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* mac and device type set/query/resp */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_MAC,
							 | 
						||
| 
								 | 
							
								    /* system clock, borcast in beacon */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_TIME,
							 | 
						||
| 
								 | 
							
								    /* run time and boot cnt/reason */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_BOOTINFO,
							 | 
						||
| 
								 | 
							
								    /* com0 config */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_UART,
							 | 
						||
| 
								 | 
							
								    /* plc network dev topo */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_TOPO,
							 | 
						||
| 
								 | 
							
								#if INCLUDE_AT_COMMAND_MODULE
							 | 
						||
| 
								 | 
							
								    /* at send cmd */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_SEND,
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    /* wl tbl op */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_WHITELIST,
							 | 
						||
| 
								 | 
							
								    /* plc network search */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_FIND_NETWORK,
							 | 
						||
| 
								 | 
							
								    /* plc network join */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_JOIN_NETWORK,
							 | 
						||
| 
								 | 
							
								    /* plc network leave */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_LEAVE_NETWORK,//10
							 | 
						||
| 
								 | 
							
								    /* indication, net status */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_CCO_STATE, /* CCO network up or down indication */
							 | 
						||
| 
								 | 
							
								    /* beacon verder entry */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_VENDOR_INFO,
							 | 
						||
| 
								 | 
							
								    /* sw ver query */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_SWVER,
							 | 
						||
| 
								 | 
							
								    /* systems info qeury */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_SYSTEMINFO,
							 | 
						||
| 
								 | 
							
								    /* plc net info query */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_NET_STS,
							 | 
						||
| 
								 | 
							
								    /* disable wl, start netting */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_START_GROUP_NET,
							 | 
						||
| 
								 | 
							
								    /* enable wl, netted with joined */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_END_GROUP_NET,
							 | 
						||
| 
								 | 
							
								    /* plc txrx sts query */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_TXRX_STS,
							 | 
						||
| 
								 | 
							
								    /* network power set */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_TX_PWR,
							 | 
						||
| 
								 | 
							
								    /* net nid */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_NID, //20
							 | 
						||
| 
								 | 
							
								    /* indication, comm fail */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_COMM_FAULT,
							 | 
						||
| 
								 | 
							
								    /* indication, app start to run */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_GRAPP_REG_CONF,
							 | 
						||
| 
								 | 
							
								    /* remove monitor since leave by itself */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_STA_POS_LEAVE,
							 | 
						||
| 
								 | 
							
								    /* band id */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_BAND_ID,
							 | 
						||
| 
								 | 
							
								    /* beacon verder data entry */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_VENDOR_DATA,
							 | 
						||
| 
								 | 
							
								    /* plc network time base*/
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_NTB,
							 | 
						||
| 
								 | 
							
								    /* frequency band bitmap */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_FB_BITMAP,
							 | 
						||
| 
								 | 
							
								    /* Fixed rate */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_FIXED_RATE,
							 | 
						||
| 
								 | 
							
								    /* plc node info */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_NODE_INFO,
							 | 
						||
| 
								 | 
							
								    /* plc network info */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_NW_INFO,
							 | 
						||
| 
								 | 
							
								    /* set watchdog */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_WDG,
							 | 
						||
| 
								 | 
							
								    /* mode config */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_MODE_CONF,
							 | 
						||
| 
								 | 
							
								    /* reject sta */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_REJECT_STA,
							 | 
						||
| 
								 | 
							
								    /* ... */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    PLCTXRX_CID_MAX
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* operation code */
							 | 
						||
| 
								 | 
							
								enum plctxrx_command_opcode_e
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* command for change the configuration of device. */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_CONFIG,
							 | 
						||
| 
								 | 
							
								    /* response config result error or ok to upper layer */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_CFM,
							 | 
						||
| 
								 | 
							
								    /* command for query the status /configuration /statistics of device. */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_QUERY,
							 | 
						||
| 
								 | 
							
								    /* response query message to upper layer */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_RESPONSE,
							 | 
						||
| 
								 | 
							
								    /* command for simple actions, like PING /REBOOT...
							 | 
						||
| 
								 | 
							
								     * no configuration changed or any information exclude result of
							 | 
						||
| 
								 | 
							
								     * this command response.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_EXECUTE,
							 | 
						||
| 
								 | 
							
								    /* ind message to upper layer */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_INDICATION,
							 | 
						||
| 
								 | 
							
								    /* Received a remote packet. */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_OP_RECEIVE
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* return status of the command. */
							 | 
						||
| 
								 | 
							
								enum plctxrx_command_response_e
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    PLCTXRX_RESP_OK,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_RESP_ERROR,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_RESP_BUSY,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_RESP_UNKNOWN_CMD
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* flag in hdr to mark msdu type. unicast msdu may request receiver reply ack
							 | 
						||
| 
								 | 
							
								   but, ack itself is one msdu. pay attention on mac layer sack.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								typedef enum _msdu_data_type_e{
							 | 
						||
| 
								 | 
							
								    PLCTXRX_TYPE_ACK = 1,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_TYPE_DATA = 2,
							 | 
						||
| 
								 | 
							
								}msdu_data_type_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum _aggr_aband_reason_e{
							 | 
						||
| 
								 | 
							
								    /* vairous aggr fail reason */
							 | 
						||
| 
								 | 
							
								    REASON_DEST_MISMATCH             = 1,
							 | 
						||
| 
								 | 
							
								    REASON_RETRY_CFG_MISMATCH        = 2,
							 | 
						||
| 
								 | 
							
								    REASON_NO_SPACE                  = 3,
							 | 
						||
| 
								 | 
							
								    REASON_TYPE_MISMATCH             = 4,
							 | 
						||
| 
								 | 
							
								    REASON_ACK_OPT_MISMATCH          = 5,
							 | 
						||
| 
								 | 
							
								    REASON_ORG_MAC_MISMATCH          = 6,
							 | 
						||
| 
								 | 
							
								    REASON_SRC_MAC_MISMATCH          = 7,
							 | 
						||
| 
								 | 
							
								    /* connect or connless packet */
							 | 
						||
| 
								 | 
							
								    REASON_SEND_TYPE_FLAG_MISMATCH   = 8,
							 | 
						||
| 
								 | 
							
								}aggr_aband_reason_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* query topo information type */
							 | 
						||
| 
								 | 
							
								enum _topo_info_type_e {
							 | 
						||
| 
								 | 
							
								    TOPO_INFO_TYPE_V0    = 0,
							 | 
						||
| 
								 | 
							
								    TOPO_INFO_TYPE_V1    = 1,
							 | 
						||
| 
								 | 
							
								    TOPO_INFO_TYPE_V_MAX = 0xFF
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* query node information type */
							 | 
						||
| 
								 | 
							
								enum _node_info_type_e {
							 | 
						||
| 
								 | 
							
								    NODE_INFO_TYPE_V1   = 1,
							 | 
						||
| 
								 | 
							
								    NODE_INFO_TYPE_V2   = 2,
							 | 
						||
| 
								 | 
							
								    NODE_INFO_TYPE_V3   = 3,
							 | 
						||
| 
								 | 
							
								    NODE_INFO_TYPE_V4   = 4,
							 | 
						||
| 
								 | 
							
								    NODE_INFO_TYPE_V5   = 5,
							 | 
						||
| 
								 | 
							
								    NODE_INFO_TYPE_V_MAX = 0xFF,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* data rx info from plctxrx layer to protocol layer - structure need pack */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_rx_data_info_t {
							 | 
						||
| 
								 | 
							
								    /* source mac */
							 | 
						||
| 
								 | 
							
								    uint8_t   mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* conn less or normal */
							 | 
						||
| 
								 | 
							
								    bool_t    rx_type;
							 | 
						||
| 
								 | 
							
								    /* reserved, use for 4 byte alignment */
							 | 
						||
| 
								 | 
							
								    uint8_t   resv[3];
							 | 
						||
| 
								 | 
							
								} plctxrx_rx_data_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_net_sts_t {
							 | 
						||
| 
								 | 
							
								    /* source mac */
							 | 
						||
| 
								 | 
							
								    uint8_t   mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* noise factor */
							 | 
						||
| 
								 | 
							
								    uint8_t   nf;
							 | 
						||
| 
								 | 
							
								    /* signal snr */
							 | 
						||
| 
								 | 
							
								    int8_t    snr;
							 | 
						||
| 
								 | 
							
								    /* up link tsf */
							 | 
						||
| 
								 | 
							
								    uint8_t   ul_tf_sr;
							 | 
						||
| 
								 | 
							
								    /* downlink tsf*/
							 | 
						||
| 
								 | 
							
								    uint8_t   dl_tf_sr;
							 | 
						||
| 
								 | 
							
								} plctxrx_net_sts_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cco query net status info and response to mcu */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_net_sts_data_info {
							 | 
						||
| 
								 | 
							
								    uint16_t count;
							 | 
						||
| 
								 | 
							
								    plctxrx_net_sts_t net_sts_data[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_net_sts_data_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* proto layer registed. plctxrx layer used.
							 | 
						||
| 
								 | 
							
								   report network event to proto layer. eg connect,
							 | 
						||
| 
								 | 
							
								   signal change, proxy change, or disconnect */
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* proto_network_event_cb)(iot_pkt_t *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* internal function, aggr proto layer frame to best fit link status,
							 | 
						||
| 
								 | 
							
								   pb size tmi etc. currently only support for gree. TODO, make it more
							 | 
						||
| 
								 | 
							
								   general
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* proto_aggr_fn)(void *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* internal plctxrx layer state anaysis. eg, tx/rx packets.
							 | 
						||
| 
								 | 
							
								   last active timestamp etc..*/
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* PLCTXRX_STATISTIC)(void *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* proto register, txrx used. report vendor beacon info */
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* proto_vendr_cb)(iot_pkt_t *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cid
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* reference to enum plctxrx_command_id_e */
							 | 
						||
| 
								 | 
							
								    uint8_t    cid;
							 | 
						||
| 
								 | 
							
								    /* reference to enum plctxrx_command_opcode_e */
							 | 
						||
| 
								 | 
							
								    uint8_t    opcode;
							 | 
						||
| 
								 | 
							
								} plctxrx_cid_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* the argument for plctxrx command handle. */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_arg
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    plctxrx_cid_t   cid;        /* plctxrx command id. */
							 | 
						||
| 
								 | 
							
								    uint16_t        prio;       /* priority of this command. */
							 | 
						||
| 
								 | 
							
								    uint16_t        dlen;
							 | 
						||
| 
								 | 
							
								    uint16_t        need_ack;   /* if need ack */
							 | 
						||
| 
								 | 
							
								    uint8_t         arg[0];     /* the argument for this command. */
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_arg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_resp_idx
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t        current;/* current index of response frame. */
							 | 
						||
| 
								 | 
							
								    uint16_t        total;  /* total response frames count. */
							 | 
						||
| 
								 | 
							
								} plctxrx_resp_idx_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* response data from down layer to at command. */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_command_response
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    plctxrx_cid_t      cid;  /* response command ID. */
							 | 
						||
| 
								 | 
							
								    plctxrx_resp_idx_t index;/* maybe there are more than one response frames */
							 | 
						||
| 
								 | 
							
								    uint16_t           resp; /* return from executer, reference to enum
							 | 
						||
| 
								 | 
							
								                             * at_command_response_e
							 | 
						||
| 
								 | 
							
								                             */
							 | 
						||
| 
								 | 
							
								    uint16_t           dlen;
							 | 
						||
| 
								 | 
							
								    uint8_t            resv; /* 4 bytes aligned for data[0] */
							 | 
						||
| 
								 | 
							
								    uint8_t            done; /* response done */
							 | 
						||
| 
								 | 
							
								    uint8_t            data[0]; /* response data from down layer. */
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_resp_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* the executer handle in plctxrx commands. */
							 | 
						||
| 
								 | 
							
								typedef void(*plctxrx_handle)(plctxrx_cmd_arg_t *arg);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* the table of plctxrx commands. */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_table
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    plctxrx_handle *handle;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_table_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* device info for sending data - structure need pack */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_dev_info_t {
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_dev_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum _txrx_type_e{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    PLCTXRX_UNICAST   = 1,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_MULITCAST = 2,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_BORADCAST = 3
							 | 
						||
| 
								 | 
							
								} txrx_type_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum _cmd_queue_e {
							 | 
						||
| 
								 | 
							
								    PLCTXRX_FREEQ = 1,
							 | 
						||
| 
								 | 
							
								    PLCTXRX_SAVEQ = 2,
							 | 
						||
| 
								 | 
							
								} cmd_queue_e;
							 | 
						||
| 
								 | 
							
								typedef uint8_t cmd_queue_e_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_command_handle_mac
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint8_t dev_type;
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_mac_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* to fit gree proto, request 8 bytes to present time */
							 | 
						||
| 
								 | 
							
								typedef struct _time_data
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t time[GREE_TIME_DATA_LENGTH];
							 | 
						||
| 
								 | 
							
								} time_data_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_network_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t nid;
							 | 
						||
| 
								 | 
							
								    uint8_t  mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    int8_t   snr;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_network_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_handle_network
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t count;
							 | 
						||
| 
								 | 
							
								    plctxrx_cmd_network_info_t node[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_network_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_join_network
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t nid;
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_join_network_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_joined_network
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t role;
							 | 
						||
| 
								 | 
							
								    uint8_t nid;
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint8_t pco_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_joined_network_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_leave_net
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t cnt;
							 | 
						||
| 
								 | 
							
								    uint8_t mac[0][IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_leave_net_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_reject_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint8_t reason;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_reject_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_cco_sta_ind
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    bool_t  dev_ready;
							 | 
						||
| 
								 | 
							
								    uint8_t nid;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_cco_sta_ind_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_tx_pwr
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t tx_pwr;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_tx_pwr_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_nid
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t nid;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_nid_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_comm_fault_ind
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t type;
							 | 
						||
| 
								 | 
							
								    uint8_t reason;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_comm_fault_ind_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_whitelist
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* action for add or del white list */
							 | 
						||
| 
								 | 
							
								    uint8_t action;
							 | 
						||
| 
								 | 
							
								    uint16_t listcnt;
							 | 
						||
| 
								 | 
							
								    uint8_t maclist[0][IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_whitelist_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_fb_bitmap
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* frequency band bitmap */
							 | 
						||
| 
								 | 
							
								    uint8_t fb_bitmap[IOT_GE_FB_SCAN_BITMAP_SIZE];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_fb_bitmap_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_fix_rate
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* fixed rate mode 0:disable 1:enable */
							 | 
						||
| 
								 | 
							
								    uint8_t fix_rate_mode;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_fix_rate_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_sta_pos_leave_ind
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_sta_pos_leave_ind_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_band_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t band_id;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_band_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_wdg
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* action to set watchdog, 1 to enable. 0 to disable*/
							 | 
						||
| 
								 | 
							
								    uint8_t  action;
							 | 
						||
| 
								 | 
							
								    /* watch dog interval, unit is min, less than 30 minutes is disallowed. */
							 | 
						||
| 
								 | 
							
								    uint16_t interval;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_wdg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_query_topo_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* query topo type */
							 | 
						||
| 
								 | 
							
								    uint8_t    ver;
							 | 
						||
| 
								 | 
							
								    /* query topo start */
							 | 
						||
| 
								 | 
							
								    uint16_t   start;
							 | 
						||
| 
								 | 
							
								    /* query count */
							 | 
						||
| 
								 | 
							
								    uint16_t   cnt;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_query_topo_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma pack(push)  // save the pack status
							 | 
						||
| 
								 | 
							
								#pragma pack(1)     // 1 byte align
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _dev_test_mode_cfg {
							 | 
						||
| 
								 | 
							
								    /* band ID to be configured, see PLC_LIB_FREQ_BAND_X */
							 | 
						||
| 
								 | 
							
								    uint8_t     band_id;
							 | 
						||
| 
								 | 
							
								    /* configuring effective duration, uint is sec */
							 | 
						||
| 
								 | 
							
								    uint8_t     dur;
							 | 
						||
| 
								 | 
							
								    /* the target device ID group that needs to respond to this command.
							 | 
						||
| 
								 | 
							
								     * see IOT_DEV_TEST_TARGET_ID_MSK_XXX.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint32_t    target_id_mask;
							 | 
						||
| 
								 | 
							
								} dev_test_mode_cfg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _protpkt_tx_info_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* the total cnt of sta that will receive the pkt */
							 | 
						||
| 
								 | 
							
								    uint16_t sta_cnt;
							 | 
						||
| 
								 | 
							
								    /* retry interval */
							 | 
						||
| 
								 | 
							
								    uint16_t retry_intvl;
							 | 
						||
| 
								 | 
							
								    /*
							 | 
						||
| 
								 | 
							
								     *  proto set dest by mac. and sta plctxrx only set tei to 1. cco txrx do
							 | 
						||
| 
								 | 
							
								     *  forward
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    /* source mac address */
							 | 
						||
| 
								 | 
							
								    uint8_t  src_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* destination sta mac */
							 | 
						||
| 
								 | 
							
								    uint8_t  dst_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* origin sta MAC */
							 | 
						||
| 
								 | 
							
								    uint8_t  org_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* pkt send type,reference to enum txrx_type_e */
							 | 
						||
| 
								 | 
							
								    uint8_t  send_type;
							 | 
						||
| 
								 | 
							
								    /* indicates if sta need response */
							 | 
						||
| 
								 | 
							
								    bool_t   need_ack;
							 | 
						||
| 
								 | 
							
								    /* retry counter */
							 | 
						||
| 
								 | 
							
								    uint8_t  retry_cnt;
							 | 
						||
| 
								 | 
							
								    /* tx power */
							 | 
						||
| 
								 | 
							
								    uint8_t  txpwr;
							 | 
						||
| 
								 | 
							
								    /* identify msdu pkt comes from proto or at moudle */
							 | 
						||
| 
								 | 
							
								    uint8_t  src_module;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 0: connect packet
							 | 
						||
| 
								 | 
							
								     * 1: connless packet
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint8_t  force_tx_connless;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 0: aggr
							 | 
						||
| 
								 | 
							
								     * 1: not aggr
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint8_t  force_noaggr;
							 | 
						||
| 
								 | 
							
								} protpkt_tx_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* proto pkt element */
							 | 
						||
| 
								 | 
							
								typedef struct _list_node_t {
							 | 
						||
| 
								 | 
							
								    struct _list_node_t *next;
							 | 
						||
| 
								 | 
							
								    uint8_t* data;
							 | 
						||
| 
								 | 
							
								    uint16_t len;
							 | 
						||
| 
								 | 
							
								} list_node_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* list to save proto pkt */
							 | 
						||
| 
								 | 
							
								typedef struct _protpkt_list
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    list_node_t*  list_head;
							 | 
						||
| 
								 | 
							
								    uint16_t      frame_cnt;
							 | 
						||
| 
								 | 
							
								    uint16_t      total_len;
							 | 
						||
| 
								 | 
							
								} protpkt_list_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cmd element (cmd from protocol layer) */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmdsave_node_t {
							 | 
						||
| 
								 | 
							
								    list_node_t  node;
							 | 
						||
| 
								 | 
							
								    /* pointer to iot packet */
							 | 
						||
| 
								 | 
							
								    void *data;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmdsave_node_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cmd list to cache */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmdsave_list_t {
							 | 
						||
| 
								 | 
							
								    list_node_t *first;
							 | 
						||
| 
								 | 
							
								    list_node_t *tail;
							 | 
						||
| 
								 | 
							
								    uint8_t      depth;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmdsave_list_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct plctxrx_command
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    plctxrx_cid_t  cur_cid;
							 | 
						||
| 
								 | 
							
								    bool_t         cmd_running;
							 | 
						||
| 
								 | 
							
								    /* indication current cmd need response cfm to proto */
							 | 
						||
| 
								 | 
							
								    bool_t         need_ack;
							 | 
						||
| 
								 | 
							
								    /* node pool queue for command */
							 | 
						||
| 
								 | 
							
								    plctxrx_cmdsave_list_t free_q;
							 | 
						||
| 
								 | 
							
								    /* command save queue */
							 | 
						||
| 
								 | 
							
								    plctxrx_cmdsave_list_t save_q;
							 | 
						||
| 
								 | 
							
								    /* the table of plctxrx command. */
							 | 
						||
| 
								 | 
							
								    plctxrx_cmd_table_t table;
							 | 
						||
| 
								 | 
							
								} plctxrx_command_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* msdu header at begging of msdu payload. */
							 | 
						||
| 
								 | 
							
								typedef struct _msdu_pkt_hdr {
							 | 
						||
| 
								 | 
							
								    /* 0 means, this is msdu.
							 | 
						||
| 
								 | 
							
								     * non-zero means, remote peer msdu received confirmation seq.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint16_t recvconf_seq;
							 | 
						||
| 
								 | 
							
								    /* msdu sent seq */
							 | 
						||
| 
								 | 
							
								    uint16_t msdusend_seq;
							 | 
						||
| 
								 | 
							
								    /* the total cnt of sta that will receive the pkt */
							 | 
						||
| 
								 | 
							
								    uint8_t  dest_cnt;
							 | 
						||
| 
								 | 
							
								    /* indicating if confirmation is necessary for receivers*/
							 | 
						||
| 
								 | 
							
								    uint8_t need_ack        : 1,
							 | 
						||
| 
								 | 
							
								            aes_encrypt     : 1,
							 | 
						||
| 
								 | 
							
								            aes_padding     : 4,
							 | 
						||
| 
								 | 
							
								            resv            : 2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* identify msdu pkt comes from proto or at moudle */
							 | 
						||
| 
								 | 
							
								    uint8_t src_module;
							 | 
						||
| 
								 | 
							
								    /* below mac are for cco forward msdu from sta to sta */
							 | 
						||
| 
								 | 
							
								    /* src mac */
							 | 
						||
| 
								 | 
							
								    uint8_t src_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* dst mac */
							 | 
						||
| 
								 | 
							
								    uint8_t dst_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* org_mac */
							 | 
						||
| 
								 | 
							
								    uint8_t org_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} msdu_pkt_hdr_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* store the aggred-pkt, need to put into the queue, followeing the ruls: FIFO*/
							 | 
						||
| 
								 | 
							
								typedef struct _prot_pkt_t {
							 | 
						||
| 
								 | 
							
								    /* list node head  */
							 | 
						||
| 
								 | 
							
								    list_node_t    node;
							 | 
						||
| 
								 | 
							
								    /* msdu tx information */
							 | 
						||
| 
								 | 
							
								    protpkt_tx_info_t txinfo;
							 | 
						||
| 
								 | 
							
								    /* msdu sequence */
							 | 
						||
| 
								 | 
							
								    uint16_t msdu_seq;
							 | 
						||
| 
								 | 
							
								    /* payload size */
							 | 
						||
| 
								 | 
							
								    uint16_t msdu_data_len;
							 | 
						||
| 
								 | 
							
								    /* msdu been sent counter zero means new received buffer. non-zero means */
							 | 
						||
| 
								 | 
							
								    uint8_t  send_cnt;
							 | 
						||
| 
								 | 
							
								    /* pkt need a plctxrx level ack */
							 | 
						||
| 
								 | 
							
								    uint8_t ack_flag;
							 | 
						||
| 
								 | 
							
								    /* data buffer */
							 | 
						||
| 
								 | 
							
								    uint8_t  buf[TXRX_AGGR_PKT_LEN];
							 | 
						||
| 
								 | 
							
								} prot_pkt_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _prot_pktq
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    list_node_t*  list_head;
							 | 
						||
| 
								 | 
							
								    /* first in, first out method. add frame in tail. remove from head*/
							 | 
						||
| 
								 | 
							
								    list_node_t*  list_tail;
							 | 
						||
| 
								 | 
							
								    /* the queue depth */
							 | 
						||
| 
								 | 
							
								    uint32_t      depth;
							 | 
						||
| 
								 | 
							
								    /* proto pkt fifo lock */
							 | 
						||
| 
								 | 
							
								    os_mutex_h    lock;
							 | 
						||
| 
								 | 
							
								} prot_pktq_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* topo info v0 */
							 | 
						||
| 
								 | 
							
								typedef struct _topo_info_v0_t {
							 | 
						||
| 
								 | 
							
								    uint8_t             level;
							 | 
						||
| 
								 | 
							
								    uint8_t             mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} topo_info_v0_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* topo info v1 include phase */
							 | 
						||
| 
								 | 
							
								typedef struct _topo_info_v1_t {
							 | 
						||
| 
								 | 
							
								    uint8_t             level;
							 | 
						||
| 
								 | 
							
								    uint8_t             logic_phase;
							 | 
						||
| 
								 | 
							
								    uint8_t             phy_phase;
							 | 
						||
| 
								 | 
							
								    uint8_t             mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} topo_info_v1_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* node info include sta_tei */
							 | 
						||
| 
								 | 
							
								typedef struct _node_info_v1_t {
							 | 
						||
| 
								 | 
							
								    uint8_t         mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint16_t        sta_tei;
							 | 
						||
| 
								 | 
							
								    uint16_t        proxy_tei;
							 | 
						||
| 
								 | 
							
								} node_info_v1_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* node info include dev_type ... */
							 | 
						||
| 
								 | 
							
								typedef struct _node_info_2_t {
							 | 
						||
| 
								 | 
							
								    uint8_t         mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint8_t         ul_tf_sr;
							 | 
						||
| 
								 | 
							
								    uint8_t         dl_tf_sr;
							 | 
						||
| 
								 | 
							
								    uint32_t        build_ver;
							 | 
						||
| 
								 | 
							
								    uint16_t        vendor;
							 | 
						||
| 
								 | 
							
								    uint8_t         dev_type;
							 | 
						||
| 
								 | 
							
								    uint8_t         snr;
							 | 
						||
| 
								 | 
							
								} node_info_v2_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* node info include assoc_rx_cnt ... */
							 | 
						||
| 
								 | 
							
								typedef struct _node_info_v3_t {
							 | 
						||
| 
								 | 
							
								    uint8_t         mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint16_t        assoc_rx_cnt;
							 | 
						||
| 
								 | 
							
								    uint16_t        proxy_chg_accept_cnt;
							 | 
						||
| 
								 | 
							
								    uint32_t        proxy_chg_rx_cnt;
							 | 
						||
| 
								 | 
							
								} node_info_v3_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* node info include in_network_time ... */
							 | 
						||
| 
								 | 
							
								typedef struct _node_info_v4_t {
							 | 
						||
| 
								 | 
							
								    uint8_t         mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint32_t        in_network_time;
							 | 
						||
| 
								 | 
							
								    uint32_t        inactive_time;
							 | 
						||
| 
								 | 
							
								} node_info_v4_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* node info include last_assoc_rx_time ... */
							 | 
						||
| 
								 | 
							
								typedef struct _node_info_v5_t {
							 | 
						||
| 
								 | 
							
								    uint8_t         mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    uint32_t        last_assoc_rx_time;
							 | 
						||
| 
								 | 
							
								    uint32_t        last_proxy_chg_time;
							 | 
						||
| 
								 | 
							
								} node_info_v5_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* proto layer registed, plctxrx layer use.
							 | 
						||
| 
								 | 
							
								   report sigle Gree frame list to proto layer.
							 | 
						||
| 
								 | 
							
								   Gree aggregation msdu de-aggr handled inside this layer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   TODO: this API currently only support GREE. modify inside to be more general
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* proto_recv_cb)(protpkt_list_t  *report_framelist,
							 | 
						||
| 
								 | 
							
								                                plctxrx_rx_data_info_t *rxinfo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma pack(pop)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plc_sta_net_statics
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* signal-noise ratio */
							 | 
						||
| 
								 | 
							
								    uint8_t   snr;
							 | 
						||
| 
								 | 
							
								    /* logical phase of the station */
							 | 
						||
| 
								 | 
							
								    uint16_t  phase;
							 | 
						||
| 
								 | 
							
								    /* received noise factor*/
							 | 
						||
| 
								 | 
							
								    uint8_t   nr;
							 | 
						||
| 
								 | 
							
								    /* up link tsf */
							 | 
						||
| 
								 | 
							
								    uint8_t   ul_tf_sr;
							 | 
						||
| 
								 | 
							
								    /* downlink tsf*/
							 | 
						||
| 
								 | 
							
								    uint8_t   dl_tf_sr;
							 | 
						||
| 
								 | 
							
								} plc_sta_net_statics_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plc_txrx_statics
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* counter for received msdu pkt */
							 | 
						||
| 
								 | 
							
								    uint32_t msdu_receivd_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for received proto frame plt */
							 | 
						||
| 
								 | 
							
								    uint32_t fram_send_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for indicating how many frame received from proto were drop */
							 | 
						||
| 
								 | 
							
								    uint32_t fram_send_drop_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for indicating how many frame received from plc */
							 | 
						||
| 
								 | 
							
								    uint32_t fram_report_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for msdu pkt sent by uincast method */
							 | 
						||
| 
								 | 
							
								    uint32_t msdu_sent_uni_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for msdu pkt to be sent by uincast method */
							 | 
						||
| 
								 | 
							
								    uint32_t msdu_remain_uni_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for msdu pkt sent by broadcast method */
							 | 
						||
| 
								 | 
							
								    uint32_t msdu_sent_brd_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for msdu pkt to be sent by broadcast method */
							 | 
						||
| 
								 | 
							
								    uint32_t msdu_remain_brd_cnt;
							 | 
						||
| 
								 | 
							
								    /* counter for lost msdu pkts */
							 | 
						||
| 
								 | 
							
								    uint32_t msdu_lost_pkt_cnt;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} plc_txrx_statics_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* sta table to record each peer link state*/
							 | 
						||
| 
								 | 
							
								typedef struct _plcsta_state_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* self role */
							 | 
						||
| 
								 | 
							
								    uint8_t role;
							 | 
						||
| 
								 | 
							
								    /* is dev ready */
							 | 
						||
| 
								 | 
							
								    uint8_t dev_ready;
							 | 
						||
| 
								 | 
							
								    /* self mac address */
							 | 
						||
| 
								 | 
							
								    uint8_t sta_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* cco mac address */
							 | 
						||
| 
								 | 
							
								    uint8_t cco_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* self tei */
							 | 
						||
| 
								 | 
							
								    uint16_t sta_tei;
							 | 
						||
| 
								 | 
							
								    /* net status */
							 | 
						||
| 
								 | 
							
								    plc_sta_net_statics_t  net_status;
							 | 
						||
| 
								 | 
							
								    /* txrx status */
							 | 
						||
| 
								 | 
							
								    plc_txrx_statics_t txrx_status;
							 | 
						||
| 
								 | 
							
								    /* sequence of last received msdu pkt from plc*/
							 | 
						||
| 
								 | 
							
								    uint16_t  lastrcv_msduseq;
							 | 
						||
| 
								 | 
							
								    /* counter of msdu which transmitting failed*/
							 | 
						||
| 
								 | 
							
								    uint16_t  txfail_msdu_cnt;
							 | 
						||
| 
								 | 
							
								    /* rate node */
							 | 
						||
| 
								 | 
							
								    uint8_t  rate_node;
							 | 
						||
| 
								 | 
							
								     /* rate node last*/
							 | 
						||
| 
								 | 
							
								    uint8_t  rate_node_last;
							 | 
						||
| 
								 | 
							
								}plcsta_state_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* sta's information stored in cco*/
							 | 
						||
| 
								 | 
							
								typedef struct _plcsta_info_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* valid sta, 1 means valid statio info, and sta level */
							 | 
						||
| 
								 | 
							
								    uint8_t     valid : 1,
							 | 
						||
| 
								 | 
							
								                level : 4,
							 | 
						||
| 
								 | 
							
								                resv  : 3;
							 | 
						||
| 
								 | 
							
								    /* self tei */
							 | 
						||
| 
								 | 
							
								    uint16_t    sta_tei;
							 | 
						||
| 
								 | 
							
								    /* sequence of last received msdu pkt from plc*/
							 | 
						||
| 
								 | 
							
								    uint16_t    lastrcv_msduseq;
							 | 
						||
| 
								 | 
							
								    /* counter for missed sequence since last receiving*/
							 | 
						||
| 
								 | 
							
								    uint16_t    miss_msduseq_cnt;
							 | 
						||
| 
								 | 
							
								    /* role of the station */
							 | 
						||
| 
								 | 
							
								    uint8_t     role;
							 | 
						||
| 
								 | 
							
								    /* self mac address */
							 | 
						||
| 
								 | 
							
								    uint8_t     sta_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plcsta_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* connect_less pkt infor */
							 | 
						||
| 
								 | 
							
								typedef struct _plcs_conn_less_pkt_info_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* msdu's sequnce number */
							 | 
						||
| 
								 | 
							
								    uint16_t    msdu_sn;
							 | 
						||
| 
								 | 
							
								    /* life span cnt*/
							 | 
						||
| 
								 | 
							
								    uint8_t     span_cnt;
							 | 
						||
| 
								 | 
							
								    /* src mac indicate who sends the pkt */
							 | 
						||
| 
								 | 
							
								    uint8_t     src_mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plcs_conn_less_pkt_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_systeminfo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /*enum plctxrx_command_device_reboot_reason_e*/
							 | 
						||
| 
								 | 
							
								    uint8_t     last_reboot_reason;
							 | 
						||
| 
								 | 
							
								    /* statistics of total reboot times. */
							 | 
						||
| 
								 | 
							
								    uint32_t    total_reboot_times;
							 | 
						||
| 
								 | 
							
								    /* system running time(seconds) since powerup. */
							 | 
						||
| 
								 | 
							
								    uint32_t    os_running_time;
							 | 
						||
| 
								 | 
							
								    /* software version, reference to "iot_version_api.h" */
							 | 
						||
| 
								 | 
							
								    uint32_t    software_ver;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_systeminfo_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_handle_uart
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* Index of current uart port. */
							 | 
						||
| 
								 | 
							
								    uint8_t     uart_port;
							 | 
						||
| 
								 | 
							
								    /* Data length, 5~8 */
							 | 
						||
| 
								 | 
							
								    uint8_t     data_len;
							 | 
						||
| 
								 | 
							
								    /* 1 : 1 bit, 2 : 1.5 bits, 3 : 2 bits */
							 | 
						||
| 
								 | 
							
								    uint8_t     stop_bit;
							 | 
						||
| 
								 | 
							
								    /* 0 : disable, 1 : odd, 2 : even */
							 | 
						||
| 
								 | 
							
								    uint8_t     parity;
							 | 
						||
| 
								 | 
							
								    /* Bandrate of uart. 0 means auto-bandrate. */
							 | 
						||
| 
								 | 
							
								    uint32_t    bandrate;
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_uart_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_topo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* level of the station */
							 | 
						||
| 
								 | 
							
								    uint8_t level;
							 | 
						||
| 
								 | 
							
								    /* logic phase of the station */
							 | 
						||
| 
								 | 
							
								    uint8_t logic_phase;
							 | 
						||
| 
								 | 
							
								    /* physical phase of the station */
							 | 
						||
| 
								 | 
							
								    uint8_t phy_phase;
							 | 
						||
| 
								 | 
							
								    /* device mac*/
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_topo_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* for IOT_PLC_CCO_TOPO_REQ_DATA_VER_V2 use */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_topov2_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* level of the station */
							 | 
						||
| 
								 | 
							
								    uint8_t level;
							 | 
						||
| 
								 | 
							
								    /* device mac */
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_topov2_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* quey node info */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_query_node_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* query node type see _node_info_type_e */
							 | 
						||
| 
								 | 
							
								    uint8_t type;
							 | 
						||
| 
								 | 
							
								    uint8_t mac[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_query_node_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* plctxrx node resp info */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_command_handle_node_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t cnt;
							 | 
						||
| 
								 | 
							
								    /* node info of each valid tei, see iot_plc_node_info_xxx_t */
							 | 
						||
| 
								 | 
							
								    uint8_t node[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_node_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* plctxrx topo resp info */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_command_handle_topo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t cnt;
							 | 
						||
| 
								 | 
							
								    plctxrx_cmd_topo_t topo[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_topo_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* plctxrx topo info */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_handle_topo_v2_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t cnt;
							 | 
						||
| 
								 | 
							
								    plctxrx_cmd_topov2_t node[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_topo_v2_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* vendor info in beacon */
							 | 
						||
| 
								 | 
							
								#if ENABLE_GE_DATA_SEND_TO_BEACON
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_vendor_info
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t data[IOT_PLC_BEACON_DATA_MAX];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_vendor_info_t;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* software version resp */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_software_ver_resp
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t version;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_software_ver_resp_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ntb resp */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_ntb_resp
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t ntb;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_ntb_resp_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* fb bitmap resp */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_fb_bitmap_resp
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t is_scan_bitmap;
							 | 
						||
| 
								 | 
							
								    uint8_t fb_bitmap[IOT_GE_FB_SCAN_BITMAP_SIZE];
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_fb_bitmap_resp_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* fix rate mode resp */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_fix_rate_mode_resp
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* 0:fix rate disable 1:fix rate enable */
							 | 
						||
| 
								 | 
							
								    uint8_t enable;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_fix_rate_mode_resp_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_boot_info_resp
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* enum plctxrx_command_device_reboot_reason_e*/
							 | 
						||
| 
								 | 
							
								    uint8_t    last_reboot_reason;
							 | 
						||
| 
								 | 
							
								    /* statistics of total boot count. */
							 | 
						||
| 
								 | 
							
								    uint16_t   total_boot_cnt;
							 | 
						||
| 
								 | 
							
								    /* system running time(seconds) since powerup. */
							 | 
						||
| 
								 | 
							
								    uint32_t   os_running_time;
							 | 
						||
| 
								 | 
							
								} plctxrx_cmd_boot_info_resp_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_cmd_handle_send
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    protpkt_tx_info_t   txinfo;
							 | 
						||
| 
								 | 
							
								    uint8_t             dlen;
							 | 
						||
| 
								 | 
							
								    uint8_t             data[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_send_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* txrx callback to at with this structure */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_handle_recv
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* data receive information */
							 | 
						||
| 
								 | 
							
								    plctxrx_rx_data_info_t rxinfo;
							 | 
						||
| 
								 | 
							
								    uint8_t             resv; /* 4 bytes aligned for data[0]. */
							 | 
						||
| 
								 | 
							
								    /* data len */
							 | 
						||
| 
								 | 
							
								    uint8_t             dlen;
							 | 
						||
| 
								 | 
							
								    /* payload */
							 | 
						||
| 
								 | 
							
								    uint8_t             data[0];
							 | 
						||
| 
								 | 
							
								} plctxrx_handle_recv_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* message used in plc txrx layer task.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_task_msg_t {
							 | 
						||
| 
								 | 
							
								    /* standard iot_task message */
							 | 
						||
| 
								 | 
							
								    iot_task_msg_t  msg;
							 | 
						||
| 
								 | 
							
								    /* pointer to message data */
							 | 
						||
| 
								 | 
							
								    void            *data;
							 | 
						||
| 
								 | 
							
								    /* another data field */
							 | 
						||
| 
								 | 
							
								    uint32_t        data2;
							 | 
						||
| 
								 | 
							
								}plctxrx_task_msg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* proto layer hook function pointer. post message to proto task msg queue */
							 | 
						||
| 
								 | 
							
								typedef struct _proto_callback_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* data path */
							 | 
						||
| 
								 | 
							
								    proto_recv_cb              gree_proto_recv_cb;
							 | 
						||
| 
								 | 
							
								    /* control path */
							 | 
						||
| 
								 | 
							
								    proto_network_event_cb     gree_network_event_cb;
							 | 
						||
| 
								 | 
							
								    /* vendor info path */
							 | 
						||
| 
								 | 
							
								    proto_vendr_cb             gree_vendr_cb;
							 | 
						||
| 
								 | 
							
								}proto_callback_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef uint8_t(*at_resp_cb)(iot_pkt_t * pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _atbcd_callback_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    at_resp_cb              at_cmd_resp_cb;
							 | 
						||
| 
								 | 
							
								}at_callback_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* dev_test_recv_cb_t)(protpkt_list_t  *report_framelist,
							 | 
						||
| 
								 | 
							
								                                plctxrx_rx_data_info_t *rxinfo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef uint8_t(* dev_test_event_cb_t)(iot_pkt_t *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _dev_test_callback_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    dev_test_recv_cb_t          dev_test_recv_cb;
							 | 
						||
| 
								 | 
							
								    dev_test_event_cb_t         dev_test_event_cb;
							 | 
						||
| 
								 | 
							
								}dev_test_callback_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* plctxrx layer global variable */
							 | 
						||
| 
								 | 
							
								typedef struct _plctxrx_contxt
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* plc lib handle */
							 | 
						||
| 
								 | 
							
								    uint32_t               plclib_hdl;
							 | 
						||
| 
								 | 
							
								    /* plctxrx task handle. indicate this layer is one task */
							 | 
						||
| 
								 | 
							
								    iot_task_h             task_handle;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* link id used for sending msdu */
							 | 
						||
| 
								 | 
							
								    uint8_t                link_id;
							 | 
						||
| 
								 | 
							
								    /* plctxrx message queue */
							 | 
						||
| 
								 | 
							
								    uint8_t                msg_q;
							 | 
						||
| 
								 | 
							
								   /*  current cmd handling */
							 | 
						||
| 
								 | 
							
								    plctxrx_command_t      command;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* proto layer registered callback */
							 | 
						||
| 
								 | 
							
								    proto_callback_t       gree_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* at layer registered callback */
							 | 
						||
| 
								 | 
							
								    at_callback_t          at_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* dev test layer registered callback */
							 | 
						||
| 
								 | 
							
								    dev_test_callback_t    dev_test_cb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* internal aggr frame function */
							 | 
						||
| 
								 | 
							
								    proto_aggr_fn          iotpkt_aggr_fn;
							 | 
						||
| 
								 | 
							
								    /* internal status analysis function */
							 | 
						||
| 
								 | 
							
								    PLCTXRX_STATISTIC      plctxrx_status_fn;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   /* the current queue that need to be send out */
							 | 
						||
| 
								 | 
							
								    prot_pktq_t            *sendq;
							 | 
						||
| 
								 | 
							
								    /* the queue that free to hold prot_pkt */
							 | 
						||
| 
								 | 
							
								    prot_pktq_t            *freeq;
							 | 
						||
| 
								 | 
							
								    /* pointer, current aggring pkt */
							 | 
						||
| 
								 | 
							
								    prot_pkt_t             *aggrpkt;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* data method timer, eg, re-send */
							 | 
						||
| 
								 | 
							
								    timer_id_t             datapath_timer;
							 | 
						||
| 
								 | 
							
								    /* general timer for plctxrx period action */
							 | 
						||
| 
								 | 
							
								    timer_id_t             txrx_timer;
							 | 
						||
| 
								 | 
							
								    /* general timer for plctxrx aggr_timeout action */
							 | 
						||
| 
								 | 
							
								    timer_id_t             aggr_timer;
							 | 
						||
| 
								 | 
							
								    /* current online station number */
							 | 
						||
| 
								 | 
							
								    uint16_t                cur_stanum;
							 | 
						||
| 
								 | 
							
								    /* peak online station number */
							 | 
						||
| 
								 | 
							
								    uint16_t                peak_stanum;
							 | 
						||
| 
								 | 
							
								    /* local sta's status */
							 | 
						||
| 
								 | 
							
								    plcsta_state_t         local_state;
							 | 
						||
| 
								 | 
							
								    /* the package sequence, allocated when needed to send to plc */
							 | 
						||
| 
								 | 
							
								    uint16_t               pktseq;
							 | 
						||
| 
								 | 
							
								    /* each station information */
							 | 
						||
| 
								 | 
							
								    plcsta_info_t          sta[STA_DEV_MAX];
							 | 
						||
| 
								 | 
							
								    /* buffer to hold gree time and passwd */
							 | 
						||
| 
								 | 
							
								    plctxrx_cmd_vendor_info_t verinfo;
							 | 
						||
| 
								 | 
							
								    /* role in network CCO or STA */
							 | 
						||
| 
								 | 
							
								    uint8_t                nw_role;
							 | 
						||
| 
								 | 
							
								    /* to save query node infomation type */
							 | 
						||
| 
								 | 
							
								    uint8_t                node_info_type;
							 | 
						||
| 
								 | 
							
								    /* counter of txrx timer triggered */
							 | 
						||
| 
								 | 
							
								    uint8_t                txrx_tm_cnt;
							 | 
						||
| 
								 | 
							
								    /* indicate how many conn_less pkt infor buf are used */
							 | 
						||
| 
								 | 
							
								    uint8_t                used_buf_cnt;
							 | 
						||
| 
								 | 
							
								    /* buffer for storing received conn_less pkt' infor */
							 | 
						||
| 
								 | 
							
								    plcs_conn_less_pkt_info_t conn_less_buf[IOT_PLCTXRX_CONN_LESS_PKT_BUF_CNT];
							 | 
						||
| 
								 | 
							
								    /* record last recv msdu snr  */
							 | 
						||
| 
								 | 
							
								    int8_t                 u_snr;
							 | 
						||
| 
								 | 
							
								}plctxrx_contxt_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* post a message to execute the callback functions */
							 | 
						||
| 
								 | 
							
								void iot_plctxrx_post_msg(uint16_t msg_type,uint16_t msg_id, void* data,
							 | 
						||
| 
								 | 
							
								    uint32_t data2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* txrx internal api. input is one agg-ed proto frame, and tx condition.
							 | 
						||
| 
								 | 
							
								   this function will allocate iot_pkt(a.k.a msdu) and send cvg.
							 | 
						||
| 
								 | 
							
								   mac layer will free iot_pkt.
							 | 
						||
| 
								 | 
							
								   but, prot_pkt still wait in sending list for waiting ack.
							 | 
						||
| 
								 | 
							
								   once ack received, remove prot_pkt from send list, and return to free list.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_msdu_send(prot_pkt_t* prot_pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* interface for lower layer to send data to txrx  */
							 | 
						||
| 
								 | 
							
								void iot_plctxrx_handle_mac_msg(iot_pkt_t *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   when txrx receive one iot_pkt(msdu) from plclib, if the pkt is a normal data,
							 | 
						||
| 
								 | 
							
								   send ack back immediately.
							 | 
						||
| 
								 | 
							
								   the ack pkt is based on the rececivd iot_pkt(msdu)
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_msdu_send_ack_back(iot_plc_msdu_recv_t *msdu);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								    once the prot_pkt is send out, if need ack, reset the retry timer
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void iot_plctxrx_timer_reset(timer_id_t task_timer, uint32_t period );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   when proto pkt not received in sending list, and retry timer fired,
							 | 
						||
| 
								 | 
							
								   check resend count, and do resend action.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_msdu_waitack_timeout(prot_pkt_t* prot_pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   when one aggred proto pkt is ready to send, then add it in sending list.
							 | 
						||
| 
								 | 
							
								   note: first in , first out to keep send order.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_frame_add_queue(prot_pktq_t *queue ,\
							 | 
						||
| 
								 | 
							
								                                    protpkt_list_t *protpkt_list);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function. when acked received, remove from send list,
							 | 
						||
| 
								 | 
							
								   and put to free list.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								prot_pktq_t* iot_plctxrx_frame_remove_queue(prot_pktq_t *queue);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function.  check queue is empty or not.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_queue_empty_check(prot_pktq_t *queue);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function.  check conditions for dequeue, if condition is satisfied,
							 | 
						||
| 
								 | 
							
								   execute remove queue operations
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_dequeue_condition_check(prot_pktq_t *queue, \
							 | 
						||
| 
								 | 
							
								                                            plctxrx_rx_data_info_t *rxinfo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function, txrx handle aggred propkt ack frame from receiver side
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_msdu_recvconf_handle(iot_pkt_t *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function, txrx update stastics
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_stastics_update(plc_txrx_statics_t stastic);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function, when proto layer need send a pkt, before sending, this
							 | 
						||
| 
								 | 
							
								   function firstly check the dst ip/mac, if the dst ip/mac is same
							 | 
						||
| 
								 | 
							
								   as the previous, then check if aggr buffer space, if space is enough,
							 | 
						||
| 
								 | 
							
								   attach it to the aggr_buffer, if not,  store it in the next aggr_buffer,
							 | 
						||
| 
								 | 
							
								   and send the current aggr_buffer into the queue; if the dst ip/mac is
							 | 
						||
| 
								 | 
							
								   different from the previous one, send the current aggr_buffer into the queue,
							 | 
						||
| 
								 | 
							
								   and store the pkt in the next aggr_buffer. Return 0 means condition satisfied,
							 | 
						||
| 
								 | 
							
								   none_zero means aggr abandoned, the return data indicate the reasons:
							 | 
						||
| 
								 | 
							
								   1. dst not match
							 | 
						||
| 
								 | 
							
								   2. retry config not match
							 | 
						||
| 
								 | 
							
								   3. buffer not enough
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint32_t iot_plctxrx_aggr_frame_condition_check(prot_pkt_t* in_pkt, \
							 | 
						||
| 
								 | 
							
								                                               prot_pkt_t* aggr_pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   txrx layer registerd and used by proto layer, when proto neen to send data,
							 | 
						||
| 
								 | 
							
								   call this funtion,  this function will aggr the data, once the condiction
							 | 
						||
| 
								 | 
							
								   satisfied, send the aggred data to plc
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_proto_data_send_cbk(uint8_t* data, uint16_t len,\
							 | 
						||
| 
								 | 
							
								                                        protpkt_tx_info_t *txinfo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   initialize list for gree frame report
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_list_init(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   free the mem for list pool after handled the list
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void iot_plctxrx_list_free(protpkt_list_t *list);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* hook interface with proto layer */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_proto_register(proto_recv_cb datacb,\
							 | 
						||
| 
								 | 
							
								                         proto_network_event_cb netcb, proto_vendr_cb vendrcb);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* callback function for proto layer to send data to plctcrx layer */
							 | 
						||
| 
								 | 
							
								uint8_t gree_send_cbk(uint8_t* data, uint8_t len, protpkt_tx_info_t *txinfo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* callback function for proto layer to send cmd to plctcrx layer */
							 | 
						||
| 
								 | 
							
								uint8_t plctxrx_cmd_send_mssage(iot_pkt_t *arg);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* at command/machine binary command layer registed callback. plctxrx use to
							 | 
						||
| 
								 | 
							
								   response command previous received. cmd-resp works as ping-pong method */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* hook interface with at layer */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_at_register(at_resp_cb at_cb);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* hook interface with dev test layer */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_dev_test_register(dev_test_recv_cb_t recv_cb,
							 | 
						||
| 
								 | 
							
								    dev_test_event_cb_t event_cb);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cvg callback to post msdu from plc */
							 | 
						||
| 
								 | 
							
								void iot_plctxrx_msdu_from_cvg(void *param, iot_pkt_t *pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* config device type and mac */
							 | 
						||
| 
								 | 
							
								void plctxrx_set_device_mac(uint8_t *mac, uint8_t dev_type);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* iot_plctxrx_task_init - init plctxrx task
							 | 
						||
| 
								 | 
							
								 * @return:
							 | 
						||
| 
								 | 
							
								 * ERR_AGAIN - reinit proto task
							 | 
						||
| 
								 | 
							
								 * ERR_NOMEM - no  memory
							 | 
						||
| 
								 | 
							
								 * ERR_OK    - OK
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								int iot_plctxrx_task_init(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* iot_plctxrx_task_deinit - deinit plctxrx task */
							 | 
						||
| 
								 | 
							
								void iot_plctxrx_task_deinit(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function, if txrx received a ack, according to the mac address,
							 | 
						||
| 
								 | 
							
								   update the ackbitmap
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_ackflag_update(uint8_t *mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function, if the retry timer is fired, check the bitmap,
							 | 
						||
| 
								 | 
							
								   find out which one is not send back ack
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_ackbitmap_scan_for_retry(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   internal function, if the retry cnt reaches the max counter
							 | 
						||
| 
								 | 
							
								   remove from the queue
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint8_t iot_plctxrx_retry_reach_max_cnt_check(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   check if STA is online, used only by CCO role.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								bool_t iot_plctxrx_check_sta_in_nw_by_mac(uint8_t* mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   get sta level, success:return 1 ~ 15, fail:return -1.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								int8_t iot_plctxrx_get_node_level(uint8_t *mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* IOT_PLCTXRX_H */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |