Files
kunlun/plc/inc/mme/plc_mme_proxy_change.h
2024-09-28 14:24:04 +08:00

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