mirror of
https://github.com/espressif/openthread.git
synced 2026-08-22 02:19:52 +00:00
[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:
committed by
Jonathan Hui
parent
7ae409af65
commit
adb57991e8
@@ -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();
|
||||
|
||||
@@ -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
@@ -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];
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user