682 const char *name =
"";
683 unsigned int nss = mcsMode->getNumNss();
684 auto htModeId = std::make_tuple(mcsMode->getBandwidth(), mcsMode->getMcsIndex(), guardIntervalType, nss);
687 const Ieee80211OfdmSignalMode *legacySignal =
nullptr;
688 const Ieee80211VhtSignalMode *htSignal =
nullptr;
689 switch (preambleFormat) {
691 htSignal =
new Ieee80211VhtSignalMode(mcsMode->getMcsIndex(), &
Ieee80211OfdmCompliantModulations::bpskModulation,
Ieee80211VhtCompliantCodes::getCompliantCode(&
Ieee80211OfdmCompliantCodes::ofdmConvolutionalCode1_2, &
Ieee80211OfdmCompliantModulations::bpskModulation,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr, mcsMode->getBandwidth(),
false), mcsMode->getBandwidth(), guardIntervalType);
695 htSignal =
new Ieee80211VhtSignalMode(mcsMode->getMcsIndex(), &
Ieee80211OfdmCompliantModulations::qbpskModulation,
Ieee80211VhtCompliantCodes::getCompliantCode(&
Ieee80211OfdmCompliantCodes::ofdmConvolutionalCode1_2, &
Ieee80211OfdmCompliantModulations::qbpskModulation,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr, mcsMode->getBandwidth(),
false), mcsMode->getBandwidth(), guardIntervalType);
698 throw cRuntimeError(
"Unknown preamble format");
700 const Ieee80211VhtDataMode *dataMode =
new Ieee80211VhtDataMode(mcsMode, mcsMode->getBandwidth(), guardIntervalType);
701 const Ieee80211VhtPreambleMode *preambleMode =
new Ieee80211VhtPreambleMode(htSignal, legacySignal, preambleFormat, dataMode->getNumberOfSpatialStreams());
702 const Ieee80211VhtMode *htMode =
new Ieee80211VhtMode(name, preambleMode, dataMode, centerFrequencyMode);
703 singleton.
modeCache.insert(std::pair<std::tuple<Hz, unsigned int, Ieee80211VhtModeBase::GuardIntervalType, unsigned int>,
const Ieee80211VhtMode *>(htModeId, htMode));