249 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			8.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_PROXY_CHANGE_H
 | 
						|
#define PLC_MME_PROXY_CHANGE_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
 | 
						|
 | 
						|
/* proxy change reason for SG spec */
 | 
						|
#define PROXY_CHANGE_UNKNOWN        0x00
 | 
						|
#define PROXY_CHANGE_PERIODIC       0x01
 | 
						|
 | 
						|
/* proxy change reason for SPG spec */
 | 
						|
#define SPG_PROXY_CHANGE_PERIODIC   0x01
 | 
						|
#define SPG_PROXY_CHANGE_FAST       0x02
 | 
						|
 | 
						|
/* proxy change result */
 | 
						|
#define PROXY_CHANGE_RET_OK         0x00
 | 
						|
 | 
						|
#if SUPPORT_SMART_GRID
 | 
						|
 | 
						|
/* proxy change request mme */
 | 
						|
typedef struct _mme_proxy_change_req {
 | 
						|
    /* sta requesting to change its proxy */
 | 
						|
    uint16_t    sta_tei     : 12,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd        : 4;
 | 
						|
    /* candidate proxy array */
 | 
						|
    pco_link_info_t new_proxy[CANDIDATE_PROXY_COUNT];
 | 
						|
    /* current proxy */
 | 
						|
    uint16_t    old_proxy   : 12,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1       : 4;
 | 
						|
    /* current proxy type. must be 0 */
 | 
						|
    uint8_t     proxy_type;
 | 
						|
    /* change reason, see PROXY_CHANGE_XXX */
 | 
						|
    uint8_t     reason;
 | 
						|
    /* peer to peer sequence number */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* estimated power line phase */
 | 
						|
    uint8_t     phase_1     : 2;
 | 
						|
    uint8_t     phase_2     : 2;
 | 
						|
    uint8_t     phase_3     : 2;
 | 
						|
    uint8_t     reserved_1  : 2;
 | 
						|
    uint8_t     reserved_2[3];
 | 
						|
} mme_proxy_change_req_t;
 | 
						|
 | 
						|
/* proxy change confirm mme */
 | 
						|
typedef struct _mme_proxy_change_cnf {
 | 
						|
    /* result of the proxy change request, see PROXY_CHANGE_RET_XXX */
 | 
						|
    uint8_t     result;
 | 
						|
    /* fragmented packets count */
 | 
						|
    uint8_t     packet_cnt;
 | 
						|
    /* fragmented packet sequence number */
 | 
						|
    uint8_t     packet_sn;
 | 
						|
    uint8_t     reserved_1;
 | 
						|
    /* target sta of the confirmation */
 | 
						|
    uint16_t    sta         : 12,
 | 
						|
    /* link type between target station and proxy, see PLC_LINK_TYPE_XXX */
 | 
						|
                link        : 1,
 | 
						|
                rsvd        : 3;
 | 
						|
    /* new proxy of the sta */
 | 
						|
    uint16_t    proxy       : 12,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1       : 4;
 | 
						|
    /* peer to peer sequence number. must be same as the one in request mme */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* path sequence number */
 | 
						|
    uint32_t    path_sn;
 | 
						|
    /* sub sta count of the target sta */
 | 
						|
    uint16_t    sub_sta_cnt;
 | 
						|
    uint16_t    reserved_2;
 | 
						|
    /* contain all sub STA of proxy change requester */
 | 
						|
    tei_t       sub_sta[0];
 | 
						|
} mme_proxy_change_cnf_t;
 | 
						|
 | 
						|
/* proxy change confirm mme */
 | 
						|
typedef struct _mme_proxy_change_bitmap_cnf {
 | 
						|
    /* result of the proxy change request, see PROXY_CHANGE_RET_XXX */
 | 
						|
    uint8_t     result;
 | 
						|
    uint8_t     reserved_1;
 | 
						|
#if (SUPPORT_IEEE_1901)
 | 
						|
    /* target sta of the confirmation */
 | 
						|
    uint16_t    sta         : 12,
 | 
						|
    /* link type between target station and proxy, see PLC_LINK_TYPE_XXX */
 | 
						|
                link        : 1,
 | 
						|
                rsvd        : 3;
 | 
						|
    /* new proxy of the sta */
 | 
						|
    uint16_t    proxy       : 12,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1       : 4;
 | 
						|
    uint16_t    reserved_2;
 | 
						|
    /* peer to peer sequence number. must be same as the one in request mme */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* path sequence number */
 | 
						|
    uint32_t    path_sn;
 | 
						|
    uint16_t    reserved_3;
 | 
						|
    /* bitmap size. unit is 1 byte */
 | 
						|
    uint16_t    bitmap_size;
 | 
						|
#else /* SUPPORT_IEEE_1901 */
 | 
						|
    /* bitmap size. unit is 1 byte */
 | 
						|
    uint16_t    bitmap_size;
 | 
						|
    /* target sta of the confirmation */
 | 
						|
    uint16_t    sta         : 12,
 | 
						|
    /* link type between target station and proxy, see PLC_LINK_TYPE_XXX */
 | 
						|
                link        : 1,
 | 
						|
                rsvd        : 3;
 | 
						|
    /* new proxy of the sta */
 | 
						|
    uint16_t    proxy       : 12,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1       : 4;
 | 
						|
    /* peer to peer sequence number. must be same as the one in request mme */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* path sequence number */
 | 
						|
    uint32_t    path_sn;
 | 
						|
    uint32_t    reserved_2;
 | 
						|
#endif /* SUPPORT_IEEE_1901 */
 | 
						|
    /* bitmap of the sub sta */
 | 
						|
    uint8_t     bitmap[0];
 | 
						|
} mme_proxy_change_bitmap_cnf_t;
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#if SUPPORT_SOUTHERN_POWER_GRID
 | 
						|
 | 
						|
