mirror of
https://github.com/espressif/openthread.git
synced 2026-08-19 08:59:52 +00:00
[mac] use ot::Instance reference in scan callback handlers (#3568)
This commit changes the scan callback handlers to use `ot::Instance` as a parameter replacing a given `void *` context.
This commit is contained in:
committed by
Jonathan Hui
parent
8a037c8aa5
commit
3ba1c79910
+10
-16
@@ -39,8 +39,8 @@
|
||||
|
||||
using namespace ot;
|
||||
|
||||
static void HandleActiveScanResult(void *aContext, Mac::Frame *aFrame);
|
||||
static void HandleEnergyScanResult(void *aContext, otEnergyScanResult *aResult);
|
||||
static void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame);
|
||||
static void HandleEnergyScanResult(Instance &aInstance, otEnergyScanResult *aResult);
|
||||
|
||||
uint8_t otLinkGetChannel(otInstance *aInstance)
|
||||
{
|
||||
@@ -367,8 +367,7 @@ otError otLinkActiveScan(otInstance * aInstance,
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
instance.RegisterActiveScanCallback(aCallback, aCallbackContext);
|
||||
return instance.GetThreadNetif().GetMac().ActiveScan(aScanChannels, aScanDuration, &HandleActiveScanResult,
|
||||
aInstance);
|
||||
return instance.GetThreadNetif().GetMac().ActiveScan(aScanChannels, aScanDuration, &HandleActiveScanResult);
|
||||
}
|
||||
|
||||
bool otLinkIsActiveScanInProgress(otInstance *aInstance)
|
||||
@@ -378,20 +377,18 @@ bool otLinkIsActiveScanInProgress(otInstance *aInstance)
|
||||
return instance.GetThreadNetif().GetMac().IsActiveScanInProgress();
|
||||
}
|
||||
|
||||
void HandleActiveScanResult(void *aContext, Mac::Frame *aFrame)
|
||||
void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aContext);
|
||||
|
||||
if (aFrame == NULL)
|
||||
{
|
||||
instance.InvokeActiveScanCallback(NULL);
|
||||
aInstance.InvokeActiveScanCallback(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
otActiveScanResult result;
|
||||
|
||||
instance.GetThreadNetif().GetMac().ConvertBeaconToActiveScanResult(aFrame, result);
|
||||
instance.InvokeActiveScanCallback(&result);
|
||||
aInstance.GetThreadNetif().GetMac().ConvertBeaconToActiveScanResult(aFrame, result);
|
||||
aInstance.InvokeActiveScanCallback(&result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,15 +401,12 @@ otError otLinkEnergyScan(otInstance * aInstance,
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
instance.RegisterEnergyScanCallback(aCallback, aCallbackContext);
|
||||
return instance.GetThreadNetif().GetMac().EnergyScan(aScanChannels, aScanDuration, &HandleEnergyScanResult,
|
||||
aInstance);
|
||||
return instance.GetThreadNetif().GetMac().EnergyScan(aScanChannels, aScanDuration, &HandleEnergyScanResult);
|
||||
}
|
||||
|
||||
void HandleEnergyScanResult(void *aContext, otEnergyScanResult *aResult)
|
||||
void HandleEnergyScanResult(Instance &aInstance, otEnergyScanResult *aResult)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aContext);
|
||||
|
||||
instance.InvokeEnergyScanCallback(aResult);
|
||||
aInstance.InvokeEnergyScanCallback(aResult);
|
||||
}
|
||||
|
||||
bool otLinkIsEnergyScanInProgress(otInstance *aInstance)
|
||||
|
||||
+10
-11
@@ -96,7 +96,6 @@ Mac::Mac(Instance &aInstance)
|
||||
, mScanChannel(OT_RADIO_CHANNEL_MIN)
|
||||
, mScanDuration(0)
|
||||
, mScanChannelMask()
|
||||
, mScanContext(NULL)
|
||||
, mActiveScanHandler(NULL) /* Initialize `mActiveScanHandler` and `mEnergyScanHandler` union */
|
||||
, mSubMac(aInstance, *this)
|
||||
, mOperationTask(aInstance, &Mac::HandleOperationTask, this)
|
||||
@@ -126,7 +125,7 @@ Mac::Mac(Instance &aInstance)
|
||||
SetShortAddress(GetShortAddress());
|
||||
}
|
||||
|
||||
otError Mac::ActiveScan(uint32_t aScanChannels, uint16_t aScanDuration, ActiveScanHandler aHandler, void *aContext)
|
||||
otError Mac::ActiveScan(uint32_t aScanChannels, uint16_t aScanDuration, ActiveScanHandler aHandler)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
@@ -140,13 +139,13 @@ otError Mac::ActiveScan(uint32_t aScanChannels, uint16_t aScanDuration, ActiveSc
|
||||
aScanDuration = kScanDurationDefault;
|
||||
}
|
||||
|
||||
Scan(kOperationActiveScan, aScanChannels, aScanDuration, aContext);
|
||||
Scan(kOperationActiveScan, aScanChannels, aScanDuration);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
otError Mac::EnergyScan(uint32_t aScanChannels, uint16_t aScanDuration, EnergyScanHandler aHandler, void *aContext)
|
||||
otError Mac::EnergyScan(uint32_t aScanChannels, uint16_t aScanDuration, EnergyScanHandler aHandler)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
@@ -154,15 +153,15 @@ otError Mac::EnergyScan(uint32_t aScanChannels, uint16_t aScanDuration, EnergySc
|
||||
VerifyOrExit(!IsActiveScanInProgress() && !IsEnergyScanInProgress(), error = OT_ERROR_BUSY);
|
||||
|
||||
mEnergyScanHandler = aHandler;
|
||||
Scan(kOperationEnergyScan, aScanChannels, aScanDuration, aContext);
|
||||
|
||||
Scan(kOperationEnergyScan, aScanChannels, aScanDuration);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void Mac::Scan(Operation aScanOperation, uint32_t aScanChannels, uint16_t aScanDuration, void *aContext)
|
||||
void Mac::Scan(Operation aScanOperation, uint32_t aScanChannels, uint16_t aScanDuration)
|
||||
{
|
||||
mScanContext = aContext;
|
||||
mScanDuration = aScanDuration;
|
||||
mScanChannel = ChannelMask::kChannelIteratorFirst;
|
||||
|
||||
@@ -257,7 +256,7 @@ void Mac::PerformActiveScan(void)
|
||||
{
|
||||
mSubMac.SetPanId(mPanId);
|
||||
FinishOperation();
|
||||
mActiveScanHandler(mScanContext, NULL);
|
||||
mActiveScanHandler(GetInstance(), NULL);
|
||||
PerformNextOperation();
|
||||
}
|
||||
}
|
||||
@@ -287,7 +286,7 @@ exit:
|
||||
if (error != OT_ERROR_NONE)
|
||||
{
|
||||
FinishOperation();
|
||||
mEnergyScanHandler(mScanContext, NULL);
|
||||
mEnergyScanHandler(GetInstance(), NULL);
|
||||
PerformNextOperation();
|
||||
}
|
||||
}
|
||||
@@ -301,7 +300,7 @@ void Mac::ReportEnergyScanResult(int8_t aRssi)
|
||||
result.mChannel = mScanChannel;
|
||||
result.mMaxRssi = aRssi;
|
||||
|
||||
mEnergyScanHandler(mScanContext, &result);
|
||||
mEnergyScanHandler(GetInstance(), &result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1583,7 +1582,7 @@ void Mac::HandleReceivedFrame(Frame *aFrame, otError aError)
|
||||
if (aFrame->GetType() == Frame::kFcfFrameBeacon)
|
||||
{
|
||||
mCounters.mRxBeacon++;
|
||||
mActiveScanHandler(mScanContext, aFrame);
|
||||
mActiveScanHandler(GetInstance(), aFrame);
|
||||
ExitNow();
|
||||
}
|
||||
|
||||
|
||||
+7
-10
@@ -115,11 +115,11 @@ public:
|
||||
/**
|
||||
* This function pointer is called on receiving an IEEE 802.15.4 Beacon during an Active Scan.
|
||||
*
|
||||
* @param[in] aContext A pointer to arbitrary context information.
|
||||
* @param[in] aInstance A reference to the OpenThread instance.
|
||||
* @param[in] aBeaconFrame A pointer to the Beacon frame or NULL to indicate end of Active Scan operation.
|
||||
*
|
||||
*/
|
||||
typedef void (*ActiveScanHandler)(void *aContext, Frame *aBeaconFrame);
|
||||
typedef void (*ActiveScanHandler)(Instance &aInstance, Frame *aBeaconFrame);
|
||||
|
||||
/**
|
||||
* This method starts an IEEE 802.15.4 Active Scan.
|
||||
@@ -128,13 +128,12 @@ public:
|
||||
* @param[in] aScanDuration The time in milliseconds to spend scanning each channel. Zero duration maps to
|
||||
* default value `kScanDurationDefault` = 300 ms.
|
||||
* @param[in] aHandler A pointer to a function that is called on receiving an IEEE 802.15.4 Beacon.
|
||||
* @param[in] aContext A pointer to arbitrary context information.
|
||||
*
|
||||
* @retval OT_ERROR_NONE Successfully scheduled the Active Scan request.
|
||||
* @retval OT_ERROR_BUSY Could not schedule the scan (a scan is ongoing or scheduled).
|
||||
*
|
||||
*/
|
||||
otError ActiveScan(uint32_t aScanChannels, uint16_t aScanDuration, ActiveScanHandler aHandler, void *aContext);
|
||||
otError ActiveScan(uint32_t aScanChannels, uint16_t aScanDuration, ActiveScanHandler aHandler);
|
||||
|
||||
/**
|
||||
* This method converts a beacon frame to an active scan result of type `otActiveScanResult`.
|
||||
@@ -153,12 +152,12 @@ public:
|
||||
* This function pointer is called during an Energy Scan when the result for a channel is ready or the scan
|
||||
* completes.
|
||||
*
|
||||
* @param[in] aContext A pointer to arbitrary context information.
|
||||
* @param[in] aInstance A reference to the OpenThread instance.
|
||||
* @param[in] aResult A valid pointer to the energy scan result information or NULL when the energy scan
|
||||
* completes.
|
||||
*
|
||||
*/
|
||||
typedef void (*EnergyScanHandler)(void *aContext, otEnergyScanResult *aResult);
|
||||
typedef void (*EnergyScanHandler)(Instance &aInstance, otEnergyScanResult *aResult);
|
||||
|
||||
/**
|
||||
* This method starts an IEEE 802.15.4 Energy Scan.
|
||||
@@ -167,13 +166,12 @@ public:
|
||||
* @param[in] aScanDuration The time in milliseconds to spend scanning each channel. If the duration is set to
|
||||
* zero, a single RSSI sample will be taken per channel.
|
||||
* @param[in] aHandler A pointer to a function called to pass on scan result or indicate scan completion.
|
||||
* @param[in] aContext A pointer to arbitrary context information.
|
||||
*
|
||||
* @retval OT_ERROR_NONE Accepted the Energy Scan request.
|
||||
* @retval OT_ERROR_BUSY Could not start the energy scan.
|
||||
*
|
||||
*/
|
||||
otError EnergyScan(uint32_t aScanChannels, uint16_t aScanDuration, EnergyScanHandler aHandler, void *aContext);
|
||||
otError EnergyScan(uint32_t aScanChannels, uint16_t aScanDuration, EnergyScanHandler aHandler);
|
||||
|
||||
/**
|
||||
* This method indicates the energy scan for the current channel is complete.
|
||||
@@ -641,7 +639,7 @@ private:
|
||||
void HandleTimer(void);
|
||||
static void HandleOperationTask(Tasklet &aTasklet);
|
||||
|
||||
void Scan(Operation aScanOperation, uint32_t aScanChannels, uint16_t aScanDuration, void *aContext);
|
||||
void Scan(Operation aScanOperation, uint32_t aScanChannels, uint16_t aScanDuration);
|
||||
otError UpdateScanChannel(void);
|
||||
void PerformActiveScan(void);
|
||||
void PerformEnergyScan(void);
|
||||
@@ -687,7 +685,6 @@ private:
|
||||
uint8_t mScanChannel;
|
||||
uint16_t mScanDuration;
|
||||
ChannelMask mScanChannelMask;
|
||||
void * mScanContext;
|
||||
union
|
||||
{
|
||||
ActiveScanHandler mActiveScanHandler;
|
||||
|
||||
@@ -128,7 +128,7 @@ void EnergyScanServer::HandleTimer(void)
|
||||
{
|
||||
// grab the lowest channel to scan
|
||||
uint32_t channelMask = mChannelMaskCurrent & ~(mChannelMaskCurrent - 1);
|
||||
GetNetif().GetMac().EnergyScan(channelMask, mScanDuration, HandleScanResult, this);
|
||||
GetNetif().GetMac().EnergyScan(channelMask, mScanDuration, HandleScanResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -139,9 +139,9 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void EnergyScanServer::HandleScanResult(void *aContext, otEnergyScanResult *aResult)
|
||||
void EnergyScanServer::HandleScanResult(Instance &aInstance, otEnergyScanResult *aResult)
|
||||
{
|
||||
static_cast<EnergyScanServer *>(aContext)->HandleScanResult(aResult);
|
||||
aInstance.Get<EnergyScanServer>().HandleScanResult(aResult);
|
||||
}
|
||||
|
||||
void EnergyScanServer::HandleScanResult(otEnergyScanResult *aResult)
|
||||
|
||||
@@ -69,7 +69,7 @@ private:
|
||||
static void HandleRequest(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
|
||||
void HandleRequest(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
|
||||
static void HandleScanResult(void *aContext, otEnergyScanResult *aResult);
|
||||
static void HandleScanResult(Instance &aInstance, otEnergyScanResult *aResult);
|
||||
void HandleScanResult(otEnergyScanResult *aResult);
|
||||
|
||||
static void HandleTimer(Timer &aTimer);
|
||||
|
||||
@@ -95,9 +95,9 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void PanIdQueryServer::HandleScanResult(void *aContext, Mac::Frame *aFrame)
|
||||
void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::Frame *aFrame)
|
||||
{
|
||||
static_cast<PanIdQueryServer *>(aContext)->HandleScanResult(aFrame);
|
||||
aInstance.Get<PanIdQueryServer>().HandleScanResult(aFrame);
|
||||
}
|
||||
|
||||
void PanIdQueryServer::HandleScanResult(Mac::Frame *aFrame)
|
||||
@@ -168,7 +168,7 @@ void PanIdQueryServer::HandleTimer(Timer &aTimer)
|
||||
|
||||
void PanIdQueryServer::HandleTimer(void)
|
||||
{
|
||||
GetNetif().GetMac().ActiveScan(mChannelMask, 0, HandleScanResult, this);
|
||||
GetNetif().GetMac().ActiveScan(mChannelMask, 0, HandleScanResult);
|
||||
mChannelMask = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ private:
|
||||
static void HandleQuery(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
|
||||
void HandleQuery(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
|
||||
static void HandleScanResult(void *aContext, Mac::Frame *aFrame);
|
||||
static void HandleScanResult(Instance &aInstance, Mac::Frame *aFrame);
|
||||
void HandleScanResult(Mac::Frame *aFrame);
|
||||
|
||||
static void HandleTimer(Timer &aTimer);
|
||||
|
||||
@@ -112,14 +112,14 @@ void ChannelMonitor::HandleTimer(Timer &aTimer)
|
||||
void ChannelMonitor::HandleTimer(void)
|
||||
{
|
||||
GetInstance().Get<Mac::Mac>().EnergyScan(mScanChannelMasks[mChannelMaskIndex], 0,
|
||||
&ChannelMonitor::HandleEnergyScanResult, this);
|
||||
&ChannelMonitor::HandleEnergyScanResult);
|
||||
|
||||
mTimer.StartAt(mTimer.GetFireTime(), Random::AddJitter(kTimerInterval, kMaxJitterInterval));
|
||||
}
|
||||
|
||||
void ChannelMonitor::HandleEnergyScanResult(void *aContext, otEnergyScanResult *aResult)
|
||||
void ChannelMonitor::HandleEnergyScanResult(Instance &aInstance, otEnergyScanResult *aResult)
|
||||
{
|
||||
static_cast<ChannelMonitor *>(aContext)->HandleEnergyScanResult(aResult);
|
||||
aInstance.Get<ChannelMonitor>().HandleEnergyScanResult(aResult);
|
||||
}
|
||||
|
||||
void ChannelMonitor::HandleEnergyScanResult(otEnergyScanResult *aResult)
|
||||
|
||||
@@ -195,7 +195,7 @@ private:
|
||||
|
||||
static void HandleTimer(Timer &aTimer);
|
||||
void HandleTimer(void);
|
||||
static void HandleEnergyScanResult(void *aContext, otEnergyScanResult *aResult);
|
||||
static void HandleEnergyScanResult(Instance &aInstance, otEnergyScanResult *aResult);
|
||||
void HandleEnergyScanResult(otEnergyScanResult *aResult);
|
||||
void LogResults(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user