646 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			646 lines
		
	
	
		
			19 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_MPDU_HEADER_H
 | |
| #define PLC_MPDU_HEADER_H
 | |
| 
 | |
| ///This file define data struct share between CVG and MAC
 | |
| 
 | |
| /* os shim includes */
 | |
| #include "os_types_api.h"
 | |
| 
 | |
| #include "plc_fr.h"
 | |
| #include "iot_utils_api.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* This file contains the beacon structure definition
 | |
| * and function to get/set the related field for packed
 | |
| * structure
 | |
| */
 | |
| 
 | |
| /* pack for the structures in the whole file */
 | |
| #pragma pack(push)  // save the pack status
 | |
| #pragma pack(1)     // 1 byte align
 | |
| 
 | |
| #define DBG_PKT_VERSION                 (0xf)
 | |
| 
 | |
| enum FC_DELIM_TYPE {
 | |
|     FC_DELIM_BEACON = 0,
 | |
|     DT_AV_BEACON = 0,
 | |
|     FC_DELIM_SOF = 1,
 | |
|     DT_AV_SOF = 1,
 | |
|     FC_DELIM_SACK = 2,
 | |
|     DT_AV_SACK = 2,
 | |
|     FC_DELIM_NNCCO = 3,
 | |
|     DT_AV_RTS_CTS = 3,
 | |
|     FC_DELIM_SOUND = 4,
 | |
|     DT_AV_SOUND = 4, //self defined type for dtest
 | |
|     I1901_RTS_CTS = 4,
 | |
|     DT_AV_RSOF = 5,
 | |
|     /* custom delimiter type for RF test */
 | |
|     FC_DELIM_RF_TEST = 7,
 | |
| };
 | |
| 
 | |
| /* define RF test type */
 | |
| typedef enum {
 | |
|     /* tx calibration */
 | |
|     RF_TEST_TYPE_TX_CALI = 0,
 | |
| } RF_TEST_TYPE_T;
 | |
| 
 | |
| /* define RF test tx calibration register type */
 | |
| typedef enum {
 | |
|     RF_TEST_TX_CALI_REG_IQ_MAG = 0,
 | |
|     RF_TEST_TX_CALI_REG_IQ_PHASE = 1,
 | |
|     RF_TEST_TX_CALI_REG_IQ_DC = 2,
 | |
| } RF_TEST_TX_CALI_REG_T;
 | |
| 
 | |
| #define PLC_MPDU_FC_LEN         16
 | |
| #define PLC_MPDU_FCCS_LEN       3
 | |
| #define SG_STANDARD_VERSION     0
 | |
| 
 | |
| /* MPDU Frame control */
 | |
