165 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.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_MME_ZERO_CROSS_H
 | |
| #define PLC_MME_ZERO_CROSS_H
 | |
| 
 | |
| /* os shim includes */
 | |
| #include "os_types_api.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
 | |
| 
 | |
| #define MME_ZC_CT_ONE_STA           0   // collection type: one STA
 | |
| #define MME_ZC_CT_ALL_STA           1   // collection type: all STAs
 | |
| 
 | |
| #define MME_ZC_CP_HALF_PEROID       0   // half a power line period collection
 | |
| #define MME_ZC_CP_ONE_PEROID        1   // a whole power line period collection
 | |
| 
 | |
| #define MME_ZC_CT_FALLING_EDGE      0  // zc collect on falling edge
 | |
| #define MME_ZC_CT_RISING_EDGE       1  // zc collect on rising edge
 | |
| #define MME_ZC_CT_ALL_EDGE          2  // zc collect on falling and rising edge
 | |
| 
 | |
| /**
 | |
|  * each ntb_diff_value_t contain 2 NTB diff value.
 | |
|  * Please use ntb_diff1 to access the 1st value and ntb_diff2 for the 2nd one.
 | |
|  */
 | |
| typedef struct _ntb_diff_value {
 | |
|     union {
 | |
|         struct {
 | |
|             /* lower 12 bit */
 | |
|             uint16_t    ntb_diff1   :12;
 | |
|             uint16_t    _reserved_1 : 4;
 | |
|             uint8_t     _reserved_2;
 | |
| 
 | |
|         };
 | |
|         struct {
 | |
|             uint8_t     _reserved_3;
 | |
|             uint16_t    _reserved_4 : 4;
 | |
|             /* higher 12 bit */
 | |
|             uint16_t    ntb_diff2   :12;
 | |
|         };
 | |
|         /* size of this struct is 3 bytes */
 | |
|         uint8_t         data[3];
 | |
|     };
 | |
| } ntb_diff_value_t;
 | |
| 
 | |
| /* definition of zero cross NTB collect indication */
 | |
| typedef struct _mme_zc_ntb_clct_ind {
 | |
|     /* the STA who should collect zero cross NTB */
 | |
|     uint16_t    sta:          12,
 | |
|     /* reserved for future */
 | |
|                 reserved:     4;
 | |
|     /* collecting type. see MME_ZC_CT_XXX */
 | |
|     uint8_t     clct_type;
 | |
|     /* collecting period. see MME_ZC_CP_XXX */
 | |
|     uint8_t     clct_period;
 | |
|     /* number of consecutive zero cross NTB to collect */
 | |
|     uint8_t     clct_cnt;
 | |
|     /* reserved */
 | |
|     uint8_t     resvd[3];
 | |
| } mme_zc_ntb_clct_ind_t;
 | |
| 
 | |
| /* definition of zero cross NTB report */
 | |
| typedef struct _mme_zc_ntb_report {
 | |
|     /* the STA reporting zero corss NTB */
 | |
|     uint16_t            sta:          12,
 | |
|     /* reserved for future */
 | |
|                         resvd:        4;
 | |
|     /* number of zero cross NTB collected */
 | |
|     uint8_t             clct_cnt;
 | |
|     /* number of item in each phase */
 | |
|     uint8_t             phase_cnt[3];
 | |
|     /* standard NTB */
 | |
|     uint32_t            std_ntb;
 | |
|     /* each item contain 2 NTB diff values */
 | |
|     ntb_diff_value_t    ntb_diff_val[0];
 | |
| } mme_zc_ntb_report_t;
 | |
| 
 | |
| /* definition of high-precision zero cross NTB area notify report data filed */
 | |
| typedef struct __mme_area_notify_zc_ntb_data {
 | |
|     /* number of item in each phase */
 | |
|     uint8_t             phase_cnt[3];
 | |
|     /* standard NTB */
 | |
|     uint32_t            std_ntb;
 | |
|     /* each item contain 2 NTB diff values */
 | |
|     ntb_diff_value_t    ntb_diff_val[0];
 | |
| } mme_area_notify_zc_ntb_data_t;
 | |
| 
 | |
| /* definition of high-precision zero cross NTB area notify report */
 | |
| typedef struct _mme_area_notify_zc_ntb_report_header {
 | |
|     /* version */
 | |
|     uint8_t             ver        :6,
 | |
|     /* reserved for future */
 | |
|                         reserved_1 :2;
 | |
|     /* the STA reporting zero corss NTB */
 | |
|     uint16_t            tei        :12,
 | |
|     /* reserved for future */
 | |
|                         reserved_2 :4;
 | |
|     /* task sequence number */
 | |
|     uint8_t             task_sn;
 | |
|     /* same transformer identify result. valid range from 0 to 100 */
 | |
|     uint8_t             score      :7,
 | |
|     /* data attribute, 0 means sent from cco, 1 means sent from sta */
 | |
|                         attr       :1;
 | |
|     /* collecting type. see MME_ZC_CT_XXX_EDGE */
 | |
|     uint8_t             clct_type  :2,
 | |
|     /* reserved for future */
 | |
|                         reserved_3 :6;
 | |
| } mme_area_notify_zc_ntb_report_header_t;
 | |
| 
 | |
| /* definition of zero cross NTB collect indication */
 | |
| typedef struct _spg_mme_zc_ntb_clct_ind {
 | |
|     /* the STA who should collect zero cross NTB */
 | |
|     tei_t      sta;
 | |
|     /* collecting type. see MME_ZC_CT_XXX */
 | |
|     uint8_t    clct_type;
 | |
|     /* collecting period. see MME_ZC_CP_XXX */
 | |
|     uint8_t    clct_period;
 | |
|     /* number of consecutive zero cross NTB to collect */
 | |
|     uint8_t    clct_cnt;
 | |
| } spg_mme_zc_ntb_clct_ind_t;
 | |
| 
 | |
| /* definition of zero cross NTB report */
 | |
| typedef struct _spg_mme_zc_ntb_report {
 | |
|     /* the STA reporting zero corss NTB */
 | |
|     tei_t                   sta;
 | |
|     /* number of zero cross NTB collected */
 | |
|     uint8_t                 clct_cnt;
 | |
|     /* reserved */
 | |
|     uint8_t                 resv0;
 | |
|     /* standard NTB */
 | |
|     uint32_t                std_ntb;
 | |
|     /* each item contain 2 NTB diff values */
 | |
|     ntb_diff_value_t        ntb_diff_val[0];
 | |
| } spg_mme_zc_ntb_report_t;
 | |
| 
 | |
| #pragma pack(pop)               // restore the pack status
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif // PLC_MME_ZERO_CROSS_H
 |