[notifier] add Event and Events types (#5052)

This commit adds `Event` enumeration type representing `Notifier`
events (mirroring `OT_CHANGED_{EVENT}` constants). It also adds
`Events` class which represents a collection of events. The `Events`
class provides helper methods to check whether a specific event has
happened, or whether any or all of a given subset of events are
present in the `Events` collection.

This commit also renames the `Notifier` handler method in different
core classes to `HandleNotifierEvents()`.
This commit is contained in:
Abtin Keshavarzian
2020-06-08 10:17:52 -07:00
committed by Jonathan Hui
parent 7ae409af65
commit adb57991e8
36 changed files with 369 additions and 240 deletions
+4 -4
View File
@@ -121,7 +121,7 @@ void Local::Reset(void)
{
// Increase sequence number when changing from Primary to Secondary.
mSequenceNumber++;
Get<Notifier>().Signal(OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL);
Get<Notifier>().Signal(kEventThreadBackboneRouterLocalChanged);
SetState(OT_BACKBONE_ROUTER_STATE_SECONDARY);
}
@@ -160,7 +160,7 @@ void Local::SetConfig(const BackboneRouterConfig &aConfig)
if (update)
{
Get<Notifier>().Signal(OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL);
Get<Notifier>().Signal(kEventThreadBackboneRouterLocalChanged);
if (AddService() == OT_ERROR_NONE)
{
@@ -244,7 +244,7 @@ void Local::SetState(BackboneRouterState aState)
mState = aState;
Get<Notifier>().Signal(OT_CHANGED_THREAD_BACKBONE_ROUTER_STATE);
Get<Notifier>().Signal(kEventThreadBackboneRouterStateChanged);
exit:
return;
@@ -281,7 +281,7 @@ void Local::UpdateBackboneRouterPrimary(Leader::State aState, const BackboneRout
mSequenceNumber = aConfig.mSequenceNumber + 1;
mReregistrationDelay = aConfig.mReregistrationDelay;
mMlrTimeout = aConfig.mMlrTimeout;
Get<Notifier>().Signal(OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL);
Get<Notifier>().Signal(kEventThreadBackboneRouterLocalChanged);
if (AddService(true /* Force registration to refresh and restore Primary state */) == OT_ERROR_NONE)
{
Get<NetworkData::Notifier>().HandleServerDataUpdated();
+61 -61
View File
@@ -51,9 +51,9 @@ Notifier::Callback::Callback(Instance &aInstance, Handler aHandler, void *aOwner
Notifier::Notifier(Instance &aInstance)
: InstanceLocator(aInstance)
, mFlagsToSignal(0)
, mSignaledFlags(0)
, mTask(aInstance, &Notifier::HandleStateChanged, this)
, mEventsToSignal()
, mSignaledEvents()
, mTask(aInstance, &Notifier::EmitEvents, this)
, mCallbacks()
{
for (unsigned int i = 0; i < kMaxExternalHandlers; i++)
@@ -120,39 +120,43 @@ exit:
return;
}
void Notifier::Signal(otChangedFlags aFlags)
void Notifier::Signal(Event aEvent)
{
mFlagsToSignal |= aFlags;
mSignaledFlags |= aFlags;
mEventsToSignal.Add(aEvent);
mSignaledEvents.Add(aEvent);
mTask.Post();
}
void Notifier::SignalIfFirst(otChangedFlags aFlags)
void Notifier::SignalIfFirst(Event aEvent)
{
if (!HasSignaled(aFlags))
if (!HasSignaled(aEvent))
{
Signal(aFlags);
Signal(aEvent);
}
}
void Notifier::HandleStateChanged(Tasklet &aTasklet)
void Notifier::EmitEvents(Tasklet &aTasklet)
{
aTasklet.GetOwner<Notifier>().HandleStateChanged();
aTasklet.GetOwner<Notifier>().EmitEvents();
}
void Notifier::HandleStateChanged(void)
void Notifier::EmitEvents(void)
{
otChangedFlags flags = mFlagsToSignal;
Events events;
VerifyOrExit(flags != 0, OT_NOOP);
VerifyOrExit(!mEventsToSignal.IsEmpty(), OT_NOOP);
mFlagsToSignal = 0;
// Note that the callbacks may signal new events, so we create a
// copy of `mEventsToSignal` and then clear it.
LogChangedFlags(flags);
events = mEventsToSignal;
mEventsToSignal.Clear();
LogEvents(events);
for (Callback *callback = mCallbacks.GetHead(); callback != NULL; callback = callback->GetNext())
{
callback->Invoke(flags);
callback->Invoke(events);
}
for (unsigned int i = 0; i < kMaxExternalHandlers; i++)
@@ -161,7 +165,7 @@ void Notifier::HandleStateChanged(void)
if (callback.mHandler != NULL)
{
callback.mHandler(flags, callback.mContext);
callback.mHandler(events.GetAsFlags(), callback.mContext);
}
}
@@ -173,14 +177,14 @@ exit:
#if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_CORE == 1)
void Notifier::LogChangedFlags(otChangedFlags aFlags) const
void Notifier::LogEvents(Events aEvents) const
{
otChangedFlags flags = aFlags;
Events::Flags flags = aEvents.GetAsFlags();
bool addSpace = false;
bool didLog = false;
String<kFlagsStringBufferSize> string;
for (uint8_t bit = 0; bit < sizeof(otChangedFlags) * CHAR_BIT; bit++)
for (uint8_t bit = 0; bit < sizeof(Events::Flags) * CHAR_BIT; bit++)
{
VerifyOrExit(flags != 0, OT_NOOP);
@@ -188,14 +192,14 @@ void Notifier::LogChangedFlags(otChangedFlags aFlags) const
{
if (string.GetLength() >= kFlagsStringLineLimit)
{
otLogInfoCore("Notifier: StateChanged (0x%08x) %s%s ...", aFlags, didLog ? "... " : "[",
otLogInfoCore("Notifier: StateChanged (0x%08x) %s%s ...", aEvents.GetAsFlags(), didLog ? "... " : "[",
string.AsCString());
string.Clear();
didLog = true;
addSpace = false;
}
IgnoreError(string.Append("%s%s", addSpace ? " " : "", FlagToString(1 << bit)));
IgnoreError(string.Append("%s%s", addSpace ? " " : "", EventToString(static_cast<Event>(1 << bit))));
addSpace = true;
flags ^= (1 << bit);
@@ -203,10 +207,11 @@ void Notifier::LogChangedFlags(otChangedFlags aFlags) const
}
exit:
otLogInfoCore("Notifier: StateChanged (0x%08x) %s%s] ", aFlags, didLog ? "... " : "[", string.AsCString());
otLogInfoCore("Notifier: StateChanged (0x%08x) %s%s] ", aEvents.GetAsFlags(), didLog ? "... " : "[",
string.AsCString());
}
const char *Notifier::FlagToString(otChangedFlags aFlag) const
const char *Notifier::EventToString(Event aEvent) const
{
const char *retval = "(unknown)";
@@ -214,124 +219,119 @@ const char *Notifier::FlagToString(otChangedFlags aFlag) const
// strings from this method should have shorter length than
// `kMaxFlagNameLength` value.
switch (aFlag)
switch (aEvent)
{
case OT_CHANGED_IP6_ADDRESS_ADDED:
case kEventIp6AddressAdded:
retval = "Ip6+";
break;
case OT_CHANGED_IP6_ADDRESS_REMOVED:
case kEventIp6AddressRemoved:
retval = "Ip6-";
break;
case OT_CHANGED_THREAD_ROLE:
case kEventThreadRoleChanged:
retval = "Role";
break;
case OT_CHANGED_THREAD_LL_ADDR:
case kEventThreadLinkLocalAddrChanged:
retval = "LLAddr";
break;
case OT_CHANGED_THREAD_ML_ADDR:
case kEventThreadMeshLocalAddrChanged:
retval = "MLAddr";
break;
case OT_CHANGED_THREAD_RLOC_ADDED:
case kEventThreadRlocAdded:
retval = "Rloc+";
break;
case OT_CHANGED_THREAD_RLOC_REMOVED:
case kEventThreadRlocRemoved:
retval = "Rloc-";
break;
case OT_CHANGED_THREAD_PARTITION_ID:
case kEventThreadPartitionIdChanged:
retval = "PartitionId";
break;
case OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER:
case kEventThreadKeySeqCounterChanged:
retval = "KeySeqCntr";
break;
case OT_CHANGED_THREAD_NETDATA:
case kEventThreadNetdataChanged:
retval = "NetData";
break;
case OT_CHANGED_THREAD_CHILD_ADDED:
case kEventThreadChildAdded:
retval = "Child+";
break;
case OT_CHANGED_THREAD_CHILD_REMOVED:
case kEventThreadChildRemoved:
retval = "Child-";
break;
case OT_CHANGED_IP6_MULTICAST_SUBSCRIBED:
case kEventIp6MulticastSubscribed:
retval = "Ip6Mult+";
break;
case OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED:
case kEventIp6MulticastUnsubscribed:
retval = "Ip6Mult-";
break;
case OT_CHANGED_THREAD_CHANNEL:
case kEventThreadChannelChanged:
retval = "Channel";
break;
case OT_CHANGED_THREAD_PANID:
case kEventThreadPanIdChanged:
retval = "PanId";
break;
case OT_CHANGED_THREAD_NETWORK_NAME:
case kEventThreadNetworkNameChanged:
retval = "NetName";
break;
case OT_CHANGED_THREAD_EXT_PANID:
case kEventThreadExtPanIdChanged:
retval = "ExtPanId";
break;
case OT_CHANGED_MASTER_KEY:
case kEventMasterKeyChanged:
retval = "MstrKey";
break;
case OT_CHANGED_PSKC:
case kEventPskcChanged:
retval = "PSKc";
break;
case OT_CHANGED_SECURITY_POLICY:
case kEventSecurityPolicyChanged:
retval = "SecPolicy";
break;
case OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL:
case kEventChannelManagerNewChannelChanged:
retval = "CMNewChan";
break;
case OT_CHANGED_SUPPORTED_CHANNEL_MASK:
case kEventSupportedChannelMaskChanged:
retval = "ChanMask";
break;
case OT_CHANGED_COMMISSIONER_STATE:
case kEventCommissionerStateChanged:
retval = "CommissionerState";
break;
case OT_CHANGED_THREAD_NETIF_STATE:
case kEventThreadNetifStateChanged:
retval = "NetifState";
break;
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
case OT_CHANGED_THREAD_BACKBONE_ROUTER_STATE:
case kEventThreadBackboneRouterStateChanged:
retval = "BbrState";
break;
case OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL:
case kEventThreadBackboneRouterLocalChanged:
retval = "BbrLocal";
break;
#endif
case OT_CHANGED_JOINER_STATE:
case kEventJoinerStateChanged:
retval = "JoinerState";
break;
default:
break;
}
return retval;
@@ -339,11 +339,11 @@ const char *Notifier::FlagToString(otChangedFlags aFlag) const
#else // #if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_CORE == 1)
void Notifier::LogChangedFlags(otChangedFlags) const
void Notifier::LogEvents(Events) const
{
}
const char *Notifier::FlagToString(otChangedFlags) const
const char *Notifier::EventToString(Event) const
{
return "";
}
+154 -33
View File
@@ -59,6 +59,128 @@ namespace ot {
*
*/
/**
* This enumeration type represents events emitted from OpenThread Notifier.
*
*/
enum Event
{
kEventIp6AddressAdded = OT_CHANGED_IP6_ADDRESS_ADDED, ///< IPv6 address was added
kEventIp6AddressRemoved = OT_CHANGED_IP6_ADDRESS_REMOVED, ///< IPv6 address was removed
kEventThreadRoleChanged = OT_CHANGED_THREAD_ROLE, ///< Role changed
kEventThreadLinkLocalAddrChanged = OT_CHANGED_THREAD_LL_ADDR, ///< Link-local address changed
kEventThreadMeshLocalAddrChanged = OT_CHANGED_THREAD_ML_ADDR, ///< Mesh-local address changed
kEventThreadRlocAdded = OT_CHANGED_THREAD_RLOC_ADDED, ///< RLOC was added
kEventThreadRlocRemoved = OT_CHANGED_THREAD_RLOC_REMOVED, ///< RLOC was removed
kEventThreadPartitionIdChanged = OT_CHANGED_THREAD_PARTITION_ID, ///< Partition ID changed
kEventThreadKeySeqCounterChanged = OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER, ///< Key Sequence changed
kEventThreadNetdataChanged = OT_CHANGED_THREAD_NETDATA, ///< Network Data changed
kEventThreadChildAdded = OT_CHANGED_THREAD_CHILD_ADDED, ///< Child was added
kEventThreadChildRemoved = OT_CHANGED_THREAD_CHILD_REMOVED, ///< Child was removed
kEventIp6MulticastSubscribed = OT_CHANGED_IP6_MULTICAST_SUBSCRIBED, ///< Multicast address added
kEventIp6MulticastUnsubscribed = OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED, ///< Multicast address removed
kEventThreadChannelChanged = OT_CHANGED_THREAD_CHANNEL, ///< Network channel changed
kEventThreadPanIdChanged = OT_CHANGED_THREAD_PANID, ///< Network PAN ID changed
kEventThreadNetworkNameChanged = OT_CHANGED_THREAD_NETWORK_NAME, ///< Network name changed
kEventThreadExtPanIdChanged = OT_CHANGED_THREAD_EXT_PANID, ///< Extended PAN ID changed
kEventMasterKeyChanged = OT_CHANGED_MASTER_KEY, ///< Master Key changed
kEventPskcChanged = OT_CHANGED_PSKC, ///< PSKc changed
kEventSecurityPolicyChanged = OT_CHANGED_SECURITY_POLICY, ///< Security Policy changed
kEventChannelManagerNewChannelChanged = OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL, ///< New Channel (channel-manager)
kEventSupportedChannelMaskChanged = OT_CHANGED_SUPPORTED_CHANNEL_MASK, ///< Channel mask changed
kEventCommissionerStateChanged = OT_CHANGED_COMMISSIONER_STATE, ///< Commissioner state changed
kEventThreadNetifStateChanged = OT_CHANGED_THREAD_NETIF_STATE, ///< Netif state changed
kEventThreadBackboneRouterStateChanged = OT_CHANGED_THREAD_BACKBONE_ROUTER_STATE, ///< Backbone Router state changed
kEventThreadBackboneRouterLocalChanged = OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL, ///< Local Backbone Router changed
kEventJoinerStateChanged = OT_CHANGED_JOINER_STATE, ///< Joiner state changed
};
/**
* This type represents a list of events.
*
*/
class Events
{
public:
/**
* This type represents a bit-field indicating a list of events (with values from `Event`)
*
*/
typedef otChangedFlags Flags;
/**
* This constructor initializes the `Events` list (as empty).
*
*/
Events(void)
: mEventFlags(0)
{
}
/**
* This method clears the `Events` list.
*
*/
void Clear(void) { mEventFlags = 0; }
/**
* This method indicates whether the `Events` list contains a given event.
*
* @param[in] aEvent The event to check.
*
* @returns TRUE if the list contains the @p aEvent, FALSE otherwise.
*
*/
bool Contains(Event aEvent) const { return (mEventFlags & aEvent) != 0; }
/**
* This method indicates whether the `Events` list contains any of a given set of events.
*
* @param[in] aEvents The events set to check (must be a collection of `Event` constants combined using `|`).
*
* @returns TRUE if the list contains any of the @p aEvents set, FALSE otherwise.
*
*/
bool ContainsAny(Flags aEvents) const { return (mEventFlags & aEvents) != 0; }
/**
* This method indicates whether the `Events` list contains all of a given set of events.
*
* @param[in] aEvents The events set to check (must be collection of `Event` constants combined using `|`).
*
* @returns TRUE if the list contains all of the @p aEvents set, FALSE otherwise.
*
*/
bool ContainsAll(Flags aEvents) const { return (mEventFlags & aEvents) == aEvents; }
/**
* This method adds a given event to the `Events` list.
*
* @param[in] aEvent The event to add.
*
*/
void Add(Event aEvent) { mEventFlags |= aEvent; }
/**
* This method indicates whether the `Events` list is empty.
*
* @returns TRUE if the list is empty, FALSE otherwise.
*
*/
bool IsEmpty(void) const { return (mEventFlags == 0); }
/**
* This method gets the `Events` list as bit-field `Flags` value.
*
* @returns The list as bit-field `Flags` value.
*
*/
Flags GetAsFlags(void) const { return mEventFlags; }
private:
Flags mEventFlags;
};
/**
* This class implements the OpenThread Notifier.
*
@@ -88,13 +210,13 @@ public:
public:
/**
* This type defines the function pointer which is called to notify of state or configuration changes.
* This type defines the function pointer which is called to notify of events (state/configuration changes)..
*
* @param[in] aCallback A reference to callback instance.
* @param[in] aFlags A bit-field indicating specific state or configuration that has changed.
* @param[in] aEvents The list of events.
*
*/
typedef void (*Handler)(Callback &aCallback, otChangedFlags aFlags);
typedef void (*Handler)(Callback &aCallback, Events aEvents);
/**
* This constructor initializes a `Callback` instance and registers it with `Notifier`.
@@ -107,7 +229,7 @@ public:
Callback(Instance &aInstance, Handler aHandler, void *aOwner);
private:
void Invoke(otChangedFlags aFlags) { mHandler(*this, aFlags); }
void Invoke(const Events aEvents) { mHandler(*this, aEvents); }
Handler mHandler;
Callback *mNext;
@@ -144,70 +266,69 @@ public:
void RemoveCallback(otStateChangedCallback aCallback, void *aContext);
/**
* This method schedules signaling of changed flags.
* This method schedules signaling of an event.
*
* @param[in] aFlags A bit-field indicating what configuration or state has changed.
* @param[in] aEvent The event to signal.
*
*/
void Signal(otChangedFlags aFlags);
void Signal(Event aEvent);
/**
* This method schedules signaling of changed flags only if the set of flags has not been signaled before (first
* time signal).
* This method schedules signaling of am event only if the event has not been signaled before (first time signal).
*
* @param[in] aFlags A bit-field indicating what configuration or state has changed.
* @param[in] aEvent The event to signal.
*
*/
void SignalIfFirst(otChangedFlags aFlags);
void SignalIfFirst(Event aFlags);
/**
* This method indicates whether or not a changed callback is pending.
* This method indicates whether or not an event signal callback is pending/scheduled.
*
* @returns TRUE if a state changed callback is pending, FALSE otherwise.
* @returns TRUE if a callback is pending, FALSE otherwise.
*
*/
bool IsPending(void) const { return (mFlagsToSignal != 0); }
bool IsPending(void) const { return !mEventsToSignal.IsEmpty(); }
/**
* This method indicates whether or not a changed notification for a given set of flags has been signaled before.
* This method indicates whether or not an event has been signaled before.
*
* @param[in] aFlags A bit-field containing the flag-bits to check.
* @param[in] aEvent The event to check.
*
* @retval TRUE All flag bits in @p aFlags have been signaled before.
* @retval FALSE At least one flag bit in @p aFlags has not been signaled before.
* @retval TRUE The event @p aEvent have been signaled before.
* @retval FALSE The event @p aEvent has not been signaled before.
*
*/
bool HasSignaled(otChangedFlags aFlags) const { return (mSignaledFlags & aFlags) == aFlags; }
bool HasSignaled(Event aEvent) const { return mSignaledEvents.Contains(aEvent); }
/**
* This template method updates a variable of a type `Type` with a new value and signals the given changed flags.
* This template method updates a variable of a type `Type` with a new value and signals the given event.
*
* If the variable is already set to the same value, this method returns `OT_ERROR_ALREADY` and the changed flags
* is signaled using `SignalIfFirst()` (i.e. signal is scheduled only if the flag has not been signaled before).
* If the variable is already set to the same value, this method returns `OT_ERROR_ALREADY` and the event is
* signaled using `SignalIfFirst()` (i.e., signal is scheduled only if event has not been signaled before).
*
* The template `Type` should support comparison operator `==` and assignment operator `=`.
*
* @param[inout] aVariable A reference to the variable to update.
* @param[in] aNewValue The new value.
* @param[in] aFlags The changed flags to signal.
* @param[in] aEvent The event to signal.
*
* @retval OT_ERROR_NONE The variable was update successfully and @p aFlags was signaled.
* @retval OT_ERROR_NONE The variable was update successfully and @p aEvent was signaled.
* @retval OT_ERROR_ALREADY The variable was already set to the same value.
*
*/
template <typename Type> otError Update(Type &aVariable, const Type &aNewValue, otChangedFlags aFlags)
template <typename Type> otError Update(Type &aVariable, const Type &aNewValue, Event aEvent)
{
otError error = OT_ERROR_NONE;
if (aVariable == aNewValue)
{
SignalIfFirst(aFlags);
SignalIfFirst(aEvent);
error = OT_ERROR_ALREADY;
}
else
{
aVariable = aNewValue;
Signal(aFlags);
Signal(aEvent);
}
return error;
@@ -229,14 +350,14 @@ private:
};
void RegisterCallback(Callback &aCallback);
static void HandleStateChanged(Tasklet &aTasklet);
void HandleStateChanged(void);
static void EmitEvents(Tasklet &aTasklet);
void EmitEvents(void);
void LogChangedFlags(otChangedFlags aFlags) const;
const char *FlagToString(otChangedFlags aFlag) const;
void LogEvents(Events aEvents) const;
const char *EventToString(Event aEvent) const;
otChangedFlags mFlagsToSignal;
otChangedFlags mSignaledFlags;
Events mEventsToSignal;
Events mSignaledEvents;
Tasklet mTask;
LinkedList<Callback> mCallbacks;
ExternalCallback mExternalCallbacks[kMaxExternalHandlers];
+6 -6
View File
@@ -415,7 +415,7 @@ otError Mac::SetPanChannel(uint8_t aChannel)
VerifyOrExit(mSupportedChannelMask.ContainsChannel(aChannel), error = OT_ERROR_INVALID_ARGS);
SuccessOrExit(Get<Notifier>().Update(mPanChannel, aChannel, OT_CHANGED_THREAD_CHANNEL));
SuccessOrExit(Get<Notifier>().Update(mPanChannel, aChannel, kEventThreadChannelChanged));
mCcaSuccessRateTracker.Reset();
@@ -459,7 +459,7 @@ void Mac::SetSupportedChannelMask(const ChannelMask &aMask)
ChannelMask newMask = aMask;
newMask.Intersect(ChannelMask(Get<Radio>().GetSupportedChannelMask()));
IgnoreError(Get<Notifier>().Update(mSupportedChannelMask, newMask, OT_CHANGED_SUPPORTED_CHANNEL_MASK));
IgnoreError(Get<Notifier>().Update(mSupportedChannelMask, newMask, kEventSupportedChannelMaskChanged));
}
otError Mac::SetNetworkName(const char *aNameString)
@@ -483,13 +483,13 @@ otError Mac::SetNetworkName(const NameData &aNameData)
if (error == OT_ERROR_ALREADY)
{
Get<Notifier>().SignalIfFirst(OT_CHANGED_THREAD_NETWORK_NAME);
Get<Notifier>().SignalIfFirst(kEventThreadNetworkNameChanged);
error = OT_ERROR_NONE;
ExitNow();
}
SuccessOrExit(error);
Get<Notifier>().Signal(OT_CHANGED_THREAD_NETWORK_NAME);
Get<Notifier>().Signal(kEventThreadNetworkNameChanged);
exit:
return error;
@@ -526,7 +526,7 @@ otError Mac::SetDomainName(const NameData &aNameData)
void Mac::SetPanId(PanId aPanId)
{
SuccessOrExit(Get<Notifier>().Update(mPanId, aPanId, OT_CHANGED_THREAD_PANID));
SuccessOrExit(Get<Notifier>().Update(mPanId, aPanId, kEventThreadPanIdChanged));
mSubMac.SetPanId(mPanId);
exit:
@@ -535,7 +535,7 @@ exit:
void Mac::SetExtendedPanId(const ExtendedPanId &aExtendedPanId)
{
IgnoreError(Get<Notifier>().Update(mExtendedPanId, aExtendedPanId, OT_CHANGED_THREAD_EXT_PANID));
IgnoreError(Get<Notifier>().Update(mExtendedPanId, aExtendedPanId, kEventThreadExtPanIdChanged));
}
void Mac::RequestDirectFrameTransmission(void)
+5 -5
View File
@@ -351,7 +351,7 @@ BorderAgent::BorderAgent(Instance &aInstance)
, mUdpReceiver(BorderAgent::HandleUdpReceive, this)
, mTimer(aInstance, HandleTimeout, this)
, mState(OT_BORDER_AGENT_STATE_STOPPED)
, mNotifierCallback(aInstance, &BorderAgent::HandleStateChanged, this)
, mNotifierCallback(aInstance, &BorderAgent::HandleNotifierEvents, this)
{
mCommissionerAloc.Clear();
mCommissionerAloc.mPrefixLength = 64;
@@ -361,14 +361,14 @@ BorderAgent::BorderAgent(Instance &aInstance)
mCommissionerAloc.mScopeOverrideValid = true;
}
void BorderAgent::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void BorderAgent::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<BorderAgent>().HandleStateChanged(aFlags);
aCallback.GetOwner<BorderAgent>().HandleNotifierEvents(aEvents);
}
void BorderAgent::HandleStateChanged(otChangedFlags aFlags)
void BorderAgent::HandleNotifierEvents(Events aEvents)
{
VerifyOrExit((aFlags & (OT_CHANGED_THREAD_ROLE | OT_CHANGED_COMMISSIONER_STATE)) != 0, OT_NOOP);
VerifyOrExit(aEvents.ContainsAny(kEventThreadRoleChanged | kEventCommissionerStateChanged), OT_NOOP);
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE && OPENTHREAD_FTD
VerifyOrExit(Get<MeshCoP::Commissioner>().IsDisabled(), OT_NOOP);
+2 -2
View File
@@ -93,8 +93,8 @@ public:
void ApplyMeshLocalPrefix(void);
private:
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
static void HandleConnected(bool aConnected, void *aContext)
{
+1 -1
View File
@@ -92,7 +92,7 @@ void Commissioner::SetState(otCommissionerState aState)
otCommissionerState oldState = mState;
OT_UNUSED_VARIABLE(oldState);
SuccessOrExit(Get<Notifier>().Update(mState, aState, OT_CHANGED_COMMISSIONER_STATE));
SuccessOrExit(Get<Notifier>().Update(mState, aState, kEventCommissionerStateChanged));
otLogInfoMeshCoP("CommissionerState: %s -> %s", StateToString(oldState), StateToString(aState));
+1 -1
View File
@@ -80,7 +80,7 @@ void Joiner::SetState(otJoinerState aState)
otJoinerState oldState = mState;
OT_UNUSED_VARIABLE(oldState);
SuccessOrExit(Get<Notifier>().Update(mState, aState, OT_CHANGED_JOINER_STATE));
SuccessOrExit(Get<Notifier>().Update(mState, aState, kEventJoinerStateChanged));
otLogInfoMeshCoP("JoinerState: %s -> %s", JoinerStateToString(oldState), JoinerStateToString(aState));
exit:
+13 -6
View File
@@ -58,7 +58,7 @@ JoinerRouter::JoinerRouter(Instance &aInstance)
, mSocket(aInstance.Get<Ip6::Udp>())
, mRelayTransmit(OT_URI_PATH_RELAY_TX, &JoinerRouter::HandleRelayTransmit, this)
, mTimer(aInstance, JoinerRouter::HandleTimer, this)
, mNotifierCallback(aInstance, &JoinerRouter::HandleStateChanged, this)
, mNotifierCallback(aInstance, &JoinerRouter::HandleNotifierEvents, this)
, mJoinerUdpPort(0)
, mIsJoinerPortConfigured(false)
, mExpectJoinEntRsp(false)
@@ -66,15 +66,22 @@ JoinerRouter::JoinerRouter(Instance &aInstance)
Get<Coap::Coap>().AddResource(mRelayTransmit);
}
void JoinerRouter::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void JoinerRouter::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<JoinerRouter>().HandleStateChanged(aFlags);
aCallback.GetOwner<JoinerRouter>().HandleNotifierEvents(aEvents);
}
void JoinerRouter::HandleStateChanged(otChangedFlags aFlags)
void JoinerRouter::HandleNotifierEvents(Events aEvents)
{
if (aEvents.Contains(kEventThreadNetdataChanged))
{
Start();
}
}
void JoinerRouter::Start(void)
{
VerifyOrExit(Get<Mle::MleRouter>().IsFullThreadDevice(), OT_NOOP);
VerifyOrExit(aFlags & OT_CHANGED_THREAD_NETDATA, OT_NOOP);
if (Get<NetworkData::Leader>().IsJoiningEnabled())
{
@@ -123,7 +130,7 @@ void JoinerRouter::SetJoinerUdpPort(uint16_t aJoinerUdpPort)
{
mJoinerUdpPort = aJoinerUdpPort;
mIsJoinerPortConfigured = true;
HandleStateChanged(OT_CHANGED_THREAD_NETDATA);
Start();
}
void JoinerRouter::HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo)
+3 -2
View File
@@ -94,8 +94,8 @@ private:
Kek mKek; // KEK used by MAC layer to encode this message.
};
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
static void HandleUdpReceive(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
void HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
@@ -112,6 +112,7 @@ private:
static void HandleTimer(Timer &aTimer);
void HandleTimer(void);
void Start(void);
void DelaySendingJoinerEntrust(const Ip6::MessageInfo &aMessageInfo, const Kek &aKek);
void SendDelayedJoinerEntrust(void);
otError SendJoinerEntrust(const Ip6::MessageInfo &aMessageInfo);
+12 -12
View File
@@ -140,7 +140,7 @@ void Netif::SubscribeAllNodesMulticast(void)
tail->SetNext(&linkLocalAllNodesAddress);
}
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_SUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastSubscribed);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
@@ -187,7 +187,7 @@ void Netif::UnsubscribeAllNodesMulticast(void)
prev->SetNext(NULL);
}
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastUnsubscribed);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
@@ -244,7 +244,7 @@ void Netif::SubscribeAllRoutersMulticast(void)
prev->SetNext(&linkLocalAllRoutersAddress);
}
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_SUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastSubscribed);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
@@ -287,7 +287,7 @@ void Netif::UnsubscribeAllRoutersMulticast(void)
prev->SetNext(&linkLocalAllNodesAddress);
}
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastUnsubscribed);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
@@ -305,7 +305,7 @@ void Netif::SubscribeMulticast(NetifMulticastAddress &aAddress)
{
SuccessOrExit(mMulticastAddresses.Add(aAddress));
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_SUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastSubscribed);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
mAddressCallback(&aAddress.mAddress, kMulticastPrefixLength, /* IsAdded */ true, mAddressCallbackContext);
@@ -318,7 +318,7 @@ void Netif::UnsubscribeMulticast(const NetifMulticastAddress &aAddress)
{
SuccessOrExit(mMulticastAddresses.Remove(aAddress));
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastUnsubscribed);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
mAddressCallback(&aAddress.mAddress, kMulticastPrefixLength, /* IsAdded */ false, mAddressCallbackContext);
@@ -374,7 +374,7 @@ otError Netif::SubscribeExternalMulticast(const Address &aAddress)
{
entry->mAddress = aAddress;
mMulticastAddresses.Push(*entry);
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_SUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastSubscribed);
ExitNow();
}
}
@@ -409,7 +409,7 @@ otError Netif::UnsubscribeExternalMulticast(const Address &aAddress)
entry->MarkAsNotInUse();
Get<Notifier>().Signal(OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED);
Get<Notifier>().Signal(kEventIp6MulticastUnsubscribed);
exit:
return error;
@@ -437,7 +437,7 @@ void Netif::AddUnicastAddress(NetifUnicastAddress &aAddress)
{
SuccessOrExit(mUnicastAddresses.Add(aAddress));
Get<Notifier>().Signal(aAddress.mRloc ? OT_CHANGED_THREAD_RLOC_ADDED : OT_CHANGED_IP6_ADDRESS_ADDED);
Get<Notifier>().Signal(aAddress.mRloc ? kEventThreadRlocAdded : kEventIp6AddressAdded);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
mAddressCallback(&aAddress.mAddress, aAddress.mPrefixLength, /* IsAdded */ true, mAddressCallbackContext);
@@ -450,7 +450,7 @@ void Netif::RemoveUnicastAddress(const NetifUnicastAddress &aAddress)
{
SuccessOrExit(mUnicastAddresses.Remove(aAddress));
Get<Notifier>().Signal(aAddress.mRloc ? OT_CHANGED_THREAD_RLOC_REMOVED : OT_CHANGED_IP6_ADDRESS_REMOVED);
Get<Notifier>().Signal(aAddress.mRloc ? kEventThreadRlocRemoved : kEventIp6AddressRemoved);
VerifyOrExit(mAddressCallback != NULL, OT_NOOP);
mAddressCallback(&aAddress.mAddress, aAddress.mPrefixLength, /* IsAdded */ false, mAddressCallbackContext);
@@ -486,7 +486,7 @@ otError Netif::AddExternalUnicastAddress(const NetifUnicastAddress &aAddress)
{
*entry = aAddress;
mUnicastAddresses.Push(*entry);
Get<Notifier>().Signal(OT_CHANGED_IP6_ADDRESS_ADDED);
Get<Notifier>().Signal(kEventIp6AddressAdded);
ExitNow();
}
}
@@ -521,7 +521,7 @@ otError Netif::RemoveExternalUnicastAddress(const Address &aAddress)
entry->MarkAsNotInUse();
Get<Notifier>().Signal(OT_CHANGED_IP6_ADDRESS_REMOVED);
Get<Notifier>().Signal(kEventIp6AddressRemoved);
exit:
return error;
+5 -5
View File
@@ -112,7 +112,7 @@ exit:
AnnounceSender::AnnounceSender(Instance &aInstance)
: AnnounceSenderBase(aInstance, AnnounceSender::HandleTimer)
, mNotifierCallback(aInstance, HandleStateChanged, this)
, mNotifierCallback(aInstance, HandleNotifierEvents, this)
{
}
@@ -175,14 +175,14 @@ void AnnounceSender::Stop(void)
otLogInfoMle("Stopping periodic MLE Announcements tx");
}
void AnnounceSender::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void AnnounceSender::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<AnnounceSender>().HandleStateChanged(aFlags);
aCallback.GetOwner<AnnounceSender>().HandleNotifierEvents(aEvents);
}
void AnnounceSender::HandleStateChanged(otChangedFlags aFlags)
void AnnounceSender::HandleNotifierEvents(Events aEvents)
{
if ((aFlags & OT_CHANGED_THREAD_ROLE) != 0)
if (aEvents.Contains(kEventThreadRoleChanged))
{
CheckState();
}
+2 -2
View File
@@ -157,8 +157,8 @@ private:
void CheckState(void);
void Stop(void);
static void HandleTimer(Timer &aTimer);
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
Notifier::Callback mNotifierCallback;
};
+5 -5
View File
@@ -56,7 +56,7 @@ EnergyScanServer::EnergyScanServer(Instance &aInstance)
, mActive(false)
, mScanResultsLength(0)
, mTimer(aInstance, EnergyScanServer::HandleTimer, this)
, mNotifierCallback(aInstance, &EnergyScanServer::HandleStateChanged, this)
, mNotifierCallback(aInstance, &EnergyScanServer::HandleNotifierEvents, this)
, mEnergyScan(OT_URI_PATH_ENERGY_SCAN, &EnergyScanServer::HandleRequest, this)
{
Get<Coap::Coap>().AddResource(mEnergyScan);
@@ -212,14 +212,14 @@ exit:
mActive = false;
}
void EnergyScanServer::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void EnergyScanServer::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<EnergyScanServer>().HandleStateChanged(aFlags);
aCallback.GetOwner<EnergyScanServer>().HandleNotifierEvents(aEvents);
}
void EnergyScanServer::HandleStateChanged(otChangedFlags aFlags)
void EnergyScanServer::HandleNotifierEvents(Events aEvents)
{
if ((aFlags & OT_CHANGED_THREAD_NETDATA) != 0 && !mActive &&
if (aEvents.Contains(kEventThreadNetdataChanged) && !mActive &&
Get<NetworkData::Leader>().GetCommissioningData() == NULL)
{
mActive = false;
+2 -2
View File
@@ -75,8 +75,8 @@ private:
static void HandleTimer(Timer &aTimer);
void HandleTimer(void);
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
void SendReport(void);
+6 -7
View File
@@ -99,7 +99,7 @@ void KeyManager::Stop(void)
#if OPENTHREAD_MTD || OPENTHREAD_FTD
void KeyManager::SetPskc(const Pskc &aPskc)
{
IgnoreError(Get<Notifier>().Update(mPskc, aPskc, OT_CHANGED_PSKC));
IgnoreError(Get<Notifier>().Update(mPskc, aPskc, kEventPskcChanged));
mIsPskcSet = true;
}
#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
@@ -109,9 +109,8 @@ otError KeyManager::SetMasterKey(const MasterKey &aKey)
otError error = OT_ERROR_NONE;
Router *parent;
SuccessOrExit(
Get<Notifier>().Update(mMasterKey, aKey, OT_CHANGED_MASTER_KEY | OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER));
SuccessOrExit(Get<Notifier>().Update(mMasterKey, aKey, kEventMasterKeyChanged));
Get<Notifier>().Signal(kEventThreadKeySeqCounterChanged);
mKeySequence = 0;
UpdateKeyMaterial();
@@ -175,7 +174,7 @@ void KeyManager::UpdateKeyMaterial(void)
void KeyManager::SetCurrentKeySequence(uint32_t aKeySequence)
{
VerifyOrExit(aKeySequence != mKeySequence, Get<Notifier>().SignalIfFirst(OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER));
VerifyOrExit(aKeySequence != mKeySequence, Get<Notifier>().SignalIfFirst(kEventThreadKeySeqCounterChanged));
if ((aKeySequence == (mKeySequence + 1)) && mKeyRotationTimer.IsRunning())
{
@@ -195,7 +194,7 @@ void KeyManager::SetCurrentKeySequence(uint32_t aKeySequence)
SetMacFrameCounter(0);
mMleFrameCounter = 0;
Get<Notifier>().Signal(OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER);
Get<Notifier>().Signal(kEventThreadKeySeqCounterChanged);
exit:
return;
@@ -265,7 +264,7 @@ exit:
void KeyManager::SetSecurityPolicyFlags(uint8_t aSecurityPolicyFlags)
{
IgnoreError(Get<Notifier>().Update(mSecurityPolicyFlags, aSecurityPolicyFlags, OT_CHANGED_SECURITY_POLICY));
IgnoreError(Get<Notifier>().Update(mSecurityPolicyFlags, aSecurityPolicyFlags, kEventSecurityPolicyChanged));
}
void KeyManager::StartKeyRotationTimer(void)
+21 -20
View File
@@ -108,7 +108,7 @@ Mle::Mle(Instance &aInstance)
, mAlternateChannel(0)
, mAlternatePanId(Mac::kPanIdBroadcast)
, mAlternateTimestamp(0)
, mNotifierCallback(aInstance, &Mle::HandleStateChanged, this)
, mNotifierCallback(aInstance, &Mle::HandleNotifierEvents, this)
, mParentResponseCb(NULL)
, mParentResponseCbContext(NULL)
{
@@ -314,7 +314,7 @@ void Mle::SetRole(DeviceRole aRole)
{
DeviceRole oldRole = mRole;
SuccessOrExit(Get<Notifier>().Update(mRole, aRole, OT_CHANGED_THREAD_ROLE));
SuccessOrExit(Get<Notifier>().Update(mRole, aRole, kEventThreadRoleChanged));
otLogNoteMle("Role %s -> %s", RoleToString(oldRole), RoleToString(mRole));
@@ -878,12 +878,13 @@ void Mle::UpdateLinkLocalAddress(void)
mLinkLocal64.GetAddress().SetIid(Get<Mac::Mac>().GetExtAddress());
Get<ThreadNetif>().AddUnicastAddress(mLinkLocal64);
Get<Notifier>().Signal(OT_CHANGED_THREAD_LL_ADDR);
Get<Notifier>().Signal(kEventThreadLinkLocalAddrChanged);
}
void Mle::SetMeshLocalPrefix(const MeshLocalPrefix &aMeshLocalPrefix)
{
VerifyOrExit(GetMeshLocalPrefix() != aMeshLocalPrefix, Get<Notifier>().SignalIfFirst(OT_CHANGED_THREAD_ML_ADDR));
VerifyOrExit(GetMeshLocalPrefix() != aMeshLocalPrefix,
Get<Notifier>().SignalIfFirst(kEventThreadMeshLocalAddrChanged));
if (Get<ThreadNetif>().IsUp())
{
@@ -964,7 +965,7 @@ void Mle::ApplyMeshLocalPrefix(void)
exit:
// Changing the prefix also causes the mesh local address to be different.
Get<Notifier>().Signal(OT_CHANGED_THREAD_ML_ADDR);
Get<Notifier>().Signal(kEventThreadMeshLocalAddrChanged);
}
uint16_t Mle::GetRloc16(void) const
@@ -1010,12 +1011,12 @@ void Mle::SetLeaderData(uint32_t aPartitionId, uint8_t aWeighting, uint8_t aLead
#if OPENTHREAD_FTD
Get<MleRouter>().HandlePartitionChange();
#endif
Get<Notifier>().Signal(OT_CHANGED_THREAD_PARTITION_ID);
Get<Notifier>().Signal(kEventThreadPartitionIdChanged);
mCounters.mPartitionIdChanges++;
}
else
{
Get<Notifier>().SignalIfFirst(OT_CHANGED_THREAD_PARTITION_ID);
Get<Notifier>().SignalIfFirst(kEventThreadPartitionIdChanged);
}
mLeaderData.SetPartitionId(aPartitionId);
@@ -1485,16 +1486,16 @@ exit:
return error;
}
void Mle::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void Mle::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<Mle>().HandleStateChanged(aFlags);
aCallback.GetOwner<Mle>().HandleNotifierEvents(aEvents);
}
void Mle::HandleStateChanged(otChangedFlags aFlags)
void Mle::HandleNotifierEvents(Events aEvents)
{
VerifyOrExit(!IsDisabled(), OT_NOOP);
if (aFlags & OT_CHANGED_THREAD_ROLE)
if (aEvents.Contains(kEventThreadRoleChanged))
{
if (IsChild() && !IsFullThreadDevice() && mAddressRegistrationMode == kAppendMeshLocalOnly)
{
@@ -1509,7 +1510,7 @@ void Mle::HandleStateChanged(otChangedFlags aFlags)
}
}
if ((aFlags & (OT_CHANGED_IP6_ADDRESS_ADDED | OT_CHANGED_IP6_ADDRESS_REMOVED)) != 0)
if (aEvents.ContainsAny(kEventIp6AddressAdded | kEventIp6AddressRemoved))
{
if (!Get<ThreadNetif>().IsUnicastAddress(mMeshLocal64.GetAddress()))
{
@@ -1518,7 +1519,7 @@ void Mle::HandleStateChanged(otChangedFlags aFlags)
OT_IP6_ADDRESS_SIZE - OT_IP6_PREFIX_SIZE));
Get<ThreadNetif>().AddUnicastAddress(mMeshLocal64);
Get<Notifier>().Signal(OT_CHANGED_THREAD_ML_ADDR);
Get<Notifier>().Signal(kEventThreadMeshLocalAddrChanged);
}
if (IsChild() && !IsFullThreadDevice())
@@ -1528,7 +1529,7 @@ void Mle::HandleStateChanged(otChangedFlags aFlags)
}
}
if ((aFlags & (OT_CHANGED_IP6_MULTICAST_SUBSCRIBED | OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED)) != 0)
if (aEvents.ContainsAny(kEventIp6MulticastSubscribed | kEventIp6MulticastUnsubscribed))
{
// When multicast subscription changes, SED always notifies its parent as it depends on its
// parent for indirect transmission. Since Thread 1.2, MED MAY also notify its parent of 1.2
@@ -1546,7 +1547,7 @@ void Mle::HandleStateChanged(otChangedFlags aFlags)
}
}
if ((aFlags & OT_CHANGED_THREAD_NETDATA) != 0)
if (aEvents.Contains(kEventThreadNetdataChanged))
{
#if OPENTHREAD_FTD
if (IsFullThreadDevice())
@@ -1556,7 +1557,7 @@ void Mle::HandleStateChanged(otChangedFlags aFlags)
else
#endif
{
if ((aFlags & OT_CHANGED_THREAD_ROLE) == 0)
if (!aEvents.Contains(kEventThreadRoleChanged))
{
mChildUpdateRequestState = kChildUpdateRequestPending;
ScheduleMessageTransmissionTimer();
@@ -1579,18 +1580,18 @@ void Mle::HandleStateChanged(otChangedFlags aFlags)
#endif // OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE
}
if (aFlags & (OT_CHANGED_THREAD_ROLE | OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER))
if (aEvents.ContainsAny(kEventThreadRoleChanged | kEventThreadKeySeqCounterChanged))
{
// Store the settings on a key seq change, or when role changes and device
// is attached (i.e., skip `Store()` on role change to detached).
if ((aFlags & OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER) || IsAttached())
if (aEvents.Contains(kEventThreadKeySeqCounterChanged) || IsAttached())
{
IgnoreError(Store());
}
}
if (aFlags & OT_CHANGED_SECURITY_POLICY)
if (aEvents.Contains(kEventSecurityPolicyChanged))
{
Get<Ip6::Filter>().AllowNativeCommissioner(Get<KeyManager>().IsNativeCommissioningAllowed());
}
@@ -2219,7 +2220,7 @@ void Mle::HandleMessageTransmissionTimer(void)
{
// The `mMessageTransmissionTimer` is used for:
//
// - Delaying OT_CHANGED notification triggered "Child Update Request" transmission (to allow aggregation),
// - Delaying kEvent notification triggered "Child Update Request" transmission (to allow aggregation),
// - Retransmission of "Child Update Request",
// - Retransmission of "Data Request" on a child,
// - Sending periodic keep-alive "Child Update Request" messages on a non-sleepy (rx-on) child.
+2 -2
View File
@@ -1696,8 +1696,8 @@ private:
TimeMilli mSendTime; // Time when the message shall be sent.
};
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
static void HandleAttachTimer(Timer &aTimer);
void HandleAttachTimer(void);
static void HandleDelayedResponseTimer(Timer &aTimer);
+2 -2
View File
@@ -4759,11 +4759,11 @@ void MleRouter::Signal(otNeighborTableEvent aEvent, Neighbor &aNeighbor)
switch (aEvent)
{
case OT_NEIGHBOR_TABLE_EVENT_CHILD_ADDED:
Get<Notifier>().Signal(OT_CHANGED_THREAD_CHILD_ADDED);
Get<Notifier>().Signal(kEventThreadChildAdded);
break;
case OT_NEIGHBOR_TABLE_EVENT_CHILD_REMOVED:
Get<Notifier>().Signal(OT_CHANGED_THREAD_CHILD_REMOVED);
Get<Notifier>().Signal(kEventThreadChildRemoved);
break;
default:
+3 -3
View File
@@ -64,7 +64,7 @@ void LeaderBase::Reset(void)
mVersion = Random::NonCrypto::GetUint8();
mStableVersion = Random::NonCrypto::GetUint8();
mLength = 0;
Get<ot::Notifier>().Signal(OT_CHANGED_THREAD_NETDATA);
Get<ot::Notifier>().Signal(kEventThreadNetdataChanged);
}
otError LeaderBase::GetServiceId(uint32_t aEnterpriseNumber,
@@ -444,7 +444,7 @@ otError LeaderBase::SetNetworkData(uint8_t aVersion,
otDumpDebgNetData("set network data", mTlvs, mLength);
Get<ot::Notifier>().Signal(OT_CHANGED_THREAD_NETDATA);
Get<ot::Notifier>().Signal(kEventThreadNetdataChanged);
exit:
return error;
@@ -470,7 +470,7 @@ otError LeaderBase::SetCommissioningData(const uint8_t *aValue, uint8_t aValueLe
}
mVersion++;
Get<ot::Notifier>().Signal(OT_CHANGED_THREAD_NETDATA);
Get<ot::Notifier>().Signal(kEventThreadNetdataChanged);
exit:
return error;
+1 -1
View File
@@ -120,7 +120,7 @@ void Leader::IncrementVersions(bool aIncludeStable)
}
mVersion++;
Get<ot::Notifier>().Signal(OT_CHANGED_THREAD_NETDATA);
Get<ot::Notifier>().Signal(kEventThreadNetdataChanged);
}
void Leader::RemoveBorderRouter(uint16_t aRloc16, MatchMode aMatchMode)
+6 -6
View File
@@ -46,7 +46,7 @@ namespace NetworkData {
Notifier::Notifier(Instance &aInstance)
: InstanceLocator(aInstance)
, mNotifierCallback(aInstance, &Notifier::HandleStateChanged, this)
, mNotifierCallback(aInstance, &Notifier::HandleNotifierEvents, this)
, mTimer(aInstance, Notifier::HandleTimer, this)
, mNextDelay(0)
, mWaitingForResponse(false)
@@ -101,19 +101,19 @@ exit:
}
}
void Notifier::HandleStateChanged(ot::Notifier::Callback &aCallback, otChangedFlags aFlags)
void Notifier::HandleNotifierEvents(ot::Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<Notifier>().HandleStateChanged(aFlags);
aCallback.GetOwner<Notifier>().HandleNotifierEvents(aEvents);
}
void Notifier::HandleStateChanged(otChangedFlags aFlags)
void Notifier::HandleNotifierEvents(Events aEvents)
{
if (aFlags & (OT_CHANGED_THREAD_ROLE | OT_CHANGED_THREAD_CHILD_REMOVED))
if (aEvents.ContainsAny(kEventThreadRoleChanged | kEventThreadChildRemoved))
{
mNextDelay = 0;
}
if (aFlags & (OT_CHANGED_THREAD_NETDATA | OT_CHANGED_THREAD_ROLE | OT_CHANGED_THREAD_CHILD_REMOVED))
if (aEvents.ContainsAny(kEventThreadNetdataChanged | kEventThreadRoleChanged | kEventThreadChildRemoved))
{
SynchronizeServerData();
}
+2 -2
View File
@@ -74,8 +74,8 @@ private:
kDelaySynchronizeServerData = 300000, ///< milliseconds
};
static void HandleStateChanged(ot::Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(ot::Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
static void HandleTimer(Timer &aTimer);
void HandleTimer(void);
+2 -2
View File
@@ -146,7 +146,7 @@ void ThreadNetif::Up(void)
#if OPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE
IgnoreError(Get<Sntp::Client>().Start());
#endif
Get<Notifier>().Signal(OT_CHANGED_THREAD_NETIF_STATE);
Get<Notifier>().Signal(kEventThreadNetifStateChanged);
exit:
return;
@@ -177,7 +177,7 @@ void ThreadNetif::Down(void)
#if OPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE
IgnoreError(Get<Utils::ChannelMonitor>().Stop());
#endif
Get<Notifier>().Signal(OT_CHANGED_THREAD_NETIF_STATE);
Get<Notifier>().Signal(kEventThreadNetifStateChanged);
exit:
return;
+6 -6
View File
@@ -62,7 +62,7 @@ TimeSync::TimeSync(Instance &aInstance)
, mNetworkTimeOffset(0)
, mTimeSyncCallback(NULL)
, mTimeSyncCallbackContext(NULL)
, mNotifierCallback(aInstance, &TimeSync::HandleStateChanged, this)
, mNotifierCallback(aInstance, &TimeSync::HandleNotifierEvents, this)
, mTimer(aInstance, HandleTimeout, this)
, mCurrentStatus(OT_NETWORK_TIME_UNSYNCHRONIZED)
{
@@ -173,16 +173,16 @@ exit:
}
#endif // OPENTHREAD_FTD
void TimeSync::HandleStateChanged(otChangedFlags aFlags)
void TimeSync::HandleNotifierEvents(Events aEvents)
{
bool stateChanged = false;
if ((aFlags & OT_CHANGED_THREAD_ROLE) != 0)
if (aEvents.Contains(kEventThreadRoleChanged))
{
stateChanged = true;
}
if ((aFlags & OT_CHANGED_THREAD_PARTITION_ID) != 0 && !Get<Mle::MleRouter>().IsLeader())
if (aEvents.Contains(kEventThreadPartitionIdChanged) && !Get<Mle::MleRouter>().IsLeader())
{
// Partition has changed. Accept any network time currently being seeded on the new partition
// and don't attempt to forward the currently held network time from the previous partition.
@@ -209,9 +209,9 @@ void TimeSync::HandleTimeout(void)
CheckAndHandleChanges(false);
}
void TimeSync::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void TimeSync::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<TimeSync>().HandleStateChanged(aFlags);
aCallback.GetOwner<TimeSync>().HandleNotifierEvents(aEvents);
}
void TimeSync::HandleTimeout(Timer &aTimer)
+2 -2
View File
@@ -157,7 +157,7 @@ public:
* @param[in] aFlags Flags that denote the state change events.
*
*/
void HandleStateChanged(otChangedFlags aFlags);
void HandleNotifierEvents(Events aEvents);
/**
* Callback to be called when timer expires.
@@ -173,7 +173,7 @@ private:
* @param[in] aFlags Flags that denote the state change events.
*
*/
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
/**
* Callback to be called when timer expires.
+6 -6
View File
@@ -51,7 +51,7 @@ ChannelManager::ChannelManager(Instance &aInstance)
, mSupportedChannelMask(0)
, mFavoredChannelMask(0)
, mActiveTimestamp(0)
, mNotifierCallback(aInstance, &ChannelManager::HandleStateChanged, this)
, mNotifierCallback(aInstance, &ChannelManager::HandleNotifierEvents, this)
, mDelay(kMinimumDelay)
, mChannel(0)
, mState(kStateIdle)
@@ -77,7 +77,7 @@ void ChannelManager::RequestChannelChange(uint8_t aChannel)
mTimer.Start(1 + Random::NonCrypto::GetUint32InRange(0, kRequestStartJitterInterval));
Get<Notifier>().Signal(OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL);
Get<Notifier>().Signal(kEventChannelManagerNewChannelChanged);
exit:
return;
@@ -252,14 +252,14 @@ void ChannelManager::HandleTimer(void)
}
}
void ChannelManager::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aChangedFlags)
void ChannelManager::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<ChannelManager>().HandleStateChanged(aChangedFlags);
aCallback.GetOwner<ChannelManager>().HandleNotifierEvents(aEvents);
}
void ChannelManager::HandleStateChanged(otChangedFlags aChangedFlags)
void ChannelManager::HandleNotifierEvents(Events aEvents)
{
VerifyOrExit((aChangedFlags & OT_CHANGED_THREAD_CHANNEL) != 0, OT_NOOP);
VerifyOrExit(aEvents.Contains(kEventThreadChannelChanged), OT_NOOP);
VerifyOrExit(mChannel == Get<Mac::Mac>().GetPanChannel(), OT_NOOP);
mState = kStateIdle;
+3 -3
View File
@@ -92,7 +92,7 @@ public:
*
* A subsequent call to this method will cancel an ongoing previously requested channel change.
*
* If the requested channel changes, it will trigger a `Notifier` event `OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL`.
* If the requested channel changes, it will trigger a `Notifier` event `kEventChannelManagerNewChannelChanged`.
*
* @param[in] aChannel The new channel for the Thread network.
*
@@ -272,8 +272,8 @@ private:
static void HandleTimer(Timer &aTimer);
void HandleTimer(void);
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aChangedFlags);
void HandleStateChanged(otChangedFlags aChangedFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
void PreparePendingDataset(void);
void StartAutoSelectTimer(void);
+5 -5
View File
@@ -51,7 +51,7 @@ ChildSupervisor::ChildSupervisor(Instance &aInstance)
: InstanceLocator(aInstance)
, mSupervisionInterval(kDefaultSupervisionInterval)
, mTimer(aInstance, ChildSupervisor::HandleTimer, this)
, mNotifierCallback(aInstance, &ChildSupervisor::HandleStateChanged, this)
, mNotifierCallback(aInstance, &ChildSupervisor::HandleNotifierEvents, this)
{
}
@@ -162,14 +162,14 @@ void ChildSupervisor::CheckState(void)
}
}
void ChildSupervisor::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void ChildSupervisor::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<ChildSupervisor>().HandleStateChanged(aFlags);
aCallback.GetOwner<ChildSupervisor>().HandleNotifierEvents(aEvents);
}
void ChildSupervisor::HandleStateChanged(otChangedFlags aFlags)
void ChildSupervisor::HandleNotifierEvents(Events aEvents)
{
if ((aFlags & (OT_CHANGED_THREAD_ROLE | OT_CHANGED_THREAD_CHILD_ADDED | OT_CHANGED_THREAD_CHILD_REMOVED)) != 0)
if (aEvents.ContainsAny(kEventThreadRoleChanged | kEventThreadChildAdded | kEventThreadChildRemoved))
{
CheckState();
}
+2 -2
View File
@@ -160,8 +160,8 @@ private:
void CheckState(void);
static void HandleTimer(Timer &aTimer);
void HandleTimer(void);
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
uint16_t mSupervisionInterval;
TimerMilli mTimer;
+5 -5
View File
@@ -49,7 +49,7 @@ JamDetector::JamDetector(Instance &aInstance)
: InstanceLocator(aInstance)
, mHandler(NULL)
, mContext(NULL)
, mNotifierCallback(aInstance, HandleStateChanged, this)
, mNotifierCallback(aInstance, HandleNotifierEvents, this)
, mTimer(aInstance, JamDetector::HandleTimer, this)
, mHistoryBitmap(0)
, mCurSecondStartTime(0)
@@ -271,14 +271,14 @@ void JamDetector::SetJamState(bool aNewState)
}
}
void JamDetector::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void JamDetector::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<JamDetector>().HandleStateChanged(aFlags);
aCallback.GetOwner<JamDetector>().HandleNotifierEvents(aEvents);
}
void JamDetector::HandleStateChanged(otChangedFlags aFlags)
void JamDetector::HandleNotifierEvents(Events aEvents)
{
if (aFlags & OT_CHANGED_THREAD_ROLE)
if (aEvents.Contains(kEventThreadRoleChanged))
{
CheckState();
}
+2 -2
View File
@@ -190,8 +190,8 @@ private:
void HandleTimer(void);
void UpdateHistory(bool aDidExceedThreshold);
void UpdateJamState(void);
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
Handler mHandler; // Handler/callback to inform about jamming state
void * mContext; // Context for handler/callback
+6 -6
View File
@@ -86,24 +86,24 @@ void Otns::EmitStatus(const char *aFmt, ...)
otPlatOtnsStatus(statusStr);
}
void Otns::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void Otns::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<Otns>().HandleStateChanged(aFlags);
aCallback.GetOwner<Otns>().HandleNotifierEvents(aEvents);
}
void Otns::HandleStateChanged(otChangedFlags aFlags)
void Otns::HandleNotifierEvents(Events aEvents)
{
if ((aFlags & OT_CHANGED_THREAD_ROLE) != 0)
if (aEvents.Contains(kEventThreadRoleChanged))
{
EmitStatus("role=%d", Get<Mle::Mle>().GetRole());
}
if ((aFlags & OT_CHANGED_THREAD_PARTITION_ID) != 0)
if (aEvents.Contains(kEventThreadPartitionIdChanged))
{
EmitStatus("parid=%x", Get<Mle::Mle>().GetLeaderData().GetPartitionId());
}
if ((aFlags & OT_CHANGED_JOINER_STATE) != 0)
if (aEvents.Contains(kEventJoinerStateChanged))
{
EmitStatus("joiner_state=%d", Get<MeshCoP::Joiner>().GetState());
}
+3 -3
View File
@@ -67,7 +67,7 @@ public:
*/
explicit Otns(Instance &aInstance)
: InstanceLocator(aInstance)
, mNotifierCallback(aInstance, &Otns::HandleStateChanged, this)
, mNotifierCallback(aInstance, &Otns::HandleNotifierEvents, this)
{
}
@@ -127,8 +127,8 @@ public:
private:
static void EmitStatus(const char *aFmt, ...);
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
Notifier::Callback mNotifierCallback;
};
+6 -6
View File
@@ -51,7 +51,7 @@ Slaac::Slaac(Instance &aInstance)
: InstanceLocator(aInstance)
, mEnabled(true)
, mFilter(NULL)
, mNotifierCallback(aInstance, &Slaac::HandleStateChanged, this)
, mNotifierCallback(aInstance, &Slaac::HandleNotifierEvents, this)
{
memset(mAddresses, 0, sizeof(mAddresses));
}
@@ -99,23 +99,23 @@ bool Slaac::ShouldFilter(const otIp6Prefix &aPrefix) const
return (mFilter != NULL) && mFilter(&GetInstance(), &aPrefix);
}
void Slaac::HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags)
void Slaac::HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents)
{
aCallback.GetOwner<Slaac>().HandleStateChanged(aFlags);
aCallback.GetOwner<Slaac>().HandleNotifierEvents(aEvents);
}
void Slaac::HandleStateChanged(otChangedFlags aFlags)
void Slaac::HandleNotifierEvents(Events aEvents)
{
UpdateMode mode = kModeNone;
VerifyOrExit(mEnabled, OT_NOOP);
if (aFlags & OT_CHANGED_THREAD_NETDATA)
if (aEvents.Contains(kEventThreadNetdataChanged))
{
mode |= kModeAdd | kModeRemove;
}
if (aFlags & OT_CHANGED_IP6_ADDRESS_REMOVED)
if (aEvents.Contains(kEventIp6AddressRemoved))
{
// When an IPv6 address is removed, we ensure to check if a SLAAC address
// needs to be added (replacing the removed address).
+2 -2
View File
@@ -161,8 +161,8 @@ private:
bool ShouldFilter(const otIp6Prefix &aPrefix) const;
void Update(UpdateMode aMode);
void GetIidSecretKey(IidSecretKey &aKey) const;
static void HandleStateChanged(Notifier::Callback &aCallback, otChangedFlags aFlags);
void HandleStateChanged(otChangedFlags aFlags);
static void HandleNotifierEvents(Notifier::Callback &aCallback, Events aEvents);
void HandleNotifierEvents(Events aEvents);
bool mEnabled;
otIp6SlaacPrefixFilter mFilter;