2112 lines
		
	
	
		
			68 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			2112 lines
		
	
	
		
			68 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_PROTO_H
 | ||
|  | #define IOT_PROTO_H
 | ||
|  | 
 | ||
|  | #include "iot_flashinfo.h"
 | ||
|  | #include "iot_cli_sg_api.h"
 | ||
|  | #include "iot_oem_api.h"
 | ||
|  | #include "iot_grapp.h"
 | ||
|  | 
 | ||
|  | #include "iot_edge_compute.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* if gree crc16 checking is needed, this micro defination should be set to 1 */ | ||
|  | #define GE_CRC_ENABLE                       1
 | ||
|  | 
 | ||
|  | /* define whether need to do trial run check */ | ||
|  | #define TRIAL_RUN_CHECK_ENABLE              0
 | ||
|  | 
 | ||
|  | /** fn code enum */ | ||
|  | typedef enum _proto_fn_code_e | ||
|  | { | ||
|  |     /* have to stay at the front */ | ||
|  |     PROTO_FNCODE_MIN                        = 0x00, | ||
|  |     /* sequential control start a new round communicate */ | ||
|  |     PROTO_NEW_RD_COMM_START_CMD             = 0x24, | ||
|  |     /* boot up password confirm */ | ||
|  |     PROTO_BTUP_PWD_CFM_CMD                  = 0x2B, | ||
|  |     /* allot ip */ | ||
|  |     PROTO_ALLOT_IP_CMD                      = 0x47, | ||
|  |     /* command on project numbering (bcast)  */ | ||
|  |     PROTO_NUM_PROJ_CMD                      = 0x48, | ||
|  |     /* hint of error */ | ||
|  |     PROTO_ERROR_HINT_CMD                    = 0x54, | ||
|  |     /* alarm of ip conflicting */ | ||
|  |     PROTO_IP_CONFLICT_ALARM_CMD             = 0x55, | ||
|  |     /* publish device ip(s) and mac(s) of substratum  */ | ||
|  |     PROTO_PUB_SUB_IP_MAC_CMD                = 0x56, | ||
|  |     /* publish self ip and mac */ | ||
|  |     PROTO_PUB_SELF_IP_MAC_CMD               = 0x57, | ||
|  |     /* apply ip */ | ||
|  |     PROTO_APPLY_IP_CMD                      = 0x67, | ||
|  |     /* ask for publishing ip(s) and mac(s) of
 | ||
|  |      * slave and sub device of slave | ||
|  |      */ | ||
|  |     PROTO_PUB_SLV_AND_SUB_IP_MAC_CMD        = 0x77, | ||
|  |     /* WIFI master reset status confirm */ | ||
|  |     PROTO_WIFI_MASTER_RST_ST_CFM_CMD        = 0x82, | ||
|  |     /* cancel control with priority */ | ||
|  |     PROTO_CANCEL_PRIO_CTRL_CMD              = 0xA6, | ||
|  |     /* control with priority */ | ||
|  |     PROTO_PRIO_CTRL_CMD                     = 0xA7, | ||
|  |     /* important status send */ | ||
|  |     PROTO_IMPTT_ST_SEND_CMD                 = 0xB7, | ||
|  |     /* response of normal query */ | ||
|  |     PROTO_NORMAL_QUERY_RESP_CMD             = 0xD6, | ||
|  | 
 | ||
|  |     /* control cmd of testing online */ | ||
|  |     PROTO_ONLINE_TST_CTRL_CMD               = 0xE3, | ||
|  |     /* normal control with valid flag-group control */ | ||
|  |     PROTO_NORMAL_GROUP_VALID_CTRL_CMD       = 0xE4, | ||
|  |     /* normal control with valid flag-simple control */ | ||
|  |     PROTO_NORMAL_SIMP_VALID_CTRL_CMD        = 0xE5, | ||
|  |     /* normal control-group control */ | ||
|  |     PROTO_NORMAL_GROUP_CTRL_CMD             = 0xE6, | ||
|  |     /* normal control-simple control */ | ||
|  |     PROTO_NORMAL_SIMP_CTRL_CMD              = 0xE7, | ||
|  | 
 | ||
|  |     /* column query function */ | ||
|  |     PROTO_COLUMN_QUERY_CMD                  = 0xF0, | ||
|  |     /* normal query */ | ||
|  |     PROTO_NORMAL_QUERY_CMD                  = 0xF6, | ||
|  |     /* normal status */ | ||
|  |     PROTO_NORMAL_ST_CMD                     = 0xF7, | ||
|  | 
 | ||
|  |     /** gree upgrade */ | ||
|  |     PROTO_UPGRADE_DL                        = 0xFA, | ||
|  |     /** gree upgrade ack */ | ||
|  |     PROTO_UPGRADE_UL                        = 0xFB, | ||
|  |     /** general query cmd fn */ | ||
|  |     PROTO_GE_PLC_QUERY_CMD                  = 0xFC, | ||
|  |     /** general response cmd fn */ | ||
|  |     PROTO_GE_PLC_RESP_CMD                   = 0xFD, | ||
|  |     /** general set cmd fn */ | ||
|  |     PROTO_GE_PLC_SET_CMD                    = 0xFE, | ||
|  | 
 | ||
|  |     PROTO_FNCODE_MAX                        = 0xFF, | ||
|  | }proto_fn_code_e; | ||
|  | 
 | ||
|  | /* fn = PROTO_PLC_MODULE_RESP_CMD */ | ||
|  | enum proto_query_response_subfn_e { | ||
|  |     /* local mac response to MCU */ | ||
|  |     PROTO_LOCAL_MAC_RESP_CMD       = 1, | ||
|  |     /* sw version response to MCU */ | ||
|  |     PROTO_FW_SWVER_RESP_CMD        = 2, | ||
|  |     /* boot information response to MCU */ | ||
|  |     PROTO_BOOT_INFO_RESP_CMD       = 3, | ||
|  |     /* boot up password response to MCU */ | ||
|  |     PROTO_BOOTUP_PASSD_RESP_CMD    = 4, | ||
|  |     /* topo response to MCU or monitor */ | ||
|  |     PROTO_TOPO_RESP_CMD            = 5, | ||
|  |     /* net states response to MCU */ | ||
|  |     PROTO_NET_STS_RESP_CMD         = 6, | ||
|  |     /* white list response to MCU or monitor */ | ||
|  |     PROTO_WHITELIST_RESP_CMD       = 7, | ||
|  |     /* pair table response to MCU or monitor */ | ||
|  |     PROTO_PAIR_TBLE_RESP_CMD       = 8, | ||
|  |     /* avail network response to MCU */ | ||
|  |     PROTO_AVAIL_NW_RESP_CMD        = 9, | ||
|  |     /* IP response to MCU */ | ||
|  |     PROTO_IP_RESP_CMD              = 10, | ||
|  |     /* TX_PWR response to MCU */ | ||
|  |     PROTO_TX_PWR_RESP_CMD          = 11, | ||
|  |     /* uart throughput response to MCU */ | ||
|  |     PROTO_UART_THPT_RESP_CMD       = 12, | ||
|  |     /* network detail information response to MCU */ | ||
|  |     PROTO_NW_DETAILINFO_RESP_CMD   = 13, | ||
|  |     /* uart param response handler */ | ||
|  |     PROTO_GE_UART_PARAM_RESP_CMD   = 14, | ||
|  |     /* general extended whitelist response */ | ||
|  |     PROTO_GE_EXT_WL_RESP_CMD       = 15, | ||
|  |     /* NID response to MCU */ | ||
|  |     PROTO_NID_RESP_CMD             = 16, | ||
|  |     /* white list state response to MCU */ | ||
|  |     PROTO_WHITELIST_STATE_RESP_CMD = 17, | ||
|  |     /* module info response to MCU */ | ||
|  |     PROTO_MODULE_INFO_RESP_CMD     = 18, | ||
|  |     /* ntb response to MCU */ | ||
|  |     PROTO_NTB_RESP_CMD             = 19, | ||
|  |     /* frequency band scan bitmap to MCU */ | ||
|  |     PROTO_FB_BITMAP_RESP_CMD       = 20, | ||
|  |     /* fix rate mode response to MCU */ | ||
|  |     PROTO_FIX_RATE_MODE_RESP_CMD   = 21, | ||
|  |     /* work band response to MCU */ | ||
|  |     PROTO_WORK_BAND_RESP_CMD       = 22, | ||
|  |     /* node information response to MCU */ | ||
|  |     PROTO_NODE_INFO_RESP_CMD       = 23, | ||
|  |     /* network information response to MCU */ | ||
|  |     PROTO_NW_INFO_RESP_CMD         = 24, | ||
|  |     /* local ip4 info response to MCU */ | ||
|  |     PROTO_LOCAL_IP4_INFO_RESP_CMD  = 25, | ||
|  |     /* aes info response to MCU */ | ||
|  |     PROTO_AES_RESP_CMD             = 26, | ||
|  |     /* resp query gpio */ | ||
|  |     PROTO_QUERY_GPIO_RESP_CMD      = 27, | ||
|  | }; | ||
|  | 
 | ||
