mirror of
https://github.com/espressif/openthread.git
synced 2026-07-28 22:57:47 +00:00
[ncp] add support for Commissioner APIs in spinel and NCP (#2911)
This commit adds support for Commissioner related APIs in spinel and NCP including starting/stopping Commissioner, setting Provisioning URL, adding/removing Joiners, and sending Announce Begin, Energy Scan Query, PAN ID Query, MGMT_GET/MGMT_SET messages.
This commit is contained in:
committed by
Jonathan Hui
parent
f089fc8e25
commit
a9d32b7bef
@@ -1647,6 +1647,10 @@ template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_CAPS>(void)
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_NEST_LEGACY_INTERFACE));
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_ENABLE_COMMISSIONER
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_COMMISSIONER));
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_ENABLE_UDP_PROXY
|
||||
SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_UDP_PROXY));
|
||||
#endif
|
||||
|
||||
@@ -281,6 +281,17 @@ protected:
|
||||
static void HandleJamStateChange_Jump(bool aJamState, void *aContext);
|
||||
void HandleJamStateChange(bool aJamState);
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_ENABLE_COMMISSIONER
|
||||
static void HandleCommissionerEnergyReport_Jump(uint32_t aChannelMask,
|
||||
const uint8_t *aEnergyData,
|
||||
uint8_t aLength,
|
||||
void * aContext);
|
||||
void HandleCommissionerEnergyReport(uint32_t aChannelMask, const uint8_t *aEnergyData, uint8_t aLength);
|
||||
|
||||
static void HandleCommissionerPanIdConflict_Jump(uint16_t aPanId, uint32_t aChannelMask, void *aContext);
|
||||
void HandleCommissionerPanIdConflict(uint16_t aPanId, uint32_t aChannelMask);
|
||||
#endif
|
||||
|
||||
static void SendDoneTask(void *aContext);
|
||||
void SendDoneTask(void);
|
||||
|
||||
|
||||
@@ -552,6 +552,15 @@ NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
|
||||
handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ADDRESS_CACHE_TABLE>;
|
||||
break;
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_STATE:
|
||||
handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_STATE>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL:
|
||||
handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID:
|
||||
handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID>;
|
||||
break;
|
||||
case SPINEL_PROP_THREAD_COMMISSIONER_ENABLED:
|
||||
handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_COMMISSIONER_ENABLED>;
|
||||
break;
|
||||
@@ -855,6 +864,29 @@ NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHILD_SUPERVISION_INTERVAL>;
|
||||
break;
|
||||
#endif
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_STATE:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_STATE>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET>;
|
||||
break;
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET>;
|
||||
break;
|
||||
#endif
|
||||
#if OPENTHREAD_ENABLE_CHANNEL_MANAGER
|
||||
case SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL:
|
||||
handler = &NcpBase::HandlePropertySet<SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL>;
|
||||
@@ -968,6 +1000,9 @@ NcpBase::PropertyHandler NcpBase::FindInsertPropertyHandler(spinel_prop_key_t aK
|
||||
|
||||
#if OPENTHREAD_FTD
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS:
|
||||
handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS>;
|
||||
break;
|
||||
case SPINEL_PROP_THREAD_JOINERS:
|
||||
handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_JOINERS>;
|
||||
break;
|
||||
@@ -1047,7 +1082,12 @@ NcpBase::PropertyHandler NcpBase::FindRemovePropertyHandler(spinel_prop_key_t aK
|
||||
case SPINEL_PROP_THREAD_ACTIVE_ROUTER_IDS:
|
||||
handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_THREAD_ACTIVE_ROUTER_IDS>;
|
||||
break;
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS:
|
||||
handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS>;
|
||||
break;
|
||||
#endif
|
||||
#endif // OPENTHREAD_FTD
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// Raw Link API Properties (Remove Handler)
|
||||
|
||||
@@ -391,6 +391,291 @@ exit:
|
||||
}
|
||||
|
||||
#if OPENTHREAD_ENABLE_COMMISSIONER
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_STATE>(void)
|
||||
{
|
||||
uint8_t state = SPINEL_MESHCOP_COMMISSIONER_STATE_DISABLED;
|
||||
|
||||
switch (otCommissionerGetState(mInstance))
|
||||
{
|
||||
case OT_COMMISSIONER_STATE_DISABLED:
|
||||
state = SPINEL_MESHCOP_COMMISSIONER_STATE_DISABLED;
|
||||
break;
|
||||
|
||||
case OT_COMMISSIONER_STATE_PETITION:
|
||||
state = SPINEL_MESHCOP_COMMISSIONER_STATE_PETITION;
|
||||
break;
|
||||
|
||||
case OT_COMMISSIONER_STATE_ACTIVE:
|
||||
state = SPINEL_MESHCOP_COMMISSIONER_STATE_ACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
return mEncoder.WriteUint8(state);
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_STATE>(void)
|
||||
{
|
||||
uint8_t state;
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(state));
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case SPINEL_MESHCOP_COMMISSIONER_STATE_DISABLED:
|
||||
error = otCommissionerStop(mInstance);
|
||||
break;
|
||||
|
||||
case SPINEL_MESHCOP_COMMISSIONER_STATE_ACTIVE:
|
||||
error = otCommissionerStart(mInstance);
|
||||
break;
|
||||
|
||||
default:
|
||||
error = OT_ERROR_INVALID_ARGS;
|
||||
break;
|
||||
}
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyInsert<SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
const otExtAddress *eui64;
|
||||
uint32_t timeout;
|
||||
const char * psk;
|
||||
|
||||
SuccessOrExit(error = mDecoder.OpenStruct());
|
||||
|
||||
if (!mDecoder.IsAllReadInStruct())
|
||||
{
|
||||
SuccessOrExit(error = mDecoder.ReadEui64(eui64));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Empty struct indicates any Joiner (no EUI64 is given so NULL is used.).
|
||||
eui64 = NULL;
|
||||
}
|
||||
|
||||
SuccessOrExit(error = mDecoder.CloseStruct());
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint32(timeout));
|
||||
SuccessOrExit(error = mDecoder.ReadUtf8(psk));
|
||||
|
||||
error = otCommissionerAddJoiner(mInstance, eui64, psk, timeout);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyRemove<SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
const otExtAddress *eui64;
|
||||
|
||||
SuccessOrExit(error = mDecoder.OpenStruct());
|
||||
|
||||
if (!mDecoder.IsAllReadInStruct())
|
||||
{
|
||||
SuccessOrExit(error = mDecoder.ReadEui64(eui64));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Empty struct indicates any Joiner (no EUI64 is given so NULL is used.).
|
||||
eui64 = NULL;
|
||||
}
|
||||
|
||||
SuccessOrExit(error = mDecoder.CloseStruct());
|
||||
|
||||
error = otCommissionerRemoveJoiner(mInstance, eui64);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint16_t length = 0;
|
||||
const char *url = otCommissionerGetProvisioningUrl(mInstance, &length);
|
||||
|
||||
if (url != NULL && length > 0)
|
||||
{
|
||||
SuccessOrExit(error = mEncoder.WriteData(reinterpret_cast<const uint8_t *>(url), length));
|
||||
}
|
||||
|
||||
SuccessOrExit(error = mEncoder.WriteUint8(0));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
const char *url;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUtf8(url));
|
||||
|
||||
error = otCommissionerSetProvisioningUrl(mInstance, url);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID>(void)
|
||||
{
|
||||
return mEncoder.WriteUint16(otCommissionerGetSessionId(mInstance));
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint32_t channelMask;
|
||||
uint8_t count;
|
||||
uint16_t period;
|
||||
const otIp6Address *address;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint32(channelMask));
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(count));
|
||||
SuccessOrExit(error = mDecoder.ReadUint16(period));
|
||||
SuccessOrExit(error = mDecoder.ReadIp6Address(address));
|
||||
|
||||
error = otCommissionerAnnounceBegin(mInstance, channelMask, count, period, address);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint32_t channelMask;
|
||||
uint8_t count;
|
||||
uint16_t period;
|
||||
uint16_t scanDuration;
|
||||
const otIp6Address *address;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint32(channelMask));
|
||||
SuccessOrExit(error = mDecoder.ReadUint8(count));
|
||||
SuccessOrExit(error = mDecoder.ReadUint16(period));
|
||||
SuccessOrExit(error = mDecoder.ReadUint16(scanDuration));
|
||||
SuccessOrExit(error = mDecoder.ReadIp6Address(address));
|
||||
|
||||
error = otCommissionerEnergyScan(mInstance, channelMask, count, period, scanDuration, address,
|
||||
&NcpBase::HandleCommissionerEnergyReport_Jump, this);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void NcpBase::HandleCommissionerEnergyReport_Jump(uint32_t aChannelMask,
|
||||
const uint8_t *aEnergyData,
|
||||
uint8_t aLength,
|
||||
void * aContext)
|
||||
{
|
||||
static_cast<NcpBase *>(aContext)->HandleCommissionerEnergyReport(aChannelMask, aEnergyData, aLength);
|
||||
}
|
||||
|
||||
void NcpBase::HandleCommissionerEnergyReport(uint32_t aChannelMask, const uint8_t *aEnergyData, uint8_t aLength)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mEncoder.BeginFrame(SPINEL_HEADER_FLAG | SPINEL_HEADER_IID_0, SPINEL_CMD_PROP_VALUE_INSERTED,
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN_RESULT));
|
||||
SuccessOrExit(error = mEncoder.WriteUint32(aChannelMask));
|
||||
SuccessOrExit(error = mEncoder.WriteDataWithLen(aEnergyData, aLength));
|
||||
SuccessOrExit(error = mEncoder.EndFrame());
|
||||
|
||||
exit:
|
||||
|
||||
if (error != OT_ERROR_NONE)
|
||||
{
|
||||
mChangedPropsSet.AddLastStatus(SPINEL_STATUS_NOMEM);
|
||||
mUpdateChangedPropsTask.Post();
|
||||
}
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
uint16_t panId;
|
||||
uint32_t channelMask;
|
||||
const otIp6Address *address;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadUint16(panId));
|
||||
SuccessOrExit(error = mDecoder.ReadUint32(channelMask));
|
||||
SuccessOrExit(error = mDecoder.ReadIp6Address(address));
|
||||
|
||||
error = otCommissionerPanIdQuery(mInstance, panId, channelMask, address,
|
||||
&NcpBase::HandleCommissionerPanIdConflict_Jump, this);
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void NcpBase::HandleCommissionerPanIdConflict_Jump(uint16_t aPanId, uint32_t aChannelMask, void *aContext)
|
||||
{
|
||||
static_cast<NcpBase *>(aContext)->HandleCommissionerPanIdConflict(aPanId, aChannelMask);
|
||||
}
|
||||
|
||||
void NcpBase::HandleCommissionerPanIdConflict(uint16_t aPanId, uint32_t aChannelMask)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
SuccessOrExit(error = mEncoder.BeginFrame(SPINEL_HEADER_FLAG | SPINEL_HEADER_IID_0, SPINEL_CMD_PROP_VALUE_INSERTED,
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_CONFLICT_RESULT));
|
||||
|
||||
SuccessOrExit(error = mEncoder.WriteUint16(aPanId));
|
||||
SuccessOrExit(error = mEncoder.WriteUint32(aChannelMask));
|
||||
SuccessOrExit(error = mEncoder.EndFrame());
|
||||
|
||||
exit:
|
||||
|
||||
if (error != OT_ERROR_NONE)
|
||||
{
|
||||
mChangedPropsSet.AddLastStatus(SPINEL_STATUS_NOMEM);
|
||||
mUpdateChangedPropsTask.Post();
|
||||
}
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
const uint8_t *tlvs;
|
||||
uint16_t length;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadDataWithLen(tlvs, length));
|
||||
VerifyOrExit(length <= 255, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
error = otCommissionerSendMgmtGet(mInstance, tlvs, static_cast<uint8_t>(length));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
const uint8_t * tlvs;
|
||||
uint16_t length;
|
||||
otCommissioningDataset dataset;
|
||||
|
||||
SuccessOrExit(error = mDecoder.ReadDataWithLen(tlvs, length));
|
||||
VerifyOrExit(length <= 255, error = OT_ERROR_INVALID_ARGS);
|
||||
|
||||
memset(&dataset, 0, sizeof(otCommissioningDataset));
|
||||
error = otCommissionerSendMgmtSet(mInstance, &dataset, tlvs, static_cast<uint8_t>(length));
|
||||
|
||||
exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
// SPINEL_PROP_THREAD_COMMISSIONER_ENABLED is replaced by SPINEL_PROP_MESHCOP_COMMISSIONER_STATE. Please use the new
|
||||
// property. The old property/implementation remains for backward compatibility.
|
||||
|
||||
template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_COMMISSIONER_ENABLED>(void)
|
||||
{
|
||||
return mEncoder.WriteBool(otCommissionerGetState(mInstance) == OT_COMMISSIONER_STATE_ACTIVE);
|
||||
@@ -416,6 +701,9 @@ exit:
|
||||
return PrepareLastStatusResponse(aHeader, ThreadErrorToSpinelStatus(error));
|
||||
}
|
||||
|
||||
// SPINEL_PROP_THREAD_JOINERS is replaced by SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS. Please us the new property.
|
||||
// The old property/implementation remains for backward compatibility.
|
||||
|
||||
template <> otError NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_JOINERS>(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
@@ -1629,6 +1629,50 @@ const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key)
|
||||
ret = "PROP_STREAM_LOG";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_STATE:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_STATE";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_JOINERS";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_SESSION_ID";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN_RESULT:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN_RESULT";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_CONFLICT_RESULT:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_PAN_ID_CONFLICT_RESULT";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_MGMT_GET";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET:
|
||||
ret = "PROP_MESHCOP_COMMISSIONER_MGMT_SET";
|
||||
break;
|
||||
|
||||
case SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL:
|
||||
ret = "PROP_CHANNEL_MANAGER_NEW_CHANNEL";
|
||||
break;
|
||||
|
||||
+175
-2
@@ -323,6 +323,13 @@ enum
|
||||
SPINEL_NCP_LOG_REGION_OT_UTIL = 16,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SPINEL_MESHCOP_COMMISSIONER_STATE_DISABLED = 0,
|
||||
SPINEL_MESHCOP_COMMISSIONER_STATE_PETITION = 1,
|
||||
SPINEL_MESHCOP_COMMISSIONER_STATE_ACTIVE = 2,
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t bytes[8];
|
||||
@@ -1149,6 +1156,9 @@ typedef enum {
|
||||
/// Thread joiner data
|
||||
/** Format `A(T(ULE))`
|
||||
* PSKd, joiner timeout, eui64 (optional)
|
||||
*
|
||||
* This property is being deprecated by SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_JOINERS = SPINEL_PROP_THREAD_EXT__BEGIN + 15,
|
||||
|
||||
@@ -1156,6 +1166,9 @@ typedef enum {
|
||||
/** Format `b`
|
||||
*
|
||||
* Default value is `false`.
|
||||
*
|
||||
* This property is being deprecated by SPINEL_PROP_MESHCOP_COMMISSIONER_STATE.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_THREAD_COMMISSIONER_ENABLED = SPINEL_PROP_THREAD_EXT__BEGIN + 16,
|
||||
|
||||
@@ -1590,10 +1603,170 @@ typedef enum {
|
||||
SPINEL_PROP_STREAM_EXT__END = 0x1800,
|
||||
|
||||
SPINEL_PROP_MESHCOP__BEGIN = 0x80,
|
||||
SPINEL_PROP_MESHCOP__END = 0x90,
|
||||
|
||||
// Thread Commissioner State
|
||||
/** Format `C`
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* The valid values are specified by SPINEL_MESHCOP_COMMISIONER_STATE_<state> enumeration.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_STATE = SPINEL_PROP_MESHCOP__BEGIN + 2,
|
||||
|
||||
// Thread Commissioner Joiners
|
||||
/** Format `A(t(E)UL)` - insert or remove only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* Data per item is:
|
||||
*
|
||||
* `t(E)` | `t()`: Joiner EUI64. Empty struct indicates any Joiner
|
||||
* `L` : Timeout (in seconds) after which the Joiner is automatically removed
|
||||
* `U` : PSKd
|
||||
*
|
||||
* For CMD_PROP_VALUE_REMOVE the timeout and PSKd are optional.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_JOINERS = SPINEL_PROP_MESHCOP__BEGIN + 3,
|
||||
|
||||
// Thread Commissioner Provisioning URL
|
||||
/** Format `U`
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_PROVISIONING_URL = SPINEL_PROP_MESHCOP__BEGIN + 4,
|
||||
|
||||
// Thread Commissioner Session ID
|
||||
/** Format `S` - Read only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_SESSION_ID = SPINEL_PROP_MESHCOP__BEGIN + 5,
|
||||
|
||||
SPINEL_PROP_MESHCOP__END = 0x90,
|
||||
|
||||
SPINEL_PROP_MESHCOP_EXT__BEGIN = 0x1800,
|
||||
SPINEL_PROP_MESHCOP_EXT__END = 0x1900,
|
||||
|
||||
// Thread Commissioner Announce Begin
|
||||
/** Format `LCS6` - Write only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* Writing to this property sends an Announce Begin message with the specified parameters. Response is a
|
||||
* `LAST_STATUS` update with status of operation.
|
||||
*
|
||||
* `L` : Channel mask
|
||||
* `C` : Number of messages per channel
|
||||
* `S` : The time between two successive MLE Announce transmissions (milliseconds)
|
||||
* `6` : IPv6 destination
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_ANNOUNCE_BEGIN = SPINEL_PROP_MESHCOP_EXT__BEGIN + 0,
|
||||
|
||||
// Thread Commissioner Energy Scan Query
|
||||
/** Format `LCSS6` - Write only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* Writing to this property sends an Energy Scan Query message with the specified parameters. Response is a
|
||||
* `LAST_STATUS` with status of operation. The energy scan results are emitted asynchronously through
|
||||
* `SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN_RESULT` updates.
|
||||
*
|
||||
* Format is:
|
||||
*
|
||||
* `L` : Channel mask
|
||||
* `C` : The number of energy measurements per channel
|
||||
* `S` : The time between energy measurements (milliseconds)
|
||||
* `S` : The scan duration for each energy measurement (milliseconds)
|
||||
* `6` : IPv6 destination.
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN = SPINEL_PROP_MESHCOP_EXT__BEGIN + 1,
|
||||
|
||||
// Thread Commissioner Energy Scan Result
|
||||
/** Format `Ld` - Asynchronous event only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* This property provides asynchronous `CMD_PROP_VALUE_INSERTED` updates to report energy scan results for a
|
||||
* previously sent Energy Scan Query message (please see `SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN`).
|
||||
*
|
||||
* Format is:
|
||||
*
|
||||
* `L` : Channel mask
|
||||
* `d` : Energy measurement data (note that `d` encoding includes the length)
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_ENERGY_SCAN_RESULT = SPINEL_PROP_MESHCOP_EXT__BEGIN + 2,
|
||||
|
||||
// Thread Commissioner PAN ID Query
|
||||
/** Format `SL6` - Write only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* Writing to this property sends a PAN ID Query message with the specified parameters. Response is a
|
||||
* `LAST_STATUS` with status of operation. The PAN ID Conflict results are emitted asynchronously through
|
||||
* `SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_CONFLICT_RESULT` updates.
|
||||
*
|
||||
* Format is:
|
||||
*
|
||||
* `S` : PAN ID to query
|
||||
* `L` : Channel mask
|
||||
* `6` : IPv6 destination
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY = SPINEL_PROP_MESHCOP_EXT__BEGIN + 3,
|
||||
|
||||
// Thread Commissioner PAN ID Conflict Result
|
||||
/** Format `SL` - Asynchronous event only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* This property provides asynchronous `CMD_PROP_VALUE_INSERTED` updates to report PAN ID conflict results for a
|
||||
* previously sent PAN ID Query message (please see `SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_QUERY`).
|
||||
*
|
||||
* Format is:
|
||||
*
|
||||
* `S` : The PAN ID
|
||||
* `L` : Channel mask
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_PAN_ID_CONFLICT_RESULT = SPINEL_PROP_MESHCOP_EXT__BEGIN + 4,
|
||||
|
||||
// Thread Commissioner Send MGMT_COMMISSIONER_GET
|
||||
/** Format `d` - Write only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* Writing to this property sends a MGMT_COMMISSIONER_GET message with the specified parameters. Response is a
|
||||
* `LAST_STATUS` with status of operation.
|
||||
*
|
||||
* Format is:
|
||||
*
|
||||
* `d` : List of TLV types to get
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_GET = SPINEL_PROP_MESHCOP_EXT__BEGIN + 5,
|
||||
|
||||
// Thread Commissioner Send MGMT_COMMISSIONER_SET
|
||||
/** Format `d` - Write only
|
||||
*
|
||||
* Required capability: SPINEL_CAP_THREAD_COMMISSIONER
|
||||
*
|
||||
* Writing to this property sends a MGMT_COMMISSIONER_SET message with the specified parameters. Response is a
|
||||
* `LAST_STATUS` with status of operation.
|
||||
*
|
||||
* Format is:
|
||||
*
|
||||
* `d` : TLV encoded data
|
||||
*
|
||||
*/
|
||||
SPINEL_PROP_MESHCOP_COMMISSIONER_MGMT_SET = SPINEL_PROP_MESHCOP_EXT__BEGIN + 6,
|
||||
|
||||
SPINEL_PROP_MESHCOP_EXT__END = 0x1900,
|
||||
|
||||
SPINEL_PROP_OPENTHREAD__BEGIN = 0x1900,
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ fi
|
||||
--enable-service \
|
||||
--enable-channel-monitor \
|
||||
--enable-channel-manager \
|
||||
--enable-commissioner \
|
||||
--disable-docs \
|
||||
--disable-test || die
|
||||
|
||||
|
||||
Reference in New Issue
Block a user