Skip to content

Commit d9dc663

Browse files
WIP
1 parent ca90e69 commit d9dc663

File tree

9 files changed

+50
-26
lines changed

9 files changed

+50
-26
lines changed

include/openthread/platform/radio.h

+8
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,14 @@ 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 spinel bus latency has been updated.
1019+
*
1020+
* @param[in] aInstance The OpenThread instance structure.
1021+
*
1022+
*/
1023+
extern void otPlatRadioBusLatencyUpdated(otInstance *aInstance);
1024+
10171025
/**
10181026
* Enable/Disable source address match feature.
10191027
*

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

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

232+
/**
233+
* This callback method handles "Bus Latency Updated" event from radio platform.
234+
*
235+
*/
236+
void HandleBusLatencyUpdated(void);
237+
232238
#if OPENTHREAD_CONFIG_DIAG_ENABLE
233239
/**
234240
* 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-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
#include <stdlib.h>
4040

4141
#include <openthread/logging.h>
42-
#include <openthread/thread_ftd.h>
4342
#include <openthread/platform/diag.h>
4443
#include <openthread/platform/time.h>
4544

@@ -1946,12 +1945,11 @@ uint32_t RadioSpinel::GetBusLatency(void) const { return mBusLatency; }
19461945
void RadioSpinel::SetBusLatency(uint32_t aBusLatency)
19471946
{
19481947
mBusLatency = aBusLatency;
1949-
#if OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
1950-
if (IsEnabled())
1948+
1949+
if (IsEnabled() && mCallbacks.mBusLatencyUpdated != nullptr)
19511950
{
1952-
otThreadUpdateFrameRequestAhead(mInstance);
1951+
mCallbacks.mBusLatencyUpdated(mInstance);
19531952
}
1954-
#endif // OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE
19551953
}
19561954

19571955
void RadioSpinel::HandleRcpUnexpectedReset(spinel_status_t aStatus)

src/lib/spinel/radio_spinel.hpp

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

90+
/**
91+
* This callback notifies user of `RadioSpinel` that the bus latency has been updated.
92+
*
93+
* @param[in] aInstance The OpenThread instance structure.
94+
*
95+
*/
96+
void (*mBusLatencyUpdated)(otInstance *aInstance);
97+
9098
/**
9199
* This callback notifies user of `RadioSpinel` that the transmission has started.
92100
*

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)