|  | /* fn = PROTO_PLC_MODULE_SET_CMD */ | ||
|  | enum proto_set_subfn_e { | ||
|  |     /* set local mac */ | ||
|  |     PROTO_LOCAL_MAC_SET_CMD       = 1, | ||
|  |     /* set pass word */ | ||
|  |     PROTO_PASSD_SET_CMD           = 2, | ||
|  |     /* set join network */ | ||
|  |     PROTO_JOIN_NW_SET_CMD         = 3, | ||
|  |     /* set leave network */ | ||
|  |     PROTO_LEAVE_NW_SET_CMD        = 4, | ||
|  |     /* add or del while list member */ | ||
|  |     PROTO_OP_WHITELIST_SET_CMD    = 5, | ||
|  |     /* add or del pair table member */ | ||
|  |     PROTO_OP_PAIR_TBLE_SET_CMD    = 7, | ||
|  |     /* communicater fault report to MCU */ | ||
|  |     PROTO_COMM_FAULT_RPT_CMD      = 8, | ||
|  |     /* connect indication report to MCU */ | ||
|  |     PROTO_CONN_IND_RPT_CMD        = 9, | ||
|  |     /* disconnect indication report to MCU */ | ||
|  |     PROTO_DISCONN_IND_RPT_CMD     = 10, | ||
|  |     /* CCO start group network */ | ||
|  |     PROTO_CCO_START_GROUP_NET_CMD = 13, | ||
|  |     /* CCO end group network */ | ||
|  |     PROTO_CCO_END_GROUP_NET_CMD   = 14, | ||
|  |     /* set NID for CCO */ | ||
|  |     PROTO_CCO_NID_SET_CMD         = 17, | ||
|  |     /* set reboot STA cmd */ | ||
|  |     PROTO_REBOOT_STA_CMD          = 18, | ||
|  |     /* cmd confirm cmd */ | ||
|  |     PROTO_CMD_CFM_CMD             = 20, | ||
|  |     /* CCO state indication - ready or not ready */ | ||
|  |     PROTO_CMD_CCO_STAT_IND_CMD    = 21, | ||
|  |     /* set tx_power */ | ||
|  |     PROTO_CMD_TX_PWR_CMD          = 22, | ||
|  |     /* set IP for Mac */ | ||
|  |     PROTO_CMD_SET_IP_CMD          = 23, | ||
|  |     /* boot ready indication */ | ||
|  |     PROTO_BOOT_READY_ID_CMD       = 24, | ||
|  |     /* temporary command for clear flash */ | ||
|  |     PROTO_CLR_CUST_FLASH_CMD      = 25, | ||
|  |     /* online monitor counter indication */ | ||
|  |     PROTO_MONITR_ONLINE_IND       = 26, | ||
|  |     /* switch app uart mode */ | ||
|  |     PROTO_SW_UART_MODE_CMD        = 27, | ||
|  |     /* set band id */ | ||
|  |     PROTO_SET_BAND_ID_CMD         = 28, | ||
|  |     /* set host port */ | ||
|  |     PROTO_SET_HOST_PORT_CMD       = 29, | ||
|  |     /* general frequency band scan bitmap set subfn */ | ||
|  |     PROTO_SET_FB_BITMAP_CMD       = 30, | ||
|  |     /* fix rate(enable or disable) set subfn */ | ||
|  |     PROTO_SET_FIX_RATE_MODE_CMD   = 31, | ||
|  |     /* send sta paging message subfn */ | ||
|  |     PROTO_SEND_STA_PAGING_CMD     = 32, | ||
|  |     /* set device version info report subfn */ | ||
|  |     PROTO_SET_RPT_DEV_VERINFO_CMD = 33, | ||
|  |     /* set sta switch boot part subbfn */ | ||
|  |     PROTO_SET_SWITCH_BOOT_PART_CMD = 34, | ||
|  |     /* set local IP4 info */ | ||
|  |     PROTO_LOCAL_IP4_INFO_SET_CMD   = 35, | ||
|  |     /* reject indication report to MCU */ | ||
|  |     PROTO_REJECT_IND_RPT_CMD       = 36, | ||
|  | 
 | ||
|  |     /* switch boot part indication subbfn */ | ||
|  |     PROTO_SWITCH_BOOT_PART_IND_CMD = 0x95, | ||
|  |     /* Private command code start from here: */ | ||
|  |     /* Module use for annoucing whitelist. */ | ||
|  |     PROTO_WHITELIST_IND_CMD       = 0x96,//150,
 | ||
|  |     /* Module use for annoucing pairtable. */ | ||
|  |     PROTO_PAIRTABLE_IND_CMD       = 0x97,//151,
 | ||
|  |     /* Test loopback. */ | ||
|  |     PROTO_TEST_LOOP_BACK_CMD      = 0x98,//152,
 | ||
|  |     /* app registered indication */ | ||
|  |     PROTO_APP_REG_CONF_IND        = 0x99,//153,
 | ||
|  |     /* STA leaving positivly indication */ | ||
|  |     PROTO_STA_LEAVE_IND           = 0x9A,//154,
 | ||
|  |     /* device version info report  indication subfn */ | ||
|  |     PROTO_RPT_DEV_VERINFO_IND_CMD = 0x9B,//155
 | ||
|  |     /* pair cfm set by linectrl */ | ||
|  |     //PROTO_PAIR_CFM_SET_CMD        = 6,
 | ||
|  |     /* pair start indication report to MCU */ | ||
|  |     //PROTO_PAIR_START_IND_RPT_CMD  = 11,
 | ||
|  |     /* pair stop indication report to MCU */ | ||
|  |     //PROTO_PAIR_STOP_IND_RPT_CMD   = 12,
 | ||
|  |     /* start pair cmd from monitor to outair */ | ||
|  |     //PROTO_START_PAIR_CMD          = 15,
 | ||
|  |     /* end pair cmd from monitor to outair */ | ||
|  |     //PROTO_END_PAIR_CMD            = 16,
 | ||
|  |     /* unpair devices cmd from monitor to outair */ | ||
|  |     //PROTO_UNPAIR_DEVS_CMD         = 19,
 | ||
|  |     /* general data send subfn */ | ||
|  |     PROTO_GE_DATA_CMD             = 0xA0,//160,
 | ||
|  |     /* uart param set handler */ | ||
|  |     PROTO_GE_UART_PARAM_SET_CMD   = 0xA1,//161,
 | ||
|  |     /* general broadcast data add to beacon send subfn */ | ||
|  |     PROTO_GE_BC_DATA_CMD          = 0xA2,//162,
 | ||
|  |     /* general AES subfn */ | ||
|  |     PROTO_AES_SET_CMD             = 0xA3,//163,
 | ||
|  |     /* set gpio */ | ||
|  |     PROTO_GE_GPIO_CONFIG_CMD      = 0xA4,//164,
 | ||
|  |     /* set gpio */ | ||
|  |     PROTO_GE_GPIO_SET_CMD         = 0xA5,//165,
 | ||
|  |     /* delaytime cmd */ | ||
|  |     PROTO_GE_DELAY_TM_CMD         = 0xA6,//166,
 | ||
|  | }; | ||
|  | 
 | ||
|  | /* fn = PROTO_PLC_MODULE_QUERY_CMD */ | ||
|  | enum proto_query_subfn_e { | ||
|  |     /* MCU query local MAC */ | ||
|  |     PROTO_LOCAL_MAC_QUERY_CMD     = 1, | ||
|  |     /* MCU query sw version */ | ||
|  |     PROTO_FW_SWVER_QUERY_CMD      = 2, | ||
|  |     /* MCU query system information */ | ||
|  |     PROTO_BOOTINFO_QUERY_CMD      = 3, | ||
|  |     /* MCU query boot up password */ | ||
|  |     PROTO_BOOTUP_PASSD_QUERY_CMD  = 4, | ||
|  |     /* MCU or monitor query topo */ | ||
|  |     PROTO_TOPO_QUERY_CMD          = 5, | ||
|  |     /* MCU query net states */ | ||
|  |     PROTO_NET_STS_QUERY_CMD       = 6, | ||
|  |     /* MCU or monitor query white list */ | ||
|  |     PROTO_WHITELIST_QUERY_CMD     = 7, | ||
|  |     /* MCU or monitor pair table */ | ||
|  |     PROTO_PAIR_TBLE_QUERY_CMD     = 8, | ||
|  |     /* MCU query avail network */ | ||
|  |     PROTO_AVAIL_NW_QUERY_CMD      = 9, | ||
|  |     /* MCU IP */ | ||
|  |     PROTO_IP_QUERY_CMD            = 10, | ||
|  |     /* MCU or monitor query tx power */ | ||
|  |     PROTO_TX_PWR_QUERY_CMD        = 11, | ||
|  |     /* MCU query uart's throughput */ | ||
|  |     PROTO_UART_THRPT_QUERY_CMD    = 12, | ||
|  |     /* MCU query network detail information */ | ||
|  |     PROTO_NW_DETAILINFO_QUERY_CMD = 13, | ||
|  |     /* uart param query handler */ | ||
|  |     PROTO_GE_UART_PARAM_QUERY_CMD = 14, | ||
|  |     /* general extended whitelist query */ | ||
|  |     PROTO_GE_EXT_WL_QUERY_CMD     = 15, | ||
|  |     /* MCU query local MAC */ | ||
|  |     PROTO_NID_QUERY_CMD           = 16, | ||
|  |     /* MCU query white list state */ | ||
|  |     PROTO_WHITELIST_STATE_QUERY_CMD = 17, | ||
|  |     /* MCU query module info */ | ||
|  |     PROTO_MODULE_INFO_QUERY_CMD   = 18, | ||
|  |     /* MCU query ntb */ | ||
|  |     PROTO_NTB_QUERY_CMD           = 19, | ||
|  |     /* MCU query frequency band bitmap */ | ||
|  |     PROTO_FB_BITMAP_QUERY_CMD     = 20, | ||
|  |     /* MCU query fixed rate mode */ | ||
|  |     PROTO_FIX_RATE_QUERY_CMD      = 21, | ||
|  |     /* MCU query work band */ | ||
|  |     PROTO_WORK_BAND_QUERY_CMD     = 22, | ||
|  |     /* MCU query node info */ | ||
|  |     PROTO_NODE_INFO_QUERY_CMD     = 23, | ||
|  |     /* MCU query network info */ | ||
|  |     PROTO_NW_INFO_QUERY_CMD       = 24, | ||
|  |     /* MCU query local IP4 info */ | ||
|  |     PROTO_LOCAL_IP4_INFO_QUERY_CMD  = 25, | ||
|  |     /* MCU query aes info */ | ||
|  |     PROTO_AES_QUERY_CMD             = 26, | ||
|  |     /* query gpio */ | ||
|  |     PROTO_GE_GPIO_QUERY_CMD       = 27, | ||
|  |     /* delay time */ | ||
|  |     PROTO_GE_DELAY_TIME_CMD       = 28, | ||
|  | }; | ||
|  | 
 | ||
|  | /* reboot type */ | ||
|  | typedef enum _reobot_type_e { | ||
|  |     REBOOT_NORMAL          = 0, | ||
|  |     REBOOT_ASSERT          = 1, | ||
|  |     REBOOT_WRITE_ZERO_ADDR = 2, | ||
|  |     REBOOT_MAX             =0xFF, | ||
|  | } reboot_type_e; | ||
|  | 
 | ||
|  | /* wl operation */ | ||
|  | #define GE_PROTO_ACTION_DEL           0
 | ||
|  | #define GE_PROTO_ACTION_ADD           1
 | ||
|  | #define GE_PROTO_WL_DISABLE           2
 | ||
|  | #define GE_PROTO_WL_ENABLE            3
 | ||
|  | #define GE_PROTO_ACTION_DEL_ALL       4
 | ||
|  | 
 | ||
|  | /* ge frame len of each field define */ | ||
|  | #define GE_FRM_PREAMBLE_FIELD_LEN     2
 | ||
|  | #define GE_FRM_DATA_CNT_FIELD_LEN     1
 | ||
|  | #define GE_FRM_ID_FIELD_LEN           4
 | ||
|  | #define GE_FRM_TAIL_FILED_LEN         1
 | ||
|  | 
 | ||
|  | #if GE_CRC_ENABLE
 | ||
|  | #define GE_FRM_MIN_LEN                10
 | ||
|  | #define GE_FRM_UPGRADE_MAX_LEN        418
 | ||
|  | #define GE_FRM_CHECKSUM_FIELD_LEN     2
 | ||
|  | /* 255 - GE_FRM_MIN_LEN */ | ||
|  | #define GE_FRM_PLD_MAX_LEN            245
 | ||
|  | #define GE_FRM_PLD_MIN_LEN           (0x0)
 | ||
|  | #else
 | ||
|  | #define GE_FRM_MIN_LEN                9
 | ||
|  | #define GE_FRM_UPGRADE_MAX_LEN        417
 | ||
|  | #define GE_FRM_CHECKSUM_FIELD_LEN     1
 | ||
|  | #define GE_FRM_PLD_MAX_LEN            245
 | ||
|  | #define GE_FRM_PLD_MIN_LEN           (0x80)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define GE_FRM_MAX_LEN               (GE_FRM_MIN_LEN + \
 | ||
|  |                                       GE_FRM_PLD_MAX_LEN - \ | ||
|  |                                       GE_FRM_PLD_MIN_LEN) | ||
|  | 
 | ||
|  | #define GE_EXT_DATA_LEN              (GE_FRM_PLD_MAX_LEN)
 | ||
|  | #define GE_EXT_DATA_FRM_MAX_LEN      (GE_FRM_MAX_LEN + GE_FRM_PLD_MAX_LEN)
 | ||
|  | 
 | ||
|  | /* temp buffer for sending to MCU */ | ||
|  | #define UL_TMP_BUF_LEN               (GE_EXT_DATA_FRM_MAX_LEN)
 | ||
|  | 
 | ||
|  | #define GE_FRM_NORMAL_SEQ_POS        7
 | ||
|  | 
 | ||
|  | #define GE_FRM_DATA_LEN_POS          2
 | ||
|  | #define GE_FRM_DATA_EXT_LEN_POS      6
 | ||
|  | #define GE_FRM_DATA_EXT_FLAG         0x80
 | ||
|  | 
 | ||
|  | /* the position of data length field in a intact frame
 | ||
|  |  * offset start with 0 | ||
|  | */ | ||
|  | #define GE_FRM_DATA_CNT_FIELD_POS        2
 | ||
|  | 
 | ||
