Skip to content

Commit 7933215

Browse files
WIP
1 parent ca90e69 commit 7933215

File tree

9 files changed

+58
-25
lines changed

9 files changed

+58
-25
lines changed

include/openthread/platform/radio.h

+11
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,17 @@ otError otPlatRadioEnergyScan(otInstance *aInstance, uint8_t aScanChannel, uint1
10141014
*/
10151015
extern void otPlatRadioEnergyScanDone(otInstance *aInstance, int8_t aEnergyScanMaxRssi);
10161016

1017+
/**
1018+
* The radio driver calls this method to notify OpenThread that the energy scan is complete.
1019+
*
1020+
* Is used when radio provides OT_RADIO_CAPS_ENERGY_SCAN capability.
1021+
*
1022+
* @param[in] aInstance The OpenThread instance structure.
1023+
* @param[in] aEnergyScanMaxRssi The maximum RSSI encountered on the scanned channel.
1024+
*
1025+
*/
1026+
extern void otPlatRadioBusLatencyUpdated(otInstance *aInstance);
1027+
10171028
/**
10181029
* Enable/Disable source address match feature.
10191030
*

include/openthread/thread_ftd.h

-9
Original file line numberDiff line numberDiff line change
@@ -953,15 +953,6 @@ void otThreadGetNextHopAndPathCost(otInstance *aInstance,
953953
uint16_t *aNextHopRloc16,
954954
uint8_t *aPathCost);
955955

956-
/**
957-
* Calculates and updates value of CSL Frame Request Ahead, based on bus speed, bus latency and
958-
* `OPENTHREAD_CONFIG_MAC_CSL_REQUEST_AHEAD_US`.
959-
*
960-
* @param[in] aInstance A pointer to an OpenThread instance.
961-
*
962-
*/
963-
void otThreadUpdateFrameRequestAhead(otInstance *aInstance);
964-
965956
/**
966957
* @}
967958
*

src/core/api/thread_ftd_api.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -428,12 +428,4 @@ void otThreadGetNextHopAndPathCost(otInstance *aInstance,
428428
(aPathCost != nullptr) ? *aPathCost : pathcost);
429429
}
430430

431-
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
432-
void otThreadUpdateFrameRequestAhead(otInstance *aInstance)
433-
{
434-
AsCoreType(aInstance).Get<CslTxScheduler>().UpdateFrameRequestAhead();
435-
}
436-
437-
#endif // OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
438-
439431
#endif // OPENTHREAD_FTD

src/core/radio/radio.hpp

+10
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,16 @@ class Radio : public InstanceLocator, private NonCopyable
229229
*/
230230
void HandleEnergyScanDone(int8_t aMaxRssi);
231231

232+
/**
233+
* This callback method handles "Energy Scan Done" event from radio platform.
234+
*
235+
* Is used when radio provides OT_RADIO_CAPS_ENERGY_SCAN capability. It is called from
236+
* `otPlatRadioEnergyScanDone()`.
237+
*
238+
*
239+
*/
240+
void HandleBusLatencyUpdated(void);
241+
232242
#if OPENTHREAD_CONFIG_DIAG_ENABLE
233243
/**
234244
* This callback method handles a "Receive Done" event from radio platform when diagnostics mode is enabled.

src/core/radio/radio_callbacks.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ void Radio::Callbacks::HandleTransmitDone(Mac::TxFrame &aFrame, Mac::RxFrame *aA
5858

5959
void Radio::Callbacks::HandleEnergyScanDone(int8_t aMaxRssi) { Get<Mac::SubMac>().HandleEnergyScanDone(aMaxRssi); }
6060

61+
void Radio::Callbacks::HandleBusLatencyUpdated(void)
62+
{
63+
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
64+
Get<CslTxScheduler>().UpdateFrameRequestAhead();
65+
#endif
66+
}
67+
6168
#if OPENTHREAD_CONFIG_DIAG_ENABLE
6269
void Radio::Callbacks::HandleDiagsReceiveDone(Mac::RxFrame *aFrame, Error aError)
6370
{

src/core/radio/radio_platform.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,17 @@ extern "C" void otPlatRadioEnergyScanDone(otInstance *aInstance, int8_t aEnergyS
116116
return;
117117
}
118118

119+
extern "C" void otPlatRadioBusLatencyUpdated(otInstance *aInstance)
120+
{
121+
Instance &instance = AsCoreType(aInstance);
122+
123+
VerifyOrExit(instance.IsInitialized());
124+
instance.Get<Radio::Callbacks>().HandleBusLatencyUpdated();
125+
126+
exit:
127+
return;
128+
}
129+
119130
#if OPENTHREAD_CONFIG_DIAG_ENABLE
120131
extern "C" void otPlatDiagRadioReceiveDone(otInstance *aInstance, otRadioFrame *aFrame, otError aError)
121132
{
@@ -153,6 +164,8 @@ extern "C" void otPlatRadioTxDone(otInstance *, otRadioFrame *, otRadioFrame *,
153164

154165
extern "C" void otPlatRadioEnergyScanDone(otInstance *, int8_t) {}
155166

167+
extern "C" void otPlatRadioBusLatencyUpdated(otInstance *) {}
168+
156169
#if OPENTHREAD_CONFIG_DIAG_ENABLE
157170
extern "C" void otPlatDiagRadioReceiveDone(otInstance *, otRadioFrame *, otError) {}
158171

src/lib/spinel/radio_spinel.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -1946,12 +1946,11 @@ uint32_t RadioSpinel::GetBusLatency(void) const { return mBusLatency; }
19461946
void RadioSpinel::SetBusLatency(uint32_t aBusLatency)
19471947
{
19481948
mBusLatency = aBusLatency;
1949-
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
1950-
if (IsEnabled())
1949+
1950+
if (IsEnabled() && mCallbacks.mBusLatencyUpdated != nullptr)
19511951
{
1952-
otThreadUpdateFrameRequestAhead(mInstance);
1952+
mCallbacks.mBusLatencyUpdated(mInstance);
19531953
}
1954-
#endif // OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
19551954
}
19561955

19571956
void RadioSpinel::HandleRcpUnexpectedReset(spinel_status_t aStatus)

src/lib/spinel/radio_spinel.hpp

+9
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ struct RadioSpinelCallbacks
8787
*/
8888
void (*mEnergyScanDone)(otInstance *aInstance, int8_t aMaxRssi);
8989

90+
/**
91+
* This callback notifies user of `RadioSpinel` that energy scan is complete.
92+
*
93+
* @param[in] aInstance The OpenThread instance structure.
94+
* @param[in] aMaxRssi Maximum RSSI seen on the channel, or `SubMac::kInvalidRssiValue` if failed.
95+
*
96+
*/
97+
void (*mBusLatencyUpdated)(otInstance *aInstance);
98+
9099
/**
91100
* This callback notifies user of `RadioSpinel` that the transmission has started.
92101
*

src/posix/platform/radio.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ void Radio::Init(const char *aUrl)
8484
callbacks.mDiagReceiveDone = otPlatDiagRadioReceiveDone;
8585
callbacks.mDiagTransmitDone = otPlatDiagRadioTransmitDone;
8686
#endif // OPENTHREAD_CONFIG_DIAG_ENABLE
87-
callbacks.mEnergyScanDone = otPlatRadioEnergyScanDone;
88-
callbacks.mReceiveDone = otPlatRadioReceiveDone;
89-
callbacks.mTransmitDone = otPlatRadioTxDone;
90-
callbacks.mTxStarted = otPlatRadioTxStarted;
87+
callbacks.mEnergyScanDone = otPlatRadioEnergyScanDone;
88+
callbacks.mBusLatencyUpdated = otPlatRadioBusLatencyUpdated;
89+
callbacks.mReceiveDone = otPlatRadioReceiveDone;
90+
callbacks.mTransmitDone = otPlatRadioTxDone;
91+
callbacks.mTxStarted = otPlatRadioTxStarted;
9192

9293
resetRadio = !mRadioUrl.HasParam("no-reset");
9394
skipCompatibilityCheck = mRadioUrl.HasParam("skip-rcp-compatibility-check");

0 commit comments

Comments
 (0)