| typedef PREPACK struct _frame_control {
 | |
|     union{
 | |
|         struct{
 | |
|             uint32_t delimiter_type : 3,        //Normal mode
 | |
|                 network_type : 5,
 | |
|                 nid : 24;
 | |
|         };
 | |
|         struct{
 | |
|             uint32_t delimiter_type_v3 : 3,    //encryption mode
 | |
|                 aes_key_sel : 5,
 | |
|                 nid_v3 : 24;
 | |
|         };
 | |
|     };
 | |
|     union {
 | |
|         struct {
 | |
|             uint32_t time_stamp : 32; /* NTB */
 | |
|             uint16_t src_tei : 12,
 | |
|                 tmi : 4;
 | |
|             uint16_t sym_num : 9,
 | |
|                 phase_num : 2,
 | |
|                 resv : 5;
 | |
|             uint32_t resv2 : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } bcn;
 | |
|         struct {
 | |
|             uint32_t src_tei : 12,
 | |
|                 dst_tei : 12,
 | |
|                 lid : 8;
 | |
|             uint16_t frame_len : 12, /* unit 10us */
 | |
|                 pb_num : 4;
 | |
|             uint16_t sym_num : 9,
 | |
|                 bcast : 1,
 | |
|                 retry : 1,
 | |
|                 encry : 1,
 | |
|                 tmi : 4;
 | |
|             union{
 | |
|                 struct{
 | |
|                     uint32_t tmi_ext : 4,         //Normal mode
 | |
|                         version : 4,
 | |
|                         fccs : 24;
 | |
|                 };
 | |
|                 struct{
 | |
|                     uint32_t tmi_ext_v3 : 4,        //encryption mode
 | |
|                         decrypt_mode : 2,
 | |
|                         aes_key_table_sel : 2,
 | |
|                         fccs_v3 : 24;
 | |
|                 };
 | |
|             };
 | |
|         } sof;
 | |
|         struct {
 | |
|             /* TODO */
 | |
|             uint32_t rx_result : 4,
 | |
|                 rx_status : 4,
 | |
|                 stei : 12,
 | |
|                 dtei : 12;
 | |
|             uint32_t rx_pb : 3,
 | |
|                 resv0 : 5,
 | |
|                 snr : 8,
 | |
|                 load : 8,
 | |
|                 resv1 : 8;
 | |
|             uint32_t ext_deli : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } sack;
 | |
|         /* neighbor network CCo communication */
 | |
|         struct {
 | |
|             /* TODO */
 | |
|             uint32_t duration : 16,
 | |
|                      sbandoffset : 16;
 | |
|             uint32_t receive_nid : 24,
 | |
|                      self_rf_channel : 8;
 | |
|             uint32_t self_rf_option  : 2,
 | |
|                      resv1 : 2,
 | |
|                      version : 4,
 | |
|                      fccs:24;
 | |
|         } nn_cco;
 | |
|         /* neighbor network CCO communication between MAC and ISR. for
 | |
|          * neighbor network negotiation frame tx, we have to make
 | |
|          * make sure the sbandoffset and duration as accurate as possible.
 | |
|          * We use this format to transfer useful info from MAC SW to ISR so
 | |
|          * that ISR can fill in accurate info right before each TX. Right
 | |
|          * before each TX, MAC HW will trigger interrupt and ISR will fill in
 | |
|          * right info before BB send it out.
 | |
|          * Note that for simulator case, we use nn_cco_sw for communication
 | |
|          * among CCO to make it simple.
 | |
|          */
 | |
|         struct {
 | |
|             /* lower 32bit start ntb of the protected region */
 | |
|             uint32_t start_ntb_l32;
 | |
|             /* watched neighbor network id */
 | |
|             uint64_t receive_nid : 24,
 | |
|             /* duration of the protected region */
 | |
|                      duration : 16,
 | |
|             /* higher 24bit start ntb of the protected region, we ignore the
 | |
|              * highest 8bit as 60 years are long enough.
 | |
|              */
 | |
|                      start_ntb_h24 : 24;
 | |
|         } nn_cco_sw;
 | |
|         struct {
 | |
|             uint32_t time_stamp : 32; /* NTB */
 | |
|             uint16_t stei : 12,
 | |
|                 rsv0 : 4;
 | |
|             uint16_t rsv1 : 8,
 | |
|                 rsv2 : 8;
 | |
|             uint32_t ext_type : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } sync;
 | |
|         struct {
 | |
|             uint8_t mac_addr[IOT_MAC_ADDR_LEN];
 | |
|             uint16_t stei : 12,
 | |
|                      rsv4 : 4;
 | |
|             uint32_t ext_type : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } search;
 | |
|         struct {
 | |
|             uint32_t time_stamp : 32; /* NTB */
 | |
|             uint16_t src_tei : 12,
 | |
|                      mcs : 4;
 | |
|             uint16_t pb_sz_idx : 4,  /* pb size index */
 | |
|                      resv0 : 12;
 | |
|             uint32_t resv1 : 4,
 | |
|                      version : 4,
 | |
|                      fccs : 24;
 | |
|         } rf_bcn;
 | |
|         struct {
 | |
|             uint32_t src_tei : 12,
 | |
|                      dst_tei : 12,
 | |
|                      lid : 8;
 | |
|             uint16_t frame_len : 12, /* unit 100us */
 | |
|                      pb_sz_idx : 4;
 | |
|             uint16_t resv0 : 9,
 | |
|                      bcast : 1,
 | |
|                      retry : 1,
 | |
|                      encry : 1,
 | |
|                      mcs : 4;
 | |
|             uint32_t resv1 : 4,
 | |
|                      version : 4,
 | |
|                      fccs : 24;
 | |
|         } rf_sof;
 | |
|         struct {
 | |
|             uint32_t rx_result : 4,
 | |
|                      resv0 : 4,
 | |
|                      stei : 12,
 | |
|                      dtei : 12;
 | |
|             uint32_t resv1 : 8,
 | |
|                      snr : 8,
 | |
|                      load : 8,
 | |
|                      resv2 : 8;
 | |
|             uint32_t ext_deli : 4,
 | |
|                      version : 4,
 | |
|                      fccs : 24;
 | |
|         } rf_sack;
 | |
|         /* Rf test tx calibration fc variable region */
 | |
|         struct {
 | |
|             /* dvice id magic number */
 | |
|             uint16_t dev_id_magic;
 | |
|             /* tx calibration register combination magic number */
 | |
|             uint32_t reg_magic;
 | |
|             /* rf tx calibration register type, see RF_TEST_TX_CALI_REG_XXX */
 | |
|             uint16_t reg_type   :3,
 | |
|             /* rserved for future use */
 | |
|                      rsvd       :13;
 | |
|             /* test type, see RF_TEST_TYPE_XXX */
 | |
|             uint32_t test_type  :4,
 | |
|             /* protocol Version */
 | |
|                      version    :4,
 | |
|             /* check code */
 | |
|                      fccs       :24;
 | |
|         } rf_test_tx_cali;
 | |
|     } vf;
 | |
| } POSTPACK frame_control_t;
 | |