|  | /* the position of check sum field in a intact frame
 | ||
|  |  * offset start with data cnt | ||
|  | */ | ||
|  | #define GE_FRM_CHECK_SUM_FIELD_POS       7
 | ||
|  | /* the position of check sum field in a intact frame
 | ||
|  |  * offset start with data cnt | ||
|  | */ | ||
|  | #if GE_CRC_ENABLE
 | ||
|  | #define GE_FRM_TAIL_CODE_FIELD_POS       9
 | ||
|  | #else
 | ||
|  | #define GE_FRM_TAIL_CODE_FIELD_POS       8
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define DIR_UP_TO_MCU                    1
 | ||
|  | #define DIR_DOWN_TO_PLC                  0
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /** check gree frame command */ | ||
|  | #define GE_CHECK_FRM_CMD(control)      (control >= GE_FRM_PLD_MIN_LEN && \
 | ||
|  |                                         control <= GE_FRM_PLD_MAX_LEN) | ||
|  | /* the real data length */ | ||
|  | #define ACQUIRE_DATA_LEN(data_len)     (data_len - GE_FRM_PLD_MIN_LEN)
 | ||
|  | /* preamble code of gree frame */ | ||
|  | #define GE_FRM_PREAMBLE_CODE           (0xAAAA)
 | ||
|  | /* tail code of gree frame */ | ||
|  | #define GE_FRM_TAIL_CODE               (0xFF)
 | ||
|  | 
 | ||
|  | /* Maximum number of gpio pin configurations supported */ | ||
|  | #define IOT_GE_VALID_GPIO_MAX               3
 | ||
|  | 
 | ||
|  | /* Maximum number of LEDC01 module gpio pin configurations supported */ | ||
|  | #define IOT_GE_LEDC01_VALID_GPIO_MAX        3
 | ||
|  | 
 | ||
|  | /** const, max buf to cache com0 input char string */ | ||
|  | #if PLC_SUPPORT_CCO_ROLE && ENABLE_GREE_UPGRADE
 | ||
|  | #define MCU_DATA_RECV_MAX       (UART_RECV_SIZE_MAX + GE_FRM_UPGRADE_MAX_LEN)
 | ||
|  | #else
 | ||
|  | #define MCU_DATA_RECV_MAX       (UART_RECV_SIZE_MAX + GE_FRM_MAX_LEN)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* define priorities for message to be handle */ | ||
|  | #define IOT_PROTO_TASK_QUEUE_LP           0
 | ||
|  | #define IOT_PROTO_TASK_QUEUE_MAX_PRIO     1
 | ||
|  | 
 | ||
|  | #define IOT_PROTO_TASK_LIKE_ID            2
 | ||
|  | 
 | ||
|  | #if (IOT_PSRAM_ENABLE)
 | ||
|  | #define IOT_PROTO_TASK_POOL_SIZE          254
 | ||
|  | #else
 | ||
|  | #define IOT_PROTO_TASK_POOL_SIZE          64
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /********************** message type ******************************************/ | ||
|  | /* message type - host */ | ||
|  | #define PROTO_MCU_RX_MSG                  0
 | ||
|  | /* message type - plc */ | ||
|  | #define PROTO_PLC_RX_MSG                  1
 | ||
|  | /* message type - timer */ | ||
|  | #define PROTO_TIMER_MSG                   2
 | ||
|  | /* message type - custom app */ | ||
|  | #define PROTO_CUS_APP_MSG                 4
 | ||
|  | /* message type - cli message */ | ||
|  | #define PROTO_CLI_MSG                     5
 | ||
|  | /* message type - cctt message */ | ||
|  | #define PROTO_CCTT_MSG                    6
 | ||
|  | 
 | ||
|  | /********************* mcu rx message id **************************************/ | ||
|  | /* message id - unrecognized command */ | ||
|  | #define PROTO_MCU_RX_UNKNOWN_MSG          0
 | ||
|  | /* message id - recv uart dl645 command */ | ||
|  | #define PROTO_MCU_RX_DL645_MSG            1
 | ||
|  | /* message id - recv uart ge command */ | ||
|  | #define PROTO_MCU_RX_GE_MSG               2
 | ||
|  | 
 | ||
|  | /********************* plc rx message id **************************************/ | ||
|  | /* message id - data rx*/ | ||
|  | #define PROTO_PLC_RX_DATA_MSG             0
 | ||
|  | /* message id - cmd rx*/ | ||
|  | #define PROTO_PLCTXRX_RX_CMD_MSG          1
 | ||
|  | 
 | ||
|  | /********************* plc timer message id ***********************************/ | ||
|  | /* uart monitor timer msg id */ | ||
|  | #define PROTO_TIMER_MONITOR_TIMEOUT       0
 | ||
|  | /* query mac timer msg id */ | ||
|  | #define PROTO_TIMER_QUERY_MAC_TIMEOUT     1
 | ||
|  | /* To announce the update of table for STA. */ | ||
|  | #define PROTO_TIMER_TABLE_ANNOUNCE        2
 | ||
|  | /* For STA to query table from CCO */ | ||
|  | #define PROTO_TIMER_TABLE_QUERY           3
 | ||
|  | /* wait response cmd time out msg id */ | ||
|  | #define PROTO_TIMER_WAIT_RESP_TIMEOUT     4
 | ||
|  | /* timer for reboot after received a reboot cmd */ | ||
|  | #define PROTO_TIMER_REBOOT_STA_TIMEOUT    5
 | ||
|  | /* timer for information statistics */ | ||
|  | #define PROTO_TIMER_STATISTIC             6
 | ||
|  | /* globle timer for anounce */ | ||
|  | #define PROTO_TIMER_ANOUNCE               7
 | ||
|  | /* timer for sta leaving network after received a leave cmd */ | ||
|  | #define PROTO_TIMER_STA_LEAVE_TIMEOUT     8
 | ||
|  | /* timer for update upgrade state */ | ||
|  | #define PROTO_TIMER_UPDATE_STATE_TIMEOUT  9
 | ||
|  | /* timer for handling broadcast pkt window */ | ||
|  | #define PROTO_TIMER_BRD_PKT_WINDOW_RPT    10
 | ||
|  | /* timer for paging */ | ||
|  | #define PROTO_TIMER_PAGING_TIMEOUT        11
 | ||
|  | /* timer for trial run check */ | ||
|  | #define PROTO_TIMER_TRIAL_RUN_CHECK       12
 | ||
|  | /* timer for 645 meter local read mode,
 | ||
|  |  * in local read mode, the 645 frame from meter uart will be cached in local, | ||
|  |  * in this period, the meter read cmd from plc will be responsed from the cache | ||
|  |  */ | ||
|  | #define PROTO_TIMER_645_LOCAL_MODE        13
 | ||
|  | 
 | ||
|  | /* proto open start */ | ||
|  | #define PROTO_START_EDGE_TMR_ID           14
 | ||
|  | 
 | ||
|  | /********************* custom app message id **********************************/ | ||
|  | #define PROTO_CUS_APP_SAVE_PIB_MSG       0
 | ||
|  | 
 | ||
|  | /* Message ID for cctt message ID. */ | ||
|  | #define CCTT_REBOOT_CCO                  0
 | ||
|  | #define CCTT_REBOOT_STA                  1
 | ||
|  | #define CCTT_QUERY_TOPO                  2
 | ||
|  | #define CCTT_ADD_WHITELIST               3
 | ||
|  | #define CCTT_DEL_WHITELIST               4
 | ||
|  | #define CCTT_QUERY_WHITELIST             5
 | ||
|  | #define CCTT_SET_WL_STATE                6
 | ||
|  | #define CCTT_CLR_WHITELIST               7
 | ||
|  | #define CCTT_CHECK_WL_MAC                8
 | ||
|  | #define CCTT_SET_PLC_NW                  9
 | ||
|  | #define CCTT_READ_PLC_NW                 10
 | ||
|  | #define CCTT_REBOOT_MAC_LIST_PCO         11
 | ||
|  | #define CCTT_DELAYTIME                   12
 | ||
|  | #define CCTT_READ_RS485_CONFIG           13
 | ||
|  | #define CCTT_SET_RS485_CONFIG            14
 | ||
|  | #define CCTT_RS485_TRANS_DL645           15
 | ||
|  | #define CCTT_RS485_TRANS_MODBUS          16
 | ||
|  | 
 | ||
|  | /* Message ID for global timer ID. */ | ||
|  | #define PROTO_TMR_WLIST_PERIODICALLY_REPORT      0
 | ||
|  | #define PROTO_TMR_PTABLE_PERIODICALLY_REPORT     1
 | ||
|  | #define PROTO_TMR_IPS_PERIODICALLY_QUERY         2
 | ||
|  | 
 | ||
|  | #define PROTO_STASTIC_UPDATE_INTVL_CNT           (40)        //unit 0.5s
 | ||
|  | #define PROTO_TIMER_MONITOR_TIMEOUT_INTVL        (1000/5)    //unit ms
 | ||
|  | #define PROTO_TIMER_QUERY_MAC_TIMEOUT_INTVL      (3 * 1000) //unit ms
 | ||
|  | #define PROTO_TIMER_WAIT_RESPONSE_TIMEOUT_INTVL  (5 * 1000)  //unit ms
 | ||
|  | #define PROTO_TIMER_REBOOT_DELAY_INTVL           (5 * 1000)  //unit ms
 | ||
|  | #define PROTO_G_TMR_TIMOUT_STEP                  (60 * 1000) /* 60s seconds */
 | ||
|  | #define PROTO_TIMER_LEAVE_DELAY_INTVL            (3 * 1000)  //unit ms
 | ||
|  | #define PROTO_TMR_STA_JOIN_ANNOUNCE_WL           (3 * 1000)  //unit ms
 | ||
|  | #define PROTO_TMR_SW_UART_MODE_DELAY_INTVL       (3 * 1000)  //unit ms
 | ||
|  | #define PROTO_TMR_SET_HOST_PORT_DELAY_INTVL      (3 * 1000)  //unit ms
 | ||
|  | #define PROTO_TMR_UPDATE_UPGRADE_STATE_INTVL     (4 * 1000)  //unit ms
 | ||
|  | #define PROTO_TMR_PAGING_TIMEOUT_INTVL           (4 * 1000)  //unit ms
 | ||
|  | #define PROTO_TMR_645_LOCAL_READ_MODE_INTVL      (10 * 1000) //unit ms
 | ||
|  | 
 | ||
|  | #define PROTO_TIMER_STATIST_INTVL                (500)       //unit ms
 | ||
|  | 
 | ||
|  | #define PROTO_TIMER_GY_FEED_WDG_INTVL_CNT        (4)         //unit 500ms
 | ||
|  | 
 | ||
|  | /* trial run check time */ | ||
|  | #define IOT_APP_FW_RECOVER_TIME                  (5*60*1000) // uint ms
 | ||
|  | 
 | ||
|  | #if HW_PLATFORM == HW_PLATFORM_SIMU
 | ||
|  | 
 | ||
|  | #define PROTO_UNICAST_RETRY_DEFAULT_INTVL        (5000)     // unit ms
 | ||
|  | #define PROTO_BROADCAST_RETRY_DEFAULT_INTVL      (5000)     // unit ms
 | ||
|  | #define PROTO_UNICAST_RETRY_DEFAULT_CNT          (3)
 | ||
|  | #define PROTO_BROADCAST_RETRY_DEFAULT_CNT        (1)
 | ||
|  | 
 | ||
|  | #else /* HW_PLATFORM == HW_PLATFORM_SIMU */
 | ||
|  | 
 | ||
|  | #define PROTO_UNICAST_RETRY_DEFAULT_INTVL        (200)      // unit ms
 | ||
|  | #define PROTO_BROADCAST_RETRY_DEFAULT_INTVL      (0)        // unit ms
 | ||
|  | #define PROTO_UNICAST_RETRY_DEFAULT_CNT          (3)
 | ||
