src/wifi/test/tx-duration-test.cc
changeset 10139 17a71cd49da3
parent 9266 d26408b17360
child 10553 8c347165bb56
equal deleted inserted replaced
10138:2f8e35b43d11 10139:17a71cd49da3
    58    * @param preamble the WifiPreamble used
    58    * @param preamble the WifiPreamble used
    59    * @param knownDurationMicroSeconds the known value of the transmission
    59    * @param knownDurationMicroSeconds the known value of the transmission
    60    *
    60    *
    61    * @return true if values correspond, false otherwise
    61    * @return true if values correspond, false otherwise
    62    */
    62    */
    63   bool CheckTxDuration (uint32_t size, WifiMode payloadMode,  WifiPreamble preamble, uint32_t knownDurationMicroSeconds);
    63   bool CheckTxDuration (uint32_t size, WifiMode payloadMode,  WifiPreamble preamble, double knownDurationMicroSeconds);
    64 
    64 
    65 };
    65 };
    66 
    66 
    67 
    67 
    68 TxDurationTest::TxDurationTest ()
    68 TxDurationTest::TxDurationTest ()
    76 }
    76 }
    77 
    77 
    78 bool
    78 bool
    79 TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint32_t knownDurationMicroSeconds)
    79 TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint32_t knownDurationMicroSeconds)
    80 {
    80 {
    81   uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, payloadMode);
    81   WifiTxVector txVector;
       
    82   txVector.SetMode (payloadMode);
       
    83   uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, txVector);
    82   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
    84   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
    83     {
    85     {
    84       std::cerr << " size=" << size
    86       std::cerr << " size=" << size
    85                 << " mode=" << payloadMode
    87                 << " mode=" << payloadMode
    86                 << " known=" << knownDurationMicroSeconds
    88                 << " known=" << knownDurationMicroSeconds
    90     }
    92     }
    91   return true;
    93   return true;
    92 }
    94 }
    93 
    95 
    94 bool
    96 bool
    95 TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, uint32_t knownDurationMicroSeconds)
    97 TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, double knownDurationMicroSeconds)
    96 {
    98 {
    97   uint32_t calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, payloadMode, preamble).GetMicroSeconds ();
    99   WifiTxVector txVector;
       
   100   txVector.SetMode (payloadMode);
       
   101   txVector.SetNss(1);
       
   102   txVector.SetStbc(0);
       
   103   txVector.SetNess(0);
       
   104   double calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, txVector, preamble).GetMicroSeconds ();
    98   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
   105   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
    99     {
   106     {
   100       std::cerr << " size=" << size
   107       std::cerr << " size=" << size
   101                 << " mode=" << payloadMode
   108                 << " mode=" << payloadMode
   102                 << " preamble=" << preamble
   109                 << " preamble=" << preamble
   110 
   117 
   111 void
   118 void
   112 TxDurationTest::DoRun (void)
   119 TxDurationTest::DoRun (void)
   113 {
   120 {
   114   bool retval = true;
   121   bool retval = true;
       
   122   
   115 
   123 
   116   // IEEE Std 802.11-2007 Table 18-2 "Example of LENGTH calculations for CCK"
   124   // IEEE Std 802.11-2007 Table 18-2 "Example of LENGTH calculations for CCK"
   117   retval = retval
   125   retval = retval
   118     && CheckPayloadDuration (1023, WifiPhy::GetDsssRate11Mbps (), 744)
   126     && CheckPayloadDuration (1023, WifiPhy::GetDsssRate11Mbps (), 744)
   119     && CheckPayloadDuration (1024, WifiPhy::GetDsssRate11Mbps (), 745)
   127     && CheckPayloadDuration (1024, WifiPhy::GetDsssRate11Mbps (), 745)
   175   // 802.11g durations are same as 802.11a durations but with 6 us signal extension
   183   // 802.11g durations are same as 802.11a durations but with 6 us signal extension
   176   retval = retval
   184   retval = retval
   177     && CheckTxDuration (1536, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 254)
   185     && CheckTxDuration (1536, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 254)
   178     && CheckTxDuration (76, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 38)
   186     && CheckTxDuration (76, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 38)
   179     && CheckTxDuration (14, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 30);
   187     && CheckTxDuration (14, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 30);
       
   188 
       
   189   //802.11n durations
       
   190   retval = retval
       
   191     && CheckTxDuration (1536,WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,228) 
       
   192     && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,48)
       
   193     && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,40 )
       
   194     //should be 218.8, 38,8 and 31.6  but microseconds are only represented as integers will have to change Time to change that
       
   195     && CheckTxDuration (1536, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,218)
       
   196     && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,38)
       
   197     && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,31);
   180 }
   198 }
   181 
   199 
   182 class TxDurationTestSuite : public TestSuite
   200 class TxDurationTestSuite : public TestSuite
   183 {
   201 {
   184 public:
   202 public: