Files
kunlun/app/grapp/iot_proto_common.h

2112 lines
68 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
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 */