|  | #define PROTO_BROADCAST_RETRY_DEFAULT_CNT        (0)
 | ||
|  | #define PROTO_UNICAST_RETRY_NOACK_INTVL          (100)
 | ||
|  | 
 | ||
|  | #endif /* HW_PLATFORM == HW_PLATFORM_SIMU */
 | ||
|  | 
 | ||
|  | /* define the cache buffer for window reporting */ | ||
|  | #define PROTO_WIN_CACHE_LEN                      (256)// bytes
 | ||
|  | /* define the default time window for data reporting */ | ||
|  | #define PROTO_RTP_WINDOW_DEFAULT_SPAN            (40000) //unit ms
 | ||
|  | 
 | ||
|  | /* const, max supported network info */ | ||
|  | #define PROTO_SUPPORT_MAX_NEIGHBOR_NET           16
 | ||
|  | /* const, max supported monitor info */ | ||
|  | #define PROTO_SUPPORT_MAX_MONITOR                4
 | ||
|  | 
 | ||
|  | /* define the default tx power , will be set when bootup */ | ||
|  | #define DEFAULT_TX_POWER                         137
 | ||
|  | 
 | ||
|  | /* cco send paging message can include sta mac max count */ | ||
|  | #define PROTO_STA_PAGING_MAX_CNT                 (20)
 | ||
|  | 
 | ||
|  | #define ARRAY_CNT(a)    (sizeof(a) / sizeof((a)[0]))
 | ||
|  | 
 | ||
|  | #define FIRST_WL_FRAME      1
 | ||
|  | #define FIRST_PAIR_FRAME    1
 | ||
|  | 
 | ||
|  | #define FROM_PLC                                 0
 | ||
|  | #define FROM_UART                                1
 | ||
|  | 
 | ||
|  | #define GE_TYPE                                  0
 | ||
|  | #define MODBUS_TYPE                              1
 | ||
|  | #define DL645_TYPE                               2
 | ||
|  | 
 | ||
|  | /* the ge data cmd frame length before data position */ | ||
|  | #define GE_FEA0_HEAD_LEN        sizeof(ge_frame_data_send_set_subfn160_t)
 | ||
|  | 
 | ||
|  | #define iot_ge_buf_overflow_test(ge_buf_pos, len)                       \
 | ||
|  |     ((ge_buf_pos + len) < MCU_DATA_RECV_MAX) | ||
|  | 
 | ||
|  | typedef struct _proto_rpt_cache { | ||
|  |     /* cached data length */ | ||
|  |     uint16_t data_len; | ||
|  |     /* cached data */ | ||
|  |     uint8_t data[PROTO_WIN_CACHE_LEN]; | ||
|  | } proto_rpt_cache_t; | ||
|  | 
 | ||
|  | enum proto_check_frame_result_e { | ||
|  |     GET_NO_FRAME, | ||
|  |     GET_ONE_FRAME, | ||
|  |     GET_HALF_FRAME, | ||
|  |     GET_OVERFLOW, | ||
|  | }; | ||
|  | 
 | ||
|  | enum proto_cmd_handle_status_e { | ||
|  |     PROTO_CMD_IDLE, | ||
|  |     PROTO_CMD_WAIT_MAC_RESP, | ||
|  |     PROTO_CMD_WAIT_IP_RESP, | ||
|  |     PROTO_CMD_WAIT_SWVER_RESP, | ||
|  |     PROTO_CMD_WAIT_BOOT_INFO_RESP, | ||
|  |     PROTO_CMD_WAIT_PLCTXRX_CONFIG_RESP, | ||
|  |     PROTO_CMD_WAIT_PASSD_RESP, | ||
|  |     PROTO_CMD_WAIT_TOPO_RESP, | ||
|  |     PROTO_CMD_WAIT_NET_STS_RESP, | ||
|  |     PROTO_CMD_WAIT_PLC_STS_RESP, | ||
|  |     PROTO_CMD_WAIT_AVAIL_NETWORK_RESP = 10, | ||
|  |     PROTO_CMD_WAIT_RMT_WHITELIST_RESP, | ||
|  |     PROTO_CMD_WAIT_GREE_STS_RESP, | ||
|  |     PROTO_CMD_WAIT_RMT_PAIR_CFM, | ||
|  |     PROTO_CMD_WAIT_CMD_CFM, | ||
|  |     PROTO_CMD_WAIT_TX_PWR_RESP, | ||
|  |     PROTO_CMD_WAIT_RMT_WHITELIST_CFM, | ||
|  |     PROTO_CMD_WAIT_WHITE_LIST_SET, | ||
|  |     PROTO_CMD_WAIT_PAIR_TABLE_SET, | ||
|  |     PROTO_CMD_WAIT_NTB_RESP, | ||
|  |     PROTO_CMD_WAIT_FB_BITMAP_RESP, | ||
|  |     PROTO_CMD_WAIT_FIX_RATE_MODE_RESP, | ||
|  |     PROTO_CMD_WAIT_WORK_BAND_RESP, | ||
|  |     PROTO_CMD_WAIT_NODE_INFO_RESP, | ||
|  |     PROTO_CMD_WAIT_NW_INFO_RESP, | ||
|  |     PROTO_CMD_DL645_WAIT_TOPO_INFO_RESP, | ||
|  | }; | ||
|  | 
 | ||
|  | /* data or cmd tansmit direction */ | ||
|  | typedef enum _transmit_direction_e { | ||
|  |     /* data - mcu->protocol->plctxrx->remote */ | ||
|  |     DATA_DOWN_LINK = 0, | ||
|  |     /* data - remote->plctxrx->protocol->mcu */ | ||
|  |     DATA_UP_LINK, | ||
|  |     /* cmd - (mcu->)protocol->plctxrx  */ | ||
|  |     CMD_LOCAL_DOWN_LINK, | ||
|  |     /* cmd - plctxrx->protocol(->mcu)  */ | ||
|  |     CMD_LOCAL_UP_LINK, | ||
|  |     /* cmd - plctxrx->protocol(->mcu) data path */ | ||
|  |     CMD_REMOTE_UP_LINK, | ||
|  |     /* cmd - (mcu->)protocol->plctxrx->remote data path*/ | ||
|  |     CMD_REMOTE_DOWN_LINK, | ||
|  | } transmit_direction_e; | ||
|  | 
 | ||
|  | typedef uint8_t transmit_direction_e_t; | ||
|  | 
 | ||
|  | enum _proto_cco_groupnet_state_e { | ||
|  |     CCO_STATE_GROUPNET_IDLE = 0, | ||
|  |     CCO_STATE_GROUPNETING, | ||
|  | }; | ||
|  | 
 | ||
|  | /* node num for saved queue */ | ||
|  | #define PROTO_SAVED_MSG_NODE_NUM   40
 | ||
|  | 
 | ||
|  | /* whitelist query request maximum STA count */ | ||
|  | #define WL_QUERY_REQ_MAX_STA_CNT  40
 | ||
|  | 
 | ||
|  | /* for fn rx statistic */ | ||
|  | #define PROTO_FN_RX_STATISTIC_IDX    3
 | ||
|  | 
 | ||
|  | #define PROTO_SET_CVG_WL_FRAG_CNT    40
 | ||
|  | 
 | ||
|  | enum proto_cmd_cnf_reason_e { | ||
|  |     PROTO_REASON_OK, | ||
|  |     PROTO_REASON_STA_LEAVE_ERR, | ||
|  |     PROTO_REASON_WL_LOST_FRM, | ||
|  |     PROTO_REASON_WL_SEQ_MISSMATCH, | ||
|  |     PROTO_REASON_WL_CLR_NOTSUPPORT, | ||
|  |     /* removed three pair table error reason */ | ||
|  |     PROTO_REASON_NID_DUP = 8, | ||
|  |     PROTO_REASON_TIME_OUT, | ||
|  |     PROTO_REASON_MAC_MISSMATCH, | ||
|  |     PROTO_REASON_PWD_MISSMATCH, //11
 | ||
|  |     PROTO_REASON_JOINED, | ||
|  |     PROTO_REASON_NO_AUTHORITY, | ||
|  |     PROTO_REASON_LEN_MISSMATCH, | ||
|  |     PROTO_REASON_NID_MISSMATCH, | ||
|  |     PROTO_REASON_CCO_GROUPNETING, | ||
|  |     PROTO_REASON_CCO_GROUPNETING_IDLE, | ||
|  |     PROTO_REASON_ERR_DEVTYPE, | ||
|  |     PROTO_REASON_MAC_ADDR_ZERO, | ||
|  |     PROTO_REASON_NO_MAC_SETTED, //20
 | ||
|  |     PROTO_REASON_DUP_SETTING, | ||
|  |     PROTO_REASON_ROLE_MISMATCH, | ||
|  |     PROTO_REASON_CMD_DIR_ERR, | ||
|  |     PROTO_REASON_NOT_READY, | ||
|  |     PROTO_REASON_ALLOC_MEM_ERR, | ||
|  |     PROTO_REASON_NO_NB_NW_FOUND, | ||
|  |     PROTO_REASON_MONITOR_EXCESS, | ||
|  |     PROTO_REASON_PARAME_ERR, | ||
|  |     /* out of range */ | ||
|  |     PROTO_REASON_UART_PARAM_ERR, | ||
|  |     PROTO_REASON_SWITCH_UART_MODE_ERR, | ||
|  |     PROTO_REASON_SET_HOST_PORT_ERR, | ||
|  |     PROTO_REASON_NOT_SUPPORT, | ||
|  | 
 | ||
|  |     PROTO_REASON_NO_IP4_SETTED, | ||
|  |     PROTO_REASON_IP4_IS_INVALID, | ||
|  | 
 | ||
|  |     PROTO_REASON_MAX, | ||
|  | }; | ||
|  | 
 | ||
|  | /* tx power maximum value */ | ||
|  | #define PROTO_TX_POWER_VALUE_MAX 137 // unit dBuv
 | ||
|  | /* tx power minimum value */ | ||
|  | #define PROTO_TX_POWER_VALUE_MIN 95  // unit dBuv
 | ||
|  | 
 | ||
|  | enum _proto_op_type { | ||
|  |     /* It means operation object is whitelist. */ | ||
|  |     PROTO_OP_TYPE_WL   = 0, | ||
|  |     /* It means operation object is pairtable. */ | ||
|  |     PROTO_OP_TYPE_PAIR, | ||
|  | 
 | ||
|  |     PROTO_OP_TYPE_MAX, | ||
|  | }; | ||
|  | 
 | ||
|  | /* APP data type */ | ||
|  | #define GE_HOST_DATA_TYPE          0
 | ||
|  | #define GE_INTERNAL_BCN_DATA_TYPE  1
 | ||
|  | 
 | ||
|  | struct  _plctxrx_dev_info_t; | ||
|  | struct  _plctxrx_tx_data_info_t; | ||
|  | typedef struct _plctxrx_dev_info_t  plctxrx_dev_info_t; | ||
|  | typedef struct _plctxrx_tx_data_info_t plctxrx_tx_data_info_t; | ||
|  | 
 | ||
|  | struct _protpkt_list; | ||
|  | typedef struct _protpkt_list protpkt_list_t; | ||
|  | struct _plctxrx_rx_data_info_t; | ||
|  | typedef struct _plctxrx_rx_data_info_t  plctxrx_rx_data_info_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | /* proto message */ | ||
|  | typedef struct _iot_proto_msg_t { | ||
|  |     /* proto task message */ | ||
|  |     iot_task_msg_t  msg; | ||
|  |     /* message data */ | ||
|  |     void        *data1; | ||
|  |     uint32_t     data2; | ||
|  | } iot_proto_msg_t; | ||
|  | 
 | ||
|  | #pragma pack(push)  // save the pack status
 | ||
|  | #pragma pack(1)     // 1 byte align
 | ||
