274 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			6.4 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 MPDU_FRAME_H
 | 
						|
#define MPDU_FRAME_H
 | 
						|
 | 
						|
#include "plc_fr.h"
 | 
						|
#include "os_types.h"
 | 
						|
#include "plc_mpdu_header.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* this file contains FC defination for different
 | 
						|
 * mpdus, such as beacon, sof, sack, etc. and also
 | 
						|
 * would include PB's frame format defination such as PB header.
 | 
						|
 * Packed for the structures in the whole file,
 | 
						|
 * little endian.
 | 
						|
 */
 | 
						|
#pragma pack(push) // save the pack status
 | 
						|
#pragma pack(1)    // 1 byte align
 | 
						|
 | 
						|
/*
 | 
						|
 * PB defination
 | 
						|
 */
 | 
						|
 | 
						|
/* SOF */
 | 
						|
#define SG_SOF_PB_HDR_CRC_LEN   4
 | 
						|
#define SG_SOF_PB_CRC_LEN       3
 | 
						|
#define SG_SOF_PB_HDR_LEN       1
 | 
						|
 | 
						|
typedef struct _sg_sof_pb_hdr {
 | 
						|
    uint8_t seq : 6,
 | 
						|
        mac_frame_start : 1,
 | 
						|
        mac_frame_end : 1;
 | 
						|
} sg_sof_pb_hdr_t;
 | 
						|
 | 
						|
