92 friend class NrMemberPhySapProvider;
202 void SetCam(
const Ptr<NrChAccessManager>& s);
208 Ptr<NrChAccessManager>
GetCam()
const;
233 void SetSubChannels(
const std::vector<int>& rbIndexVector,
size_t nTotalAllocRbs);
243 bool RegisterUe(uint64_t imsi,
const Ptr<NrUeNetDevice>& ueDevice);
362 uint16_t slot)
override;
377 const uint16_t nodeId,
380 Ptr<NrControlMessage>);
395 const uint16_t nodeId,
398 Ptr<NrControlMessage>);
413 uint32_t scheduledUe,
416 uint32_t availableRb,
417 uint32_t availableSym,
432 const std::vector<int>& rbMap,
472 bool DoesFhAllocationFit(uint16_t bwpId, uint32_t mcs, uint32_t nRegs, uint8_t dlRank)
const;
490 void SetTddPattern(
const std::vector<LteNrTddSlotType>& pattern);
502 void StartSlot(
const SfnSf& startSlot);
529 void StartVarTti(
const std::shared_ptr<DciInfoElementTdma>& dci);
543 void EndVarTti(
const std::shared_ptr<DciInfoElementTdma>& lastDci);
552 void SendDataChannels(
const Ptr<PacketBurst>& pb,
553 const Time& varTtiPeriod,
554 const std::shared_ptr<DciInfoElementTdma>& dci);
563 void SendCtrlChannels(
const Time& varTtiPeriod);
570 std::list<Ptr<NrControlMessage>> RetrieveMsgsFromDCIs(
const SfnSf& sfn)
571 __attribute__((warn_unused_result));
578 void ChannelAccessGranted(
const Time& time);
583 void ChannelAccessLost();
591 bool TimeToTransmitCsiRs(uint16_t currentOffset)
const;
597 void TransmitCsiRsPerUe(Ptr<NrUeNetDevice> ueDev);
606 Time ScheduleCsiRs(Time varTti, uint16_t currentOffset);
617 Time DlCtrl(
const std::shared_ptr<DciInfoElementTdma>& dci) __attribute__((warn_unused_result));
626 Time UlCtrl(
const std::shared_ptr<DciInfoElementTdma>& dci) __attribute__((warn_unused_result));
637 Time DlData(
const std::shared_ptr<DciInfoElementTdma>& dci) __attribute__((warn_unused_result));
647 Time UlData(
const std::shared_ptr<DciInfoElementTdma>& dci) __attribute__((warn_unused_result));
657 Time UlSrs(
const std::shared_ptr<DciInfoElementTdma>& dci) __attribute__((warn_unused_result));
681 void GenerateAllocationStatistics(
const SlotAllocInfo& allocInfo)
const;
684 void DoSetBandwidth(uint16_t ulBandwidth, uint16_t dlBandwidth);
685 void DoSetEarfcn(uint16_t dlEarfcn, uint16_t ulEarfcn);
686 void DoAddUe(uint16_t rnti);
687 void DoRemoveUe(uint16_t rnti);
688 void DoSetPa(uint16_t rnti,
double pa);
689 void DoSetTransmissionMode(uint16_t rnti, uint8_t txMode);
690 void DoSetSrsConfigurationIndex(uint16_t rnti, uint16_t srcCi);
693 void DoSetEarfcn(uint16_t Earfcn);
701 void StoreRBGAllocation(std::unordered_map<uint8_t, std::vector<bool>>* map,
702 const std::shared_ptr<DciInfoElementTdma>& dci)
const;
717 static void GenerateStructuresFromPattern(
const std::vector<LteNrTddSlotType>& pattern,
718 std::map<uint32_t, std::vector<uint32_t>>* toSendDl,
719 std::map<uint32_t, std::vector<uint32_t>>* toSendUl,
720 std::map<uint32_t, std::vector<uint32_t>>* generateDl,
721 std::map<uint32_t, std::vector<uint32_t>>* generateUl,
722 std::map<uint32_t, uint32_t>* dlHarqfbPosition,
726 uint32_t l1l2CtrlLatency);
732 void CallMacForSlotIndication(
const SfnSf& currentSlot);
743 std::list<Ptr<NrControlMessage>> RetrieveDciFromAllocation(
756 void PushDlAllocation(
const SfnSf& sfnSf)
const;
765 void PushUlAllocation(
const SfnSf& sfnSf)
const;
773 void StartEventLoop(uint16_t frame, uint8_t subframe, uint16_t slot);
781 void DoCheckOrReleaseChannel();
789 void RetrievePrepareEncodeCtrlMsgs();
796 void PrepareRbgAllocationMap(
const std::deque<VarTtiAllocInfo>& allocations);
806 NrGnbCphySapProvider* m_gnbCphySapProvider{
809 NrGnbCphySapUser* m_gnbCphySapUser{
813 std::set<uint64_t> m_ueAttached;
814 std::set<uint16_t> m_ueAttachedRnti;
815 std::vector<Ptr<NrUeNetDevice>> m_deviceMap;
817 NrRrcSap::SystemInformationBlockType1 m_sib1;
818 Time m_lastSlotStart;
819 uint8_t m_currSymStart{0};
820 std::unordered_map<uint8_t, std::vector<bool>>
821 m_rbgAllocationPerSym;
822 std::unordered_map<uint8_t, std::vector<bool>>
823 m_rbgAllocationPerSymDataStat;
826 TracedCallback<uint64_t, SpectrumValue&, SpectrumValue&> m_ulSinrTrace;
833 TracedCallback<SfnSf, uint16_t, uint16_t, uint8_t, Ptr<const NrControlMessage>>
834 m_phyRxedCtrlMsgsTrace;
841 TracedCallback<SfnSf, uint16_t, uint16_t, uint8_t, Ptr<const NrControlMessage>>
842 m_phyTxedCtrlMsgsTrace;
847 TracedCallback<
const SfnSf&,
859 TracedCallback<
const SfnSf&,
869 TracedCallback<const SfnSf&, uint8_t, const std::vector<int>&, uint16_t, uint16_t>
872 std::map<uint32_t, std::vector<uint32_t>>
874 std::map<uint32_t, std::vector<uint32_t>>
876 std::map<uint32_t, std::vector<uint32_t>>
878 std::map<uint32_t, std::vector<uint32_t>>
881 std::map<uint32_t, uint32_t> m_dlHarqfbPosition;
895 ChannelStatus m_channelStatus{NONE};
896 EventId m_channelLostTimer;
898 Ptr<NrChAccessManager> m_cam;
900 friend class NrPatternTestCase;
902 uint32_t m_n0Delay{0};
907 uint32_t m_n2Delay{0};
911 bool m_isPrimary{
false};
913 bool m_enableCsiRs{
false};
915 uint16_t m_csiRsPeriodicity{10};
916 std::map<uint16_t, std::set<Ptr<NrUeNetDevice>>> m_csiRsOffsetToUes;