|  | /* gree protocol frame header */ | ||
|  | typedef struct _ge_frm_hdr_t { | ||
|  |     /* preable code 0xAAAA */ | ||
|  |     uint16_t preamble; | ||
|  |     /* data length range:[0x80,0x88] */ | ||
|  |     uint8_t  data_len; | ||
|  |     /* function code */ | ||
|  |     uint8_t  fn; | ||
|  | }  ge_frm_hdr_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | #if GE_CRC_ENABLE
 | ||
|  | typedef struct _ge_frm_tail_t { | ||
|  |     /* crc16 for gree frame */ | ||
|  |     uint16_t  check_sum; | ||
|  |     /* tail(0xFF)code of gree frame */ | ||
|  |     uint8_t  tail; | ||
|  | }  ge_frm_tail_t; | ||
|  | #else
 | ||
|  | typedef struct _ge_frm_tail_t { | ||
|  |     /* check sum of gree frame */ | ||
|  |     uint8_t  check_sum; | ||
|  |     /* tail(0xFF)code of gree frame */ | ||
|  |     uint8_t  tail; | ||
|  | }  ge_frm_tail_t; | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #pragma pack(pop)	// restore the pack status
 | ||
|  | 
 | ||
|  | typedef struct _sta_dev_t | ||
|  | { | ||
|  |     /* already in network */ | ||
|  |     bool_t   dev_ready; | ||
|  |     /* network id */ | ||
|  |     uint8_t  nid; | ||
|  |     /* role in network CCO or STA */ | ||
|  |     uint8_t  nw_role; | ||
|  |     /* ip of sta dev */ | ||
|  |     uint8_t  ip; | ||
|  |     /* mac of local dev */ | ||
|  |     uint8_t  mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* indication sequence */ | ||
|  |     uint8_t  ind_seq; | ||
|  | } sta_dev_t; | ||
|  | /*
 | ||
|  |  * when handle mcu data,maybe it is a big buffer, | ||
|  |  * we should use this struct to extract each | ||
|  |  * intact gree frame. | ||
|  | */ | ||
|  | typedef struct _mcu_data_handle_t { | ||
|  |     /* data buffer start address to hold uart input data  */ | ||
|  |     uint16_t data_pos; | ||
|  |     /* total length of data buffer */ | ||
|  |     uint16_t total_len; | ||
|  |     /* pointer of MCU data buffer */ | ||
|  |     uint8_t  data[MCU_DATA_RECV_MAX]; | ||
|  | } mcu_data_handle_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | /* state of cmd handle */ | ||
|  | typedef struct _proto_cmd_hdl_state_t { | ||
|  |     /* current state - like wait for xxx response */ | ||
|  |     uint8_t                state; | ||
|  |     /* save the seq for present downllink cmd */ | ||
|  |     uint8_t                seq; | ||
|  |     /* sending direction of async response cmd
 | ||
|  |      * which we are waiting for | ||
|  |      */ | ||
|  |     transmit_direction_e_t dir; | ||
|  |     /* save last set subfn, fill it in cnf frame */ | ||
|  |     uint8_t                cur_subfn; | ||
|  |     /* device which we are going to send response cmd to */ | ||
|  |     plctxrx_dev_info_t     dev; | ||
|  | } proto_cmd_hdl_state_t; | ||
|  | 
 | ||
|  | /* Ge Fn Code handle. Each Code should define itself function*/ | ||
|  | typedef bool_t(* PROTO_FN_HANDLE)(uint8_t *data, uint16_t len, \ | ||
|  |                                         transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | /* parse fn from intact gree frame */ | ||
|  | typedef uint8_t(* PROTO_PARSER)(uint8_t *data); | ||
|  | 
 | ||
|  | /* Send Received GL Frame to MotherBoard MCU / up layer */ | ||
|  | typedef uint32_t(* PROTO_SENDTO_UPLAYER)(iot_pkt_t *data); | ||
|  | 
 | ||
|  | /* update cco mac callback function */ | ||
|  | typedef uint32_t(* PROTO_UPDATA_CCO_MAC)(uint8_t * cco_mac); | ||
|  | 
 | ||
|  | /* plc control callback */ | ||
|  | typedef uint8_t(* PLCXMIT_CMD_CB)(iot_pkt_t *data); | ||
|  | 
 | ||
|  | /* plc transmit unicast packet callback */ | ||
|  | typedef uint8_t(* PLCXMIT_DATA_CB)(uint8_t *data, uint16_t len, | ||
|  |                                 protpkt_tx_info_t *txinfo); | ||
|  | 
 | ||
|  | /* post recv data */ | ||
|  | typedef uint8_t(*POST_RECV_DATA)(uint8_t * data, uint16_t len, uint32_t param); | ||
|  | 
 | ||
|  | /* Ge function code table */ | ||
|  | typedef struct _proto_fnhdl_tbl_t | ||
|  | { | ||
|  |     /*gree function code*/ | ||
|  |     uint32_t cmdid; | ||
|  |     /*each code handler*/ | ||
|  |     PROTO_FN_HANDLE cmd_handle_fn; | ||
|  | 
 | ||
|  |     /*each fn handle statistic */ | ||
|  |     uint32_t cmd_num; | ||
|  | } proto_fnhdl_tbl_t; | ||
|  | 
 | ||
|  | /* list for message save */ | ||
|  | typedef struct _proto_msg_saved_list_t { | ||
|  |     list_node_t *head; | ||
|  |     list_node_t *tail; | ||
|  |     uint16_t    depth; | ||
|  | } proto_msg_saved_list_t; | ||
|  | 
 | ||
|  | /* message saved node */ | ||
|  | typedef struct _proto_savedmsg_node_t { | ||
|  |     uint16_t    msg_type; | ||
|  |     uint16_t    msg_id; | ||
|  |     void        *data; | ||
|  |     transmit_direction_e_t dir; | ||
|  |     list_node_t node; | ||
|  | } proto_savedmsg_node_t; | ||
|  | 
 | ||
|  | /* network wl defination */ | ||
|  | typedef struct _proto_device_list_t { | ||
|  |     /* wl table fragment elment num  */ | ||
|  |     uint16_t wl_ccofrag_cnt; | ||
|  |     /* tmp recv wl dev num */ | ||
|  |     uint16_t valid_dev_tmp_cnt; | ||
|  |     /* cco wl changed num. broadcast in wl announce frm */ | ||
|  |     uint8_t  wl_cco_seq; | ||
|  |     /* cco wl dev number */ | ||
|  |     uint16_t valid_dev_cnt; | ||
|  |     /* online dev num */ | ||
|  |     uint16_t online_dev_cnt; | ||
|  |     /* tmp table for add or remove */ | ||
|  |     proto_dev_t dev_tmp[STA_DEV_MAX]; | ||
|  |     /* cco wl table */ | ||
|  |     proto_dev_t dev[STA_DEV_MAX]; | ||
|  |     /* table for sta online state flag */ | ||
|  |     bool_t online_flag[STA_DEV_MAX]; | ||
|  | #if PLC_SUPPORT_CCO_ROLE
 | ||
|  |     /* table for store sta pco addr */ | ||
|  |     uint8_t dev_pco[STA_DEV_MAX][IOT_MAC_ADDR_LEN]; | ||
|  | #endif
 | ||
|  | } proto_dev_list_t; | ||
|  | 
 | ||
|  | /* network info defination */ | ||
|  | typedef struct _proto_neighbor_info_t { | ||
|  |     /* network id  */ | ||
|  |     uint8_t  nid; | ||
|  |     /* network rev signal */ | ||
|  |     uint8_t  best_snr; | ||
|  |     /* flag to mark network in group or end state */ | ||
|  |     uint8_t  net_start_flag; | ||
|  |     /* cco mac addr */ | ||
|  |     uint8_t  mac[IOT_MAC_ADDR_LEN]; | ||
|  | } proto_neighbor_info_t; | ||
|  | 
 | ||
|  | typedef struct  _proto_neighbor_nw_t { | ||
|  |     /* found network num */ | ||
|  |     uint16_t count; | ||
|  |     /* arry for each network */ | ||
|  |     proto_neighbor_info_t node[PROTO_SUPPORT_MAX_NEIGHBOR_NET]; | ||
|  | } proto_neighbor_nw_t; | ||
|  | 
 | ||
|  | typedef struct _proto_groupnet_state_t { | ||
|  |     uint8_t state; | ||
|  | } proto_groupnet_state_t; | ||
|  | 
 | ||
|  | #if ENABLE_GE_DATA_SEND_TO_BEACON
 | ||
|  | /* cco vendor entry in beacon */ | ||
|  | typedef struct proto_vendor_info { | ||
|  |     uint8_t data[IOT_PLC_BEACON_DATA_MAX]; | ||
|  | } proto_vendor_info_t; | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* proto layer global context.*/ | ||
|  | typedef struct _prototask_contxt_t { | ||
|  |     /* indicate, proto layer is one task.*/ | ||
|  |     iot_task_h               task_handle; | ||
|  |     /* iot_task configuration */ | ||
|  |     iot_task_config_t        task_cfg; | ||
|  |     /* validate, parser and extract Gree control code from uart stream.*/ | ||
|  |     PROTO_PARSER             proto_pase_fn; | ||
|  |     /* api interface to report Gree packet to upper host, motherboard.*/ | ||
|  |     PROTO_SENDTO_UPLAYER     proto_sendto_mainboard_fn; | ||
|  |     /* local device information */ | ||
|  |     sta_dev_t                local_dev; | ||
|  |     /* CCO device information */ | ||
|  |     sta_dev_t                cco_dev; | ||
|  |     /* rx information from remote device for command */ | ||
|  |     plctxrx_rx_data_info_t   rx_info; | ||
|  |     /* command handled currently */ | ||
|  |     proto_cmd_hdl_state_t    sm; | ||
|  |     /* Gree control code handle table.
 | ||
|  |      * Gree team may focus on this table implementation. | ||
|  |      */ | ||
|  |     proto_fnhdl_tbl_t        *proto_cmd_hdl_tbl; | ||
|  |     /* plctxrx layer registered,
 | ||
|  |      * Gree layer use. send Gree frame to PLC | ||
|  |      */ | ||
|  |     PLCXMIT_DATA_CB          gree_data_send_cb; | ||
|  |     /* group network state for CCO(outair) */ | ||
|  |     proto_groupnet_state_t   groupnet_state; | ||
|  |     /* plctxrx layer registered, Gree layer use.
 | ||
|  |      * send control message to plctxrx. eg, | ||
|  |      * network selection, pairing. | ||
|  |     */ | ||
|  |     PLCXMIT_CMD_CB           gree_cmd_send_cb; | ||
|  |     /* list for saved msg */ | ||
|  |     proto_msg_saved_list_t   saved_msg_list; | ||
|  |     /* geneal timer used to handle period
 | ||
|  |      * action in proto layer | ||
|  |      */ | ||
|  |     timer_id_t               detect_timer; | ||
|  |     /* timer for gathering frame of up link */ | ||
|  |     timer_id_t               uart_monitor_timer; | ||
|  |     /* timer for waiting response */ | ||
|  |     timer_id_t               wait_resp_timer; | ||
|  |     /* timer for reboot after received reboot_cmd */ | ||
|  |     timer_id_t               reboot_tmr; | ||
|  |     /* timer for infomation statistics */ | ||
|  |     timer_id_t               statisc_tmr; | ||
|  |     /* timer for sta leaving network delay */ | ||
|  |     timer_id_t               leave_tmr; | ||
|  |     /* timer for update upgrade state */ | ||
|  |     timer_id_t               upgrade_tmr; | ||
|  |     /* window timer for reporting broadcast pkt to host port */ | ||
|  |     timer_id_t               rpt_window_tmr; | ||
|  |     /* timer for trial run */ | ||
|  |     timer_id_t               trial_run_tmr; | ||
|  |     /* timer for 645 meter local read mode */ | ||
|  |     timer_id_t               dl645_localmode_tmr; | ||
|  |     /* device list for whitelist */ | ||
|  |     proto_dev_list_t         dev_lst; | ||
|  |     /* total fn received */ | ||
|  |     uint32_t                 num_fn_received; | ||
|  |     /* total fn send */ | ||
|  |     uint32_t                 num_fn_send; | ||
|  |     /* topo response index */ | ||
|  |     uint16_t                 topo_resp_index; | ||
|  |     /* to save query topo infomation type */ | ||
|  |     uint8_t                  topo_info_type; | ||
|  |     /* neighbor net work infor */ | ||
|  |     proto_neighbor_nw_t      neighbor_nw; | ||
|  |     /* flag marked for have mac addr
 | ||
|  |        only when mcu response mac, then we can handle fn */ | ||
|  |     uint8_t                  macaddr_set; | ||
|  |     /* flag indicate wehther cco already started group net or not */ | ||
|  |     uint8_t                  net_start_flag; | ||
|  |     /* repsonse state to mainboard flag */ | ||
|  |     uint8_t                  resp_state_flag; | ||
|  |     /* cache buffer for window reporting */ | ||
|  |     proto_rpt_cache_t        rpt_cache; | ||
|  |     /* custom use, updata cco mac according to cco paging */ | ||
|  |     PROTO_UPDATA_CCO_MAC     update_cco_mac; | ||
|  |     /* timer for sta paging */ | ||
|  |     timer_id_t               paging_timer; | ||
|  |     /* for sta paging index in dev_list.dev */ | ||
|  |     uint32_t                 paging_index; | ||
|  |     /* sta save the cco mac address from paging message */ | ||
|  |     uint8_t                  paging_cco_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* cache reboot reason, see reboot_type_e, default set REBOOT_NORMAL */ | ||
|  |     uint8_t                  reboot_reason; | ||
|  |     /* cli interface */ | ||
|  |     iot_cli_sg_interface_t   cli_interface; | ||
|  |     /* pib handle */ | ||
|  |     app_pib_rw_t             *pib_rw; | ||
|  |     /* cache of load/save info into custom flash */ | ||
|  |     ge_app_pib_info_t        flashinfo; | ||
|  | 
 | ||
|  | #if ENABLE_GE_DATA_SEND_TO_BEACON
 | ||
|  |     /* 14 Bytes beacon data */ | ||
|  |     proto_vendor_info_t      rxbc_data; | ||
|  | #endif
 | ||
|  |     /* ge_ext app and ge app sharing common_bin_dump func */ | ||
|  |     os_mutex_h               common_bin_dump_mutex; | ||
|  |     /* cco network done */ | ||
|  |     uint8_t                  cco_net_done; | ||
|  |     /* statistic timer cnt */ | ||
|  |     uint8_t                  statistic_cnt; | ||
|  |     /* for hw watchdog  */ | ||
|  |     uint8_t                  hw_watchdog_en       : 1, | ||
|  |     /* hw watchdog output control */ | ||
|  |                              hw_watchdog_out      : 1, | ||
|  |     /* reserved */ | ||
|  |                              resv                 : 6; | ||
|  |     /* info of edge */ | ||
|  |     edge_obj_t               edge_obj; | ||
|  |     /* start polling in idle state */ | ||
|  |     timer_id_t               edge_monitor_start_tmr; | ||
|  |     /* cache send uart pkt data */ | ||
|  |     iot_pkt_t                *cache_pkt; | ||
|  |     /* detect device mac which module installed on.
 | ||
|  |        device mac has high priority than module itsef mac. */ | ||
|  |     uint8_t                  detect_devmac_cnt; | ||
|  | } prototask_contxt_t; | ||
|  | 
 | ||
|  | /************************************extended fn define***********************/ | ||
|  | /* fill gree extended fn frame */ | ||
|  | #define EXT_FN_FRM_PREPARE(cmd, ext_fn, sub_fn)  do { \
 | ||
|  |     cmd->hdr.hdr.preamble = GE_FRM_PREAMBLE_CODE; \ | ||
|  |     if (ext_fn == PROTO_UPGRADE_UL) {\ | ||
|  |         cmd->hdr.hdr.data_len = sizeof(*cmd) - GE_FRM_MIN_LEN + 0x90; \ | ||
|  |     } else {\ | ||
|  |         cmd->hdr.hdr.data_len = sizeof(*cmd) - \ | ||
|  |             GE_FRM_MIN_LEN + GE_FRM_PLD_MIN_LEN; \ | ||
|  |     }\ | ||
|  |     cmd->hdr.hdr.fn       = ext_fn; \ | ||
|  |     cmd->hdr.subfn        = sub_fn; \ | ||
|  |     cmd->tail.tail        = GE_FRM_TAIL_CODE; \ | ||
|  | }while(0) | ||
|  | 
 | ||
