burst.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 BURST_H
  19. #define BURST_H
  20. #include "queue.h"
  21. #include "packet.h"
  22. class PhyPdu;
  23. class Burst;
  24. LIST_HEAD (burst, Burst);
  25. /**
  26.  * This class describe a burst
  27.  */
  28. class Burst
  29. {
  30.   friend class WimaxBurstTimer;
  31.  public:
  32.   /**
  33.    * Creates a burst
  34.    * @param phypdu The PhyPdu where it is located
  35.    */
  36.   Burst (PhyPdu *phypdu);
  37.   /**
  38.    * Delete the object
  39.    */
  40.   ~Burst ();
  41.   /**
  42.    * Return the CID for this burst
  43.    * @return the CID for this burst
  44.    */
  45.   int getCid( );
  46.   /**
  47.    * Return the burst duration in units of OFDM symbols
  48.    * @return the burst duration 
  49.    */
  50.   int getDuration( );
  51.   /**
  52.    * Set the duration of the burst in units of OFDM symbols
  53.    * @param duration The burst duration
  54.    */
  55.   void setDuration (int duration);
  56.   
  57.   /**
  58.    * Return the burst start time in units of symbol duration
  59.    * @return the burst start time
  60.    */
  61.   int getStarttime( );
  62.   /**
  63.    * Return the Interval Usage Code
  64.    * @return the burst start time
  65.    */
  66.   int getIUC( );
  67.   /**
  68.    * Set burst CID
  69.    * @param cid The burst CID
  70.    */
  71.   void setCid( int cid );
  72.   /**
  73.    * Set burst start time in units of symbol duration
  74.    * @param starttime the burst start time
  75.    */
  76.   void setStarttime( int starttime );
  77.   /**
  78.    * Set burst IUC
  79.    * @param iuc The burst IUC
  80.    */
  81.   void setIUC( int iuc );
  82.   /**
  83.    * Enqueue a packet to be schedule in this burst
  84.    * @param p The packet to queue
  85.    */
  86.   void enqueue (Packet *p);
  87.   /**
  88.    * Dequeue a packet from the queue
  89.    * @param p The packet to enqueue
  90.    */
  91.   Packet * dequeue ();
  92.   /**
  93.    * Return the queue size in bytes
  94.    */
  95.   int getQueueLength() { return queue_->byteLength();}
  96.   /**
  97.    * Schedule the timer for this burst
  98.    * @param time The time the trigger expires
  99.    */
  100.   //void trigger_timer (double time);
  101.   // Chain element to the list
  102.   inline void insert_entry_head(struct burst *head) {
  103.     LIST_INSERT_HEAD(head, this, link);
  104.   }
  105.   
  106.   // Chain element to the list
  107.   inline void insert_entry(Burst *elem) {
  108.     LIST_INSERT_AFTER(elem, this, link);
  109.   }
  110.   // Return next element in the chained list
  111.   Burst* next_entry(void) const { return link.le_next; }
  112.   // Remove the entry from the list
  113.   inline void remove_entry() { 
  114.     LIST_REMOVE(this, link); 
  115.   }
  116. protected:
  117.   /**
  118.    * A timer use to transmit the burst
  119.    */
  120.   //WimaxBurstTimer timer_;
  121.   /**
  122.    * Packets to be sent during this burst
  123.    */
  124.   PacketQueue* queue_;
  125.   /** 
  126.    * Return the PhyPdu 
  127.    * @return the PhyPdu 
  128.    */
  129.   inline PhyPdu *getPhyPdu () { return phypdu_; }
  130.   /*
  131.    * Pointer to next in the list
  132.    */
  133.   LIST_ENTRY(Burst) link;
  134.   //LIST_ENTRY(Burst); //for magic draw
  135.  private:
  136.   /**
  137.    * The CID for the burst. If a broadcast or multicast is used, then Mac SDUs for different SSs can be included in the burst.
  138.    */
  139.   int cid_;
  140.   
  141.   /**
  142.    * The burst duration in units of OFDM Symbols
  143.    */
  144.   int duration_;
  145.   
  146.   /**
  147.    * The start time of the burst in units of Symbol Duration
  148.    */
  149.   int starttime_;
  150.   
  151.   /**
  152.    * The profile ID
  153.    */
  154.   int iuc_;
  155.   /**
  156.    * The PhyPdu where it is located
  157.    */
  158.   PhyPdu *phypdu_;
  159. };
  160. #endif