[ncp] add support for Spinel vendor specific commands (#2117)

This commit is contained in:
pvanhorn
2017-08-21 21:31:04 -07:00
committed by Jonathan Hui
parent 296f057d44
commit 91d1055d5a
3 changed files with 57 additions and 12 deletions
+33
View File
@@ -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
View File
@@ -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:
+4
View File
@@ -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);