|  | /* fill two part gree extended fn frame */ | ||
|  | #define EXT_FN_TWO_PART_FRM_PREPARE(cmd, ptail, rsv_data_len, ext_fn, sub_fn)\
 | ||
|  |     do { \ | ||
|  |     cmd->hdr.hdr.preamble = GE_FRM_PREAMBLE_CODE; \ | ||
|  |     cmd->hdr.hdr.data_len = sizeof(*cmd) - \ | ||
|  |         GE_FRM_MIN_LEN + GE_FRM_PLD_MIN_LEN + \ | ||
|  |         sizeof(ge_frm_tail_t) + rsv_data_len; \ | ||
|  |     cmd->hdr.hdr.fn        = ext_fn; \ | ||
|  |     cmd->hdr.subfn         = sub_fn; \ | ||
|  |     ptail->tail            = GE_FRM_TAIL_CODE; \ | ||
|  | }while(0) | ||
|  | 
 | ||
|  | /* fill header of ge frame */ | ||
|  | #define GE_FRM_HDR_PREPARE(cmd, ext_fn, sub_fn, frm_len)  do { \
 | ||
|  |     cmd->hdr.hdr.preamble = GE_FRM_PREAMBLE_CODE; \ | ||
|  |     cmd->hdr.hdr.data_len = frm_len - GE_FRM_MIN_LEN; \ | ||
|  |     cmd->hdr.hdr.fn       = ext_fn; \ | ||
|  |     cmd->hdr.subfn        = sub_fn; \ | ||
|  | }while(0) | ||
|  | 
 | ||
|  | typedef struct _uart_thpt_t { | ||
|  |    /* com0 recv (from mcu) char num */ | ||
|  |    uint32_t         recv_len; | ||
|  |    /* com0 recv kbps */ | ||
|  |    uint32_t         recv_rate; | ||
|  |    /* com0 send char num */ | ||
|  |    uint32_t         send_len; | ||
|  |    /* com0 send kbps */ | ||
|  |    uint32_t         send_rate; | ||
|  | } uart_thpt_t; | ||
|  | 
 | ||
|  | #pragma pack(push)  // save the pack status
 | ||
|  | #pragma pack(1)     // 1 byte align
 | ||
|  | 
 | ||
|  | /* ge protocol frame header */ | ||
|  | typedef struct _ge_extend_fn_hdr_t { | ||
|  |     ge_frm_hdr_t  hdr; | ||
|  |     /* sub function code */ | ||
|  |     uint8_t  subfn; | ||
|  | } ge_extend_fn_hdr_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_COMM_FAULT_RPT_CMD */ | ||
|  | typedef struct _ge_frame_comm_fault_rpt_set_subfn8_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            type; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            reason; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_comm_fault_rpt_set_subfn8_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_REBOOT_STA_CMD */ | ||
|  | typedef struct _ge_frame_reboot_sta_set_subfn18_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            nid; | ||
|  |     /* reboot_type:0-normal reboot,1-assert, 2-write NULL address */ | ||
|  |     uint8_t            reboot_type; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            src_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     uint8_t            dst_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_reboot_sta_set_subfn18_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_CMD_CFM_CMD */ | ||
|  | typedef struct _ge_frame_cmd_cfm_set_subfn20_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            cmd; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            result; | ||
|  |     uint8_t            reason; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_cmd_cfm_set_subfn20_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_CMD_CCO_STAT_IND_CMD */ | ||
|  | typedef struct _ge_frame_cco_stat_ind_set_subfn21_t{ | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            resv2; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            ready; | ||
|  |     uint8_t            nid; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_cco_stat_ind_set_subfn21_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_CMD_TX_PWR_CMD */ | ||
|  | typedef struct _ge_frame_tx_pwr_set_subfn22_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            txpwr; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_tx_pwr_set_subfn22_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_BOOT_READY_ID_CMD */ | ||
|  | typedef struct _ge_frame_boot_ready_id_set_subfn24_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            local_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     uint8_t            cco_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_boot_ready_id_set_subfn24_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_CLR_CUST_FLASH_CMD */ | ||
|  | typedef struct _ge_frame_clr_cust_flash_set_subfn25_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_clr_cust_flash_set_subfn25_t; | ||
|  | 
 | ||
|  | /* PROTO_MONITR_ONLINE_IND */ | ||
|  | typedef struct _ge_frame_monitor_online_ind_set_subfn26_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            monitor_cnt; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_monitor_online_ind_set_subfn26_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SW_UART_MODE_CMD */ | ||
|  | typedef struct _ge_frame_sw_uart_mode_set_subfn27_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_sw_uart_mode_set_subfn27_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SET_BAND_ID_CMD */ | ||
|  | typedef struct _ge_frame_band_id_set_subfn28_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            band_id; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_band_id_set_subfn28_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SET_HOST_PORT_CMD */ | ||
|  | typedef struct _ge_frame_host_port_set_subfn29_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            host_port; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_host_port_set_subfn29_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SET_FB_BITMAP_CMD */ | ||
|  | typedef struct _ge_frame_fb_scan_bitmap_set_subfn30_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /**
 | ||
|  |      * scan fb_scan_bitmap defined as follow: | ||
|  |      * bit0  == 1: support band 0 | ||
|  |      * bit1  == 1: support band 1 | ||
|  |      * ... | ||
|  |      * bit15 == 1: support band 15 | ||
|  |      */ | ||
|  |     uint16_t           fb_scan_bitmap; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fb_scan_bitmap_set_subfn30_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SET_FIX_RATE_MODE_CMD */ | ||
|  | typedef struct _ge_frame_fix_rate_set_subfn31_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /**
 | ||
|  |      * 0: disable fixed rate | ||
|  |      * 1: enable fixed rate | ||
|  |      */ | ||
|  |     uint8_t            enable; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fix_rate_set_subfn31_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SEND_STA_PAGING_CMD */ | ||
|  | typedef struct _ge_frame_sta_paging_subfn32_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            count; | ||
|  |     uint8_t            cco_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     uint8_t            sta_mac[0][IOT_MAC_ADDR_LEN]; | ||
|  | } ge_frame_sta_paging_subfn32_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SET_RPT_DEV_VERINFO_CMD */ | ||
|  | typedef struct _ge_frame_set_dev_verinfo_rpt_subfn33_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            dest_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_set_dev_verinfo_rpt_subfn33_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_RPT_DEV_VERINFO_IND_CMD */ | ||
|  | typedef struct _ge_frame_rpt_dev_verinfo_ind_subfn155_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /* see AP_FIRMWARE_VERSION_TYPE */ | ||
|  |     uint8_t            ver_type; | ||
|  |     /* firmware_version */ | ||
|  |     uint32_t           verinfo; | ||
|  |     /* indicate which device responses the querry cmd */ | ||
|  |     uint8_t            dev_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* chip management id */ | ||
|  |     uint8_t            chip_mmid[IOT_CHIP_MMID_LEN]; | ||
|  |     /* hardware_version */ | ||
|  |     uint32_t           hw_ver; | ||
|  | 
 | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_rpt_dev_verinfo_ind_subfn155_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SET_SWITCH_BOOT_PART_CMD */ | ||