typedef struct _sg_sof_pb_72 {
 | 
						|
    sg_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[68];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_sof_pb_72_t;
 | 
						|
 | 
						|
typedef struct _sg_sof_pb_136 {
 | 
						|
    sg_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[132];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_sof_pb_136_t;
 | 
						|
 | 
						|
typedef struct _sg_sof_pb_264 {
 | 
						|
    sg_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[260];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_sof_pb_264_t;
 | 
						|
 | 
						|
typedef struct _sg_sof_pb_520 {
 | 
						|
    sg_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[516];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_sof_pb_520_t;
 | 
						|
 | 
						|
/* beacon - only 1 pb allowed
 | 
						|
 * default 520 and 136
 | 
						|
 * optional 72 and 264
 | 
						|
 */
 | 
						|
#define SG_BCN_PB_HDR_CRC_LEN       3
 | 
						|
#define SG_BCN_PB_CRC_LEN           3
 | 
						|
#define SG_BCN_PB_PAYLOAD_CRC_LEN   4
 | 
						|
typedef struct _sg_bcn_pb_520 {
 | 
						|
    uint8_t payload[517];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_bcn_pb_520_t;
 | 
						|
 | 
						|
typedef struct _sg_bcn_pb_136 {
 | 
						|
    uint8_t payload[133];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_bcn_pb_136_t;
 | 
						|
 | 
						|
typedef struct _sg_bcn_pb_72 {
 | 
						|
    uint8_t payload[69];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_bcn_pb_72_t;
 | 
						|
 | 
						|
typedef struct _sg_bcn_pb_264 {
 | 
						|
    uint8_t payload[261];
 | 
						|
    uint8_t icv[3];
 | 
						|
} sg_bcn_pb_264_t;
 | 
						|
 | 
						|
/* SPG define start */
 | 
						|
 | 
						|
/* SOF pd header len+pbcs len = 4+3*/
 | 
						|
#define SPG_SOF_PB_HDR_CRC_LEN  7
 | 
						|
#define SPG_SOF_PB_CRC_LEN      3
 | 
						|
#define SPG_SOF_PB_HDR_LEN      4
 | 
						|
#define SPG_SOF_PB_RESV_LEN     1
 | 
						|
 | 
						|
typedef struct _spg_sof_pb_hdr {
 | 
						|
    uint16_t seq;
 | 
						|
    uint16_t resv;
 | 
						|
} spg_sof_pb_hdr_t;
 | 
						|
typedef struct _spg_sof_pb_136 {
 | 
						|
    spg_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[128];
 | 
						|
    uint8_t resv;
 | 
						|
    uint8_t icv[3];
 | 
						|
} spg_sof_pb_136_t;
 | 
						|
typedef struct _spg_sof_pb_520 {
 | 
						|
    spg_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[512];
 | 
						|
    uint8_t resv;
 | 
						|
    uint8_t icv[3];
 | 
						|
} spg_sof_pb_520_t;
 | 
						|
/* beacon - only 1 pb allowed
 | 
						|
 * default 520 and 136
 | 
						|
 */
 | 
						|
#define SPG_BCN_PB_HDR_CRC_LEN            3
 | 
						|
#define SPG_BCN_PB_CRC_LEN                3
 | 
						|
#define SPG_BCN_PB_PAYLOAD_CRC_LEN        4
 | 
						|
#define SPG_BCN_PB_RESV_LEN               1
 | 
						|
 | 
						|
typedef struct _spg_bcn_pb_136 {
 | 
						|
    uint8_t payload[132];
 | 
						|
    uint8_t resv;
 | 
						|
    uint8_t icv[3];
 | 
						|
} spg_bcn_pb_136_t;
 | 
						|
typedef struct _spg_bcn_pb_520 {
 | 
						|
    uint8_t payload[516];
 | 
						|
    uint8_t resv;
 | 
						|
    uint8_t icv[3];
 | 
						|
} spg_bcn_pb_520_t;
 | 
						|
 | 
						|
/* SPG define end */
 | 
						|
 | 
						|
#if SUPPORT_GREEN_PHY
 | 
						|
 | 
						|
/* pb header  */
 | 
						|
typedef struct _gp_sof_pb_hdr {
 | 
						|
 uint16_t ssn;
 | 
						|
 uint16_t mfbo : 9,
 | 
						|
    vpf : 1,
 | 
						|
    mmqf : 1,
 | 
						|
    mfbf : 1,
 | 
						|
    opsf : 1,
 | 
						|
    rsvd0 : 3;
 | 
						|
} gp_sof_pb_hdr_t;
 | 
						|
 | 
						|
 /*
 | 
						|
 * PB defination
 | 
						|
 */
 | 
						|
/* beacon - only 1 pb allowed
 | 
						|
 * default 136
 | 
						|
 */
 | 
						|
#define GP_BCN_PB_HDR_CRC_LEN            4
 | 
						|
#define GP_BCN_PB_CRC_LEN                4
 | 
						|
typedef struct _gp_bcn_pb_136 {
 | 
						|
    uint8_t payload[132];
 | 
						|
    uint8_t icv[4];
 | 
						|
} gp_bcn_pb_136_t;
 | 
						|
 | 
						|
/* SOF */
 | 
						|
#define GP_SOF_PB_HDR_CRC_LEN            8
 | 
						|
#define GP_SOF_PB_CRC_LEN                4
 | 
						|
#define GP_SOF_PB_HDR_LEN                4
 | 
						|
 | 
						|
 | 
						|
typedef struct _gp_sof_pb_136 {
 | 
						|
    gp_sof_pb_hdr_t header;
 | 
						|
    uint8_t payload[128];
 | 
						|
    uint8_t icv[4];
 | 
						|
} gp_sof_pb_136_t;
 | 
						|
 | 
						|
typedef struct _gp_sof_pb_520 {
 | 
						|
    gp_sof_pb_hdr_t header;
 | 
						|
    uint8_t payload[512];
 | 
						|
    uint8_t icv[4];
 | 
						|
} gp_sof_pb_520_t;
 | 
						|
 | 
						|
 | 
						|
 /* SOUND */
 | 
						|
#define GP_SOUND_PB_HDR_CRC_LEN 4
 | 
						|
#define GP_SOUND_PB_CRC_LEN 4
 | 
						|
 | 
						|
 | 
						|
typedef struct _gp_sound_pb_136 {
 | 
						|
    uint8_t payload[136 - 4];
 | 
						|
    uint8_t icv[4];
 | 
						|
} gp_sound_pb_136_t;
 | 
						|
 | 
						|
typedef struct _gp_sound_pb_520 {
 | 
						|
    uint8_t payload[520 - 4];
 | 
						|
    uint8_t icv[4];
 | 
						|
} gp_sound_pb_520_t;
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
/* ieee1901 define start */
 | 
						|
/* SOF */
 | 
						|
#define I1901_SOF_PB_CRC_LEN            4
 | 
						|
#define I1901_SOF_PB_HDR_LEN            4
 | 
						|
#define I1901_SOF_PB_HDR_CRC_LEN        (I1901_SOF_PB_CRC_LEN \
 | 
						|
    + I1901_SOF_PB_HDR_LEN)
 | 
						|
 | 
						|
typedef struct _i1901_sof_pb_hdr {
 | 
						|
    uint8_t seq : 6,
 | 
						|
        mac_frame_start : 1,
 | 
						|
        mac_frame_end : 1;
 | 
						|
    uint8_t rsvd0;
 | 
						|
    uint16_t rsvd1;
 | 
						|
} i1901_sof_pb_hdr_t;
 | 
						|
 | 
						|
typedef struct _i1901_sof_pb_72 {
 | 
						|
    i1901_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[64];
 | 
						|
    uint8_t icv[I1901_SOF_PB_CRC_LEN];
 | 
						|
} i1901_sof_pb_72_t;
 | 
						|
 | 
						|
typedef struct _i1901_sof_pb_136 {
 | 
						|
    i1901_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[128];
 | 
						|
    uint8_t icv[I1901_SOF_PB_CRC_LEN];
 | 
						|
} i1901_sof_pb_136_t;
 | 
						|
 | 
						|
typedef struct _i1901_sof_pb_520 {
 | 
						|
    i1901_sof_pb_hdr_t pb_hdr;
 | 
						|
    uint8_t payload[512];
 | 
						|
    uint8_t icv[I1901_SOF_PB_CRC_LEN];
 | 
						|
} i1901_sof_pb_520_t;
 | 
						|
 | 
						|
/* BEACON */
 | 
						|
#define I1901_BCN_PB_CRC_LEN            4
 | 
						|
#define I1901_BCN_PB_PAYLOAD_CRC_LEN    4
 | 
						|
#define I1901_BCN_PB_HDR_CRC_LEN        I1901_BCN_PB_CRC_LEN
 | 
						|
 | 
						|
typedef struct _i1901_bcn_pb_72 {
 | 
						|
    uint8_t payload[64];
 | 
						|
    uint8_t bpcs[I1901_BCN_PB_PAYLOAD_CRC_LEN];
 | 
						|
    uint8_t icv[I1901_BCN_PB_CRC_LEN];
 | 
						|
} i1901_bcn_pb_72_t;
 | 
						|
 | 
						|
typedef struct _i1901_bcn_pb_136 {
 | 
						|
    uint8_t payload[128];
 | 
						|
    uint8_t bpcs[I1901_BCN_PB_PAYLOAD_CRC_LEN];
 | 
						|
    uint8_t icv[I1901_BCN_PB_CRC_LEN];
 | 
						|
} i1901_bcn_pb_136_t;
 | 
						|
 | 
						|
typedef struct _i1901_bcn_pb_520 {
 | 
						|
    uint8_t payload[512];
 | 
						|
    uint8_t bpcs[I1901_BCN_PB_PAYLOAD_CRC_LEN];
 | 
						|
    uint8_t icv[I1901_BCN_PB_CRC_LEN];
 | 
						|
} i1901_bcn_pb_520_t;
 | 
						|
 | 
						|
/* ieee1901 define end */
 | 
						|
 | 
						|
#pragma pack(pop)   // restore the pack status
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif // !MPDU_FRAME_H
 |