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