|  | typedef struct _ge_frame_sw_bt_part_subfn34_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            src_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     uint8_t            dst_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_sw_bt_part_subfn34_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_GE_BC_DATA_CMD */ | ||
|  | typedef struct _ge_frame_bc_data_send_subfn162_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            data[IOT_PLC_BEACON_DATA_MAX]; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_bc_data_send_subfn162_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_LOCAL_MAC_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_local_mac_query_subfn1_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            dir; | ||
|  |     uint8_t            nw_role; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_local_mac_query_subfn1_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_FW_SWVER_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_fw_swver_query_subfn2_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fw_swver_query_subfn2_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_BOOTINFO_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_bootinfo_query_subfn3_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_bootinfo_query_subfn3_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_TOPO_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_topo_query_subfn5_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     /* see TOPO_INFO_TYPE_Vx */ | ||
|  |     uint8_t            type; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_topo_query_subfn5_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_WHITELIST_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_wl_query_subfn7_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            cco_flag; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_wl_query_subfn7_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_PAIR_TBLE_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_pair_tbl_query_subfn8_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            cco_flag; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_pair_tbl_query_subfn8_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_AVAIL_NW_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_avail_nw_query_subfn9_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_avail_nw_query_subfn9_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_TX_PWR_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_tx_pwr_query_subfn11_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_tx_pwr_query_subfn11_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_UART_THRPT_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_uart0_thrpt_query_subfn12_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_uart0_thrpt_query_subfn12_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_WHITELIST_STATE_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_wl_state_query_subfn17_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_wl_state_query_subfn17_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_MODULE_INFO_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_module_info_query_subfn18_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_module_info_query_subfn18_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_NTB_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_ntb_query_subfn19_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_ntb_query_subfn19_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_FB_BITMAP_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_fb_bitmap_query_subfn20_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /**
 | ||
|  |      * 0: all bands bitmap that MAC has supported. | ||
|  |      * 1: scan bands bitmap. | ||
|  |      */ | ||
|  |     uint8_t            is_scan_bitmap; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fb_bitmap_query_subfn20_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_FIX_RATE_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_fix_rate_query_subfn21_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fix_rate_query_subfn21_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_WORK_BAND_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_work_band_query_subfn22_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_work_band_query_subfn22_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_LOCAL_IP4_QUERY_CMD */ | ||
|  | typedef struct _ge_frame_local_ip4_query_subfn25_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_local_ip4_query_subfn25_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_FW_SWVER_RESP_CMD */ | ||
|  | typedef struct _ge_frame_fw_swver_resp_subfn2_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint32_t           swver; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fw_swver_resp_subfn2_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_SYSINFO_RESP_CMD */ | ||
|  | typedef struct _ge_frame_sysinfo_resp_subfn3_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint16_t           boot_cnt; | ||
|  |     uint8_t            last_boot_reason; | ||
|  |     uint32_t           run_time; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_sysinfo_resp_subfn3_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_TX_PWR_RESP_CMD */ | ||
|  | typedef struct _ge_frame_tx_pwr_resp_subfn11_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            tx_pwr; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_tx_pwr_resp_subfn11_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_UART_THPT_RESP_CMD */ | ||
|  | typedef struct _ge_frame_uart_thpt_resp_subfn12_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     uint8_t            recv_rate[3]; | ||
|  |     uint8_t            send_rate[3]; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_uart_thpt_resp_subfn12_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_WHITELIST_STATE_RESP_CMD */ | ||
|  | typedef struct _ge_frame_wl_state_resp_subfn17_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /* whitelist state, 1-enable whitelist, 0-disable whitelist */ | ||
|  |     uint8_t            state; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_wl_state_resp_subfn17_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_NTB_RESP_CMD */ | ||
|  | typedef struct _ge_frame_ntb_resp_subfn19_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /* ntb */ | ||
|  |     uint32_t           ntb; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_ntb_resp_subfn19_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_FB_BITMAP_RESP_CMD */ | ||
|  | typedef struct _ge_frame_fb_bitmap_resp_subfn20_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /**
 | ||
|  |      * 0: all bands that MAC has suppprted. | ||
|  |      * 1: scan bands. | ||
|  |     */ | ||
|  |     uint8_t            is_scan_bitmap; | ||
|  |     /**
 | ||
|  |      * bitmap defined as follow: | ||
|  |      * bit0  == 1: support band 0 | ||
|  |      * bit1  == 1: support band 1 | ||
|  |      * ... | ||
|  |      * bit15 == 1: support band 15 | ||
|  |      */ | ||
|  |     uint16_t           bitmap; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fb_bitmap_resp_subfn20_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_FIX_RATE_MODE_RESP_CMD */ | ||
|  | typedef struct _ge_frame_fix_rate_mode_resp_subfn21_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /**
 | ||
|  |      * 0:fixed rate mode disable | ||
|  |      * 1:fixed rate mode enable | ||
|  |     */ | ||
|  |     uint8_t            enable; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_fix_rate_mode_resp_subfn21_t; | ||
|  | 
 | ||
|  | /* subfn = PROTO_WORK_BAND_RESP_CMD */ | ||
|  | typedef struct _ge_frame_work_band_resp_subfn22_t { | ||
|  |     ge_extend_fn_hdr_t hdr; | ||
|  |     uint8_t            resv0; | ||
|  |     uint8_t            resv1; | ||
|  |     uint8_t            seq; | ||
|  |     /* work band */ | ||
|  |     uint8_t            band; | ||
|  |     ge_frm_tail_t      tail; | ||
|  | } ge_frame_work_band_resp_subfn22_t; | ||
|  | 
 | ||
|  | typedef enum _iot_ge_gpio_dir_mode_e { | ||
|  |     IOT_GE_GPIO_DIR_NONE, | ||
|  |     IOT_GE_GPIO_DIR_OUTPUT, | ||
|  |     IOT_GE_GPIO_DIR_INPUT, | ||
|  | }iot_ge_gpio_dir_mode_e; | ||
|  | 
 | ||
|  | typedef enum _iot_ge_gpio_pull_mode_e { | ||
|  |     IOT_GE_GPIO_PULL_NONE, | ||
|  |     IOT_GE_GPIO_PULL_UP, | ||
|  |     IOT_GE_GPIO_PULL_DOWN, | ||
|  | }iot_ge_gpio_pull_mode_e; | ||
|  | 
 | ||
|  | typedef enum _iot_ge_gpio_state_e { | ||
|  |     IOT_GE_GPIO_CLOSE, | ||
|  |     IOT_GE_GPIO_OPEN, | ||
|  | }iot_ge_gpio_state_e; | ||
|  | 
 | ||
|  | /* GPIO config struct */ | ||
|  | typedef struct _iot_ge_gpio_config_t { | ||
|  |     uint8_t             gpio_num; | ||
|  |     uint8_t             dir_mode; | ||
|  |     uint8_t             pull_mode; | ||
|  |     iot_ge_gpio_state_e gpio_state; | ||
|  | }iot_ge_gpio_config_t; | ||
|  | 
 | ||
|  | #pragma pack(pop)
 | ||
|  | 
 | ||
|  | extern uint8_t ge_bcast_addr[IOT_MAC_ADDR_LEN]; | ||
|  | extern prototask_contxt_t prototask_contxt; | ||
|  | extern uart_thpt_t uart_thpt; | ||
|  | extern iot_ge_gpio_config_t iot_ge_gpio_g[IOT_GE_VALID_GPIO_MAX]; | ||
|  | /**
 | ||
|  |  * @brief iot_gree_get_crc_byte - get data from the crc pos in gree frame | ||
|  |  * @param data:          pointer of reading back data | ||
|  |  * @retval:              crc data | ||
|  |  */ | ||
|  | uint16_t iot_gree_get_crc_byte(uint8_t *data); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief ge_frm_checksum_calc - calculate frame check sum | ||
|  |  * @param data:          data to check | ||
|  |  * @param data:          data len | ||
|  |  * @retval:              verification data for gree frame | ||
|  |  */ | ||
|  | #if GE_CRC_ENABLE
 | ||
|  | uint16_t ge_frm_checksum_calc(uint8_t *data, uint16_t len); | ||
|  | #else
 | ||
|  | uint8_t ge_frm_checksum_calc(uint8_t *data, uint16_t len); | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_proto_mainboard_data_pend - pend send mainboard data to cache. | ||
|  |  * @param p_pkt:         data to send | ||
|  |  */ | ||
|  | void iot_proto_mainboard_data_pend(iot_pkt_t *data); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_proto_resume_pkt_2_mainboard - resume cache pkt to mainboard. | ||
|  |  */ | ||
|  | void iot_proto_resume_pkt_2_mainboard(); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_proto_send_to_mainboard - send data to mainboard | ||
|  |  * @param p_pkt:         data to send | ||
|  |  */ | ||
|  | void iot_proto_send_to_mainboard(iot_pkt_t *p_pkt); | ||
|  | 
 | ||
|  | /* iot_proto_task_init - init protocol task
 | ||
|  |  * @return: | ||
|  |  * ERR_AGAIN - reinit proto task | ||
|  |  * ERR_NOMEM - no  memory | ||
|  |  * ERR_OK    - OK | ||
|  | */ | ||
|  | uint32_t iot_proto_task_init(); | ||
|  | 
 | ||
|  | /* iot_proto_task_deinit - deinit protocol task
 | ||
|  | */ | ||
|  | void iot_proto_task_deinit(); | ||
|  | /* iot_proto_uplayer_data_recv_func - register in app,called when recv MCU data
 | ||
|  |  * @param: | ||
|  |  * buf: pointer of recv buffer | ||
|  |  * len: length of recv buffer | ||
|  |  * @return: | ||
|  |  * ERR_NOMEM - no  memory | ||
|  |  * ERR_OK    - OK | ||
|  | */ | ||
|  | uint8_t iot_proto_uplayer_data_recv_func(uint8_t *buf, uint16_t len); | ||
|  | /* iot_proto_plc_data_recv_func - register in plctxrx,called when recv plc data
 | ||
|  |  * @param: | ||
|  |  * report_framelist: pointer of report frame list | ||
|  |  * rxinfo: rx information of received frame | ||
|  |  * @return: | ||
|  |  * ERR_NOMEM - no  memory | ||
|  |  * ERR_OK    - OK | ||
|  |  */ | ||
|  | uint8_t iot_proto_plc_data_recv_func(protpkt_list_t  *report_framelist, | ||
|  |                                     plctxrx_rx_data_info_t *rxinfo); | ||
|  | 
 | ||
|  | /* iot_proto_plctxrx_cmd_resp_recv_func - register in plctxrx,
 | ||
|  |  *                                called when recv plctxrx cmd | ||
|  |  * @param: | ||
|  |  * data: data packet | ||
|  |  * @return: | ||
|  |  * ERR_NOMEM - no  memory | ||
|  |  * ERR_OK    - OK | ||
|  | */ | ||
|  | uint8_t iot_proto_plctxrx_cmd_resp_recv_func(iot_pkt_t *data); | ||
|  | 
 | ||
|  | 
 | ||
|  | /* iot_proto_plctxrx_register - register in protocol layer,
 | ||
|  |  *                                called when recv proto data | ||
|  |  * @param: | ||
|  |  * cmd_cb: cmd callback function | ||
|  |  * data_cb: data callback function | ||
|  |  * @return: | ||
|  |  * ERR_NOMEM - no  memory | ||
|  |  * ERR_OK    - OK | ||
|  | */ | ||
|  | 
 | ||
|  | uint8_t iot_proto_plctxrx_register(PLCXMIT_CMD_CB cmd_cb, | ||
|  |                                     PLCXMIT_DATA_CB data_cb); | ||
|  | 
 | ||
