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