279 lines
9.6 KiB
C
Executable File
279 lines
9.6 KiB
C
Executable File
/****************************************************************************
|
|
|
|
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 PLC_PROTOCOL_H
|
|
#define PLC_PROTOCOL_H
|
|
|
|
#include "plc_fr.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* TEI definitions */
|
|
#define PLC_TEI_INVAL (0)
|
|
#define PLC_TEI_CCO (1)
|
|
#define PLC_TEI_FIRST (1)
|
|
|
|
#define PLC_TEI_LAST (PLC_NETWORK_SCALE)
|
|
|
|
#define PLC_FC_LEN 16 // FC header len
|
|
/* rf phy header len */
|
|
#define RF_PHR_LEN 16
|
|
|
|
#define PLC_TEI_MAX_NUM (PLC_TEI_LAST - PLC_TEI_FIRST + 1)
|
|
#define PLC_TEI_BCAST (0xFFF)
|
|
#define PLC_TEI_IS_VALID(__tei) \
|
|
((__tei) >= PLC_TEI_FIRST && (__tei) <= PLC_TEI_LAST)
|
|
#define PLC_TEI_CTRL (0xFFD)
|
|
#define PLC_TEI_CTRL_GW (0xFFE)
|
|
|
|
#define PLC_NID_INVALID (0)
|
|
#define PLC_NID_MIN (1)
|
|
#define PLC_NID_MAX_SG (0xFFFFFF)
|
|
#define PLC_NID_MAX_SPG (0x0F)
|
|
|
|
/* define rf options */
|
|
#define RF_OPTION_INVALID 0
|
|
#define RF_OPTION_1 1
|
|
#define RF_OPTION_2 2
|
|
#define RF_OPTION_3 3
|
|
#define RF_OPTION_MAX RF_OPTION_3
|
|
|
|
#define PLC_RF_OPTION_IS_VALID(option) \
|
|
(HPLC_RF_SUPPORT && \
|
|
(option) >= RF_OPTION_1 && (option) <= RF_OPTION_MAX)
|
|
|
|
#define PLC_NTB_MAX (0xFFFFFFFF) /* maximum NTB value */
|
|
|
|
#define PLC_INVALID_DATA (0) /* mark invalid data */
|
|
|
|
/* the zero cross period when power frequency is 50 HZ, unit: ntb */
|
|
#define PLC_ZC_50HZ_PERIOD_NTB 500000
|
|
/* the zero cross period when power frequency is 60 HZ, unit: ntb */
|
|
#define PLC_ZC_60HZ_PERIOD_NTB 416667
|
|
|
|
/* routing type definitions */
|
|
#define PLC_RT_TYPE_ERR (0) /* error */
|
|
#define PLC_RT_TYPE_SL (1) /* same level */
|
|
#define PLC_RT_TYPE_UL (2) /* upper level */
|
|
#define PLC_RT_TYPE_MP (3) /* main proxy */
|
|
#define PLC_RT_TYPE_UUL (4) /* upper upper level */
|
|
|
|
/* beacon type definitions */
|
|
#define PLC_BC_TYPE_D (0) /* discover beacon */
|
|
#define PLC_BC_TYPE_P (1) /* proxy beacon */
|
|
#define PLC_BC_TYPE_C (2) /* central beacon */
|
|
|
|
/* beacon period, unit is 1ms */
|
|
#define PLC_BC_PERIOD_MIN (2 * 1000)
|
|
#define PLC_BC_PERIOD_MAX (10 * 1000)
|
|
#define PLC_RF_BC_PERIOD_MAX (15 * 1000)
|
|
|
|
/* define beacon period alert check duration, unit is 1s */
|
|
#define PLC_BP_CNT_CHECK_DUR (600)
|
|
|
|
/* route period, unit is 1s */
|
|
#define PLC_RT_PEROID_MIN (20)
|
|
#define PLC_RT_PEROID_MAX (420)
|
|
|
|
/* minimum number of discovery node list mme need to be sent out for each route
|
|
* period.
|
|
*/
|
|
#define PLC_RT_DIS_MME_MIN_PER_PERIOD (10)
|
|
|
|
/* rf discovery node list mme sending period, unit is 1s */
|
|
#define PLC_RT_RF_DIS_MME_MIN_PERIOD (2)
|
|
#define PLC_RT_RF_DIS_MME_MAX_PERIOD (200)
|
|
|
|
/* rf tx success ratio expired period, the State Grid agreement stipulates 4-16,
|
|
* but the Beijing cert test bed set it to 2, so we set the range to 2-16 to
|
|
* meet the Beijing cert test, unit is 1 rf_dis_period
|
|
*/
|
|
#define PLC_RT_RF_TX_SR_AGE_PERIOD_MIN_CNT (2)
|
|
#define PLC_RT_RF_TX_SR_AGE_PERIOD_MAX_CNT (16)
|
|
|
|
/* define discovery node list default period when running in cert mode */
|
|
#define PLC_RT_RF_DIS_MME_PERIOD_CERT PLC_RT_RF_DIS_MME_MIN_PERIOD
|
|
#define PLC_RT_RF_TX_SR_AGE_PERIOD_CERT (4)
|
|
|
|
/* define the small scale count of direct sub sta for one PCO */
|
|
#define PLC_PCO_D_SUB_STA_CNT_SMALL (128)
|
|
/* define the large scale count of direct sub sta for one PCO */
|
|
#define PLC_PCO_D_SUB_STA_CNT_LARGE (256)
|
|
|
|
/* define the max allowed direct sub sta for one PCO */
|
|
#if RUN_IN_PSRAM
|
|
#define PLC_PCO_MAX_D_SUB_STA PLC_PCO_D_SUB_STA_CNT_LARGE
|
|
#else
|
|
#define PLC_PCO_MAX_D_SUB_STA PLC_PCO_D_SUB_STA_CNT_SMALL
|
|
#endif
|
|
|
|
#if RUN_IN_PSRAM
|
|
/* define the max number of neighbor networks that can be monitored */
|
|
#define PLC_MAX_NEIGHBOR_NETWORK (32)
|
|
#else /* RUN_IN_PSRAM */
|
|
/* define the max number of neighbor networks that can be monitored */
|
|
#define PLC_MAX_NEIGHBOR_NETWORK (16)
|
|
#endif /* RUN_IN_PSRAM */
|
|
|
|
/* traffic success ratio period is 4 router period */
|
|
#define PLC_TF_SR_PERIOD_LIMIT (4)
|
|
|
|
/* power line phase */
|
|
#define PLC_PHASE_ALL (0)
|
|
#define PLC_PHASE_A (1)
|
|
#define PLC_PHASE_B (2)
|
|
#define PLC_PHASE_C (3)
|
|
#define PLC_PHASE_CNT (3)
|
|
|
|
/* the meter addr is used as the MAC addr to join network */
|
|
#define PLC_MAC_ADDR_TYPE_METER (0)
|
|
/* the module addr is used as the MAC addr to join network */
|
|
#define PLC_MAC_ADDR_TYPE_MODULE (1)
|
|
/* the collector addr is used as the MAC addr to join network */
|
|
#define PLC_MAC_ADDR_TYPE_COLLECTOR (2)
|
|
|
|
/* device role */
|
|
#define PLC_DEV_ROLE_INVALID (0x0)
|
|
#define PLC_DEV_ROLE_STA (0x1)
|
|
#define PLC_DEV_ROLE_PCO (0x2)
|
|
#define PLC_DEV_ROLE_CCO (0x4)
|
|
|
|
/* IEEE1901 device role */
|
|
#define I1901_PLC_DEV_ROLE_INVALID (0x0)
|
|
#define I1901_PLC_DEV_ROLE_STA (0x1)
|
|
#define I1901_PLC_DEV_ROLE_PCO (0x2)
|
|
#define I1901_PLC_DEV_ROLE_CCO (0x3)
|
|
|
|
/* device type */
|
|
#define PLC_DEV_TYPE_METER_CONTROLLER 1
|
|
#define PLC_DEV_TYPE_CONCENTRATOR 2
|
|
#define PLC_DEV_TYPE_POWER_METER 3
|
|
#define PLC_DEV_TYPE_REPEATER 4
|
|
#define PLC_DEV_TYPE_COLLECTOR_2 5
|
|
#define PLC_DEV_TYPE_COLLECTOR_1 6
|
|
#define PLC_DEV_TYPE_POWER_METER_3P 7
|
|
#define PLC_DEV_TYPE_BSRM_MONITOR 0x7C
|
|
#define PLC_DEV_TYPE_BRK_MONITOR 0x7D
|
|
#define PLC_DEV_TYPE_TSFM_MONITOR 0x7E
|
|
#define PLC_DEV_TYPE_SWITCH_MONITOR 0x7F
|
|
|
|
/* iot customer device type start at 0x80 */
|
|
#define PLC_DEV_TYPE_GL_STA 0x80
|
|
#define PLC_DEV_TYPE_GL_OUTDOOR 0x81
|
|
#define PLC_DEV_TYPE_GL_INDOOR 0x82
|
|
#define PLC_DEV_TYPE_GL_LINECTRL 0x83
|
|
#define PLC_DEV_TYPE_GL_CONCETRATOR 0x84
|
|
#define PLC_DEV_TYPE_GL_MONITOR 0x85
|
|
|
|
#define PLC_DEV_TYPE_INVAL 0xFF
|
|
|
|
/* define ieee1901 device type */
|
|
#define PLC_DEV_TYPE_I1901_STA 0x01
|
|
#define PLC_DEV_TYPE_I1901_REPEATER 0x02
|
|
|
|
/* PLC chip vendor specific info length, unit is 1 byte */
|
|
#define PLC_VENDOR_INFO_LEN 18
|
|
/* PLC chip management id length, unit is 1 byte */
|
|
#define PLC_MANAGE_ID_LEN 24
|
|
|
|
/* max route level */
|
|
#define PLC_MAX_RT_LEVEL (15)
|
|
|
|
/* max send count */
|
|
#define PLC_MAX_SEND_CNT (31)
|
|
|
|
/* plc link id */
|
|
#define PLC_MAX_CONN_LESS_LID (3)
|
|
#define PLC_MAX_CTRL_PROTO_LID (3)
|
|
#define PLC_INVALID_LID (255)
|
|
|
|
/* define plc link type */
|
|
#define PLC_LINK_TYPE_HPLC (0)
|
|
#define PLC_LINK_TYPE_RF (1)
|
|
#define PLC_LINK_TYPE_UNKNOWN (2)
|
|
|
|
/* define plc device communication type */
|
|
#define PLC_DEV_COMM_TYPE_HPLC (0)
|
|
#define PLC_DEV_COMM_TYPE_DUAL_MODE (1)
|
|
#define PLC_DEV_COMM_TYPE_RF (2)
|
|
|
|
/* define plc device bandwidth type */
|
|
#define PLC_DEV_BAND_TYPE_NARROW (1)
|
|
#define PLC_DEV_BAND_TYPE_BROAD (2)
|
|
#define PLC_DEV_BAND_TYPE_DUAL_MODE (3)
|
|
|
|
/* LID type range define */
|
|
typedef enum _lid_type_range_t {
|
|
LID_CSMA_CAP0 = 0,
|
|
LID_CSMA_CAP1,
|
|
LID_CSMA_CAP2,
|
|
LID_CSMA_CAP3,
|
|
LID_BCSMA_START = 4,
|
|
LID_BCSMA_FB_DETECT = 77,
|
|
LID_BCSMA_END = 127,
|
|
LID_TDMA_START = LID_BCSMA_END + 1,
|
|
LID_TDMA_END = 255
|
|
}lid_type_range_t;
|
|
|
|
/* plc beacon duplicated check guard. if the new beacon sequence number
|
|
* is much bigger than current beacon sequence number, we assume the beacon
|
|
* is duplicated. cert test case 3.2.2.2 beacon sequence number will be started
|
|
* from 1 again after reach 0x10. so set this value carefully.
|
|
*/
|
|
#define PLC_BCN_DUPLICATE_GUARD ((uint32_t)0xFFFFFFF8)
|
|
|
|
/* plc beacon region type */
|
|
#define PLC_BCN_REGION_BCN (0)
|
|
#define PLC_BCN_REGION_CSMA (1)
|
|
#define PLC_BCN_REGION_TDMA (2)
|
|
/* SG only */
|
|
#define PLC_BCN_REGION_BCSMA (3)
|
|
/* private defined */
|
|
#define PLC_BCN_REGION_NBBCN (4)
|
|
|
|
|
|
/* Smart Grid protocol */
|
|
#define PLC_PROTO_TYPE_SG 0
|
|
/* Green Phy protocol */
|
|
#define PLC_PROTO_TYPE_GP 1
|
|
/* AV protocol */
|
|
#define PLC_PROTO_TYPE_AV 2
|
|
/* Southern Power Grid protocol */
|
|
#define PLC_PROTO_TYPE_SPG 3
|
|
/* Rawdata protocol */
|
|
#define PLC_PROTO_TYPE_RAWDATA 4
|
|
|
|
/* max band id for SG */
|
|
#define MAX_SG_BAND_ID (12)
|
|
|
|
#define PLC_SG_MAX_PB_NUM (4)
|
|
|
|
#define PLC_SPG_MAX_PB_NUM (4)
|
|
|
|
#define PLC_I1901_MAX_PB_NUM (4)
|
|
|
|
#define PLC_BAND_BITMAP_SIZE (16)
|
|
|
|
/* define max number of connected power meter */
|
|
#define PLC_CONN_PM_MAX_CNT (32)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* PLC_PROTOCOL_H */
|