| 
 | |
| #define SPG_STANDARD_VERSION    1
 | |
| 
 | |
| typedef PREPACK struct _spg_frame_control {
 | |
|     uint8_t delimiter_type : 3,
 | |
|         access_ind : 1,
 | |
|         snid : 4;
 | |
|     union {
 | |
|         struct {
 | |
|             uint32_t time_stamp : 32;
 | |
|             uint32_t bcn_period_cnt : 32;
 | |
|             uint16_t src_tei : 12,
 | |
|                 tmi : 4;
 | |
|             uint16_t sym_num : 9,
 | |
|                 resv1 : 1,
 | |
|                 phase_num : 2,
 | |
|                 version : 4;
 | |
|             uint8_t fccs[3];
 | |
|         } bcn;
 | |
|         struct {
 | |
|             uint32_t src_tei : 12,
 | |
|                 dst_tei : 12,
 | |
|                 lid : 8;
 | |
|             union{
 | |
|                 struct{
 | |
|                     uint16_t resv1 : 16;        //Normal mode
 | |
|                 };
 | |
|                 struct{
 | |
|                     uint16_t aes_key_sel : 5,   //encryption mode
 | |
|                         aes_key_table_sel : 2,
 | |
|                         resv1_v3 : 9;
 | |
|                 };
 | |
|             };
 | |
|             uint8_t  pb_num : 4,
 | |
|                 tmi : 4;
 | |
|             uint32_t frm_len : 12,
 | |
|                 resv2 : 9,
 | |
|                 tei_filter_flag : 1,
 | |
|                 retry : 1,
 | |
|                 sym_num : 9;
 | |
|             union{
 | |
|                 struct{
 | |
|                     uint32_t tmi_ext : 4,   //Normal mode
 | |
|                         version : 4,
 | |
|                         fccs : 24;
 | |
|                 };
 | |
|                 struct{
 | |
|                     uint32_t tmi_ext_v3 : 4,   //encryption mode
 | |
|                         decrypt_mode : 4,
 | |
|                         fccs_v3 : 24;
 | |
|                 };
 | |
|             };
 | |
|         } sof;
 | |
|         struct {
 | |
|             uint8_t rx_result : 4,
 | |
|                 rx_status : 4;
 | |
|             uint16_t dtei : 12,
 | |
|                 rx_pb : 4;
 | |
|             uint32_t resv1 : 32;
 | |
|             uint32_t resv2 : 32;
 | |
|             uint32_t ext_deli : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } sack;
 | |
|         struct {
 | |
|             uint16_t neighbor_network : 16;
 | |
|             uint32_t self_rf_channel : 8,
 | |
|                 resv0 : 10,
 | |
|                 conti_time : 14;
 | |
|             uint8_t  resv1 : 1,
 | |
|                 bwth_end_flag : 1,
 | |
|                 self_rf_option : 2,
 | |
|                 resv4 : 4;
 | |
|             uint16_t bwth_end_shift : 16;
 | |
|             uint16_t bwth_start_shift : 16;
 | |
|             uint32_t resv : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } nn_cco;
 | |
|         /* neighbor network CCO communication between MAC and ISR. for
 | |
|          * neighbor network negotiation frame tx, we have to make
 | |
|          * make sure the sbandoffset and duration as accurate as possible.
 | |
|          * We use this format to transfer useful info from MAC SW to ISR so
 | |
|          * that ISR can fill in accurate info right before each TX. Right
 | |
|          * before each TX, MAC HW will trigger interrupt and ISR will fill in
 | |
|          * right info before BB send it out.
 | |
|          * Note that for simulator case, we use nn_cco_sw for cummunication
 | |
|          * among CCO to make it simple.
 | |
|          */
 | |
|         struct {
 | |
|             /* lower 32bit start ntb of the protected region */
 | |
|             uint32_t start_ntb_l32;
 | |
|             /* watched neighbor network id */
 | |
|             uint32_t neighbor_network : 16,
 | |
|             /* duration of the protected region */
 | |
|                      duration : 14,
 | |
|                      resv4 : 2;
 | |
| 
 | |
|             /* higher 24bit start ntb of the protected region, we ignore the
 | |
|              * highest 8bit as 60 years are long enough.
 | |
|              */
 | |
|             uint32_t start_ntb_h24 : 24,
 | |
|                      resv0: 8;
 | |
|             uint16_t last_offsetl;
 | |
|             uint8_t last_offseth;  /* last_offset 24bit*/
 | |
|         } nn_cco_sw;
 | |
|         struct {
 | |
|             uint32_t time_stamp; /* NTB */
 | |
|             uint16_t stei : 12,
 | |
|                 rsv0 : 4;
 | |
|             uint32_t rsv1;
 | |
|             uint8_t sn;
 | |
|             uint32_t ext_type : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } sync;
 | |
|         struct {
 | |
|             uint8_t mac_addr[IOT_MAC_ADDR_LEN];
 | |
|             uint16_t stei : 12,
 | |
|                      rsv0 : 4;
 | |
|             uint16_t rsv1;
 | |
|             uint8_t sn;
 | |
|             uint32_t ext_type : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } search;
 | |
|         struct {
 | |
|             uint32_t time_stamp;
 | |
|             uint32_t bcn_period_cnt;
 | |
|             uint16_t src_tei : 12,
 | |
|                      mcs : 4;
 | |
|             uint16_t pb_sz_idx : 4,
 | |
|                      resv0 : 8,
 | |
|                      version : 4;
 | |
|             uint8_t  fccs[3];
 | |
|         } rf_bcn;
 | |
|         struct {
 | |
|             uint32_t src_tei : 12,
 | |
|                      dst_tei : 12,
 | |
|                      lid : 8;
 | |
|             uint16_t frame_len : 12, /* unit 100us */
 | |
|                      pb_sz_idx : 4;
 | |
|             uint8_t  mcs : 4,
 | |
|                      tei_filter_flag : 1,
 | |
|                      retry : 1,
 | |
|                      resv0 : 2;
 | |
|             uint32_t resv1;
 | |
|             uint32_t resv2 : 4,
 | |
|                      version : 4,
 | |
|                      fccs : 24;
 | |
|         } rf_sof;
 | |
|         struct {
 | |
|             uint32_t rx_result : 4,
 | |
|                      resv0 : 4,
 | |
|                      dtei : 12,
 | |
|                      resv1 : 12;
 | |
|             uint32_t resv2;
 | |
|             uint32_t resv3 : 24,
 | |
|                      ext_deli : 4,
 | |
|                      version : 4;
 | |
|             uint8_t  fccs[3];
 | |
|         } rf_sack;
 | |
|         /* Rf test tx calibration fc variable region */
 | |
|         struct {
 | |
|             /* dvice id magic number */
 | |
|             uint16_t dev_id_magic;
 | |
|             /* tx calibration register combination magic number */
 | |
|             uint32_t reg_magic;
 | |
|             /* rf tx calibration register type, see RF_TEST_TX_CALI_REG_XXX */
 | |
|             uint16_t reg_type   :3,
 | |
|             /* rserved for future use */
 | |
|                      resv0      :13;
 | |
|             uint32_t resv1      :24,
 | |
|             /* test type, see RF_TEST_TYPE_XXX */
 | |
|                      test_type  :4,
 | |
|             /* protocol Version */
 | |
|                      version    :4;
 | |
|             /* check code */
 | |
|             uint8_t  fccs[3];
 | |
|         } rf_test_tx_cali;
 | |
|     } vf;
 | |
| } POSTPACK spg_frame_control_t;
 | |
