170 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			170 lines
		
	
	
		
			6.0 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 PLC_MME_DISCOVER_LIST_H
							 | 
						||
| 
								 | 
							
								#define PLC_MME_DISCOVER_LIST_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* os shim includes */
							 | 
						||
| 
								 | 
							
								#include "os_types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "plc_mme.h"
							 | 
						||
| 
								 | 
							
								#include "plc_utils.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* pack for the structures in the whole file */
							 | 
						||
| 
								 | 
							
								#pragma pack(push)  // save the pack status
							 | 
						||
| 
								 | 
							
								#pragma pack(1)     // 1 byte align
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if SUPPORT_SMART_GRID
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _ul_rt_ent {
							 | 
						||
| 
								 | 
							
								    uint16_t    next_hop    :   12; // tei of next hop STA
							 | 
						||
| 
								 | 
							
								    uint16_t    route_type  :   4;  // route type
							 | 
						||
| 
								 | 
							
								} ul_rt_ent_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _mme_dis_sta_list {
							 | 
						||
| 
								 | 
							
								    uint32_t    sta     :12;    // the STA sending this discover list
							 | 
						||
| 
								 | 
							
								    uint32_t    proxy   :12;    // proxy of the STA
							 | 
						||
| 
								 | 
							
								    uint32_t    role    : 4;    // role of the STA
							 | 
						||
| 
								 | 
							
								    uint32_t    level   : 4;    // level of the STA
							 | 
						||
| 
								 | 
							
								    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];       // mac of the STA
							 | 
						||
| 
								 | 
							
								    uint8_t     cco_mac_addr[IOT_MAC_ADDR_LEN];   // mac of the STA's CCo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // estimated power line phase sorted by possibility
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_1 : 2;
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_2 : 2;
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_3 : 2;
							 | 
						||
| 
								 | 
							
								    /* send phase of this discovery node list mme frame.
							 | 
						||
| 
								 | 
							
								     * CCO role device will broadcast this mme with same msdu_sn in different
							 | 
						||
| 
								 | 
							
								     * phase. STA role can use this info to estimate the best phase.
							 | 
						||
| 
								 | 
							
								     * Note that in CPLC spec, this value is reserved.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_s : 2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int8_t      proxy_snr;      // estimated channel snr from proxy
							 | 
						||
| 
								 | 
							
								    uint8_t     proxy_tf_sr;    // proxy traffic succeed rate
							 | 
						||
| 
								 | 
							
								    uint8_t     proxy_dl_tf_sr; // proxy down link traffic sucessful rate
							 | 
						||
| 
								 | 
							
								    uint16_t    sta_cnt;        // number of STA in discover list
							 | 
						||
| 
								 | 
							
								    uint8_t     dnl_send_cnt;   // discover node list sent in last route period
							 | 
						||
| 
								 | 
							
								    uint8_t     ul_rt_ent_cnt;  // uplink route entry count
							 | 
						||
| 
								 | 
							
								    uint16_t    remaining_rt_period;    // remaining time in a route peroid
							 | 
						||
| 
								 | 
							
								    uint16_t    bitmap_size;
							 | 
						||
| 
								 | 
							
								    uint8_t     min_tf_sr;      // minimal traffic succeed rate
							 | 
						||
| 
								 | 
							
								    /* reserve 3 byte according to spec we reuse to cary vendor specific info */
							 | 
						||
| 
								 | 
							
								    uint16_t    vendor_mark;
							 | 
						||
| 
								 | 
							
								    /* flag to mark if previous route period is a partial route period */
							 | 
						||
| 
								 | 
							
								    uint8_t     partial_rp  :1,
							 | 
						||
| 
								 | 
							
								    /* noise floor of local device. 0 means noise floor is not available.
							 | 
						||
| 
								 | 
							
								     * 1 ~ 63 is mapped from noise floor range 31 ~ 93.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								                noise_floor :6,
							 | 
						||
| 
								 | 
							
								    /* reserved for future */
							 | 
						||
| 
								 | 
							
								                rsvd        :1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ul_rt_ent_t rt_ent[0];      // uplink route entry
							 | 
						||
| 
								 | 
							
								    /* following two fields are not defined in this data structure
							 | 
						||
| 
								 | 
							
								     * due to rt_ent has variable length.
							 | 
						||
| 
								 | 
							
								     * uint8_t  bitmap[bitmap_size];
							 | 
						||
| 
								 | 
							
								     * uint8_t  received_dis_node_cnt[sta_cnt];
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								} mme_dis_sta_list_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //SUPPORT_SMART_GRID
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if SUPPORT_SOUTHERN_POWER_GRID
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* discover node list bitmap length */
							 | 
						||
| 
								 | 
							
								#define SPG_DIS_STA_LIST_MAP_LEN (128)
							 | 
						||
| 
								 | 
							
								/* uplink route entry count limit */
							 | 
						||
| 
								 | 
							
								#define SPG_DIS_UL_RT_COUNT      (4)
							 | 
						||
| 
								 | 
							
								/* the entry length of received discover node count, default is 8 bit. */
							 | 
						||
| 
								 | 
							
								#define SPG_DIS_CNT_ENT_SIZE     (8)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _spg_ul_rt_ent {
							 | 
						||
| 
								 | 
							
								    tei_t     next_hop;
							 | 
						||
| 
								 | 
							
								    uint8_t   route_type;
							 | 
						||
| 
								 | 
							
								} spg_ul_rt_ent_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _spg_mme_dis_sta_list {
							 | 
						||
| 
								 | 
							
								    /* the STA sending this discover list */
							 | 
						||
| 
								 | 
							
								    tei_t       sta;
							 | 
						||
| 
								 | 
							
								    /* role of the STA */
							 | 
						||
| 
								 | 
							
								    uint8_t     role;
							 | 
						||
| 
								 | 
							
								    /* level of the STA */
							 | 
						||
| 
								 | 
							
								    uint8_t     level;
							 | 
						||
| 
								 | 
							
								    /* mac of the STA */
							 | 
						||
| 
								 | 
							
								    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* proxy of the STA */
							 | 
						||
| 
								 | 
							
								    tei_t       proxy;
							 | 
						||
| 
								 | 
							
								    /* reserved for future */
							 | 
						||
| 
								 | 
							
								    uint32_t    resv1 : 31;
							 | 
						||
| 
								 | 
							
								    /* traffic succeed rate calculation completion flag */
							 | 
						||
| 
								 | 
							
								    uint32_t    proxy_tf_sr_cmp : 1;
							 | 
						||
| 
								 | 
							
								    /* proxy traffic succeed rate */
							 | 
						||
| 
								 | 
							
								    uint32_t    proxy_tf_sr;
							 | 
						||
| 
								 | 
							
								    /* proxy down link traffic sucessful rate */
							 | 
						||
| 
								 | 
							
								    uint32_t    proxy_dl_tf_sr;
							 | 
						||
| 
								 | 
							
								    /* number of STA in discover list */
							 | 
						||
| 
								 | 
							
								    uint16_t    sta_cnt;
							 | 
						||
| 
								 | 
							
								    /* discover node list sent in last route period */
							 | 
						||
| 
								 | 
							
								    uint16_t    dnl_send_cnt;
							 | 
						||
| 
								 | 
							
								    /* uplink route entry count */
							 | 
						||
| 
								 | 
							
								    uint16_t    ul_rt_ent_cnt;
							 | 
						||
| 
								 | 
							
								    /* the entry length of received discover node count, default is 8 bit. */
							 | 
						||
| 
								 | 
							
								    uint8_t     rt_ent_len;
							 | 
						||
| 
								 | 
							
								    /* reserved for future */
							 | 
						||
| 
								 | 
							
								    uint16_t    resv2;
							 | 
						||
| 
								 | 
							
								    /* remaining time in a route peroid */
							 | 
						||
| 
								 | 
							
								    uint16_t    remaining_rt_period;
							 | 
						||
| 
								 | 
							
								    /* estimated power line phase sorted by possibility */
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_3 : 2;
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_2 : 2;
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_1 : 2;
							 | 
						||
| 
								 | 
							
								    uint8_t     phase_s : 2;
							 | 
						||
| 
								 | 
							
								    /* minimal traffic succeed rate */
							 | 
						||
| 
								 | 
							
								    uint8_t     min_tf_sr;
							 | 
						||
| 
								 | 
							
								    /* reserve 3 byte according to spec we reuse to cary vendor specific info */
							 | 
						||
| 
								 | 
							
								    uint16_t    vendor_mark;
							 | 
						||
| 
								 | 
							
								    /* flag to mark if previous route period is a partial route period */
							 | 
						||
| 
								 | 
							
								    uint8_t     partial_rp  :1,
							 | 
						||
| 
								 | 
							
								    /* noise floor of local device. 0 means noise floor is not available.
							 | 
						||
| 
								 | 
							
								     * 1 ~ 63 is mapped from noise floor range 31 ~ 93.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								                noise_floor :6,
							 | 
						||
| 
								 | 
							
								    /* reserved for future */
							 | 
						||
| 
								 | 
							
								                rsvd        :1;
							 | 
						||
| 
								 | 
							
								    uint8_t     resv4[2];
							 | 
						||
| 
								 | 
							
								    /* uplink route entry */
							 | 
						||
| 
								 | 
							
								    spg_ul_rt_ent_t rt_ent[0];
							 | 
						||
| 
								 | 
							
								    /* following two fields are not defined in this data structure
							 | 
						||
| 
								 | 
							
								     * due to rt_ent has variable length.
							 | 
						||
| 
								 | 
							
								     * uint8_t  bitmap[128];
							 | 
						||
| 
								 | 
							
								     * uint8_t  received_dis_node_cnt[sta_cnt];
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								} spg_mme_dis_sta_list_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //SUPPORT_SOUTHERN_POWER_GRID
							 | 
						||
| 
								 | 
							
								#pragma pack(pop)   // restore the pack status
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* PLC_MME_DISCOVER_LIST_H */
							 |