diff --git a/src/core/backbone_router/bbr_manager.cpp b/src/core/backbone_router/bbr_manager.cpp index 55b6e69d4..7a6d30a44 100644 --- a/src/core/backbone_router/bbr_manager.cpp +++ b/src/core/backbone_router/bbr_manager.cpp @@ -67,7 +67,7 @@ Manager::Manager(Instance &aInstance) #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE , mMulticastListenersTable(aInstance) #endif - , mTimer(aInstance, Manager::HandleTimer) + , mTimer(aInstance) , mBackboneTmfAgent(aInstance) #if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE @@ -138,11 +138,6 @@ void Manager::HandleNotifierEvents(Events aEvents) } } -void Manager::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Manager::HandleTimer(void) { #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE diff --git a/src/core/backbone_router/bbr_manager.hpp b/src/core/backbone_router/bbr_manager.hpp index e5f170568..d0a001988 100644 --- a/src/core/backbone_router/bbr_manager.hpp +++ b/src/core/backbone_router/bbr_manager.hpp @@ -226,11 +226,12 @@ private: #endif void HandleNotifierEvents(Events aEvents); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void LogError(const char *aText, Error aError) const; + using BbrTimer = TimerMilliIn; + #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE Coap::Resource mMulticastListenerRegistration; #endif @@ -244,7 +245,7 @@ private: #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE MulticastListenersTable mMulticastListenersTable; #endif - TimerMilli mTimer; + BbrTimer mTimer; BackboneTmfAgent mBackboneTmfAgent; diff --git a/src/core/border_router/routing_manager.cpp b/src/core/border_router/routing_manager.cpp index 8075aee21..cff6c26d9 100644 --- a/src/core/border_router/routing_manager.cpp +++ b/src/core/border_router/routing_manager.cpp @@ -75,8 +75,8 @@ RoutingManager::RoutingManager(Instance &aInstance) , mNat64PrefixManager(aInstance) #endif , mRsSender(aInstance) - , mDiscoveredPrefixStaleTimer(aInstance, HandleDiscoveredPrefixStaleTimer) - , mRoutingPolicyTimer(aInstance, HandleRoutingPolicyTimer) + , mDiscoveredPrefixStaleTimer(aInstance) + , mRoutingPolicyTimer(aInstance) { mFavoredDiscoveredOnLinkPrefix.Clear(); @@ -913,22 +913,12 @@ void RoutingManager::HandleRsSenderFinished(TimeMilli aStartTime) ScheduleRoutingPolicyEvaluation(kImmediately); } -void RoutingManager::HandleDiscoveredPrefixStaleTimer(Timer &aTimer) -{ - aTimer.Get().HandleDiscoveredPrefixStaleTimer(); -} - void RoutingManager::HandleDiscoveredPrefixStaleTimer(void) { LogInfo("Stale On-Link or OMR Prefixes or RA messages are detected"); mRsSender.Start(); } -void RoutingManager::HandleRoutingPolicyTimer(Timer &aTimer) -{ - aTimer.Get().EvaluateRoutingPolicy(); -} - void RoutingManager::HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress) { OT_UNUSED_VARIABLE(aPacket); @@ -1166,7 +1156,7 @@ void RoutingManager::ResetDiscoveredPrefixStaleTimer(void) RoutingManager::DiscoveredPrefixTable::DiscoveredPrefixTable(Instance &aInstance) : InstanceLocator(aInstance) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) , mSignalTask(aInstance) , mAllowDefaultRouteInNetData(false) { @@ -1634,11 +1624,6 @@ void RoutingManager::DiscoveredPrefixTable::UnpublishEntry(const Entry &aEntry) Get().UnpublishExternalRoute(aEntry.GetPrefix()); } -void RoutingManager::DiscoveredPrefixTable::HandleTimer(Timer &aTimer) -{ - aTimer.Get().mDiscoveredPrefixTable.HandleTimer(); -} - void RoutingManager::DiscoveredPrefixTable::HandleTimer(void) { RemoveExpiredEntries(); @@ -1981,7 +1966,7 @@ exit: RoutingManager::LocalOnLinkPrefix::LocalOnLinkPrefix(Instance &aInstance) : InstanceLocator(aInstance) , mState(kIdle) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { mPrefix.Clear(); mOldPrefix.Clear(); @@ -2160,11 +2145,6 @@ void RoutingManager::LocalOnLinkPrefix::HandleExtPanIdChange(void) Generate(); } -void RoutingManager::LocalOnLinkPrefix::HandleTimer(Timer &aTimer) -{ - aTimer.Get().mLocalOnLinkPrefix.HandleTimer(); -} - void RoutingManager::LocalOnLinkPrefix::HandleTimer(void) { TimeMilli now = TimerMilli::GetNow(); @@ -2247,7 +2227,7 @@ void RoutingManager::OnMeshPrefixArray::MarkAsDeleted(const OnMeshPrefix &aPrefi RoutingManager::Nat64PrefixManager::Nat64PrefixManager(Instance &aInstance) : InstanceLocator(aInstance) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { mInfraIfPrefix.Clear(); mLocalPrefix.Clear(); @@ -2347,11 +2327,6 @@ void RoutingManager::Nat64PrefixManager::Evaluate(void) #endif } -void RoutingManager::Nat64PrefixManager::HandleTimer(Timer &aTimer) -{ - aTimer.Get().mNat64PrefixManager.HandleTimer(); -} - void RoutingManager::Nat64PrefixManager::HandleTimer(void) { Discover(); @@ -2394,7 +2369,7 @@ void RoutingManager::Nat64PrefixManager::HandleDiscoverDone(const Ip6::Prefix &a RoutingManager::RsSender::RsSender(Instance &aInstance) : InstanceLocator(aInstance) , mTxCount(0) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { } @@ -2432,11 +2407,6 @@ Error RoutingManager::RsSender::SendRs(void) return Get().mInfraIf.Send(packet, destAddress); } -void RoutingManager::RsSender::HandleTimer(Timer &aTimer) -{ - aTimer.Get().mRsSender.HandleTimer(); -} - void RoutingManager::RsSender::HandleTimer(void) { Error error; diff --git a/src/core/border_router/routing_manager.hpp b/src/core/border_router/routing_manager.hpp index 1524deac3..ea5626ee3 100644 --- a/src/core/border_router/routing_manager.hpp +++ b/src/core/border_router/routing_manager.hpp @@ -376,6 +376,7 @@ private: }; void HandleDiscoveredPrefixTableChanged(void); // Declare early so we can use in `mSignalTask` + void HandleDiscoveredPrefixTableTimer(void) { mDiscoveredPrefixTable.HandleTimer(); } class DiscoveredPrefixTable : public InstanceLocator { @@ -426,6 +427,8 @@ private: void InitIterator(PrefixTableIterator &aIterator) const; Error GetNextEntry(PrefixTableIterator &aIterator, PrefixTableEntry &aEntry) const; + void HandleTimer(void); + private: static constexpr uint16_t kMaxRouters = OPENTHREAD_CONFIG_BORDER_ROUTING_MAX_DISCOVERED_ROUTERS; static constexpr uint16_t kMaxEntries = OPENTHREAD_CONFIG_BORDER_ROUTING_MAX_DISCOVERED_PREFIXES; @@ -529,29 +532,28 @@ private: void SetInitTime(void) { mData32 = TimerMilli::GetNow().GetValue(); } }; - void ProcessDefaultRoute(const Ip6::Nd::RouterAdvertMessage::Header &aRaHeader, Router &aRouter); - void ProcessPrefixInfoOption(const Ip6::Nd::PrefixInfoOption &aPio, Router &aRouter); - void ProcessRouteInfoOption(const Ip6::Nd::RouteInfoOption &aRio, Router &aRouter); - bool ContainsPrefix(const Entry::Matcher &aMatcher) const; - void RemovePrefix(const Entry::Matcher &aMatcher, NetDataMode aNetDataMode); - void RemoveRoutersWithNoEntries(void); - Entry * AllocateEntry(void) { return mEntryPool.Allocate(); } - void FreeEntry(Entry &aEntry) { mEntryPool.Free(aEntry); } - void FreeEntries(LinkedList &aEntries); - void UpdateNetworkDataOnChangeTo(Entry &aEntry); - Entry * FindFavoredEntryToPublish(const Ip6::Prefix &aPrefix); - void PublishEntry(const Entry &aEntry); - void UnpublishEntry(const Entry &aEntry); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); - void RemoveExpiredEntries(void); - void SignalTableChanged(void); + void ProcessDefaultRoute(const Ip6::Nd::RouterAdvertMessage::Header &aRaHeader, Router &aRouter); + void ProcessPrefixInfoOption(const Ip6::Nd::PrefixInfoOption &aPio, Router &aRouter); + void ProcessRouteInfoOption(const Ip6::Nd::RouteInfoOption &aRio, Router &aRouter); + bool ContainsPrefix(const Entry::Matcher &aMatcher) const; + void RemovePrefix(const Entry::Matcher &aMatcher, NetDataMode aNetDataMode); + void RemoveRoutersWithNoEntries(void); + Entry *AllocateEntry(void) { return mEntryPool.Allocate(); } + void FreeEntry(Entry &aEntry) { mEntryPool.Free(aEntry); } + void FreeEntries(LinkedList &aEntries); + void UpdateNetworkDataOnChangeTo(Entry &aEntry); + Entry *FindFavoredEntryToPublish(const Ip6::Prefix &aPrefix); + void PublishEntry(const Entry &aEntry); + void UnpublishEntry(const Entry &aEntry); + void RemoveExpiredEntries(void); + void SignalTableChanged(void); using SignalTask = TaskletIn; + using TableTimer = TimerMilliIn; Array mRouters; Pool mEntryPool; - TimerMilli mTimer; + TableTimer mTimer; SignalTask mSignalTask; bool mAllowDefaultRouteInNetData; }; @@ -593,6 +595,8 @@ private: bool mIsAddedInNetData; }; + void HandleLocalOnLinkPrefixTimer(void) { mLocalOnLinkPrefix.HandleTimer(); } + class LocalOnLinkPrefix : public InstanceLocator { public: @@ -607,6 +611,7 @@ private: const Ip6::Prefix &GetPrefix(void) const { return mPrefix; } bool IsAdvertising(void) const { return (mState == kAdvertising); } void HandleExtPanIdChange(void); + void HandleTimer(void); private: enum State : uint8_t @@ -620,15 +625,14 @@ private: void AppendOldPrefix(Ip6::Nd::RouterAdvertMessage &aRaMessage); void Unpublish(const Ip6::Prefix &aPrefix); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + using ExpireTimer = TimerMilliIn; Ip6::Prefix mPrefix; State mState; TimeMilli mExpireTime; Ip6::Prefix mOldPrefix; TimeMilli mOldExpireTime; - TimerMilli mTimer; + ExpireTimer mTimer; }; typedef Ip6::Prefix OnMeshPrefix; @@ -641,6 +645,8 @@ private: }; #if OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE + void HandleNat64PrefixManagerTimer(void) { mNat64PrefixManager.HandleTimer(); } + class Nat64PrefixManager : public InstanceLocator { public: @@ -659,16 +665,17 @@ private: const Ip6::Prefix &GetFavoredPrefix(RoutePreference &aPreference) const; void Evaluate(void); void HandleDiscoverDone(const Ip6::Prefix &aPrefix); + void HandleTimer(void); private: - void Discover(void); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void Discover(void); + + using Nat64Timer = TimerMilliIn; Ip6::Prefix mInfraIfPrefix; // The latest NAT64 prefix discovered on the infrastructure interface. Ip6::Prefix mLocalPrefix; // The local prefix (from BR ULA prefix). Ip6::Prefix mPublishedPrefix; // The prefix published in Network Data (may be empty or local or from infra-if). - TimerMilli mTimer; + Nat64Timer mTimer; }; #endif // OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE @@ -696,6 +703,8 @@ private: TimeMilli mLastTxTime; }; + void HandleRsSenderTimer(void) { mRsSender.HandleTimer(); } + class RsSender : public InstanceLocator { public: @@ -711,6 +720,7 @@ private: bool IsInProgress(void) const { return mTimer.IsRunning(); } void Start(void); void Stop(void); + void HandleTimer(void); private: // All time intervals are in msec. @@ -720,13 +730,13 @@ private: static constexpr uint32_t kWaitOnLastAttempt = 1000; // Wait interval after last RS tx. static constexpr uint8_t kMaxTxCount = 3; // Number of RS tx in one cycle. - Error SendRs(void); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + Error SendRs(void); - uint8_t mTxCount; - TimerMilli mTimer; - TimeMilli mStartTime; + using RsTimer = TimerMilliIn; + + uint8_t mTxCount; + RsTimer mTimer; + TimeMilli mStartTime; }; void EvaluateState(void); @@ -747,11 +757,7 @@ private: void HandleRsSenderFinished(TimeMilli aStartTime); void SendRouterAdvertisement(RouterAdvTxMode aRaTxMode); - static void HandleDiscoveredPrefixInvalidTimer(Timer &aTimer); - void HandleDiscoveredPrefixInvalidTimer(void); - static void HandleDiscoveredPrefixStaleTimer(Timer &aTimer); - void HandleDiscoveredPrefixStaleTimer(void); - static void HandleRoutingPolicyTimer(Timer &aTimer); + void HandleDiscoveredPrefixStaleTimer(void); void HandleRouterSolicit(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress); void HandleRouterAdvertisement(const InfraIf::Icmp6Packet &aPacket, const Ip6::Address &aSrcAddress); @@ -767,6 +773,9 @@ private: static bool IsValidOnLinkPrefix(const Ip6::Nd::PrefixInfoOption &aPio); static bool IsValidOnLinkPrefix(const Ip6::Prefix &aOnLinkPrefix); + using RoutingPolicyTimer = TimerMilliIn; + using DiscoveredPrefixStaleTimer = TimerMilliIn; + // Indicates whether the Routing Manager is running (started). bool mIsRunning; @@ -804,8 +813,8 @@ private: RaInfo mRaInfo; RsSender mRsSender; - TimerMilli mDiscoveredPrefixStaleTimer; - TimerMilli mRoutingPolicyTimer; + DiscoveredPrefixStaleTimer mDiscoveredPrefixStaleTimer; + RoutingPolicyTimer mRoutingPolicyTimer; }; } // namespace BorderRouter diff --git a/src/core/common/locator_getters.hpp b/src/core/common/locator_getters.hpp index cda56119a..990b8c6d6 100644 --- a/src/core/common/locator_getters.hpp +++ b/src/core/common/locator_getters.hpp @@ -56,6 +56,20 @@ void TaskletIn::HandleTasklet(Tasklet &aTasklet) (aTasklet.Get().*HandleTaskletPtr)(); } +template +void TimerMilliIn::HandleTimer(Timer &aTimer) +{ + (aTimer.Get().*HandleTimertPtr)(); +} + +#if OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE +template +void TimerMicroIn::HandleTimer(Timer &aTimer) +{ + (aTimer.Get().*HandleTimertPtr)(); +} +#endif + } // namespace ot #endif // LOCATOR_GETTERS_HPP_ diff --git a/src/core/common/time_ticker.cpp b/src/core/common/time_ticker.cpp index 2bfb130a1..5307d22e2 100644 --- a/src/core/common/time_ticker.cpp +++ b/src/core/common/time_ticker.cpp @@ -45,7 +45,7 @@ namespace ot { TimeTicker::TimeTicker(Instance &aInstance) : InstanceLocator(aInstance) , mReceivers(0) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { } @@ -69,11 +69,6 @@ void TimeTicker::UnregisterReceiver(Receiver aReceiver) } } -void TimeTicker::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void TimeTicker::HandleTimer(void) { mTimer.FireAt(mTimer.GetFireTime() + Random::NonCrypto::AddJitter(kTickInterval, kRestartJitter)); diff --git a/src/core/common/time_ticker.hpp b/src/core/common/time_ticker.hpp index a89f3e36e..38b4e9911 100644 --- a/src/core/common/time_ticker.hpp +++ b/src/core/common/time_ticker.hpp @@ -115,11 +115,12 @@ private: constexpr static uint32_t Mask(Receiver aReceiver) { return static_cast(1U) << aReceiver; } - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); - uint32_t mReceivers; - TimerMilli mTimer; + using TickerTimer = TimerMilliIn; + + uint32_t mReceivers; + TickerTimer mTimer; static_assert(kNumReceivers < sizeof(mReceivers) * CHAR_BIT, "Too many `Receiver`s - does not fit in a bit mask"); }; diff --git a/src/core/common/timer.hpp b/src/core/common/timer.hpp index 3faf09f00..4858c7584 100644 --- a/src/core/common/timer.hpp +++ b/src/core/common/timer.hpp @@ -246,6 +246,33 @@ protected: static void RemoveAll(Instance &aInstance); }; +/** + * This template class defines a timer owned by a specific type and using a method on owner type as the callback. + * + * @tparam Owner The type of the owner of this timer. + * @tparam HandleTimerPtr A pointer to a non-static member method of `Owner` to use as timer handler. + * + * The `Owner` MUST be a type that is accessible using `InstanceLocator::Get()`. + * + */ +template class TimerMilliIn : public TimerMilli +{ +public: + /** + * This constructor initializes the timer. + * + * @param[in] aInstance The OpenThread instance. + * + */ + explicit TimerMilliIn(Instance &aInstance) + : TimerMilli(aInstance, HandleTimer) + { + } + +private: + static void HandleTimer(Timer &aTimer); // Implemented in `locator_getters.hpp` +}; + /** * This class implements a millisecond timer that also maintains a user context pointer. * @@ -379,6 +406,34 @@ public: protected: static void RemoveAll(Instance &aInstance); }; + +/** + * This template class defines a timer owned by a specific type and using a method on owner type as the callback. + * + * @tparam Owner The type of the owner of this timer. + * @tparam HandleTimerPtr A pointer to a non-static member method of `Owner` to use as timer handler. + * + * The `Owner` MUST be a type that is accessible using `InstanceLocator::Get()`. + * + */ +template class TimerMicroIn : public TimerMicro +{ +public: + /** + * This constructor initializes the timer. + * + * @param[in] aInstance The OpenThread instance. + * + */ + explicit TimerMicroIn(Instance &aInstance) + : TimerMicro(aInstance, HandleTimer) + { + } + +private: + static void HandleTimer(Timer &aTimer); // Implemented in `locator_getters.hpp` +}; + #endif // OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE /** diff --git a/src/core/common/uptime.cpp b/src/core/common/uptime.cpp index 1c3c74ca2..bd3239af0 100644 --- a/src/core/common/uptime.cpp +++ b/src/core/common/uptime.cpp @@ -46,7 +46,7 @@ Uptime::Uptime(Instance &aInstance) : InstanceLocator(aInstance) , mStartTime(TimerMilli::GetNow()) , mOverflowCount(0) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { mTimer.FireAt(mStartTime + kTimerInterval); } @@ -88,11 +88,6 @@ void Uptime::GetUptime(char *aBuffer, uint16_t aSize) const UptimeToString(GetUptime(), writer); } -void Uptime::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Uptime::HandleTimer(void) { if (mTimer.GetFireTime() == mStartTime) diff --git a/src/core/common/uptime.hpp b/src/core/common/uptime.hpp index d6cab3ce2..f3c33e98a 100644 --- a/src/core/common/uptime.hpp +++ b/src/core/common/uptime.hpp @@ -103,12 +103,13 @@ private: static_assert(static_cast(4 * kTimerInterval) == 0, "kTimerInterval is not correct"); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); - TimeMilli mStartTime; - uint32_t mOverflowCount; - TimerMilli mTimer; + using UptimeTimer = TimerMilliIn; + + TimeMilli mStartTime; + uint32_t mOverflowCount; + UptimeTimer mTimer; }; } // namespace ot diff --git a/src/core/mac/data_poll_sender.cpp b/src/core/mac/data_poll_sender.cpp index 5577db5ee..c8a6d388b 100644 --- a/src/core/mac/data_poll_sender.cpp +++ b/src/core/mac/data_poll_sender.cpp @@ -55,7 +55,7 @@ DataPollSender::DataPollSender(Instance &aInstance) , mPollPeriod(0) , mExternalPollPeriod(0) , mFastPollsUsers(0) - , mTimer(aInstance, DataPollSender::HandlePollTimer) + , mTimer(aInstance) , mEnabled(false) , mAttachMode(false) , mRetxMode(false) @@ -533,11 +533,6 @@ uint32_t DataPollSender::CalculatePollPeriod(void) const return period; } -void DataPollSender::HandlePollTimer(Timer &aTimer) -{ - IgnoreError(aTimer.Get().SendDataPoll()); -} - uint32_t DataPollSender::GetDefaultPollPeriod(void) const { uint32_t period = Time::SecToMsec(Get().GetTimeout()); diff --git a/src/core/mac/data_poll_sender.hpp b/src/core/mac/data_poll_sender.hpp index a30f56362..13e11beea 100644 --- a/src/core/mac/data_poll_sender.hpp +++ b/src/core/mac/data_poll_sender.hpp @@ -276,19 +276,21 @@ private: void ScheduleNextPoll(PollPeriodSelector aPollPeriodSelector); uint32_t CalculatePollPeriod(void) const; const Neighbor &GetParent(void) const; - static void HandlePollTimer(Timer &aTimer); + void HandlePollTimer(void) { IgnoreError(SendDataPoll()); } #if OPENTHREAD_CONFIG_MULTI_RADIO Error GetPollDestinationAddress(Mac::Address &aDest, Mac::RadioType &aRadioType) const; #else Error GetPollDestinationAddress(Mac::Address &aDest) const; #endif + using PollTimer = TimerMilliIn; + TimeMilli mTimerStartTime; uint32_t mPollPeriod; uint32_t mExternalPollPeriod : 26; // In milliseconds. uint8_t mFastPollsUsers : 6; // Number of callers which request fast polls. - TimerMilli mTimer; + PollTimer mTimer; bool mEnabled : 1; // Indicates whether data polling is enabled/started. bool mAttachMode : 1; // Indicates whether in attach mode (to use attach poll period). diff --git a/src/core/mac/mac.cpp b/src/core/mac/mac.cpp index 234851d35..60c389218 100644 --- a/src/core/mac/mac.cpp +++ b/src/core/mac/mac.cpp @@ -101,7 +101,7 @@ Mac::Mac(Instance &aInstance) , mScanHandlerContext(nullptr) , mLinks(aInstance) , mOperationTask(aInstance) - , mTimer(aInstance, Mac::HandleTimer) + , mTimer(aInstance) , mKeyIdMode2FrameCounter(0) , mCcaSampleCount(0) #if OPENTHREAD_CONFIG_MULTI_RADIO @@ -1448,11 +1448,6 @@ exit: return; } -void Mac::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Mac::HandleTimer(void) { switch (mOperation) diff --git a/src/core/mac/mac.hpp b/src/core/mac/mac.hpp index 1280ca620..cb7867e58 100644 --- a/src/core/mac/mac.hpp +++ b/src/core/mac/mac.hpp @@ -759,9 +759,7 @@ private: bool IsJoinable(void) const; void BeginTransmit(void); bool HandleMacCommand(RxFrame &aFrame); - - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void Scan(Operation aScanOperation, uint32_t aScanChannels, uint16_t aScanDuration); Error UpdateScanChannel(void); @@ -788,6 +786,7 @@ private: static const char *OperationToString(Operation aOperation); using OperationTask = TaskletIn; + using MacTimer = TimerMilliIn; static const otExtAddress sMode2ExtAddress; @@ -836,7 +835,7 @@ private: Links mLinks; OperationTask mOperationTask; - TimerMilli mTimer; + MacTimer mTimer; otMacCounters mCounters; uint32_t mKeyIdMode2FrameCounter; SuccessRateTracker mCcaSuccessRateTracker; diff --git a/src/core/mac/sub_mac.cpp b/src/core/mac/sub_mac.cpp index ebeeaa2f4..4d5c3c5ea 100644 --- a/src/core/mac/sub_mac.cpp +++ b/src/core/mac/sub_mac.cpp @@ -59,7 +59,7 @@ SubMac::SubMac(Instance &aInstance) , mCallbacks(aInstance) , mPcapCallback(nullptr) , mPcapCallbackContext(nullptr) - , mTimer(aInstance, SubMac::HandleTimer) + , mTimer(aInstance) #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE , mCslTimer(aInstance, SubMac::HandleCslTimer) #endif @@ -776,11 +776,6 @@ void SubMac::HandleEnergyScanDone(int8_t aMaxRssi) mCallbacks.EnergyScanDone(aMaxRssi); } -void SubMac::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void SubMac::HandleTimer(void) { switch (mState) diff --git a/src/core/mac/sub_mac.hpp b/src/core/mac/sub_mac.hpp index 596af4102..080904b1d 100644 --- a/src/core/mac/sub_mac.hpp +++ b/src/core/mac/sub_mac.hpp @@ -602,13 +602,18 @@ private: void HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, Error aError); void SignalFrameCounterUsedOnTxDone(const TxFrame &aFrame); void HandleEnergyScanDone(int8_t aMaxRssi); - - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void SetState(State aState); static const char *StateToString(State aState); + using SubMacTimer = +#if OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE + TimerMicroIn; +#else + TimerMilliIn; +#endif + otRadioCaps mRadioCaps; State mState; uint8_t mCsmaBackoffs; @@ -633,11 +638,7 @@ private: #if OPENTHREAD_CONFIG_MAC_ADD_DELAY_ON_NO_ACK_ERROR_BEFORE_RETRY uint8_t mRetxDelayBackOffExponent; #endif -#if OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE - TimerMicro mTimer; -#else - TimerMilli mTimer; -#endif + SubMacTimer mTimer; #if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE uint16_t mCslPeriod; // The CSL sample period, in units of 10 symbols (160 microseconds). diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp index 110d1d390..79ad790a7 100644 --- a/src/core/meshcop/border_agent.cpp +++ b/src/core/meshcop/border_agent.cpp @@ -291,7 +291,7 @@ BorderAgent::BorderAgent(Instance &aInstance) , mPendingSet(UriPath::kPendingSet, BorderAgent::HandleRequest<&BorderAgent::mPendingSet>, this) , mProxyTransmit(UriPath::kProxyTx, BorderAgent::HandleRequest<&BorderAgent::mProxyTransmit>, this) , mUdpReceiver(BorderAgent::HandleUdpReceive, this) - , mTimer(aInstance, HandleTimeout) + , mTimer(aInstance) , mState(kStateStopped) , mUdpProxyPort(0) { @@ -605,11 +605,6 @@ exit: } } -void BorderAgent::HandleTimeout(Timer &aTimer) -{ - aTimer.Get().HandleTimeout(); -} - void BorderAgent::HandleTimeout(void) { if (Get().IsConnected()) diff --git a/src/core/meshcop/border_agent.hpp b/src/core/meshcop/border_agent.hpp index 6f6bc45b5..44a403401 100644 --- a/src/core/meshcop/border_agent.hpp +++ b/src/core/meshcop/border_agent.hpp @@ -175,6 +175,8 @@ private: static constexpr uint32_t kKeepAliveTimeout = 50 * 1000; // Timeout to reject a commissioner. + using TimeoutTimer = TimerMilliIn; + Ip6::MessageInfo mMessageInfo; Coap::Resource mCommissionerPetition; @@ -192,9 +194,9 @@ private: Ip6::Udp::Receiver mUdpReceiver; ///< The UDP receiver to receive packets from external commissioner Ip6::Netif::UnicastAddress mCommissionerAloc; - TimerMilli mTimer; - State mState; - uint16_t mUdpProxyPort; + TimeoutTimer mTimer; + State mState; + uint16_t mUdpProxyPort; }; } // namespace MeshCoP diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index c1c73eb7e..8c4facb8d 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -64,8 +64,8 @@ Commissioner::Commissioner(Instance &aInstance) , mJoinerRloc(0) , mSessionId(0) , mTransmitAttempts(0) - , mJoinerExpirationTimer(aInstance, HandleJoinerExpirationTimer) - , mTimer(aInstance, HandleTimer) + , mJoinerExpirationTimer(aInstance) + , mTimer(aInstance) , mRelayReceive(UriPath::kRelayRx, &Commissioner::HandleRelayReceive, this) , mDatasetChanged(UriPath::kDatasetChanged, &Commissioner::HandleDatasetChanged, this) , mJoinerFinalize(UriPath::kJoinerFinalize, &Commissioner::HandleJoinerFinalize, this) @@ -628,11 +628,6 @@ exit: return error; } -void Commissioner::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Commissioner::HandleTimer(void) { switch (mState) @@ -650,11 +645,6 @@ void Commissioner::HandleTimer(void) } } -void Commissioner::HandleJoinerExpirationTimer(Timer &aTimer) -{ - aTimer.Get().HandleJoinerExpirationTimer(); -} - void Commissioner::HandleJoinerExpirationTimer(void) { TimeMilli now = TimerMilli::GetNow(); diff --git a/src/core/meshcop/commissioner.hpp b/src/core/meshcop/commissioner.hpp index 4c1d19046..d2129ac36 100644 --- a/src/core/meshcop/commissioner.hpp +++ b/src/core/meshcop/commissioner.hpp @@ -542,11 +542,8 @@ private: void AddCoapResources(void); void RemoveCoapResources(void); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); - - static void HandleJoinerExpirationTimer(Timer &aTimer); - void HandleJoinerExpirationTimer(void); + void HandleTimer(void); + void HandleJoinerExpirationTimer(void); void UpdateJoinerExpirationTimer(void); @@ -604,6 +601,9 @@ private: static const char *StateToString(State aState); + using JoinerExpirationTimer = TimerMilliIn; + using CommissionerTimer = TimerMilliIn; + Joiner mJoiners[OPENTHREAD_CONFIG_COMMISSIONER_MAX_JOINER_ENTRIES]; Joiner * mActiveJoiner; @@ -612,8 +612,8 @@ private: uint16_t mJoinerRloc; uint16_t mSessionId; uint8_t mTransmitAttempts; - TimerMilli mJoinerExpirationTimer; - TimerMilli mTimer; + JoinerExpirationTimer mJoinerExpirationTimer; + CommissionerTimer mTimer; Coap::Resource mRelayReceive; Coap::Resource mDatasetChanged; diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 355c4b0a5..cab4dc217 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -706,7 +706,7 @@ void ActiveDatasetManager::HandleTimer(Timer &aTimer) PendingDatasetManager::PendingDatasetManager(Instance &aInstance) : DatasetManager(aInstance, Dataset::kPending, PendingDatasetManager::HandleTimer) - , mDelayTimer(aInstance, PendingDatasetManager::HandleDelayTimer) + , mDelayTimer(aInstance) , mResourceGet(UriPath::kPendingGet, &PendingDatasetManager::HandleGet, this) #if OPENTHREAD_FTD , mResourceSet(UriPath::kPendingSet, &PendingDatasetManager::HandleSet, this) @@ -804,11 +804,6 @@ void PendingDatasetManager::StartDelayTimer(void) } } -void PendingDatasetManager::HandleDelayTimer(Timer &aTimer) -{ - aTimer.Get().HandleDelayTimer(); -} - void PendingDatasetManager::HandleDelayTimer(void) { DelayTimerTlv *delayTimer; diff --git a/src/core/meshcop/dataset_manager.hpp b/src/core/meshcop/dataset_manager.hpp index 9d5487429..2fa54af4f 100644 --- a/src/core/meshcop/dataset_manager.hpp +++ b/src/core/meshcop/dataset_manager.hpp @@ -613,8 +613,7 @@ private: static void HandleTimer(Timer &aTimer); void HandleTimer(void) { DatasetManager::HandleTimer(); } - static void HandleDelayTimer(Timer &aTimer); - void HandleDelayTimer(void); + void HandleDelayTimer(void); static void HandleGet(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleGet(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo) const; @@ -624,7 +623,9 @@ private: void HandleSet(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); #endif - TimerMilli mDelayTimer; + using DelayTimer = TimerMilliIn; + + DelayTimer mDelayTimer; Coap::Resource mResourceGet; diff --git a/src/core/meshcop/dataset_updater.cpp b/src/core/meshcop/dataset_updater.cpp index 36d63d7f9..e7d2390a2 100644 --- a/src/core/meshcop/dataset_updater.cpp +++ b/src/core/meshcop/dataset_updater.cpp @@ -50,7 +50,7 @@ DatasetUpdater::DatasetUpdater(Instance &aInstance) : InstanceLocator(aInstance) , mCallback(nullptr) , mCallbackContext(nullptr) - , mTimer(aInstance, DatasetUpdater::HandleTimer) + , mTimer(aInstance) , mDataset(nullptr) { } @@ -94,11 +94,6 @@ exit: return; } -void DatasetUpdater::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void DatasetUpdater::HandleTimer(void) { PreparePendingDataset(); diff --git a/src/core/meshcop/dataset_updater.hpp b/src/core/meshcop/dataset_updater.hpp index b3b94c0c6..f43a71378 100644 --- a/src/core/meshcop/dataset_updater.hpp +++ b/src/core/meshcop/dataset_updater.hpp @@ -118,16 +118,17 @@ private: // Retry interval (in ms) when preparing and/or sending Pending Dataset fails. static constexpr uint32_t kRetryInterval = 1000; - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); - void PreparePendingDataset(void); - void Finish(Error aError); - void HandleNotifierEvents(Events aEvents); + void HandleTimer(void); + void PreparePendingDataset(void); + void Finish(Error aError); + void HandleNotifierEvents(Events aEvents); - Callback mCallback; - void * mCallbackContext; - TimerMilli mTimer; - Message * mDataset; + using UpdaterTimer = TimerMilliIn; + + Callback mCallback; + void * mCallbackContext; + UpdaterTimer mTimer; + Message * mDataset; }; } // namespace MeshCoP diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index e4db7d494..0dac6b5fe 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -66,7 +66,7 @@ Joiner::Joiner(Instance &aInstance) , mContext(nullptr) , mJoinerRouterIndex(0) , mFinalizeMessage(nullptr) - , mTimer(aInstance, Joiner::HandleTimer) + , mTimer(aInstance) , mJoinerEntrust(UriPath::kJoinerEntrust, &Joiner::HandleJoinerEntrust, this) { SetIdFromIeeeEui64(); @@ -615,11 +615,6 @@ exit: FreeMessageOnError(message, error); } -void Joiner::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Joiner::HandleTimer(void) { Error error = kErrorNone; diff --git a/src/core/meshcop/joiner.hpp b/src/core/meshcop/joiner.hpp index ac894e97c..76950b7f0 100644 --- a/src/core/meshcop/joiner.hpp +++ b/src/core/meshcop/joiner.hpp @@ -208,8 +208,7 @@ private: static void HandleJoinerEntrust(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleJoinerEntrust(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void SetState(State aState); void SetIdFromIeeeEui64(void); @@ -232,6 +231,8 @@ private: void LogCertMessage(const char *aText, const Coap::Message &aMessage) const; #endif + using JoinerTimer = TimerMilliIn; + Mac::ExtAddress mId; JoinerDiscerner mDiscerner; @@ -245,7 +246,7 @@ private: Coap::Message *mFinalizeMessage; - TimerMilli mTimer; + JoinerTimer mTimer; Coap::Resource mJoinerEntrust; }; diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 679ae817f..d6bb0f629 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -58,7 +58,7 @@ JoinerRouter::JoinerRouter(Instance &aInstance) : InstanceLocator(aInstance) , mSocket(aInstance) , mRelayTransmit(UriPath::kRelayTx, &JoinerRouter::HandleRelayTransmit, this) - , mTimer(aInstance, JoinerRouter::HandleTimer) + , mTimer(aInstance) , mJoinerUdpPort(0) , mIsJoinerPortConfigured(false) { @@ -242,11 +242,6 @@ exit: LogError("schedule joiner entrust", error); } -void JoinerRouter::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void JoinerRouter::HandleTimer(void) { SendDelayedJoinerEntrust(); diff --git a/src/core/meshcop/joiner_router.hpp b/src/core/meshcop/joiner_router.hpp index e8c61167a..7386be64f 100644 --- a/src/core/meshcop/joiner_router.hpp +++ b/src/core/meshcop/joiner_router.hpp @@ -110,8 +110,7 @@ private: Error aResult); void HandleJoinerEntrustResponse(Coap::Message *aMessage, const Ip6::MessageInfo *aMessageInfo, Error aResult); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void Start(void); void DelaySendingJoinerEntrust(const Ip6::MessageInfo &aMessageInfo, const Kek &aKek); @@ -119,11 +118,13 @@ private: Error SendJoinerEntrust(const Ip6::MessageInfo &aMessageInfo); Coap::Message *PrepareJoinerEntrustMessage(void); + using JoinerRouterTimer = TimerMilliIn; + Ip6::Udp::Socket mSocket; Coap::Resource mRelayTransmit; - TimerMilli mTimer; - MessageQueue mDelayedJoinEnts; + JoinerRouterTimer mTimer; + MessageQueue mDelayedJoinEnts; uint16_t mJoinerUdpPort; diff --git a/src/core/meshcop/meshcop_leader.cpp b/src/core/meshcop/meshcop_leader.cpp index a07202624..a420e2c33 100644 --- a/src/core/meshcop/meshcop_leader.cpp +++ b/src/core/meshcop/meshcop_leader.cpp @@ -59,7 +59,7 @@ Leader::Leader(Instance &aInstance) : InstanceLocator(aInstance) , mPetition(UriPath::kLeaderPetition, Leader::HandlePetition, this) , mKeepAlive(UriPath::kLeaderKeepAlive, Leader::HandleKeepAlive, this) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) , mDelayTimerMinimal(DelayTimerTlv::kDelayTimerMinimal) , mSessionId(Random::NonCrypto::GetUint16()) { @@ -258,11 +258,6 @@ uint32_t Leader::GetDelayTimerMinimal(void) const return mDelayTimerMinimal; } -void Leader::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Leader::HandleTimer(void) { VerifyOrExit(Get().IsLeader()); diff --git a/src/core/meshcop/meshcop_leader.hpp b/src/core/meshcop/meshcop_leader.hpp index 75f0187d7..1bd315dab 100644 --- a/src/core/meshcop/meshcop_leader.hpp +++ b/src/core/meshcop/meshcop_leader.hpp @@ -111,8 +111,7 @@ public: private: static constexpr uint32_t kTimeoutLeaderPetition = 50; // TIMEOUT_LEAD_PET (seconds) - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); static void HandlePetition(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandlePetition(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); @@ -130,9 +129,11 @@ private: void ResignCommissioner(void); + using LeaderTimer = TimerMilliIn; + Coap::Resource mPetition; Coap::Resource mKeepAlive; - TimerMilli mTimer; + LeaderTimer mTimer; uint32_t mDelayTimerMinimal; diff --git a/src/core/net/dns_client.cpp b/src/core/net/dns_client.cpp index 2c687c622..d60764438 100644 --- a/src/core/net/dns_client.cpp +++ b/src/core/net/dns_client.cpp @@ -530,7 +530,7 @@ const uint16_t *Client::kQuestionRecordTypes[] = { Client::Client(Instance &aInstance) : InstanceLocator(aInstance) , mSocket(aInstance) - , mTimer(aInstance, Client::HandleTimer) + , mTimer(aInstance) , mDefaultConfig(QueryConfig::kInitFromDefaults) #if OPENTHREAD_CONFIG_DNS_CLIENT_DEFAULT_SERVER_ADDRESS_AUTO_SET_ENABLE , mUserDidSetDefaultAddress(false) @@ -1062,11 +1062,6 @@ exit: return error; } -void Client::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Client::HandleTimer(void) { TimeMilli now = TimerMilli::GetNow(); diff --git a/src/core/net/dns_client.hpp b/src/core/net/dns_client.hpp index de9afca3d..f4c9be6f8 100644 --- a/src/core/net/dns_client.hpp +++ b/src/core/net/dns_client.hpp @@ -743,7 +743,6 @@ private: static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMsgInfo); void ProcessResponse(const Message &aMessage); Error ParseResponse(Response &aResponse, QueryType &aType, Error &aResponseError); - static void HandleTimer(Timer &aTimer); void HandleTimer(void); #if OPENTHREAD_CONFIG_DNS_CLIENT_NAT64_ENABLE Error CheckAddressResponse(Response &aResponse, Error aResponseError) const; @@ -764,9 +763,11 @@ private: static const uint16_t kServiceQueryRecordTypes[]; #endif + using RetryTimer = TimerMilliIn; + Ip6::Udp::Socket mSocket; QueryList mQueries; - TimerMilli mTimer; + RetryTimer mTimer; QueryConfig mDefaultConfig; #if OPENTHREAD_CONFIG_DNS_CLIENT_DEFAULT_SERVER_ADDRESS_AUTO_SET_ENABLE bool mUserDidSetDefaultAddress; diff --git a/src/core/net/dns_dso.cpp b/src/core/net/dns_dso.cpp index 4f6ac1d4f..49d090c44 100644 --- a/src/core/net/dns_dso.cpp +++ b/src/core/net/dns_dso.cpp @@ -1449,7 +1449,7 @@ exit: Dso::Dso(Instance &aInstance) : InstanceLocator(aInstance) , mAcceptHandler(nullptr) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { } @@ -1488,11 +1488,6 @@ exit: return connection; } -void Dso::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Dso::HandleTimer(void) { TimeMilli now = TimerMilli::GetNow(); diff --git a/src/core/net/dns_dso.hpp b/src/core/net/dns_dso.hpp index fbcd5505b..6ca02f9ef 100644 --- a/src/core/net/dns_dso.hpp +++ b/src/core/net/dns_dso.hpp @@ -953,13 +953,14 @@ private: Connection *AcceptConnection(const Ip6::SockAddr &aPeerSockAddr); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); + + using DsoTimer = TimerMilliIn; AcceptHandler mAcceptHandler; LinkedList mClientConnections; LinkedList mServerConnections; - TimerMilli mTimer; + DsoTimer mTimer; }; } // namespace Dns diff --git a/src/core/net/dnssd_server.cpp b/src/core/net/dnssd_server.cpp index 5857ba67d..bf9f0ff78 100644 --- a/src/core/net/dnssd_server.cpp +++ b/src/core/net/dnssd_server.cpp @@ -63,7 +63,7 @@ Server::Server(Instance &aInstance) , mQueryCallbackContext(nullptr) , mQuerySubscribe(nullptr) , mQueryUnsubscribe(nullptr) - , mTimer(aInstance, Server::HandleTimer) + , mTimer(aInstance) { mCounters.Clear(); } @@ -1123,11 +1123,6 @@ exit: return found; } -void Server::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Server::HandleTimer(void) { TimeMilli now = TimerMilli::GetNow(); diff --git a/src/core/net/dnssd_server.hpp b/src/core/net/dnssd_server.hpp index de16c424e..088b875b1 100644 --- a/src/core/net/dnssd_server.hpp +++ b/src/core/net/dnssd_server.hpp @@ -405,23 +405,26 @@ private: const Message &aMessage, char (&aName)[Name::kMaxNameSize]); static bool HasQuestion(const Header &aHeader, const Message &aMessage, const char *aName, uint16_t aQuestionType); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); - void ResetTimer(void); + + void HandleTimer(void); + void ResetTimer(void); void UpdateResponseCounters(Header::Response aResponseCode); + using ServerTimer = TimerMilliIn; + static const char kDnssdProtocolUdp[]; static const char kDnssdProtocolTcp[]; static const char kDnssdSubTypeLabel[]; static const char kDefaultDomainName[]; - Ip6::Udp::Socket mSocket; + + Ip6::Udp::Socket mSocket; QueryTransaction mQueryTransactions[kMaxConcurrentQueries]; void * mQueryCallbackContext; otDnssdQuerySubscribeCallback mQuerySubscribe; otDnssdQueryUnsubscribeCallback mQueryUnsubscribe; - TimerMilli mTimer; + ServerTimer mTimer; Counters mCounters; }; diff --git a/src/core/net/ip6_mpl.cpp b/src/core/net/ip6_mpl.cpp index 3e0156ae6..964ee41e0 100644 --- a/src/core/net/ip6_mpl.cpp +++ b/src/core/net/ip6_mpl.cpp @@ -47,11 +47,11 @@ namespace Ip6 { Mpl::Mpl(Instance &aInstance) : InstanceLocator(aInstance) , mMatchingAddress(nullptr) - , mSeedSetTimer(aInstance, Mpl::HandleSeedSetTimer) + , mSeedSetTimer(aInstance) , mSeedId(0) , mSequence(0) #if OPENTHREAD_FTD - , mRetransmissionTimer(aInstance, Mpl::HandleRetransmissionTimer) + , mRetransmissionTimer(aInstance) , mTimerExpirations(0) #endif { @@ -261,11 +261,6 @@ exit: return error; } -void Mpl::HandleSeedSetTimer(Timer &aTimer) -{ - aTimer.Get().HandleSeedSetTimer(); -} - void Mpl::HandleSeedSetTimer(void) { bool startTimer = false; @@ -334,11 +329,6 @@ exit: FreeMessageOnError(messageCopy, error); } -void Mpl::HandleRetransmissionTimer(Timer &aTimer) -{ - aTimer.Get().HandleRetransmissionTimer(); -} - void Mpl::HandleRetransmissionTimer(void) { TimeMilli now = TimerMilli::GetNow(); diff --git a/src/core/net/ip6_mpl.hpp b/src/core/net/ip6_mpl.hpp index d6cdfac25..7804aac9f 100644 --- a/src/core/net/ip6_mpl.hpp +++ b/src/core/net/ip6_mpl.hpp @@ -286,14 +286,15 @@ private: uint8_t mLifetime; }; - static void HandleSeedSetTimer(Timer &aTimer); - void HandleSeedSetTimer(void); + void HandleSeedSetTimer(void); Error UpdateSeedSet(uint16_t aSeedId, uint8_t aSequence); + using SeedSetTimer = TimerMilliIn; + SeedEntry mSeedSet[kNumSeedEntries]; const Address *mMatchingAddress; - TimerMilli mSeedSetTimer; + SeedSetTimer mSeedSetTimer; uint16_t mSeedId; uint8_t mSequence; @@ -313,13 +314,14 @@ private: uint8_t mIntervalOffset; }; - static void HandleRetransmissionTimer(Timer &aTimer); - void HandleRetransmissionTimer(void); + void HandleRetransmissionTimer(void); void AddBufferedMessage(Message &aMessage, uint16_t aSeedId, uint8_t aSequence, bool aIsOutbound); + using RetxTimer = TimerMilliIn; + MessageQueue mBufferedMessageSet; - TimerMilli mRetransmissionTimer; + RetxTimer mRetransmissionTimer; uint8_t mTimerExpirations; #endif // OPENTHREAD_FTD }; diff --git a/src/core/net/nat64_translator.cpp b/src/core/net/nat64_translator.cpp index 80963ba05..df5191425 100644 --- a/src/core/net/nat64_translator.cpp +++ b/src/core/net/nat64_translator.cpp @@ -50,13 +50,13 @@ RegisterLogModule("Nat64"); Translator::Translator(Instance &aInstance) : InstanceLocator(aInstance) - , mMappingExpirer(aInstance, MappingExpirerHandler) + , mMappingExpirerTimer(aInstance) { Random::NonCrypto::FillBuffer(reinterpret_cast(&mNextMappingId), sizeof(mNextMappingId)); mNat64Prefix.Clear(); mIp4Cidr.Clear(); - mMappingExpirer.Start(kAddressMappingIdleTimeoutMsec); + mMappingExpirerTimer.Start(kAddressMappingIdleTimeoutMsec); } Message *Translator::NewIp4Message(const Message::Settings &aSettings) @@ -497,10 +497,10 @@ void Translator::SetNat64Prefix(const Ip6::Prefix &aNat64Prefix) } } -void Translator::MappingExpirerHandler(Timer &aTimer) +void Translator::HandleMappingExpirerTimer(void) { - LogInfo("Released %d expired mappings", aTimer.Get().ReleaseExpiredMappings()); - aTimer.Get().mMappingExpirer.Start(kAddressMappingIdleTimeoutMsec); + LogInfo("Released %d expired mappings", ReleaseExpiredMappings()); + mMappingExpirerTimer.Start(kAddressMappingIdleTimeoutMsec); } void Translator::InitAddressMappingIterator(AddressMappingIterator &aIterator) diff --git a/src/core/net/nat64_translator.hpp b/src/core/net/nat64_translator.hpp index 2df74e576..dc7d62a79 100644 --- a/src/core/net/nat64_translator.hpp +++ b/src/core/net/nat64_translator.hpp @@ -331,7 +331,9 @@ private: AddressMapping *FindOrAllocateMapping(const Ip6::Address &aIp6Addr); AddressMapping *FindMapping(const Ip4::Address &aIp4Addr); - static void MappingExpirerHandler(Timer &aTimer); + void HandleMappingExpirerTimer(void); + + using MappingTimer = TimerMilliIn; uint64_t mNextMappingId; @@ -342,7 +344,7 @@ private: Ip6::Prefix mNat64Prefix; Ip4::Cidr mIp4Cidr; - TimerMilli mMappingExpirer; + MappingTimer mMappingExpirerTimer; ProtocolCounters mCounters; ErrorCounters mErrorCounters; diff --git a/src/core/net/sntp_client.cpp b/src/core/net/sntp_client.cpp index 98f1fca73..01d796e45 100644 --- a/src/core/net/sntp_client.cpp +++ b/src/core/net/sntp_client.cpp @@ -95,7 +95,7 @@ QueryMetadata::QueryMetadata(otSntpResponseHandler aHandler, void *aContext) Client::Client(Instance &aInstance) : mSocket(aInstance) - , mRetransmissionTimer(aInstance, Client::HandleRetransmissionTimer) + , mRetransmissionTimer(aInstance) , mUnixEra(0) { } @@ -269,11 +269,6 @@ void Client::FinalizeSntpTransaction(Message & aQuery, } } -void Client::HandleRetransmissionTimer(Timer &aTimer) -{ - aTimer.Get().HandleRetransmissionTimer(); -} - void Client::HandleRetransmissionTimer(void) { TimeMilli now = TimerMilli::GetNow(); diff --git a/src/core/net/sntp_client.hpp b/src/core/net/sntp_client.hpp index 1a9ec4f4d..8f4917a30 100644 --- a/src/core/net/sntp_client.hpp +++ b/src/core/net/sntp_client.hpp @@ -524,16 +524,17 @@ private: Message *FindRelatedQuery(const Header &aResponseHeader, QueryMetadata &aQueryMetadata); void FinalizeSntpTransaction(Message &aQuery, const QueryMetadata &aQueryMetadata, uint64_t aTime, Error aResult); - static void HandleRetransmissionTimer(Timer &aTimer); - void HandleRetransmissionTimer(void); + void HandleRetransmissionTimer(void); static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageInfo); + using RetxTimer = TimerMilliIn; + Ip6::Udp::Socket mSocket; MessageQueue mPendingQueries; - TimerMilli mRetransmissionTimer; + RetxTimer mRetransmissionTimer; uint32_t mUnixEra; }; diff --git a/src/core/net/srp_client.cpp b/src/core/net/srp_client.cpp index 6eaacb921..3b3da8295 100644 --- a/src/core/net/srp_client.cpp +++ b/src/core/net/srp_client.cpp @@ -264,7 +264,7 @@ Client::Client(Instance &aInstance) , mCallback(nullptr) , mCallbackContext(nullptr) , mDomainName(kDefaultDomainName) - , mTimer(aInstance, Client::HandleTimer) + , mTimer(aInstance) { mHostInfo.Init(); @@ -1757,11 +1757,6 @@ bool Client::ShouldRenewEarly(const Service &aService) const return shouldRenew; } -void Client::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Client::HandleTimer(void) { switch (GetState()) diff --git a/src/core/net/srp_client.hpp b/src/core/net/srp_client.hpp index 2fa2df25a..057b8d9e5 100644 --- a/src/core/net/srp_client.hpp +++ b/src/core/net/srp_client.hpp @@ -986,7 +986,6 @@ private: void GrowRetryWaitInterval(void); uint32_t GetBoundedLeaseInterval(uint32_t aInterval, uint32_t aDefaultInterval) const; bool ShouldRenewEarly(const Service &aService) const; - static void HandleTimer(Timer &aTimer); void HandleTimer(void); #if OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE void ProcessAutoStart(void); @@ -1007,6 +1006,8 @@ private: static_assert(kMaxTxFailureRetries < 16, "kMaxTxFailureRetries exceed the range of mTxFailureRetryCount (4-bit)"); + using DelayTimer = TimerMilliIn; + State mState; uint8_t mTxFailureRetryCount : 4; bool mShouldRemoveKeyLease : 1; @@ -1032,7 +1033,7 @@ private: HostInfo mHostInfo; LinkedList mServices; SingleServiceMode mSingleServiceMode; - TimerMilli mTimer; + DelayTimer mTimer; #if OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE AutoStart mAutoStart; #endif diff --git a/src/core/net/srp_server.cpp b/src/core/net/srp_server.cpp index cd97a3078..24329ff1b 100644 --- a/src/core/net/srp_server.cpp +++ b/src/core/net/srp_server.cpp @@ -88,8 +88,8 @@ Server::Server(Instance &aInstance) , mSocket(aInstance) , mServiceUpdateHandler(nullptr) , mServiceUpdateHandlerContext(nullptr) - , mLeaseTimer(aInstance, HandleLeaseTimer) - , mOutstandingUpdatesTimer(aInstance, HandleOutstandingUpdatesTimer) + , mLeaseTimer(aInstance) + , mOutstandingUpdatesTimer(aInstance) , mServiceUpdateId(Random::NonCrypto::GetUint32()) , mPort(kUdpPortMin) , mState(kStateDisabled) @@ -1528,11 +1528,6 @@ exit: return error; } -void Server::HandleLeaseTimer(Timer &aTimer) -{ - aTimer.Get().HandleLeaseTimer(); -} - void Server::HandleLeaseTimer(void) { TimeMilli now = TimerMilli::GetNow(); @@ -1647,11 +1642,6 @@ void Server::HandleLeaseTimer(void) } } -void Server::HandleOutstandingUpdatesTimer(Timer &aTimer) -{ - aTimer.Get().HandleOutstandingUpdatesTimer(); -} - void Server::HandleOutstandingUpdatesTimer(void) { while (!mOutstandingUpdates.IsEmpty() && mOutstandingUpdates.GetTail()->GetExpireTime() <= TimerMilli::GetNow()) diff --git a/src/core/net/srp_server.hpp b/src/core/net/srp_server.hpp index 3bb33d29e..0ddd3be02 100644 --- a/src/core/net/srp_server.hpp +++ b/src/core/net/srp_server.hpp @@ -1043,7 +1043,6 @@ private: const Ip6::MessageInfo & aMessageInfo); static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - static void HandleLeaseTimer(Timer &aTimer); void HandleLeaseTimer(void); static void HandleOutstandingUpdatesTimer(Timer &aTimer); void HandleOutstandingUpdatesTimer(void); @@ -1054,6 +1053,9 @@ private: void UpdateResponseCounters(Dns::Header::Response aResponseCode); + using LeaseTimer = TimerMilliIn; + using UpdateTimer = TimerMilliIn; + Ip6::Udp::Socket mSocket; otSrpServerServiceUpdateHandler mServiceUpdateHandler; void * mServiceUpdateHandlerContext; @@ -1064,9 +1066,9 @@ private: LeaseConfig mLeaseConfig; LinkedList mHosts; - TimerMilli mLeaseTimer; + LeaseTimer mLeaseTimer; - TimerMilli mOutstandingUpdatesTimer; + UpdateTimer mOutstandingUpdatesTimer; LinkedList mOutstandingUpdates; ServiceUpdateId mServiceUpdateId; diff --git a/src/core/net/tcp6.cpp b/src/core/net/tcp6.cpp index 0cd9c2f72..79824d3be 100644 --- a/src/core/net/tcp6.cpp +++ b/src/core/net/tcp6.cpp @@ -72,7 +72,7 @@ static_assert(offsetof(Tcp::Listener, mTcbListen) == 0, "mTcbListen field in otT Tcp::Tcp(Instance &aInstance) : InstanceLocator(aInstance) - , mTimer(aInstance, Tcp::HandleTimer) + , mTimer(aInstance) , mTasklet(aInstance) , mEphemeralPort(kDynamicPortMin) { @@ -849,20 +849,13 @@ exit: return success; } -void Tcp::HandleTimer(Timer &aTimer) -{ - OT_ASSERT(&aTimer == &aTimer.Get().mTimer); - LogDebg("Main TCP timer expired"); - aTimer.Get().ProcessTimers(); -} - -void Tcp::ProcessTimers(void) +void Tcp::HandleTimer(void) { TimeMilli now = TimerMilli::GetNow(); bool pendingTimer; TimeMilli earliestPendingTimerExpiry; - OT_ASSERT(!mTimer.IsRunning()); + LogDebg("Main TCP timer expired"); /* * The timer callbacks could potentially set/reset/cancel timers. diff --git a/src/core/net/tcp6.hpp b/src/core/net/tcp6.hpp index febefe9c1..01c163f2d 100644 --- a/src/core/net/tcp6.hpp +++ b/src/core/net/tcp6.hpp @@ -686,14 +686,14 @@ private: static Error BsdErrorToOtError(int aBsdError); bool CanBind(const SockAddr &aSockName); - static void HandleTimer(Timer &aTimer); - void ProcessTimers(void); + void HandleTimer(void); void ProcessCallbacks(void); using TcpTasklet = TaskletIn; + using TcpTimer = TimerMilliIn; - TimerMilli mTimer; + TcpTimer mTimer; TcpTasklet mTasklet; LinkedList mEndpoints; diff --git a/src/core/radio/trel_link.cpp b/src/core/radio/trel_link.cpp index 4bcd81041..c67735e66 100644 --- a/src/core/radio/trel_link.cpp +++ b/src/core/radio/trel_link.cpp @@ -52,7 +52,7 @@ Link::Link(Instance &aInstance) , mPanId(Mac::kPanIdBroadcast) , mTxPacketNumber(0) , mTxTasklet(aInstance) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) , mInterface(aInstance) { memset(&mTxFrame, 0, sizeof(mTxFrame)); @@ -261,11 +261,6 @@ void Link::InvokeSendDone(Error aError, Mac::RxFrame *aAckFrame) Get().HandleTransmitDone(mTxFrame, aAckFrame, aError); } -void Link::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Link::HandleTimer(void) { mTimer.Start(kAckWaitWindow); diff --git a/src/core/radio/trel_link.hpp b/src/core/radio/trel_link.hpp index ba3367051..1aa95b9ca 100644 --- a/src/core/radio/trel_link.hpp +++ b/src/core/radio/trel_link.hpp @@ -173,22 +173,20 @@ private: void ReportDeferredAckStatus(Neighbor &aNeighbor, Error aError); void HandleTimer(Neighbor &aNeighbor); void HandleNotifierEvents(Events aEvents); - void HandleTxTasklet(void); - - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); static const char *StateToString(State aState); - using TxTasklet = TaskletIn; + using TxTasklet = TaskletIn; + using TimeoutTimer = TimerMilliIn; State mState; uint8_t mRxChannel; Mac::PanId mPanId; uint32_t mTxPacketNumber; TxTasklet mTxTasklet; - TimerMilli mTimer; + TimeoutTimer mTimer; Interface mInterface; Mac::RxFrame mRxFrame; Mac::TxFrame mTxFrame; diff --git a/src/core/thread/discover_scanner.cpp b/src/core/thread/discover_scanner.cpp index fb9f6c164..8dfc1380a 100644 --- a/src/core/thread/discover_scanner.cpp +++ b/src/core/thread/discover_scanner.cpp @@ -49,8 +49,8 @@ DiscoverScanner::DiscoverScanner(Instance &aInstance) : InstanceLocator(aInstance) , mHandler(nullptr) , mHandlerContext(nullptr) - , mTimer(aInstance, DiscoverScanner::HandleTimer) , mScanDoneTask(aInstance) + , mTimer(aInstance) , mFilterIndexes() , mState(kStateIdle) , mScanChannel(0) @@ -266,11 +266,6 @@ void DiscoverScanner::HandleScanDoneTask(void) } } -void DiscoverScanner::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void DiscoverScanner::HandleTimer(void) { VerifyOrExit(mState == kStateScanning); diff --git a/src/core/thread/discover_scanner.hpp b/src/core/thread/discover_scanner.hpp index 4943fc2ee..aff91bc7b 100644 --- a/src/core/thread/discover_scanner.hpp +++ b/src/core/thread/discover_scanner.hpp @@ -172,16 +172,15 @@ private: void HandleDiscoverComplete(void); void HandleScanDoneTask(void); + void HandleTimer(void); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); - + using ScanTimer = TimerMilliIn; using ScanDoneTask = TaskletIn; Handler mHandler; void * mHandlerContext; - TimerMilli mTimer; ScanDoneTask mScanDoneTask; + ScanTimer mTimer; FilterIndexes mFilterIndexes; Mac::ChannelMask mScanChannels; State mState; diff --git a/src/core/thread/energy_scan_server.cpp b/src/core/thread/energy_scan_server.cpp index 9c6b9135e..75e4e9d66 100644 --- a/src/core/thread/energy_scan_server.cpp +++ b/src/core/thread/energy_scan_server.cpp @@ -58,7 +58,7 @@ EnergyScanServer::EnergyScanServer(Instance &aInstance) , mCount(0) , mActive(false) , mScanResultsLength(0) - , mTimer(aInstance, EnergyScanServer::HandleTimer) + , mTimer(aInstance) , mEnergyScan(UriPath::kEnergyScan, &EnergyScanServer::HandleRequest, this) { Get().AddResource(mEnergyScan); @@ -106,11 +106,6 @@ exit: return; } -void EnergyScanServer::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void EnergyScanServer::HandleTimer(void) { VerifyOrExit(mActive); diff --git a/src/core/thread/energy_scan_server.hpp b/src/core/thread/energy_scan_server.hpp index 1f168d183..bb51c4ba4 100644 --- a/src/core/thread/energy_scan_server.hpp +++ b/src/core/thread/energy_scan_server.hpp @@ -72,13 +72,14 @@ private: static void HandleScanResult(Mac::EnergyScanResult *aResult, void *aContext); void HandleScanResult(Mac::EnergyScanResult *aResult); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void HandleNotifierEvents(Events aEvents); void SendReport(void); + using ScanTimer = TimerMilliIn; + Ip6::Address mCommissioner; uint32_t mChannelMask; uint32_t mChannelMaskCurrent; @@ -90,7 +91,7 @@ private: int8_t mScanResults[OPENTHREAD_CONFIG_TMF_ENERGY_SCAN_MAX_RESULTS]; uint8_t mScanResultsLength; - TimerMilli mTimer; + ScanTimer mTimer; Coap::Resource mEnergyScan; }; diff --git a/src/core/thread/key_manager.cpp b/src/core/thread/key_manager.cpp index 7563972ed..d1f635e1d 100644 --- a/src/core/thread/key_manager.cpp +++ b/src/core/thread/key_manager.cpp @@ -172,7 +172,7 @@ KeyManager::KeyManager(Instance &aInstance) , mHoursSinceKeyRotation(0) , mKeySwitchGuardTime(kDefaultKeySwitchGuardTime) , mKeySwitchGuardEnabled(false) - , mKeyRotationTimer(aInstance, KeyManager::HandleKeyRotationTimer) + , mKeyRotationTimer(aInstance) , mKekFrameCounter(0) , mIsPskcSet(false) { @@ -497,11 +497,6 @@ void KeyManager::StartKeyRotationTimer(void) mKeyRotationTimer.Start(kOneHourIntervalInMsec); } -void KeyManager::HandleKeyRotationTimer(Timer &aTimer) -{ - aTimer.Get().HandleKeyRotationTimer(); -} - void KeyManager::HandleKeyRotationTimer(void) { mHoursSinceKeyRotation++; diff --git a/src/core/thread/key_manager.hpp b/src/core/thread/key_manager.hpp index a8e2e32d8..048c22355 100644 --- a/src/core/thread/key_manager.hpp +++ b/src/core/thread/key_manager.hpp @@ -575,9 +575,8 @@ private: void ComputeTrelKey(uint32_t aKeySequence, Mac::Key &aKey); #endif - void StartKeyRotationTimer(void); - static void HandleKeyRotationTimer(Timer &aTimer); - void HandleKeyRotationTimer(void); + void StartKeyRotationTimer(void); + void HandleKeyRotationTimer(void); #if OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE void StoreNetworkKey(const NetworkKey &aNetworkKey, bool aOverWriteExisting); @@ -586,6 +585,8 @@ private: void ResetFrameCounters(void); + using RotationTimer = TimerMilliIn; + static const uint8_t kThreadString[]; #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE @@ -613,10 +614,10 @@ private: uint32_t mStoredMacFrameCounter; uint32_t mStoredMleFrameCounter; - uint32_t mHoursSinceKeyRotation; - uint32_t mKeySwitchGuardTime; - bool mKeySwitchGuardEnabled; - TimerMilli mKeyRotationTimer; + uint32_t mHoursSinceKeyRotation; + uint32_t mKeySwitchGuardTime; + bool mKeySwitchGuardEnabled; + RotationTimer mKeyRotationTimer; #if OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE PskcRef mPskcRef; diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 07e7dcfa1..bdd9a79d3 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -103,7 +103,7 @@ MeshForwarder::MeshForwarder(Instance &aInstance) , mSendBusy(false) #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_MAC_COLLISION_AVOIDANCE_DELAY_ENABLE , mDelayNextTx(false) - , mTxDelayTimer(aInstance, HandleTxDelayTimer) + , mTxDelayTimer(aInstance) #endif , mScheduleTransmissionTask(aInstance) #if OPENTHREAD_FTD @@ -247,11 +247,6 @@ void MeshForwarder::ResumeMessageTransmissions(void) } #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_MAC_COLLISION_AVOIDANCE_DELAY_ENABLE -void MeshForwarder::HandleTxDelayTimer(Timer &aTimer) -{ - aTimer.Get().HandleTxDelayTimer(); -} - void MeshForwarder::HandleTxDelayTimer(void) { mDelayNextTx = false; diff --git a/src/core/thread/mesh_forwarder.hpp b/src/core/thread/mesh_forwarder.hpp index 77059d009..932e8f5c3 100644 --- a/src/core/thread/mesh_forwarder.hpp +++ b/src/core/thread/mesh_forwarder.hpp @@ -508,8 +508,7 @@ private: void ResumeMessageTransmissions(void); #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_MAC_COLLISION_AVOIDANCE_DELAY_ENABLE - static void HandleTxDelayTimer(Timer &aTimer); - void HandleTxDelayTimer(void); + void HandleTxDelayTimer(void); #endif void LogMessage(MessageAction aAction, @@ -556,6 +555,10 @@ private: using TxTask = TaskletIn; +#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_MAC_COLLISION_AVOIDANCE_DELAY_ENABLE + using TxDelayTimer = TimerMilliIn; +#endif + PriorityQueue mSendQueue; MessageQueue mReassemblyList; uint16_t mFragTag; @@ -571,8 +574,8 @@ private: bool mTxPaused : 1; bool mSendBusy : 1; #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_MAC_COLLISION_AVOIDANCE_DELAY_ENABLE - bool mDelayNextTx : 1; - TimerMilli mTxDelayTimer; + bool mDelayNextTx : 1; + TxDelayTimer mTxDelayTimer; #endif TxTask mScheduleTransmissionTask; diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 286d97abc..ccf98362e 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -80,9 +80,9 @@ Mle::Mle(Instance &aInstance) , mReattachState(kReattachStop) , mAttachCounter(0) , mAnnounceDelay(kAnnounceTimeout) - , mAttachTimer(aInstance, Mle::HandleAttachTimer) - , mDelayedResponseTimer(aInstance, Mle::HandleDelayedResponseTimer) - , mMessageTransmissionTimer(aInstance, Mle::HandleMessageTransmissionTimer) + , mAttachTimer(aInstance) + , mDelayedResponseTimer(aInstance) + , mMessageTransmissionTimer(aInstance) , mAttachMode(kAnyPartition) , mChildUpdateAttempts(0) , mChildUpdateRequestState(kChildUpdateRequestNone) @@ -104,7 +104,7 @@ Mle::Mle(Instance &aInstance) , mAlternateChannel(0) , mAlternatePanId(Mac::kPanIdBroadcast) , mAlternateTimestamp(0) - , mDetachGracefullyTimer(aInstance, Mle::HandleDetachGracefullyTimer) + , mDetachGracefullyTimer(aInstance) , mDetachGracefullyCallback(nullptr) , mDetachGracefullyContext(nullptr) , mParentResponseCb(nullptr) @@ -1276,11 +1276,6 @@ exit: #endif // OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE -void Mle::HandleAttachTimer(Timer &aTimer) -{ - aTimer.Get().HandleAttachTimer(); -} - Error Mle::DetermineParentRequestType(ParentRequestType &aType) const { // This method determines the Parent Request type to use during an @@ -1578,11 +1573,6 @@ exit: return delay; } -void Mle::HandleDelayedResponseTimer(Timer &aTimer) -{ - aTimer.Get().HandleDelayedResponseTimer(); -} - void Mle::HandleDelayedResponseTimer(void) { TimeMilli now = TimerMilli::GetNow(); @@ -1909,11 +1899,6 @@ exit: } } -void Mle::HandleMessageTransmissionTimer(Timer &aTimer) -{ - aTimer.Get().HandleMessageTransmissionTimer(); -} - void Mle::HandleMessageTransmissionTimer(void) { // The `mMessageTransmissionTimer` is used for: @@ -3880,11 +3865,6 @@ exit: #endif // OPENTHREAD_CONFIG_MLE_INFORM_PREVIOUS_PARENT_ON_REATTACH #if OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE -void Mle::ParentSearch::HandleTimer(Timer &aTimer) -{ - aTimer.Get().mParentSearch.HandleTimer(); -} - void Mle::ParentSearch::HandleTimer(void) { int8_t parentRss; @@ -4349,11 +4329,6 @@ exit: return error; } -void Mle::HandleDetachGracefullyTimer(Timer &aTimer) -{ - aTimer.Get().HandleDetachGracefullyTimer(); -} - void Mle::HandleDetachGracefullyTimer(void) { Stop(); diff --git a/src/core/thread/mle.hpp b/src/core/thread/mle.hpp index ec4abe749..3e42a1bf5 100644 --- a/src/core/thread/mle.hpp +++ b/src/core/thread/mle.hpp @@ -1678,6 +1678,17 @@ protected: #endif +private: + // Declare early so we can use in as `TimerMilli` callbacks. + void HandleAttachTimer(void); + void HandleDelayedResponseTimer(void); + void HandleMessageTransmissionTimer(void); + +protected: + using AttachTimer = TimerMilliIn; + using DelayTimer = TimerMilliIn; + using MsgTxTimer = TimerMilliIn; + Ip6::Netif::UnicastAddress mLeaderAloc; ///< Leader anycast locator LeaderData mLeaderData; ///< Last received Leader Data TLV. @@ -1691,9 +1702,9 @@ protected: ReattachState mReattachState; ///< Reattach state uint16_t mAttachCounter; ///< Attach attempt counter. uint16_t mAnnounceDelay; ///< Delay in between sending Announce messages during attach. - TimerMilli mAttachTimer; ///< The timer for driving the attach process. - TimerMilli mDelayedResponseTimer; ///< The timer to delay MLE responses. - TimerMilli mMessageTransmissionTimer; ///< The timer for (re-)sending of MLE messages (e.g. Child Update). + AttachTimer mAttachTimer; ///< The timer for driving the attach process. + DelayTimer mDelayedResponseTimer; ///< The timer to delay MLE responses. + MsgTxTimer mMessageTransmissionTimer; ///< The timer for (re-)sending of MLE messages (e.g. Child Update). private: static constexpr uint8_t kMleHopLimit = 255; @@ -1837,6 +1848,8 @@ private: #endif #if OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE + void HandleParentSearchTimer(void) { mParentSearch.HandleTimer(); } + class ParentSearch : public InstanceLocator { public: @@ -1846,13 +1859,14 @@ private: , mBackoffWasCanceled(false) , mRecentlyDetached(false) , mBackoffCancelTime(0) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) { } void StartTimer(void); void UpdateState(void); void SetRecentlyDetached(void) { mRecentlyDetached = true; } + void HandleTimer(void); private: // All timer intervals are converted to milliseconds. @@ -1861,27 +1875,20 @@ private: static constexpr uint32_t kJitterInterval = (15 * 1000u); static constexpr int8_t kRssThreadhold = OPENTHREAD_CONFIG_PARENT_SEARCH_RSS_THRESHOLD; - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + using SearchTimer = TimerMilliIn; - bool mIsInBackoff : 1; - bool mBackoffWasCanceled : 1; - bool mRecentlyDetached : 1; - TimeMilli mBackoffCancelTime; - TimerMilli mTimer; + bool mIsInBackoff : 1; + bool mBackoffWasCanceled : 1; + bool mRecentlyDetached : 1; + TimeMilli mBackoffCancelTime; + SearchTimer mTimer; }; #endif // OPENTHREAD_CONFIG_PARENT_SEARCH_ENABLE Error Start(StartMode aMode); void Stop(StopMode aMode); void HandleNotifierEvents(Events aEvents); - static void HandleAttachTimer(Timer &aTimer); - void HandleAttachTimer(void); - static void HandleDelayedResponseTimer(Timer &aTimer); - void HandleDelayedResponseTimer(void); void SendDelayedResponse(TxMessage &aMessage, const DelayedResponseMetadata &aMetadata); - static void HandleMessageTransmissionTimer(Timer &aTimer); - void HandleMessageTransmissionTimer(void); static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageInfo); void ScheduleMessageTransmissionTimer(void); @@ -1976,6 +1983,8 @@ private: static const char *MessageTypeActionToSuffixString(MessageType aType, MessageAction aAction); #endif + using DetachGracefullyTimer = TimerMilliIn; + MessageQueue mDelayedResponses; Challenge mParentRequestChallenge; @@ -2024,7 +2033,7 @@ private: Ip6::Netif::MulticastAddress mLinkLocalAllThreadNodes; Ip6::Netif::MulticastAddress mRealmLocalAllThreadNodes; - TimerMilli mDetachGracefullyTimer; + DetachGracefullyTimer mDetachGracefullyTimer; otDetachGracefullyCallback mDetachGracefullyCallback; void * mDetachGracefullyContext; diff --git a/src/core/thread/network_data_leader_ftd.cpp b/src/core/thread/network_data_leader_ftd.cpp index 8197c9143..b10dca8c1 100644 --- a/src/core/thread/network_data_leader_ftd.cpp +++ b/src/core/thread/network_data_leader_ftd.cpp @@ -61,7 +61,7 @@ RegisterLogModule("NetworkData"); Leader::Leader(Instance &aInstance) : LeaderBase(aInstance) , mWaitingForNetDataSync(false) - , mTimer(aInstance, Leader::HandleTimer) + , mTimer(aInstance) , mServerData(UriPath::kServerData, &Leader::HandleServerData, this) , mCommissioningDataGet(UriPath::kCommissionerGet, &Leader::HandleCommissioningGet, this) , mCommissioningDataSet(UriPath::kCommissionerSet, &Leader::HandleCommissioningSet, this) @@ -1338,11 +1338,6 @@ void Leader::HandleNetworkDataRestoredAfterReset(void) } } -void Leader::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Leader::HandleTimer(void) { bool contextsWaiting = false; diff --git a/src/core/thread/network_data_leader_ftd.hpp b/src/core/thread/network_data_leader_ftd.hpp index 1ca969f67..69ff9f595 100644 --- a/src/core/thread/network_data_leader_ftd.hpp +++ b/src/core/thread/network_data_leader_ftd.hpp @@ -226,8 +226,7 @@ private: static void HandleServerData(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void HandleServerData(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); void RegisterNetworkData(uint16_t aRloc16, const NetworkData &aNetworkData); @@ -308,17 +307,19 @@ private: void IncrementVersions(bool aIncludeStable); void IncrementVersions(const ChangedFlags &aFlags); + using UpdateTimer = TimerMilliIn; + static constexpr uint8_t kMinContextId = 1; // Minimum Context ID (0 is used for Mesh Local) static constexpr uint8_t kNumContextIds = 15; // Maximum Context ID static constexpr uint32_t kContextIdReuseDelay = 48 * 60 * 60; // in seconds static constexpr uint32_t kStateUpdatePeriod = 60 * 1000; // State update period in milliseconds static constexpr uint32_t kMaxNetDataSyncWait = 60 * 1000; // Maximum time to wait for netdata sync. - bool mWaitingForNetDataSync; - uint16_t mContextUsed; - TimeMilli mContextLastUsed[kNumContextIds]; - uint32_t mContextIdReuseDelay; - TimerMilli mTimer; + bool mWaitingForNetDataSync; + uint16_t mContextUsed; + TimeMilli mContextLastUsed[kNumContextIds]; + uint32_t mContextIdReuseDelay; + UpdateTimer mTimer; Coap::Resource mServerData; diff --git a/src/core/thread/network_data_notifier.cpp b/src/core/thread/network_data_notifier.cpp index ac9cd274d..b3c7aa9ba 100644 --- a/src/core/thread/network_data_notifier.cpp +++ b/src/core/thread/network_data_notifier.cpp @@ -49,7 +49,7 @@ RegisterLogModule("NetworkData"); Notifier::Notifier(Instance &aInstance) : InstanceLocator(aInstance) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) , mSynchronizeDataTask(aInstance) , mNextDelay(0) , mWaitingForResponse(false) @@ -138,11 +138,6 @@ void Notifier::HandleNotifierEvents(Events aEvents) } } -void Notifier::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Notifier::HandleTimer(void) { SynchronizeServerData(); diff --git a/src/core/thread/network_data_notifier.hpp b/src/core/thread/network_data_notifier.hpp index dabb34634..ad4af46f2 100644 --- a/src/core/thread/network_data_notifier.hpp +++ b/src/core/thread/network_data_notifier.hpp @@ -106,8 +106,7 @@ private: void HandleNotifierEvents(Events aEvents); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); static void HandleCoapResponse(void * aContext, otMessage * aMessage, @@ -122,8 +121,9 @@ private: #endif using SynchronizeDataTask = TaskletIn; + using DelayTimer = TimerMilliIn; - TimerMilli mTimer; + DelayTimer mTimer; SynchronizeDataTask mSynchronizeDataTask; uint32_t mNextDelay; bool mWaitingForResponse : 1; diff --git a/src/core/thread/network_data_publisher.cpp b/src/core/thread/network_data_publisher.cpp index 25bb2b25e..0b19446c7 100644 --- a/src/core/thread/network_data_publisher.cpp +++ b/src/core/thread/network_data_publisher.cpp @@ -63,7 +63,7 @@ Publisher::Publisher(Instance &aInstance) , mPrefixCallback(nullptr) , mPrefixCallbackContext(nullptr) #endif - , mTimer(aInstance, Publisher::HandleTimer) + , mTimer(aInstance) { #if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE // Since the `PrefixEntry` type is used in an array, @@ -221,11 +221,6 @@ void Publisher::HandleNotifierEvents(Events aEvents) #endif } -void Publisher::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void Publisher::HandleTimer(void) { #if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE diff --git a/src/core/thread/network_data_publisher.hpp b/src/core/thread/network_data_publisher.hpp index 7d1179095..3c5a9b59b 100644 --- a/src/core/thread/network_data_publisher.hpp +++ b/src/core/thread/network_data_publisher.hpp @@ -460,9 +460,10 @@ private: TimerMilli &GetTimer(void) { return mTimer; } void HandleNotifierEvents(Events aEvents); - static void HandleTimer(Timer &aTimer); void HandleTimer(void); + using PublisherTimer = TimerMilliIn; + #if OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE DnsSrpServiceEntry mDnsSrpServiceEntry; #endif @@ -473,7 +474,7 @@ private: void * mPrefixCallbackContext; #endif - TimerMilli mTimer; + PublisherTimer mTimer; }; } // namespace NetworkData diff --git a/src/core/thread/panid_query_server.cpp b/src/core/thread/panid_query_server.cpp index 9c57e8941..dc2deeefd 100644 --- a/src/core/thread/panid_query_server.cpp +++ b/src/core/thread/panid_query_server.cpp @@ -53,7 +53,7 @@ PanIdQueryServer::PanIdQueryServer(Instance &aInstance) : InstanceLocator(aInstance) , mChannelMask(0) , mPanId(Mac::kPanIdBroadcast) - , mTimer(aInstance, PanIdQueryServer::HandleTimer) + , mTimer(aInstance) , mPanIdQuery(UriPath::kPanIdQuery, &PanIdQueryServer::HandleQuery, this) { Get().AddResource(mPanIdQuery); @@ -137,11 +137,6 @@ exit: MeshCoP::LogError("send panid conflict", error); } -void PanIdQueryServer::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void PanIdQueryServer::HandleTimer(void) { IgnoreError(Get().ActiveScan(mChannelMask, 0, HandleScanResult, this)); diff --git a/src/core/thread/panid_query_server.hpp b/src/core/thread/panid_query_server.hpp index 20f3843a5..39f14ddff 100644 --- a/src/core/thread/panid_query_server.hpp +++ b/src/core/thread/panid_query_server.hpp @@ -68,18 +68,19 @@ private: static void HandleScanResult(Mac::ActiveScanResult *aScanResult, void *aContext); void HandleScanResult(Mac::ActiveScanResult *aScanResult); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void HandleTimer(void); static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); void SendConflict(void); + using DelayTimer = TimerMilliIn; + Ip6::Address mCommissioner; uint32_t mChannelMask; uint16_t mPanId; - TimerMilli mTimer; + DelayTimer mTimer; Coap::Resource mPanIdQuery; }; diff --git a/src/core/thread/time_sync_service.cpp b/src/core/thread/time_sync_service.cpp index e938f3820..6ea3401cf 100644 --- a/src/core/thread/time_sync_service.cpp +++ b/src/core/thread/time_sync_service.cpp @@ -64,7 +64,7 @@ TimeSync::TimeSync(Instance &aInstance) , mNetworkTimeOffset(0) , mTimeSyncCallback(nullptr) , mTimeSyncCallbackContext(nullptr) - , mTimer(aInstance, HandleTimeout) + , mTimer(aInstance) , mCurrentStatus(OT_NETWORK_TIME_UNSYNCHRONIZED) { CheckAndHandleChanges(false); @@ -209,11 +209,6 @@ void TimeSync::HandleTimeout(void) CheckAndHandleChanges(false); } -void TimeSync::HandleTimeout(Timer &aTimer) -{ - aTimer.Get().HandleTimeout(); -} - void TimeSync::CheckAndHandleChanges(bool aTimeUpdated) { otNetworkTimeStatus networkTimeStatus = OT_NETWORK_TIME_SYNCHRONIZED; diff --git a/src/core/thread/time_sync_service.hpp b/src/core/thread/time_sync_service.hpp index 4f2e14449..f788eca0f 100644 --- a/src/core/thread/time_sync_service.hpp +++ b/src/core/thread/time_sync_service.hpp @@ -170,14 +170,6 @@ private: */ void HandleNotifierEvents(Events aEvents); - /** - * Callback to be called when timer expires. - * - * @param[in] aTimer The corresponding timer. - * - */ - static void HandleTimeout(Timer &aTimer); - /** * Check and handle any status change, and notify observers if applicable. * @@ -199,6 +191,8 @@ private: */ void NotifyTimeSyncCallback(void); + using SyncTimer = TimerMilliIn; + bool mTimeSyncRequired; ///< Indicate whether or not a time synchronization message is required. uint8_t mTimeSyncSeq; ///< The time synchronization sequence. uint16_t mTimeSyncPeriod; ///< The time synchronization period. @@ -211,7 +205,7 @@ private: otNetworkTimeSyncCallbackFn mTimeSyncCallback; ///< The callback to be called when time sync is handled or status updated. void * mTimeSyncCallbackContext; ///< The context to be passed to callback. - TimerMilli mTimer; ///< Timer for checking if a resync is required. + SyncTimer mTimer; ///< Timer for checking if a resync is required. otNetworkTimeStatus mCurrentStatus; ///< Current network time status. }; diff --git a/src/core/utils/channel_manager.cpp b/src/core/utils/channel_manager.cpp index 93c24f598..8bc258708 100644 --- a/src/core/utils/channel_manager.cpp +++ b/src/core/utils/channel_manager.cpp @@ -57,7 +57,7 @@ ChannelManager::ChannelManager(Instance &aInstance) , mDelay(kMinimumDelay) , mChannel(0) , mState(kStateIdle) - , mTimer(aInstance, ChannelManager::HandleTimer) + , mTimer(aInstance) , mAutoSelectInterval(kDefaultAutoSelectInterval) , mAutoSelectEnabled(false) , mCcaFailureRateThreshold(kCcaFailureRateThreshold) @@ -154,11 +154,6 @@ void ChannelManager::HandleDatasetUpdateDone(Error aError) StartAutoSelectTimer(); } -void ChannelManager::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void ChannelManager::HandleTimer(void) { switch (mState) diff --git a/src/core/utils/channel_manager.hpp b/src/core/utils/channel_manager.hpp index a6d102054..f375be022 100644 --- a/src/core/utils/channel_manager.hpp +++ b/src/core/utils/channel_manager.hpp @@ -276,7 +276,6 @@ private: void StartDatasetUpdate(void); static void HandleDatasetUpdateDone(Error aError, void *aContext); void HandleDatasetUpdateDone(Error aError); - static void HandleTimer(Timer &aTimer); void HandleTimer(void); void StartAutoSelectTimer(void); @@ -285,12 +284,14 @@ private: bool ShouldAttemptChannelChange(void); #endif + using ManagerTimer = TimerMilliIn; + Mac::ChannelMask mSupportedChannelMask; Mac::ChannelMask mFavoredChannelMask; uint16_t mDelay; uint8_t mChannel; State mState; - TimerMilli mTimer; + ManagerTimer mTimer; uint32_t mAutoSelectInterval; bool mAutoSelectEnabled; uint16_t mCcaFailureRateThreshold; diff --git a/src/core/utils/channel_monitor.cpp b/src/core/utils/channel_monitor.cpp index 7afd4db37..c9d962316 100644 --- a/src/core/utils/channel_monitor.cpp +++ b/src/core/utils/channel_monitor.cpp @@ -64,7 +64,7 @@ ChannelMonitor::ChannelMonitor(Instance &aInstance) : InstanceLocator(aInstance) , mChannelMaskIndex(0) , mSampleCount(0) - , mTimer(aInstance, ChannelMonitor::HandleTimer) + , mTimer(aInstance) { memset(mChannelOccupancy, 0, sizeof(mChannelOccupancy)); } @@ -114,11 +114,6 @@ exit: return occupancy; } -void ChannelMonitor::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void ChannelMonitor::HandleTimer(void) { IgnoreError(Get().EnergyScan(mScanChannelMasks[mChannelMaskIndex], 0, diff --git a/src/core/utils/channel_monitor.hpp b/src/core/utils/channel_monitor.hpp index 8a51f4386..b0221af52 100644 --- a/src/core/utils/channel_monitor.hpp +++ b/src/core/utils/channel_monitor.hpp @@ -193,18 +193,19 @@ private: static constexpr uint16_t kMaxJitterInterval = 4096; static constexpr uint32_t kMaxOccupancy = 0xffff; - static void HandleTimer(Timer &aTimer); void HandleTimer(void); static void HandleEnergyScanResult(Mac::EnergyScanResult *aResult, void *aContext); void HandleEnergyScanResult(Mac::EnergyScanResult *aResult); void LogResults(void); + using ScanTimer = TimerMilliIn; + static const uint32_t mScanChannelMasks[kNumChannelMasks]; - uint8_t mChannelMaskIndex : 3; - uint32_t mSampleCount : 29; - uint16_t mChannelOccupancy[kNumChannels]; - TimerMilli mTimer; + uint8_t mChannelMaskIndex : 3; + uint32_t mSampleCount : 29; + uint16_t mChannelOccupancy[kNumChannels]; + ScanTimer mTimer; }; /** diff --git a/src/core/utils/child_supervision.cpp b/src/core/utils/child_supervision.cpp index b0f45bdd1..3fc2e5fc4 100644 --- a/src/core/utils/child_supervision.cpp +++ b/src/core/utils/child_supervision.cpp @@ -157,7 +157,7 @@ void ChildSupervisor::HandleNotifierEvents(Events aEvents) SupervisionListener::SupervisionListener(Instance &aInstance) : InstanceLocator(aInstance) , mTimeout(0) - , mTimer(aInstance, SupervisionListener::HandleTimer) + , mTimer(aInstance) { SetTimeout(kDefaultTimeout); } @@ -206,11 +206,6 @@ void SupervisionListener::RestartTimer(void) } } -void SupervisionListener::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void SupervisionListener::HandleTimer(void) { VerifyOrExit(Get().IsChild() && !Get().GetRxOnWhenIdle()); diff --git a/src/core/utils/child_supervision.hpp b/src/core/utils/child_supervision.hpp index 30b26f1f3..bbae3997e 100644 --- a/src/core/utils/child_supervision.hpp +++ b/src/core/utils/child_supervision.hpp @@ -233,12 +233,13 @@ public: private: static constexpr uint16_t kDefaultTimeout = OPENTHREAD_CONFIG_CHILD_SUPERVISION_CHECK_TIMEOUT; // (seconds) - void RestartTimer(void); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void RestartTimer(void); + void HandleTimer(void); - uint16_t mTimeout; - TimerMilli mTimer; + using ListenerTimer = TimerMilliIn; + + uint16_t mTimeout; + ListenerTimer mTimer; }; #endif // #if OPENTHREAD_CONFIG_CHILD_SUPERVISION_ENABLE diff --git a/src/core/utils/history_tracker.cpp b/src/core/utils/history_tracker.cpp index 10a7076c4..04b498816 100644 --- a/src/core/utils/history_tracker.cpp +++ b/src/core/utils/history_tracker.cpp @@ -53,7 +53,7 @@ namespace Utils { HistoryTracker::HistoryTracker(Instance &aInstance) : InstanceLocator(aInstance) - , mTimer(aInstance, HandleTimer) + , mTimer(aInstance) #if OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA , mPreviousNetworkData(aInstance, mNetworkDataTlvBuffer, 0, sizeof(mNetworkDataTlvBuffer)) #endif @@ -375,11 +375,6 @@ void HistoryTracker::HandleNotifierEvents(Events aEvents) #endif } -void HistoryTracker::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void HistoryTracker::HandleTimer(void) { mNetInfoHistory.UpdateAgedEntries(); diff --git a/src/core/utils/history_tracker.hpp b/src/core/utils/history_tracker.hpp index 31ce3d121..7c89cb564 100644 --- a/src/core/utils/history_tracker.hpp +++ b/src/core/utils/history_tracker.hpp @@ -378,22 +378,23 @@ private: RecordMessage(aMessage, aMacDest, kTxMessage); } - void RecordNetworkInfo(void); - void RecordMessage(const Message &aMessage, const Mac::Address &aMacAddress, MessageType aType); - void RecordNeighborEvent(NeighborTable::Event aEvent, const NeighborTable::EntryInfo &aInfo); - void RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, const Ip6::Netif::UnicastAddress &aUnicastAddress); - void RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, - const Ip6::Netif::MulticastAddress &aMulticastAddress, - Ip6::Netif::AddressOrigin aAddressOrigin); - void HandleNotifierEvents(Events aEvents); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); + void RecordNetworkInfo(void); + void RecordMessage(const Message &aMessage, const Mac::Address &aMacAddress, MessageType aType); + void RecordNeighborEvent(NeighborTable::Event aEvent, const NeighborTable::EntryInfo &aInfo); + void RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, const Ip6::Netif::UnicastAddress &aUnicastAddress); + void RecordAddressEvent(Ip6::Netif::AddressEvent aEvent, + const Ip6::Netif::MulticastAddress &aMulticastAddress, + Ip6::Netif::AddressOrigin aAddressOrigin); + void HandleNotifierEvents(Events aEvents); + void HandleTimer(void); #if OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA void RecordNetworkDataChange(void); void RecordOnMeshPrefixEvent(NetDataEvent aEvent, const NetworkData::OnMeshPrefixConfig &aPrefix); void RecordExternalRouteEvent(NetDataEvent aEvent, const NetworkData::ExternalRouteConfig &aRoute); #endif + using TrackerTimer = TimerMilliIn; + EntryList mNetInfoHistory; EntryList mUnicastAddressHistory; EntryList mMulticastAddressHistory; @@ -403,7 +404,7 @@ private: EntryList mOnMeshPrefixHistory; EntryList mExternalRouteHistory; - TimerMilli mTimer; + TrackerTimer mTimer; #if OPENTHREAD_CONFIG_HISTORY_TRACKER_NET_DATA NetworkData::MutableNetworkData mPreviousNetworkData; diff --git a/src/core/utils/jam_detector.cpp b/src/core/utils/jam_detector.cpp index 2644a1b31..39590eb30 100644 --- a/src/core/utils/jam_detector.cpp +++ b/src/core/utils/jam_detector.cpp @@ -51,7 +51,7 @@ JamDetector::JamDetector(Instance &aInstance) : InstanceLocator(aInstance) , mHandler(nullptr) , mContext(nullptr) - , mTimer(aInstance, JamDetector::HandleTimer) + , mTimer(aInstance) , mHistoryBitmap(0) , mCurSecondStartTime(0) , mSampleInterval(0) @@ -161,11 +161,6 @@ exit: return error; } -void JamDetector::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void JamDetector::HandleTimer(void) { int8_t rssi; diff --git a/src/core/utils/jam_detector.hpp b/src/core/utils/jam_detector.hpp index 98dc5e2a6..a85aa463b 100644 --- a/src/core/utils/jam_detector.hpp +++ b/src/core/utils/jam_detector.hpp @@ -185,26 +185,27 @@ private: static constexpr uint16_t kMinSampleInterval = 2; // in ms static constexpr uint32_t kMaxRandomDelay = 4; // in ms - void CheckState(void); - void SetJamState(bool aNewState); - static void HandleTimer(Timer &aTimer); - void HandleTimer(void); - void UpdateHistory(bool aDidExceedThreshold); - void UpdateJamState(void); - void HandleNotifierEvents(Events aEvents); + void CheckState(void); + void SetJamState(bool aNewState); + void HandleTimer(void); + void UpdateHistory(bool aDidExceedThreshold); + void UpdateJamState(void); + void HandleNotifierEvents(Events aEvents); - Handler mHandler; // Handler/callback to inform about jamming state - void * mContext; // Context for handler/callback - TimerMilli mTimer; // RSSI sample timer - uint64_t mHistoryBitmap; // History bitmap, each bit correspond to 1 sec interval - TimeMilli mCurSecondStartTime; // Start time for current 1 sec interval - uint16_t mSampleInterval; // Current sample interval - uint8_t mWindow : 6; // Window (in sec) to monitor jamming - uint8_t mBusyPeriod : 6; // BusyPeriod (in sec) with mWindow to alert jamming - bool mEnabled : 1; // If jam detection is enabled - bool mAlwaysAboveThreshold : 1; // State for current 1 sec interval - bool mJamState : 1; // Current jam state - int8_t mRssiThreshold; // RSSI threshold for jam detection + using SampleTimer = TimerMilliIn; + + Handler mHandler; // Handler/callback to inform about jamming state + void * mContext; // Context for handler/callback + SampleTimer mTimer; // RSSI sample timer + uint64_t mHistoryBitmap; // History bitmap, each bit correspond to 1 sec interval + TimeMilli mCurSecondStartTime; // Start time for current 1 sec interval + uint16_t mSampleInterval; // Current sample interval + uint8_t mWindow : 6; // Window (in sec) to monitor jamming + uint8_t mBusyPeriod : 6; // BusyPeriod (in sec) with mWindow to alert jamming + bool mEnabled : 1; // If jam detection is enabled + bool mAlwaysAboveThreshold : 1; // State for current 1 sec interval + bool mJamState : 1; // Current jam state + int8_t mRssiThreshold; // RSSI threshold for jam detection }; /** diff --git a/src/core/utils/ping_sender.cpp b/src/core/utils/ping_sender.cpp index 01d3ea7fb..dcdf29270 100644 --- a/src/core/utils/ping_sender.cpp +++ b/src/core/utils/ping_sender.cpp @@ -91,7 +91,7 @@ PingSender::PingSender(Instance &aInstance) : InstanceLocator(aInstance) , mIdentifier(0) , mTargetEchoSequence(0) - , mTimer(aInstance, PingSender::HandleTimer) + , mTimer(aInstance) , mIcmpHandler(PingSender::HandleIcmpReceive, this) { IgnoreError(Get().RegisterHandler(mIcmpHandler)); @@ -169,11 +169,6 @@ exit: } } -void PingSender::HandleTimer(Timer &aTimer) -{ - aTimer.Get().HandleTimer(); -} - void PingSender::HandleTimer(void) { if (mConfig.mCount > 0) diff --git a/src/core/utils/ping_sender.hpp b/src/core/utils/ping_sender.hpp index aae63c75e..03fab3f70 100644 --- a/src/core/utils/ping_sender.hpp +++ b/src/core/utils/ping_sender.hpp @@ -166,7 +166,6 @@ public: private: void SendPing(void); - static void HandleTimer(Timer &aTimer); void HandleTimer(void); static void HandleIcmpReceive(void * aContext, otMessage * aMessage, @@ -176,11 +175,13 @@ private: const Ip6::MessageInfo & aMessageInfo, const Ip6::Icmp::Header &aIcmpHeader); + using PingTimer = TimerMilliIn; + Config mConfig; Statistics mStatistics; uint16_t mIdentifier; uint16_t mTargetEchoSequence; - TimerMilli mTimer; + PingTimer mTimer; Ip6::Icmp::Handler mIcmpHandler; };