| 
 | |
| 
 | |
| typedef PREPACK struct _hp10_frame_control {
 | |
|     uint32_t cc : 1,
 | |
|         dt : 3,
 | |
|         vf : 13,
 | |
|         fccs : 8,
 | |
|         resv : 7;
 | |
| } POSTPACK hp10_frame_control;
 | |
| 
 | |
| #define HPAV_MPDU_FC_LEN      16
 | |
| #define HPAV_MPDU_FCCS_LEN    3
 | |
| 
 | |
| typedef PREPACK struct _hpav_frame_control {
 | |
|     uint8_t delimiter_type : 3,
 | |
|         access : 1,
 | |
|         snid : 4;
 | |
|     union {
 | |
|         struct {
 | |
|             uint32_t bts;
 | |
|             uint32_t bto0 : 16,
 | |
|                 bto1 : 16;
 | |
|             uint32_t bto2 : 16,
 | |
|                 bto3 : 16;
 | |
|         } bcn;
 | |
|         /* sof */
 | |
|         struct {
 | |
|             uint16_t src_tei : 8,
 | |
|                 dst_tei : 8;
 | |
|             uint8_t lid;
 | |
|             uint32_t cfs : 1,
 | |
|                 bdf : 1,
 | |
|                 hp10df : 1,
 | |
|                 hp11df : 1,
 | |
|                 eks : 4,
 | |
|                 pbb : 8,
 | |
|                 ble : 8,
 | |
|                 pbsz : 1,
 | |
|                 numsym : 2,
 | |
|                 tmi_av : 5;
 | |
|             uint32_t fl_av : 12,
 | |
|                 mpdu_cnt : 2,
 | |
|                 burst_cnt : 2,
 | |
|                 bbf : 1,
 | |
|                 mrtfl : 4,
 | |
|                 dcppcf : 1,
 | |
|                 mcf : 1,
 | |
|                 mnbf : 1,
 | |
|                 rsr : 1,
 | |
|                 clst : 1,
 | |
|                 mfs_cmd_mgmt : 3,
 | |
|                 mfs_cmd_data : 3;
 | |
|             uint8_t mfs_rsp_mgmt : 2,
 | |
|                 mfs_rsp_data : 2,
 | |
|                 bm_sacki : 4;
 | |
|         } sof;
 | |
|         /* sack */
 | |
|         struct {
 | |
|             uint16_t dst_tei : 8,
 | |
|                 cfs : 1,
 | |
|                 bdf : 1,
 | |
|                 svn : 1,
 | |
|                 rrtf : 1,
 | |
|                 mfs_rsp_data : 2,
 | |
|                 mfs_rsp_mgmt : 2;
 | |
|             uint8_t sackt3 : 2,
 | |
|                 sackt2: 2,
 | |
|                 sackt1: 2,
 | |
|                 sackt0: 2;
 | |
|             uint8_t sackd_bitpad_var[8];
 | |
|             uint8_t rx_winsz : 4,
 | |
|                 rrtl : 4;
 | |
|         } sack;
 | |
|         /* rts cts */
 | |
|         struct {
 | |
|             uint16_t src_tei : 8,
 | |
|                 dst_tei : 8;
 | |
|             uint8_t lid;
 | |
|             uint32_t cfs : 1,
 | |
|                 bdf : 1,
 | |
|                 hp10df : 1,
 | |
|                 hp11df : 1,
 | |
|                 rtsf : 1,
 | |
|                 igf : 1,
 | |
|                 mnbf : 1,
 | |
|                 mcf : 1,
 | |
|                 dur : 14,
 | |
|                 rsvd0 : 10;
 | |
|             uint8_t rsvd1[5];
 | |
|         } rtscts;
 | |
|         /* sound */
 | |
|         struct {
 | |
|             uint32_t stei : 8,
 | |
|                 dtei : 8,
 | |
|                 lid : 8,
 | |
|                 cfs : 1,
 | |
|                 pbsz : 1,
 | |
|                 bdf : 1,
 | |
|                 saf : 1,
 | |
|                 scf : 1,
 | |
|                 req_tm : 3;
 | |
|             uint16_t fl_av : 12,
 | |
|                 mpducnt : 2,
 | |
|                 rsvd0 : 2;
 | |
|             uint8_t ppb;
 | |
|             uint8_t src;
 | |
|             uint32_t resvd;
 | |
|         } sound;
 | |
|         /* rsof */
 | |
|         struct {
 | |
|             uint16_t dst_tei : 8,
 | |
|                 cfs : 1,
 | |
|                 bdf : 1,
 | |
|                 svn : 1,
 | |
|                 rrtf : 1,
 | |
|                 mfs_rsp_data : 2,
 | |
|                 mfs_rsp_mgmt : 2;
 | |
|             uint8_t sackd_bitpad_var[6];
 | |
|             uint8_t rx_winsz : 4,
 | |
|                 rrtl : 4;
 | |
|             uint16_t rsof_fl_av : 10,
 | |
|                 tmi_av : 5,
 | |
|                 pbsz : 1;
 | |
|             uint8_t num_sym : 2,
 | |
|                 mfs_cmd_data : 3,
 | |
|                 mfs_cmd_mgmt : 3;
 | |
|         }rsof;
 | |
|     } vf_av;
 | |
|     struct {
 | |
|         uint8_t fccs_av0;
 | |
|         uint8_t fccs_av1;
 | |
|         uint8_t fccs_av2;
 | |
|     } fccs_av;
 | |
| } POSTPACK hpav_frame_control;
 | |
