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: |