#define SUB_STA_BITMAP_CNT   130
 | 
						|
 | 
						|
/* proxy change request mme */
 | 
						|
typedef struct _spg_mme_proxy_change_req {
 | 
						|
    /* sta requesting to change its proxy */
 | 
						|
    tei_t       sta_tei;
 | 
						|
    /* candidate proxy array */
 | 
						|
    tei_t       new_proxy[CANDIDATE_PROXY_COUNT];
 | 
						|
    /* current proxy */
 | 
						|
    tei_t       old_proxy;
 | 
						|
    /* current proxy type. must be 2 */
 | 
						|
    uint8_t     proxy_type;
 | 
						|
    /* change reason, see SPG_PROXY_CHANGE_XXX */
 | 
						|
    uint8_t     reason;
 | 
						|
    /* estimated power line phase */
 | 
						|
    uint8_t     phase_1;
 | 
						|
    uint8_t     phase_2;
 | 
						|
    uint8_t     phase_3;
 | 
						|
    /* candidate proxy 0 link type */
 | 
						|
    uint8_t     cand_pco_link0 : 1,
 | 
						|
    /* candidate proxy 1 link type  */
 | 
						|
                cand_pco_link1 : 1,
 | 
						|
    /* candidate proxy 2 link type  */
 | 
						|
                cand_pco_link2 : 1,
 | 
						|
    /* candidate proxy 3 link type  */
 | 
						|
                cand_pco_link3 : 1,
 | 
						|
    /* candidate proxy 4 link type  */
 | 
						|
                cand_pco_link4 : 1,
 | 
						|
    /* reserved for future */
 | 
						|
                reserved_1     : 3;
 | 
						|
    /* peer to peer sequence number */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* network sequence number */
 | 
						|
    uint8_t     network_sn;
 | 
						|
    uint8_t     reserved_2[15];
 | 
						|
} spg_mme_proxy_change_req_t;
 | 
						|
 | 
						|
/* proxy change confirm mme */
 | 
						|
typedef struct _spg_mme_proxy_change_cnf {
 | 
						|
    /* result of the proxy change request, see PROXY_CHANGE_RET_XXX */
 | 
						|
    uint32_t    result;
 | 
						|
    /* fragmented packets count */
 | 
						|
    uint8_t     packet_cnt;
 | 
						|
    /* fragmented packet sequence number */
 | 
						|
    uint8_t     packet_sn;
 | 
						|
    /* target sta of the confirmation */
 | 
						|
    tei_t       sta;
 | 
						|
    /* new proxy of the sta */
 | 
						|
    tei_t       proxy;
 | 
						|
    /* sub sta count of the target sta */
 | 
						|
    uint16_t    sub_sta_cnt;
 | 
						|
    uint8_t     rsvd1;
 | 
						|
    /* network sequence number */
 | 
						|
    uint8_t     network_sn;
 | 
						|
    /* link type between target station and proxy, see PLC_LINK_TYPE_XXX */
 | 
						|
    uint8_t     link        : 1,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd2       : 7;
 | 
						|
    uint8_t     rsvd3;
 | 
						|
    /* peer to peer sequence number */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* path sequence number */
 | 
						|
    uint32_t    path_sn;
 | 
						|
    uint8_t     rsvd4[8];
 | 
						|
    /* contain all sub STA of proxy change requester */
 | 
						|
    tei_t       sub_sta[0];
 | 
						|
} spg_mme_proxy_change_cnf_t;
 | 
						|
 | 
						|
/* proxy change confirm mme */
 | 
						|
typedef struct _spg_mme_proxy_change_bitmap_cnf {
 | 
						|
    /* result of the proxy change request, see PROXY_CHANGE_RET_XXX */
 | 
						|
    uint32_t    result;
 | 
						|
    /* target sta of the confirmation */
 | 
						|
    tei_t       sta;
 | 
						|
    /* new proxy of the sta */
 | 
						|
    tei_t       proxy;
 | 
						|
    /* network sequence number */
 | 
						|
    uint8_t     network_sn;
 | 
						|
    /* bitmap of the sub sta */
 | 
						|
    uint8_t     sub_sta_bitmap[SUB_STA_BITMAP_CNT];
 | 
						|
    /* link type between target station and proxy, see PLC_LINK_TYPE_XXX */
 | 
						|
    uint8_t     link        : 1,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1       : 7;
 | 
						|
    /* peer to peer sequence number */
 | 
						|
    uint32_t    p2p_sn;
 | 
						|
    /* path sequence number */
 | 
						|
    uint32_t    path_sn;
 | 
						|
} spg_mme_proxy_change_bitmap_cnf_t;
 | 
						|
 | 
						|
#endif /* SUPPORT_SOUTHERN_POWER_GRID */
 | 
						|
 | 
						|
#pragma pack(pop)   // restore the pack status
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* PLC_MME_PROXY_CHANGE_H */
 |