| 
 | |
| typedef PREPACK struct _i1901_frame_control {
 | |
|     uint32_t delimiter_type : 3,
 | |
|         network_type : 5,
 | |
|         nid : 24;
 | |
|     union {
 | |
|         struct {
 | |
|             uint32_t time_stamp; /* NTB */
 | |
|             uint16_t stei : 12,
 | |
|                 tmi : 4;
 | |
|             uint16_t phase_num : 2,
 | |
|                 pss : 4,
 | |
|                 resv : 10;
 | |
|             uint32_t resv1 : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } bcn;
 | |
|         struct {
 | |
|             uint32_t stei : 12,
 | |
|                 dtei : 12,
 | |
|                 lid : 8;
 | |
|             uint16_t frame_len : 12, /* unit 10us */
 | |
|                 pb_num : 4;
 | |
|             uint16_t bcast : 1,
 | |
|                 retry : 1,
 | |
|                 encry : 2,
 | |
|                 tmi : 4,
 | |
|                 tmi_ext : 1,
 | |
|                 pss :4,
 | |
|                 resv : 3;
 | |
|             uint32_t resv1 : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } sof;
 | |
|         struct {
 | |
|             uint32_t result : 4,
 | |
|                 stei : 12,
 | |
|                 dtei : 12,
 | |
|                 rx_pb : 3,
 | |
|                 resv : 1;
 | |
|             uint32_t snr : 8,
 | |
|                 load : 8,
 | |
|                 resv1 : 16;
 | |
|             uint32_t ext_deli : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } sack;
 | |
|         struct {
 | |
|             uint32_t duration : 16,
 | |
|                 sbandoffset : 16;
 | |
|             uint32_t receive_nid : 24,
 | |
|                 resv : 8;
 | |
|             uint32_t resv1 : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } nn_cco;
 | |
|         struct {
 | |
|             uint32_t stei : 12,
 | |
|                 dtei : 12,
 | |
|                 lid : 8;
 | |
|             uint32_t mnbf : 1,
 | |
|                 rtsf : 1,
 | |
|                 encry : 2,
 | |
|                 dur : 12,
 | |
|                 resv : 16;
 | |
|             uint32_t resv1 : 4,
 | |
|                 version : 4,
 | |
|                 fccs : 24;
 | |
|         } rts_cts;
 | |
|     } vf;
 | |
| } POSTPACK i1901_frame_control_t;
 | |
| 
 | |
| #pragma pack(pop)    // restore the pack status
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* PLC_MPDU_HEADER_H */
 |