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 */
|