[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:
Andrzej Kuroś
2021-02-04 18:55:08 -08:00
committed by GitHub
parent 77c74283c5
commit afb4118d9a
5 changed files with 115 additions and 0 deletions
+16
View File
@@ -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;
+27
View File
@@ -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,
+4
View File
@@ -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
+12
View File
@@ -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),
+56
View File
@@ -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));