From a7cf10e44c7d7648b9883d20f8a547012f5dc129 Mon Sep 17 00:00:00 2001 From: Robert Quattlebaum Date: Tue, 31 May 2016 14:52:41 -0700 Subject: [PATCH] ncp: Support for `PROP_MAC_FILTER_MODE`. (#94) --- src/ncp/ncp_base.cpp | 26 +++++++++++++++++++------- src/ncp/ncp_base.hpp | 1 + 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/ncp/ncp_base.cpp b/src/ncp/ncp_base.cpp index 18c470f11..4be4e9cb8 100644 --- a/src/ncp/ncp_base.cpp +++ b/src/ncp/ncp_base.cpp @@ -81,6 +81,7 @@ const NcpBase::GetPropertyHandlerEntry NcpBase::mGetPropertyHandlerTable[] = { SPINEL_PROP_MAC_15_4_PANID, &NcpBase::GetPropertyHandler_MAC_15_4_PANID }, { SPINEL_PROP_MAC_15_4_LADDR, &NcpBase::GetPropertyHandler_MAC_15_4_LADDR }, { SPINEL_PROP_MAC_15_4_SADDR, &NcpBase::GetPropertyHandler_MAC_15_4_SADDR }, + { SPINEL_PROP_MAC_FILTER_MODE, &NcpBase::GetPropertyHandler_MAC_FILTER_MODE }, { SPINEL_PROP_NET_ENABLED, &NcpBase::GetPropertyHandler_NET_ENABLED }, { SPINEL_PROP_NET_STATE, &NcpBase::GetPropertyHandler_NET_STATE }, @@ -1114,6 +1115,19 @@ void NcpBase::GetPropertyHandler_MAC_15_4_PANID(uint8_t header, spinel_prop_key_ ); } +void NcpBase::GetPropertyHandler_MAC_FILTER_MODE(uint8_t header, spinel_prop_key_t key) +{ + SendPropteryUpdate( + header, + SPINEL_CMD_PROP_VALUE_IS, + key, + SPINEL_DATATYPE_INT8_S, + otPlatRadioGetPromiscuous() + ? SPINEL_MAC_FILTER_MODE_15_4_PROMISCUOUS + : SPINEL_MAC_FILTER_MODE_NORMAL + ); +} + void NcpBase::GetPropertyHandler_MAC_15_4_LADDR(uint8_t header, spinel_prop_key_t key) { SendPropteryUpdate( @@ -1642,24 +1656,22 @@ void NcpBase::SetPropertyHandler_MAC_FILTER_MODE(uint8_t header, spinel_prop_key if (parsedLength > 0) { - errorCode = kThreadError_NotImplemented; - - /* Uncomment when API is available. switch (i) { case SPINEL_MAC_FILTER_MODE_NORMAL: - errorCode = otPlatRadioSetPromiscuous(false); + otPlatRadioSetPromiscuous(false); + errorCode = kThreadError_None; break; case SPINEL_MAC_FILTER_MODE_PROMISCUOUS: case SPINEL_MAC_FILTER_MODE_MONITOR: - errorCode = otPlatRadioSetPromiscuous(true); + otPlatRadioSetPromiscuous(true); + errorCode = kThreadError_None; break; } - */ if (errorCode == kThreadError_None) { - SendLastStatus(header, SPINEL_STATUS_OK); + HandleCommandPropertyGet(header, key); } else { diff --git a/src/ncp/ncp_base.hpp b/src/ncp/ncp_base.hpp index 9540dd06d..278e90794 100644 --- a/src/ncp/ncp_base.hpp +++ b/src/ncp/ncp_base.hpp @@ -227,6 +227,7 @@ private: void GetPropertyHandler_THREAD_NETWORK_DATA_VERSION(uint8_t header, spinel_prop_key_t key); void GetPropertyHandler_THREAD_STABLE_NETWORK_DATA(uint8_t header, spinel_prop_key_t key); void GetPropertyHandler_THREAD_STABLE_NETWORK_DATA_VERSION(uint8_t header, spinel_prop_key_t key); + void GetPropertyHandler_MAC_FILTER_MODE(uint8_t header, spinel_prop_key_t key); void SetPropertyHandler_POWER_STATE(uint8_t header, spinel_prop_key_t key, const uint8_t *value_ptr, uint16_t value_len);