phypdu.h
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:4k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #ifndef PHYPDU_H
  19. #define PHYPDU_H
  20. #include "burst.h"
  21. #include "dlburst.h"
  22. #include "ulburst.h"
  23. class FrameMap;
  24. class PhyPdu;
  25. LIST_HEAD (phyPdu, PhyPdu);
  26. /**
  27.  * This class describte the content of a Phy PDU
  28.  */
  29. class PhyPdu
  30. {
  31.  public:
  32.   /**
  33.    * Create a phy pdu with the given preamble size
  34.    * @param preamble The preamble size in OFDM symbols
  35.    */
  36.   PhyPdu (FrameMap *map, int preamble);
  37.   /**
  38.    * Delete the object
  39.    */
  40.   virtual ~PhyPdu ();
  41.   /**
  42.    * Return the preamble size for the PDU in unit of OFDM symbols
  43.    * @return the preamble size for the PDU
  44.    */
  45.   int getPreamble( );
  46.   /**
  47.    * Set the preamble size for the PDU in unit of OFDM symbols
  48.    * @param preamble the preamble size for the PDU
  49.    */
  50.   void setPreamble( int preamble );
  51.   
  52.   /**
  53.    * Create and return a burst in the PDU
  54.    * @param pos The position of the burst
  55.    * @return The burst created
  56.    */
  57.   virtual Burst * addBurst(int pos);
  58.   /**
  59.    * Remove a burst in the PDU
  60.    * @param burst The burst to remove
  61.    */
  62.   void removeBurst(Burst *b);
  63.   /**
  64.    * Return the burst located at the given index
  65.    * @param pos The position of the burst
  66.    */
  67.   Burst* getBurst(int pos);
  68.   /**
  69.    * Return the number of burst in the PhyPDU
  70.    */
  71.   inline int getNbBurst () { return nb_burst_; }
  72.   /**
  73.    * Return the FrameMap 
  74.    */
  75.   inline FrameMap * getMap() { return map_; }
  76.   // Chain element to the list
  77.   inline void insert_entry_head(struct phyPdu *head) {
  78.     LIST_INSERT_HEAD(head, this, link);
  79.   }
  80.   
  81.   // Chain element to the list
  82.   inline void insert_entry(PhyPdu *elem) {
  83.     LIST_INSERT_AFTER(elem, this, link);
  84.   }
  85.   
  86.   // Return next element in the chained list
  87.   PhyPdu* next_entry(void) const { return link.le_next; }
  88.   // Remove the entry from the list
  89.   inline void remove_entry() { 
  90.     LIST_REMOVE(this, link); 
  91.   }
  92.  protected:
  93.   /*
  94.    * Pointer to next in the list
  95.    */
  96.   LIST_ENTRY(PhyPdu) link;
  97.   //LIST_ENTRY(PhyPdu); //for magic draw
  98.   /**
  99.    * Curent number of bursts
  100.    */
  101.   int nb_burst_;
  102.   /**
  103.    * The list of burst contained in this PDU.
  104.    * For uplink Phy PDU, only one burst is allowed
  105.    */
  106.   struct burst burst_list_;
  107.  private:
  108.   /**
  109.    * Size of the preamble in units of OFDM symbols
  110.    */
  111.   int preamble_;
  112.   
  113.   /**
  114.    * The frame map
  115.    */
  116.   FrameMap *map_;
  117. };
  118. /**
  119.  * Define subclass for downlink phy pdu
  120.  */
  121. class DlPhyPdu: public PhyPdu
  122. {
  123.  public:
  124.   /**
  125.    * Create a phy pdu with the given preamble size
  126.    * @param preamble The preamble size in OFDM symbols
  127.    */
  128.   DlPhyPdu (FrameMap *map, int preamble);
  129.   /**
  130.    * Create and return a burst in the PDU
  131.    * @param pos The position of the burst
  132.    * @return The burst created
  133.    */
  134.   virtual Burst * addBurst(int pos);
  135. };
  136. /**
  137.  * Define subclass for uplink phy pdu
  138.  */
  139. class UlPhyPdu: public PhyPdu
  140. {
  141.  public:
  142.   /**
  143.    * Create a phy pdu with the given preamble size
  144.    * @param preamble The preamble size in OFDM symbols
  145.    */
  146.   UlPhyPdu (FrameMap *map, int preamble);
  147.   /**
  148.    * Create and return a burst in the PDU
  149.    * @param pos The position of the burst
  150.    * @return The burst created
  151.    */
  152.   virtual Burst * addBurst(int pos);
  153. };
  154. #endif