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

网络

开发平台:

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 SUBFRAME_H
  19. #define SUBFRAME_H
  20. #include "profile.h"
  21. #include "contentionslot.h"
  22. #include "phypdu.h"
  23. #include "ulsubframetimer.h"
  24. #include "dlsubframetimer.h"
  25. class FrameMap;
  26. /**
  27.  * Abstract class for subframe
  28.  */
  29. class SubFrame 
  30. {
  31.  public:
  32.   /**
  33.    * Constructor
  34.    * @param map The frame 
  35.    */
  36.   SubFrame (FrameMap *map);
  37.   /**
  38.    * Destructor
  39.    */
  40.   ~SubFrame ();
  41.   /**
  42.    * Add a downlink profile
  43.    * @param f The frequency of the profile
  44.    * @param enc The encoding used in the profile
  45.    * @return a new profile with the given caracteristics
  46.    */
  47.   Profile * addProfile (int f, Ofdm_mod_rate enc);
  48.   
  49.   /**
  50.    * Return the DL profile with the given UID
  51.    * @return the DL profile with the given UID
  52.    */
  53.   Profile * getProfile (int iuc); 
  54.   /**
  55.    * Remove a downlink profile
  56.    * @param p The profile to remove
  57.    */
  58.   void removeProfile (Profile *p);
  59.   /**
  60.    * Remove all downlink profiles
  61.    */
  62.   void removeProfiles ();
  63.   /**
  64.    * Return the number of profiles for this subframe
  65.    */
  66.   int getNbProfile ();
  67.   /**
  68.    * Return the head of the profile list
  69.    */
  70.   Profile * getFirstProfile ();
  71.   /**
  72.    * Return the Configuration Change count
  73.    */
  74.   int getCCC ();
  75.   /**
  76.    * Increment the configuration change count
  77.    */
  78.   void incrCCC ();
  79.  protected:
  80.   /**
  81.    * The frame where it is located
  82.    */
  83.   FrameMap *map_;
  84.   /**
  85.    * List of burst profiles for downlink
  86.    */
  87.   struct profile profile_list_;
  88.   
  89.   /**
  90.    * Number of element in the PhyPDU list
  91.    */
  92.   int nbProfile_;
  93.   /**
  94.    * Configuration change count
  95.    */
  96.   int ccc_;
  97. };
  98. /**
  99.  * This class defines a downlink subframe
  100.  */
  101. class DlSubFrame : public SubFrame
  102. {
  103.   friend class DlSubFrameTimer;
  104.  public:
  105.   /**
  106.    * Constructor
  107.    * @param map The frame 
  108.    */
  109.   DlSubFrame (FrameMap *map);
  110.   /**
  111.    * Destructor
  112.    */
  113.   ~DlSubFrame ();
  114.   /**
  115.    * Return the DL phypdu
  116.    * @return the phypdu
  117.    */
  118.   inline PhyPdu * getPdu () { return phypdu_; }
  119.   /**
  120.    * Set the channel ID
  121.    * @param id The channel id
  122.    */
  123.   inline void setChannelID (int id) { channel_ = id; }
  124.   /**
  125.    * Return the channel ID
  126.    * @return The channel ID
  127.    */
  128.   inline int getChannelID () { return channel_; }
  129.   /**
  130.    * Return the timer handling the subframe
  131.    */
  132.   inline DlSubFrameTimer *getTimer () { return &timer_; }
  133.  private:
  134.   /**
  135.    * List of uplink PhyPDU composing the uplink subframe
  136.    */
  137.   PhyPdu * phypdu_;
  138.   /**
  139.    * The downlink channel id
  140.    */
  141.   int channel_;
  142.   /**
  143.    * The timer for handling bursts
  144.    */
  145.   DlSubFrameTimer timer_;
  146. };
  147. /**
  148.  * This class defines a downlink subframe
  149.  */
  150. class UlSubFrame : public SubFrame
  151. {
  152.   friend class UlSubFrameTimer;
  153.  public:
  154.   /**
  155.    * Constructor
  156.    * @param map The frame 
  157.    */
  158.   UlSubFrame (FrameMap *map);
  159.   /**
  160.    * Destructor
  161.    */
  162.   ~UlSubFrame ();
  163.   /**
  164.    * Return the DL phypdu
  165.    * @return the phypdu
  166.    */
  167.   inline PhyPdu * getFirstPdu () { return phypdu_list_.lh_first; }
  168.   
  169.   /**
  170.    * Add an uplink phy pdu
  171.    * @param pos The position of the PhyPdu in the subframe
  172.    * @param preamble The size of the preamble in units of XX
  173.    * @return newly created PhyPdu
  174.    */
  175.   PhyPdu * addPhyPdu (int pos, int preamble);
  176.   /**
  177.    * Remove a Phy PDU
  178.    * @param pdu The Phy PDU to remove
  179.    */
  180.   void removePhyPdu (PhyPdu *p);
  181.   /**
  182.    * Return the number of PhyPdu
  183.    */
  184.   inline int getNbPdu () { return nbPhyPdu_; }
  185.   /**
  186.    * Return the burst located at the given index
  187.    * @param pos The position of the burst
  188.    */
  189.   PhyPdu* getPhyPdu(int pos);
  190.   /*
  191.    * Return the contention slot for BW requests
  192.    * @return the pointer to the contention slot for BW requests
  193.    */
  194.   inline BwContentionSlot* getBw_req( ) { return &bw_req_; }
  195.   /*
  196.    * Return the contention slot for BW requests
  197.    * @return the pointer to the contention slot for BW requests
  198.    */
  199.   inline RngContentionSlot* getRanging( ) { return &ranging_; }
  200.   /**
  201.    * Set the start time in units of PS
  202.    * @param time The subframe start time
  203.    */
  204.   inline void setStarttime (int time) { starttime_ = time;}
  205.   /**
  206.    * Get the start time in units of PS
  207.    * @return The subframe start time
  208.    */
  209.   inline int getStarttime () { return starttime_;}
  210.   /**
  211.    * Set the channel ID
  212.    * @param id The channel id
  213.    */
  214.   inline void setChannelID (int id) { channel_ = id; }
  215.   /**
  216.    * Return the channel ID
  217.    * @return The channel ID
  218.    */
  219.   inline int getChannelID () { return channel_; }
  220.   /**
  221.    * Return the timer handling the subframe
  222.    */
  223.   inline UlSubFrameTimer *getTimer () { return &timer_; }
  224.  protected:
  225.   /**
  226.    * Information about the bandwidth request contention
  227.    */
  228.   BwContentionSlot bw_req_;
  229.   
  230.   /**
  231.    * Information about the ranging contention
  232.    */
  233.   RngContentionSlot ranging_;
  234.  private:
  235.   /**
  236.    * List of uplink PhyPDU composing the uplink subframe
  237.    */
  238.   struct phyPdu phypdu_list_;
  239.   /**
  240.    * Number of phypdu
  241.    */
  242.   int nbPhyPdu_;
  243.   
  244.   /**
  245.    * Start time of the subframe in unit of PS
  246.    */
  247.   int starttime_;
  248.   /**
  249.    * The downlink channel id
  250.    */
  251.   int channel_;
  252.   /**
  253.    * The timer for handling bursts
  254.    */
  255.   UlSubFrameTimer timer_;
  256. };
  257. #endif