mirror of
https://github.com/espressif/openthread.git
synced 2026-07-31 16:17:47 +00:00
[spinel] add CSL-related properties (#6135)
This commit adds spinel properties for NCP built with OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE. Such NCP will have also a new capability SPINEL_CAP_THREAD_CSL_RECEIVER.
This commit is contained in:
@@ -1823,6 +1823,18 @@ const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key)
|
||||
ret = "THREAD_NEW_DATASET";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_THREAD_CSL_PERIOD:
|
||||
ret = "SPINEL_PROP_THREAD_CSL_PERIOD";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_THREAD_CSL_TIMEOUT:
|
||||
ret = "SPINEL_PROP_THREAD_CSL_TIMEOUT";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_THREAD_CSL_CHANNEL:
|
||||
ret = "SPINEL_PROP_THREAD_CSL_CHANNEL";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_JOINER_STATE:
|
||||
ret = "MESHCOP_JOINER_STATE";
|
||||
break;
|
||||
@@ -2767,6 +2779,10 @@ const char *spinel_capability_to_cstr(spinel_capability_t capability)
|
||||
ret = "THREAD_SERVICE";
|
||||
break;
|
||||
|
||||
case SPINEL_CAP_THREAD_CSL_RECEIVER:
|
||||
ret = "THREAD_CSL_RECEIVER";
|
||||
break;
|
||||
|
||||
case SPINEL_CAP_NEST_LEGACY_INTERFACE:
|
||||
ret = "NEST_LEGACY_INTERFACE";
|
||||
break;
|
||||
|
||||
@@ -1189,6 +1189,7 @@ enum
|
||||
SPINEL_CAP_THREAD_JOINER = (SPINEL_CAP_THREAD__BEGIN + 3),
|
||||
SPINEL_CAP_THREAD_BORDER_ROUTER = (SPINEL_CAP_THREAD__BEGIN + 4),
|
||||
SPINEL_CAP_THREAD_SERVICE = (SPINEL_CAP_THREAD__BEGIN + 5),
|
||||
SPINEL_CAP_THREAD_CSL_RECEIVER = (SPINEL_CAP_THREAD__BEGIN + 6),
|
||||
SPINEL_CAP_THREAD__END = 1152,
|
||||
|
||||
SPINEL_CAP_NEST__BEGIN = 15296,
|
||||
@@ -2897,6 +2898,32 @@ enum
|
||||
*/
|
||||
SPINEL_PROP_THREAD_NEW_DATASET = SPINEL_PROP_THREAD_EXT__BEGIN + 40,
|
||||
|
||||
/// MAC CSL Period
|
||||
/** Format: `S`
|
||||
* Required capability: `SPINEL_CAP_THREAD_CSL_RECEIVER`
|
||||
*
|
||||
* The CSL period in units of 10 symbols. Value of 0 indicates that CSL should be disabled.
|
||||
*/
|
||||
SPINEL_PROP_THREAD_CSL_PERIOD = SPINEL_PROP_THREAD_EXT__BEGIN + 41,
|
||||
|
||||
/// MAC CSL Timeout
|
||||
/** Format: `L`
|
||||
* Required capability: `SPINEL_CAP_THREAD_CSL_RECEIVER`
|
||||
*
|
||||
* The CSL timeout in seconds.
|
||||
*/
|
||||
SPINEL_PROP_THREAD_CSL_TIMEOUT = SPINEL_PROP_THREAD_EXT__BEGIN + 42,
|
||||
|
||||
/// MAC CSL Channel
|
||||
/** Format: `C`
|
||||
* Required capability: `SPINEL_CAP_THREAD_CSL_RECEIVER`
|
||||
*
|
||||
* The CSL channel as described in chapter 4.6.5.1.2 of the Thread v1.2.0 Specification.
|
||||
* Value of 0 means that CSL reception (if enabled) occurs on the Thread Network channel.
|
||||
* Value from range [11,26] is an alternative channel on which a CSL reception occurs.
|
||||
*/
|
||||
SPINEL_PROP_THREAD_CSL_CHANNEL = SPINEL_PROP_THREAD_EXT__BEGIN + 43,
|
||||
|
||||
SPINEL_PROP_THREAD_EXT__END = 0x1600,
|
||||
|
||||
SPINEL_PROP_IPV6__BEGIN = 0x60,
|
||||
|
||||
@@ -1912,6 +1912,10 @@ template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_CAPS>(void)
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_SERVICE));
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_CSL_RECEIVER));
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_MULTI_RADIO
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_MULTI_RADIO));
|
||||
#endif
|
||||
|
||||
@@ -300,6 +300,13 @@ NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
|
||||
#if OPENTHREAD_FTD
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_ADDRESS_CACHE_TABLE),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_NEW_DATASET),
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_PERIOD),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_TIMEOUT),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_CHANNEL),
|
||||
#endif
|
||||
#if OPENTHREAD_FTD
|
||||
#if OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL),
|
||||
OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_CHANNEL_MANAGER_DELAY),
|
||||
@@ -522,6 +529,11 @@ NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
|
||||
#endif
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_MGMT_GET_ACTIVE_DATASET),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_MGMT_GET_PENDING_DATASET),
|
||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_PERIOD),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_TIMEOUT),
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_CHANNEL),
|
||||
#endif
|
||||
#if OPENTHREAD_FTD
|
||||
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE
|
||||
OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN),
|
||||
|
||||
@@ -186,6 +186,62 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_CSL_PERIOD>(void)
|
||||
{
|
||||
uint16_t cslPeriod;
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint16(cslPeriod));
|
||||
|
||||
error = otLinkCslSetPeriod(mInstance, cslPeriod);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CSL_PERIOD>(void)
|
||||
{
|
||||
return mEncoder.WriteUint16(otLinkCslGetPeriod(mInstance));
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_CSL_TIMEOUT>(void)
|
||||
{
|
||||
uint32_t cslTimeout;
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint32(cslTimeout));
|
||||
|
||||
error = otLinkCslSetTimeout(mInstance, cslTimeout);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CSL_TIMEOUT>(void)
|
||||
{
|
||||
return mEncoder.WriteUint32(otLinkCslGetTimeout(mInstance));
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_CSL_CHANNEL>(void)
|
||||
{
|
||||
uint8_t cslChannel;
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(cslChannel));
|
||||
|
||||
error = otLinkCslSetChannel(mInstance, cslChannel);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_CSL_CHANNEL>(void)
|
||||
{
|
||||
return mEncoder.WriteUint8(otLinkCslGetChannel(mInstance));
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_MAC_DATA_POLL_PERIOD>(void)
|
||||
{
|
||||
return mEncoder.WriteUint32(otLinkGetPollPeriod(mInstance));
|
||||
|
||||
Reference in New Issue
Block a user