mirror of
https://github.com/espressif/openthread.git
synced 2026-09-14 05:00:11 +00:00
[ncp] add support for Spinel vendor specific commands (#2117)
This commit is contained in:
@@ -860,6 +860,38 @@ AC_SUBST(OPENTHREAD_ENABLE_LEGACY)
|
||||
AM_CONDITIONAL([OPENTHREAD_ENABLE_LEGACY], [test "${enable_legacy}" = "yes"])
|
||||
AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_LEGACY],[${OPENTHREAD_ENABLE_LEGACY}],[Define to 1 if you want to use legacy network support])
|
||||
|
||||
#
|
||||
# Vendor Specific Spinel Command Handler
|
||||
#
|
||||
|
||||
AC_ARG_ENABLE(spinelvendor,
|
||||
[AS_HELP_STRING([--enable-spinelvendor],[Enable Spinel vendor command support @<:@default=no@:>@.])],
|
||||
[
|
||||
case "${enableval}" in
|
||||
|
||||
no|yes)
|
||||
enable_vendor=${enableval}
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_ERROR([Invalid value ${enable_vendor} for --enable-spinelvendor])
|
||||
;;
|
||||
esac
|
||||
],
|
||||
[enable_vendor=no])
|
||||
|
||||
if test "$enable_vendor" = "yes"; then
|
||||
OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT=1
|
||||
else
|
||||
OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT=0
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([whether to enable spinel vendor command support])
|
||||
AC_MSG_RESULT(${enable_vendor})
|
||||
AC_SUBST(OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT)
|
||||
AM_CONDITIONAL([OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT], [test "${enable_vendor}" = "yes"])
|
||||
AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT],[${OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT}],[Define to 1 if you want to implement Spinel vendor command support])
|
||||
|
||||
#
|
||||
# Child Supervision
|
||||
#
|
||||
@@ -1473,6 +1505,7 @@ AC_MSG_NOTICE([
|
||||
OpenThread MAC Filter support : ${enable_mac_filter}
|
||||
OpenThread Diagnostics support : ${enable_diag}
|
||||
OpenThread Child Supervision support : ${enable_child_supervision}
|
||||
OpenThread Spinel vendor specific support : ${enable_vendor}
|
||||
OpenThread Legacy network support : ${enable_legacy}
|
||||
OpenThread Certification log support : ${enable_cert_log}
|
||||
OpenThread DHCPv6 Server support : ${enable_dhcp6_server}
|
||||
|
||||
+20
-12
@@ -1000,22 +1000,30 @@ otError NcpBase::HandleCommand(uint8_t aHeader, unsigned int aCommand, const uin
|
||||
SPINEL_HEADER_GET_IID(aHeader) == 0,
|
||||
error = SendLastStatus(aHeader, SPINEL_STATUS_INVALID_INTERFACE)
|
||||
);
|
||||
|
||||
for (i = 0; i < sizeof(mCommandHandlerTable) / sizeof(mCommandHandlerTable[0]); i++)
|
||||
#if OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT
|
||||
if (aCommand >= SPINEL_CMD_VENDOR__BEGIN && aCommand < SPINEL_CMD_VENDOR__END)
|
||||
{
|
||||
if (mCommandHandlerTable[i].mCommand == aCommand)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < sizeof(mCommandHandlerTable) / sizeof(mCommandHandlerTable[0]))
|
||||
{
|
||||
error = (this->*mCommandHandlerTable[i].mHandler)(aHeader, aCommand, aArgPtr, aArgLen);
|
||||
error = VendorCommandHandler(aHeader, aCommand, aArgPtr, aArgLen);
|
||||
}
|
||||
else
|
||||
#endif // OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT
|
||||
{
|
||||
error = SendLastStatus(aHeader, SPINEL_STATUS_INVALID_COMMAND);
|
||||
for (i = 0; i < sizeof(mCommandHandlerTable) / sizeof(mCommandHandlerTable[0]); i++)
|
||||
{
|
||||
if (mCommandHandlerTable[i].mCommand == aCommand)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < sizeof(mCommandHandlerTable) / sizeof(mCommandHandlerTable[0]))
|
||||
{
|
||||
error = (this->*mCommandHandlerTable[i].mHandler)(aHeader, aCommand, aArgPtr, aArgLen);
|
||||
}
|
||||
else
|
||||
{
|
||||
error = SendLastStatus(aHeader, SPINEL_STATUS_INVALID_COMMAND);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
|
||||
@@ -371,6 +371,10 @@ private:
|
||||
void HandleTmfProxyStream(otMessage *aMessage, uint16_t aLocator, uint16_t aPort);
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_ENABLE_TMF_PROXY
|
||||
|
||||
#if OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT
|
||||
otError VendorCommandHandler(uint8_t aHeader, unsigned int aCommand, const uint8_t *aArgPtr, uint16_t aArgLen);
|
||||
#endif // OPENTHREAD_ENABLE_SPINEL_VENDOR_SUPPORT
|
||||
|
||||
NCP_COMMAND_HANDLER(NOOP);
|
||||
NCP_COMMAND_HANDLER(RESET);
|
||||
NCP_COMMAND_HANDLER(PROP_VALUE_GET);
|
||||
|
||||
Reference in New Issue
Block a user