diff --git a/src/lib/spinel/spinel.c b/src/lib/spinel/spinel.c index 56276e5a5..8c44bc6a2 100644 --- a/src/lib/spinel/spinel.c +++ b/src/lib/spinel/spinel.c @@ -1835,6 +1835,10 @@ const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key) ret = "SPINEL_PROP_THREAD_CSL_CHANNEL"; break; + case SPINEL_PROP_THREAD_DOMAIN_NAME: + ret = "SPINEL_PROP_THREAD_DOMAIN_NAME"; + break; + case SPINEL_PROP_MESHCOP_JOINER_STATE: ret = "MESHCOP_JOINER_STATE"; break; @@ -2691,6 +2695,10 @@ const char *spinel_capability_to_cstr(spinel_capability_t capability) ret = "NET_THREAD_1_1"; break; + case SPINEL_CAP_NET_THREAD_1_2: + ret = "NET_THREAD_1_2"; + break; + case SPINEL_CAP_RCP_API_VERSION: ret = "RCP_API_VERSION"; break; diff --git a/src/lib/spinel/spinel.h b/src/lib/spinel/spinel.h index cdd8769ee..c8803fa24 100644 --- a/src/lib/spinel/spinel.h +++ b/src/lib/spinel/spinel.h @@ -1158,6 +1158,7 @@ enum SPINEL_CAP_NET__BEGIN = 52, SPINEL_CAP_NET_THREAD_1_0 = (SPINEL_CAP_NET__BEGIN + 0), SPINEL_CAP_NET_THREAD_1_1 = (SPINEL_CAP_NET__BEGIN + 1), + SPINEL_CAP_NET_THREAD_1_2 = (SPINEL_CAP_NET__BEGIN + 2), SPINEL_CAP_NET__END = 64, SPINEL_CAP_RCP__BEGIN = 64, @@ -2924,6 +2925,16 @@ enum */ SPINEL_PROP_THREAD_CSL_CHANNEL = SPINEL_PROP_THREAD_EXT__BEGIN + 43, + /// Thread Domain Name + /** Format `U` - Read-write + * Required capability: `SPINEL_CAP_NET_THREAD_1_2` + * + * This property is available since Thread 1.2.0. + * Write to this property succeeds only when Thread protocols are disabled. + * + */ + SPINEL_PROP_THREAD_DOMAIN_NAME = SPINEL_PROP_THREAD_EXT__BEGIN + 44, + SPINEL_PROP_THREAD_EXT__END = 0x1600, SPINEL_PROP_IPV6__BEGIN = 0x60, diff --git a/src/ncp/ncp_base.cpp b/src/ncp/ncp_base.cpp index 895559a65..73c496088 100644 --- a/src/ncp/ncp_base.cpp +++ b/src/ncp/ncp_base.cpp @@ -1836,6 +1836,11 @@ template <> otError NcpBase::HandlePropertyGet(void) #if OPENTHREAD_MTD || OPENTHREAD_FTD SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_NET_THREAD_1_1)); + +#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2) + SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_NET_THREAD_1_2)); +#endif + SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_PCAP)); #if OPENTHREAD_CONFIG_MAC_FILTER_ENABLE diff --git a/src/ncp/ncp_base_dispatcher.cpp b/src/ncp/ncp_base_dispatcher.cpp index 831f1bd57..0fafc5886 100644 --- a/src/ncp/ncp_base_dispatcher.cpp +++ b/src/ncp/ncp_base_dispatcher.cpp @@ -307,6 +307,9 @@ NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey) OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_CHANNEL), #endif #if OPENTHREAD_FTD +#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2) + OT_NCP_GET_HANDLER_ENTRY(SPINEL_PROP_THREAD_DOMAIN_NAME), +#endif #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), @@ -535,6 +538,9 @@ NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey) OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_CSL_CHANNEL), #endif #if OPENTHREAD_FTD +#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2) + OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_THREAD_DOMAIN_NAME), +#endif #if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN), OT_NCP_SET_HANDLER_ENTRY(SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN), diff --git a/src/ncp/ncp_base_ftd.cpp b/src/ncp/ncp_base_ftd.cpp index 2d66b60d7..cbb69e2f9 100644 --- a/src/ncp/ncp_base_ftd.cpp +++ b/src/ncp/ncp_base_ftd.cpp @@ -331,6 +331,26 @@ exit: return error; } +#if (OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2) +template <> otError NcpBase::HandlePropertyGet(void) +{ + return mEncoder.WriteUtf8(otThreadGetDomainName(mInstance)); +} + +template <> otError NcpBase::HandlePropertySet(void) +{ + otError error = OT_ERROR_NONE; + const char *domainName; + + SuccessOrExit(error = mDecoder.ReadUtf8(domainName)); + + error = otThreadSetDomainName(mInstance, domainName); + +exit: + return error; +} +#endif + template <> otError NcpBase::HandlePropertyGet(void) { return mEncoder.WriteData(otThreadGetPskc(mInstance)->m8, sizeof(spinel_net_pskc_t));