|  | /*
 | ||
|  |   register top uart send to proto layer | ||
|  | */ | ||
|  | uint8_t iot_proto_register_response_to_uplayer(PROTO_SENDTO_UPLAYER fn); | ||
|  | 
 | ||
|  | /*
 | ||
|  |   register for update cco mac before join the network | ||
|  | */ | ||
|  | uint8_t iot_proto_register_update_cco_mac_to_uplayer(PROTO_UPDATA_CCO_MAC fn); | ||
|  | 
 | ||
|  | /* app registered, proto is ready */ | ||
|  | uint8_t iot_proto_is_ready(void); | ||
|  | 
 | ||
|  | /*
 | ||
|  |    update vendor_infor | ||
|  | */ | ||
|  | uint8_t iot_proto_update_vendr(iot_pkt_t *pkt); | ||
|  | 
 | ||
|  | void iot_proto_cfm_cmd_group(void *buf, uint8_t cmd, | ||
|  |     uint8_t result, uint8_t reason, uint8_t seq); | ||
|  | 
 | ||
|  | void iot_proto_wl_save2flash(void); | ||
|  | 
 | ||
|  | void iot_proto_upgrade_app_pib_info(void); | ||
|  | 
 | ||
|  | void iot_proto_flashinfo_init(void); | ||
|  | 
 | ||
|  | void iot_proto_cco_groupnet_sm(uint8_t *data, uint8_t subfn, | ||
|  |     transmit_direction_e_t dir, void *info); | ||
|  | 
 | ||
|  | void iot_proto_report_disconn_event2mcu(uint8_t *mac); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_local_mac_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_join_nw_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_whitelist_set_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_conn_ind_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_start_groupnet_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_end_groupnet_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_reboot_sta_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_cmd_cfm_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_cco_state_ind_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_nid_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_sta_leave_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_comm_fault_ind_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_grapp_reg_conf_ind_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_aes_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_aes_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_resp_aes_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_resp_aes_frame(uint8_t seq); | ||
|  | 
 | ||
|  | bool_t iot_proto_data_handler(uint8_t *data, uint16_t len, | ||
|  |     transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_uart_param_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_bc_data_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_local_mac_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_swver_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_boot_info_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_topo_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_net_sts_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_whitelist_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_avail_nw_handler(uint8_t *data, uint16_t len, | ||
|  |     transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_tx_pwr_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_uart_thrpt_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_nw_detailinfo_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_uart_param_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_ext_query_wl_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_nid_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_wl_state_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_module_info_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_ntb_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_node_info_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_nw_info_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_local_ip4_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_gpio_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_delay_time_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_local_mac_resp_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_fw_swver_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_boot_info_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_topo_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_net_sts_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_whitelist_resp_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_avail_nw_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_tx_power_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_ntb_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_node_info_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_nw_info_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_gpio_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_cctt_dl645_topo_resp(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | void iot_proto_wl_pt_remote_query_timeout_from_mcu(uint32_t state); | ||
|  | 
 | ||
|  | void iot_proto_wait_rmt_topo_resp_timeout(proto_cmd_hdl_state_t *sm); | ||
|  | 
 | ||
|  | uint8_t iot_proto_plctxtx_fn_subfn_get(plctxrx_cmd_resp_t *cmd, | ||
|  |     uint8_t *fn, uint8_t *subfn); | ||
|  | 
 | ||
|  | void iot_proto_query_mcu_mac(); | ||
|  | 
 | ||
|  | proto_cmd_hdl_state_t* iot_proto_cmd_handle_state_get(); | ||
|  | 
 | ||
|  | void iot_proto_fill_txinfo(protpkt_tx_info_t* txinfo, bool_t need_ack, | ||
|  |     txrx_type_e send_type, uint8_t retry_cnt, uint16_t retry_intvl, | ||
|  |     uint16_t sta_cnt, uint8_t *src_mac, uint8_t *dst_mac); | ||
|  | 
 | ||
|  | void iot_proto_remote_cmd_send_to_plctxrx | ||
|  |     (uint8_t *data, uint16_t len,protpkt_tx_info_t *txinfo); | ||
|  | 
 | ||
|  | void iot_proto_whitelist_add_remove(uint8_t action, uint8_t *mac, | ||
|  |     bool_t need_ack_cfm); | ||
|  | 
 | ||
|  | void iot_proto_whitelist_remove_all(bool_t need_ack_cfm); | ||
|  | 
 | ||
|  | void iot_proto_whitelist_en_disable(uint8_t action, bool_t need_ack_cfm); | ||
|  | 
 | ||
|  | void iot_proto_vendor_info_set(uint8_t *p_passd, | ||
|  |     bool_t need_ack, uint8_t net_start_flag); | ||
|  | 
 | ||
|  | void iot_proto_cmd_send_to_plctxrx(iot_pkt_t *p_pkt); | ||
|  | 
 | ||
|  | void iot_proto_resp_cfm_frame(uint32_t resp, uint32_t dir, | ||
|  |     uint32_t cmd, uint8_t seq, uint8_t *dst_mac); | ||
|  | 
 | ||
|  | void iot_proto_boot_ready_ind(uint8_t *local_mac); | ||
|  | 
 | ||
|  | void iot_proto_cmd_handle_state_init(); | ||
|  | 
 | ||
|  | void iot_proto_set_tx_power(uint8_t tx_power, uint8_t need_ack); | ||
|  | 
 | ||
|  | void iot_proto_set_mac(uint8_t *mac, uint8_t dev_type, uint8_t need_ack); | ||
|  | 
 | ||
|  | void iot_proto_data_send_to_plctxrx(uint8_t *data, uint16_t len, | ||
|  |                               protpkt_tx_info_t *txinfo); | ||
|  | 
 | ||
|  | bool_t mac_addr_is_valid_addr(uint8_t *mac); | ||
|  | 
 | ||
|  | bool_t mac_addr_in_flash_is_valid_addr(uint8_t *mac); | ||
|  | 
 | ||
|  | void iot_proto_whitelist_state_init(void); | ||
|  | 
 | ||
|  | bool_t iot_proto_wl_or_pt_remote_set_or_query_to_cco(uint8_t *data, uint16_t len, | ||
|  |     transmit_direction_e_t dir, uint8_t wait_type); | ||
|  | 
 | ||
|  | int32_t iot_proto_check_mac_exists(uint8_t *mac, proto_dev_t *dev_tb, | ||
|  |     uint16_t valid_cnt); | ||
|  | 
 | ||
|  | void iot_proto_add_wl_to_tmp(proto_dev_t *dev); | ||
|  | 
 | ||
|  | void iot_proto_add_wl_tmp2formal(void); | ||
|  | 
 | ||
|  | void iot_proto_del_wl_from_formal(void); | ||
|  | 
 | ||
|  | bool_t mac_addr_is_bcast_addr(uint8_t *mac); | ||
|  | 
 | ||
|  | void iot_proto_task_post_msg(uint16_t msg_type, uint16_t msg_id, void* data, | ||
|  |     transmit_direction_e_t dir, uint8_t prio); | ||
|  | 
 | ||
|  | #define iot_proto_pairtable_state_init()
 | ||
|  | /* This will store config onto customor flash area. */ | ||
|  | uint32_t iot_proto_flashsave(ge_app_pib_info_t *p_info); | ||
|  | uint32_t iot_proto_cust_flashinfo_check(ge_app_pib_info_t *p_info); | ||
|  | void iot_proto_cust_flashinfo_repair(ge_app_pib_info_t *p_info); | ||
|  | /*
 | ||
|  |    load flash information | ||
|  | */ | ||
|  | uint32_t iot_proto_flashload(ge_app_pib_info_t* info); | ||
|  | /*
 | ||
|  |    dump flash information | ||
|  | */ | ||
|  | void iot_proto_dumpflash(ge_app_pib_info_t* info); | ||
|  | 
 | ||
|  | uint8_t uart_baud_find_index(uint32_t baudrate); | ||
|  | 
 | ||
|  | bool_t iot_proto_uart_param_check(uint32_t baudrate, uint8_t parity, | ||
|  |     uint8_t data_bits, uint8_t stop_bits); | ||
|  | 
 | ||
|  | bool_t iot_proto_clr_flashinfo_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_fb_bitmap_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_fb_bitmap_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_fb_bitmap_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | void iot_proto_set_fb_bitmap(uint16_t *p_set_bitmap, bool_t need_ack); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_fix_rate_mode_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_fix_rate_mode_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_fix_rate_mode_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_cache_data_for_window_rpt(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_query_work_band_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_work_band_resp_subfn_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_sta_paging_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_switch_boot_part_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_config_gpio_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_local_ip4_subfn_handler(uint8_t *data, | ||
|  |      uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | bool_t iot_proto_set_gpio_handler(uint8_t *data, | ||
|  |     uint16_t len, transmit_direction_e_t dir); | ||
|  | 
 | ||
|  | void iot_proto_sta_paging_mac(); | ||
|  | 
 | ||
|  | void iot_proto_custom_pib_info_load(void *cus_pib_info, uint8_t size); | ||
|  | 
 | ||
|  | void iot_proto_custom_pib_info_save(void *cus_pib_info, uint8_t size); | ||
|  | 
 | ||
|  | uint8_t iot_proto_data_parse_and_post(uint8_t *buf, uint16_t len, | ||
|  |     POST_RECV_DATA post_func, uint32_t param); | ||
|  | 
 | ||
|  | uint16_t iot_proto_get_plc_data_len(uint8_t *src_data, uint16_t data_len); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * ge_frame_data_len - calculate frame data len | ||
|  |  * @data:              point to the ge frames | ||
|  |  * @data_len:          the length of ge frames | ||
|  |  * @frame_data_len:    point to the data length of first ge frame | ||
|  |  * @retval: -          error code | ||
|  |  */ | ||
|  | uint8_t ge_frame_data_len(uint8_t *data, uint16_t data_len, | ||
|  |     uint16_t *frame_data_len); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_proto_get_cco_mac - gets the CCO address in the belonging network | ||
|  |  * @param mac: save the cco MAC address | ||
|  |  * @return: ERR_OK   -> succeeded | ||
|  |  *          ERR_FAIL -> failed | ||
|  |  */ | ||
|  | uint8_t iot_proto_get_cco_mac(uint8_t* mac); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_handle_ge_from_plc() - To pickup DL645 data | ||
|  |  * @param p_pkt:   the pkt include input data | ||
|  |  */ | ||
|  | void iot_handle_ge_from_plc(iot_pkt_t *p_pkt); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_edge_delay_start() - delay start edge | ||
|  |  */ | ||
|  | void iot_edge_delay_start(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief is_edge_running() - check the edge status: running or not | ||
|  |  * @retval:        true or false | ||
|  |  */ | ||
|  | uint8_t is_edge_running(void); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_edge_post_to_proto_msg_handle() - edge post message to proto | ||
|  |  * @param p_pkt:   point to message | ||
|  |  * @param msg_id:  message id | ||
|  |  */ | ||
|  | void iot_edge_post_to_proto_msg_handle(void *p_pkt, uint8_t msg_id); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_proto_post_dl645_cmd_msg() - post dl645 message to proto | ||
|  |  * @param data:   dl645 data | ||
|  |  * @param len:    dl645 data len | ||
|  |  * @retval:       true or false | ||
|  |  */ | ||
|  | uint8_t iot_proto_post_dl645_cmd_msg(uint8_t *data, uint16_t len); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_proto_cli_uart_gpio_reassign() - reassign cli uart tx rx gpio | ||
|  |  *                ge_ext app use this function need after grapp_init. | ||
|  |  * @param rxpin:  reassign rx_gpio | ||
|  |  * @param txpin:  reassign tx_gpio | ||
|  |  * @return: 0   -> error | ||
|  |  *          1   -> success | ||
|  |  */ | ||
|  | uint8_t iot_proto_cli_uart_gpio_reassign(uint8_t rxpin, uint8_t txpin); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* IOT_PROTO_H */
 |