mirror of
https://github.com/espressif/openthread.git
synced 2026-08-02 17:17:45 +00:00
[radio] move required radio caps from radio spinel into posix platform (#10502)
This commit moves the definition of the 'RequiredRadioCaps' from `RadioSpinel` to posix `Radio` class. Because this definition depends on `OPENTHREAD_CONFIG_THREAD_VERSION`. And we want to remove lib's dependency on OT core. And lib as a tool should be able to decide what caps to check at runtime.
This commit is contained in:
@@ -115,7 +115,10 @@ RadioSpinel::RadioSpinel(void)
|
||||
memset(&mCallbacks, 0, sizeof(mCallbacks));
|
||||
}
|
||||
|
||||
void RadioSpinel::Init(bool aSkipRcpCompatibilityCheck, bool aSoftwareReset, SpinelDriver *aSpinelDriver)
|
||||
void RadioSpinel::Init(bool aSkipRcpCompatibilityCheck,
|
||||
bool aSoftwareReset,
|
||||
SpinelDriver *aSpinelDriver,
|
||||
otRadioCaps aRequiredRadioCaps)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
bool supportsRcpApiVersion;
|
||||
@@ -147,7 +150,7 @@ void RadioSpinel::Init(bool aSkipRcpCompatibilityCheck, bool aSoftwareReset, Spi
|
||||
if (!aSkipRcpCompatibilityCheck)
|
||||
{
|
||||
SuccessOrDie(CheckRcpApiVersion(supportsRcpApiVersion, supportsRcpMinHostApiVersion));
|
||||
SuccessOrDie(CheckRadioCapabilities());
|
||||
SuccessOrDie(CheckRadioCapabilities(aRequiredRadioCaps));
|
||||
}
|
||||
|
||||
mRxRadioFrame.mPsdu = mRxPsdu;
|
||||
@@ -215,23 +218,17 @@ void RadioSpinel::InitializeCaps(bool &aSupportsRcpApiVersion, bool &aSupportsRc
|
||||
sSupportsLogCrashDump = GetSpinelDriver().CoprocessorHasCap(SPINEL_CAP_RCP_LOG_CRASH_DUMP);
|
||||
}
|
||||
|
||||
otError RadioSpinel::CheckRadioCapabilities(void)
|
||||
otError RadioSpinel::CheckRadioCapabilities(otRadioCaps aRequiredRadioCaps)
|
||||
{
|
||||
const otRadioCaps kRequiredRadioCaps =
|
||||
#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2
|
||||
OT_RADIO_CAPS_TRANSMIT_SEC | OT_RADIO_CAPS_TRANSMIT_TIMING |
|
||||
#endif
|
||||
OT_RADIO_CAPS_ACK_TIMEOUT | OT_RADIO_CAPS_TRANSMIT_RETRIES | OT_RADIO_CAPS_CSMA_BACKOFF;
|
||||
|
||||
otError error = OT_ERROR_NONE;
|
||||
unsigned int radioCaps;
|
||||
|
||||
EXPECT_NO_ERROR(error = Get(SPINEL_PROP_RADIO_CAPS, SPINEL_DATATYPE_UINT_PACKED_S, &radioCaps));
|
||||
sRadioCaps = static_cast<otRadioCaps>(radioCaps);
|
||||
|
||||
if ((sRadioCaps & kRequiredRadioCaps) != kRequiredRadioCaps)
|
||||
if ((sRadioCaps & aRequiredRadioCaps) != aRequiredRadioCaps)
|
||||
{
|
||||
otRadioCaps missingCaps = (sRadioCaps & kRequiredRadioCaps) ^ kRequiredRadioCaps;
|
||||
otRadioCaps missingCaps = (sRadioCaps & aRequiredRadioCaps) ^ aRequiredRadioCaps;
|
||||
|
||||
// missingCaps may be an unused variable when LogCrit is blank
|
||||
// avoid compiler warning in that case
|
||||
@@ -1796,7 +1793,7 @@ void RadioSpinel::PlatDiagOutput(const char *aFormat, ...)
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif // OPENTHREAD_CONFIG_DIAG_ENABLE
|
||||
|
||||
uint32_t RadioSpinel::GetRadioChannelMask(bool aPreferred)
|
||||
{
|
||||
|
||||
@@ -163,9 +163,14 @@ public:
|
||||
* @param[in] aSoftwareReset When doing RCP recovery, TRUE to try software reset first, FALSE to
|
||||
* directly do a hardware reset.
|
||||
* @param[in] aSpinelDriver A pointer to the spinel driver instance that this object depends on.
|
||||
* @param[in] aRequiredRadioCaps The required radio capabilities. RadioSpinel will check if RCP has
|
||||
* the required capabilities during initiailization.
|
||||
*
|
||||
*/
|
||||
void Init(bool aSkipRcpCompatibilityCheck, bool aSoftwareReset, SpinelDriver *aSpinelDriver);
|
||||
void Init(bool aSkipRcpCompatibilityCheck,
|
||||
bool aSoftwareReset,
|
||||
SpinelDriver *aSpinelDriver,
|
||||
otRadioCaps aRequiredRadioCaps);
|
||||
|
||||
/**
|
||||
* This method sets the notification callbacks.
|
||||
@@ -1115,7 +1120,7 @@ private:
|
||||
SpinelDriver &GetSpinelDriver(void) const;
|
||||
|
||||
otError CheckSpinelVersion(void);
|
||||
otError CheckRadioCapabilities(void);
|
||||
otError CheckRadioCapabilities(otRadioCaps aRequiredRadioCaps);
|
||||
otError CheckRcpApiVersion(bool aSupportsRcpApiVersion, bool aSupportsRcpMinHostApiVersion);
|
||||
void InitializeCaps(bool &aSupportsRcpApiVersion, bool &aSupportsRcpMinHostApiVersion);
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ void Radio::Init(const char *aUrl)
|
||||
skipCompatibilityCheck = mRadioUrl.HasParam("skip-rcp-compatibility-check");
|
||||
|
||||
mRadioSpinel.SetCallbacks(callbacks);
|
||||
mRadioSpinel.Init(skipCompatibilityCheck, resetRadio, &GetSpinelDriver());
|
||||
mRadioSpinel.Init(skipCompatibilityCheck, resetRadio, &GetSpinelDriver(), kRequiredRadioCaps);
|
||||
|
||||
ProcessRadioUrl(mRadioUrl);
|
||||
}
|
||||
|
||||
@@ -115,6 +115,12 @@ private:
|
||||
#error "No Spinel interface is specified!"
|
||||
#endif
|
||||
|
||||
static constexpr otRadioCaps kRequiredRadioCaps =
|
||||
#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2
|
||||
OT_RADIO_CAPS_TRANSMIT_SEC | OT_RADIO_CAPS_TRANSMIT_TIMING |
|
||||
#endif
|
||||
OT_RADIO_CAPS_ACK_TIMEOUT | OT_RADIO_CAPS_TRANSMIT_RETRIES | OT_RADIO_CAPS_CSMA_BACKOFF;
|
||||
|
||||
RadioUrl mRadioUrl;
|
||||
#if OPENTHREAD_SPINEL_CONFIG_VENDOR_HOOK_ENABLE
|
||||
Spinel::VendorRadioSpinel mRadioSpinel;
|
||||
|
||||
Reference in New Issue
Block a user