324 const char *name =
"";
325 auto htModeId = std::make_tuple(mcsMode->getBandwidth(), mcsMode->getMcsIndex(), guardIntervalType);
328 const Ieee80211OfdmSignalMode *legacySignal =
nullptr;
329 const Ieee80211HtSignalMode *htSignal =
nullptr;
330 switch (preambleFormat) {
332 htSignal =
new Ieee80211HtSignalMode(mcsMode->getMcsIndex(), &
Ieee80211OfdmCompliantModulations::bpskModulation,
Ieee80211HtCompliantCodes::getCompliantCode(&
Ieee80211OfdmCompliantCodes::ofdmConvolutionalCode1_2, &
Ieee80211OfdmCompliantModulations::bpskModulation,
nullptr,
nullptr,
nullptr, mcsMode->getBandwidth(),
false), mcsMode->getBandwidth(), guardIntervalType);
336 htSignal =
new Ieee80211HtSignalMode(mcsMode->getMcsIndex(), &
Ieee80211OfdmCompliantModulations::qbpskModulation,
Ieee80211HtCompliantCodes::getCompliantCode(&
Ieee80211OfdmCompliantCodes::ofdmConvolutionalCode1_2, &
Ieee80211OfdmCompliantModulations::qbpskModulation,
nullptr,
nullptr,
nullptr, mcsMode->getBandwidth(),
false), mcsMode->getBandwidth(), guardIntervalType);
339 throw cRuntimeError(
"Unknown preamble format");
341 const Ieee80211HtDataMode *dataMode =
new Ieee80211HtDataMode(mcsMode, mcsMode->getBandwidth(), guardIntervalType);
342 const Ieee80211HtPreambleMode *preambleMode =
new Ieee80211HtPreambleMode(htSignal, legacySignal, preambleFormat, dataMode->getNumberOfSpatialStreams());
343 const Ieee80211HtMode *htMode =
new Ieee80211HtMode(name, preambleMode, dataMode, centerFrequencyMode);
344 singleton.
modeCache.insert(std::pair<std::tuple<Hz, unsigned int, Ieee80211HtModeBase::GuardIntervalType>,
const Ieee80211HtMode *>(htModeId, htMode));