diff --git a/etc/visual-studio/libopenthread-ncp-spi.vcxproj b/etc/visual-studio/libopenthread-ncp-spi.vcxproj
index 5d1ea4b36..3770cd51a 100644
--- a/etc/visual-studio/libopenthread-ncp-spi.vcxproj
+++ b/etc/visual-studio/libopenthread-ncp-spi.vcxproj
@@ -63,6 +63,7 @@
+
diff --git a/etc/visual-studio/libopenthread-ncp-spi.vcxproj.filters b/etc/visual-studio/libopenthread-ncp-spi.vcxproj.filters
index 5b94a7cdb..7082eee17 100644
--- a/etc/visual-studio/libopenthread-ncp-spi.vcxproj.filters
+++ b/etc/visual-studio/libopenthread-ncp-spi.vcxproj.filters
@@ -30,6 +30,9 @@
Source Files
+
+ Source Files
+
Source Files
diff --git a/etc/visual-studio/libopenthread-ncp-uart.vcxproj b/etc/visual-studio/libopenthread-ncp-uart.vcxproj
index aadb336dc..61d63a766 100644
--- a/etc/visual-studio/libopenthread-ncp-uart.vcxproj
+++ b/etc/visual-studio/libopenthread-ncp-uart.vcxproj
@@ -64,6 +64,7 @@
+
diff --git a/etc/visual-studio/libopenthread-ncp-uart.vcxproj.filters b/etc/visual-studio/libopenthread-ncp-uart.vcxproj.filters
index 544d4c8ea..ab01236f6 100644
--- a/etc/visual-studio/libopenthread-ncp-uart.vcxproj.filters
+++ b/etc/visual-studio/libopenthread-ncp-uart.vcxproj.filters
@@ -33,6 +33,9 @@
Source Files
+
+ Source Files
+
Source Files
diff --git a/src/ncp/Makefile.am b/src/ncp/Makefile.am
index 0c3bf38da..0519c4141 100644
--- a/src/ncp/Makefile.am
+++ b/src/ncp/Makefile.am
@@ -76,6 +76,7 @@ COMMON_SOURCES = \
ncp_base_ftd.cpp \
ncp_base_mtd.cpp \
ncp_base_radio.cpp \
+ ncp_base_dispatcher.cpp \
ncp_buffer.cpp \
ncp_buffer.hpp \
ncp_spi.cpp \
diff --git a/src/ncp/ncp_base.cpp b/src/ncp/ncp_base.cpp
index 4b0ddb4b4..56bd55fad 100644
--- a/src/ncp/ncp_base.cpp
+++ b/src/ncp/ncp_base.cpp
@@ -49,395 +49,6 @@
namespace ot {
namespace Ncp {
-// ----------------------------------------------------------------------------
-// MARK: Property Handler Jump Tables and Methods
-// ----------------------------------------------------------------------------
-
-#define NCP_GET_PROP_HANDLER_ENTRY(name) \
- { \
- SPINEL_PROP_##name, &NcpBase::GetPropertyHandler_##name \
- }
-
-const NcpBase::PropertyHandlerEntry NcpBase::mGetPropertyHandlerTable[] = {
- NCP_GET_PROP_HANDLER_ENTRY(CAPS),
- NCP_GET_PROP_HANDLER_ENTRY(DEBUG_TEST_ASSERT),
- NCP_GET_PROP_HANDLER_ENTRY(DEBUG_TEST_WATCHDOG),
- NCP_GET_PROP_HANDLER_ENTRY(DEBUG_NCP_LOG_LEVEL),
- NCP_GET_PROP_HANDLER_ENTRY(HWADDR),
- NCP_GET_PROP_HANDLER_ENTRY(HOST_POWER_STATE),
- NCP_GET_PROP_HANDLER_ENTRY(INTERFACE_COUNT),
- NCP_GET_PROP_HANDLER_ENTRY(INTERFACE_TYPE),
- NCP_GET_PROP_HANDLER_ENTRY(LAST_STATUS),
- NCP_GET_PROP_HANDLER_ENTRY(LOCK),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_ENABLED),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_CHAN),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_RX_SENSITIVITY),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_TX_POWER),
- NCP_GET_PROP_HANDLER_ENTRY(POWER_STATE),
- NCP_GET_PROP_HANDLER_ENTRY(MCU_POWER_STATE),
- NCP_GET_PROP_HANDLER_ENTRY(PROTOCOL_VERSION),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_15_4_PANID),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_15_4_LADDR),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_15_4_SADDR),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_RAW_STREAM_ENABLED),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_PROMISCUOUS_MODE),
- NCP_GET_PROP_HANDLER_ENTRY(NCP_VERSION),
- NCP_GET_PROP_HANDLER_ENTRY(UNSOL_UPDATE_FILTER),
- NCP_GET_PROP_HANDLER_ENTRY(UNSOL_UPDATE_LIST),
- NCP_GET_PROP_HANDLER_ENTRY(VENDOR_ID),
-#if OPENTHREAD_MTD || OPENTHREAD_FTD
- NCP_GET_PROP_HANDLER_ENTRY(MAC_DATA_POLL_PERIOD),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_EXTENDED_ADDR),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_SCAN_STATE),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_SCAN_MASK),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_SCAN_PERIOD),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_CCA_FAILURE_RATE),
-#if OPENTHREAD_ENABLE_MAC_FILTER
- NCP_GET_PROP_HANDLER_ENTRY(MAC_BLACKLIST),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_BLACKLIST_ENABLED),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_FIXED_RSS),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_WHITELIST),
- NCP_GET_PROP_HANDLER_ENTRY(MAC_WHITELIST_ENABLED),
-#endif
- NCP_GET_PROP_HANDLER_ENTRY(MSG_BUFFER_COUNTERS),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_CHAN_SUPPORTED),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_FREQ),
- NCP_GET_PROP_HANDLER_ENTRY(PHY_RSSI),
- NCP_GET_PROP_HANDLER_ENTRY(NET_IF_UP),
- NCP_GET_PROP_HANDLER_ENTRY(NET_KEY_SEQUENCE_COUNTER),
- NCP_GET_PROP_HANDLER_ENTRY(NET_KEY_SWITCH_GUARDTIME),
- NCP_GET_PROP_HANDLER_ENTRY(NET_MASTER_KEY),
- NCP_GET_PROP_HANDLER_ENTRY(NET_NETWORK_NAME),
- NCP_GET_PROP_HANDLER_ENTRY(NET_PARTITION_ID),
- NCP_GET_PROP_HANDLER_ENTRY(NET_REQUIRE_JOIN_EXISTING),
- NCP_GET_PROP_HANDLER_ENTRY(NET_ROLE),
- NCP_GET_PROP_HANDLER_ENTRY(NET_SAVED),
- NCP_GET_PROP_HANDLER_ENTRY(NET_STACK_UP),
- NCP_GET_PROP_HANDLER_ENTRY(NET_XPANID),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ALLOW_LOCAL_NET_DATA_CHANGE),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ASSISTING_PORTS),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_CHILD_TIMEOUT),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_DISCOVERY_SCAN_JOINER_FLAG),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_DISCOVERY_SCAN_ENABLE_FILTERING),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_DISCOVERY_SCAN_PANID),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_LEADER_ADDR),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_LEADER_NETWORK_DATA),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_LEADER_RID),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_MODE),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_NEIGHBOR_TABLE),
-#if OPENTHREAD_CONFIG_ENABLE_TX_ERROR_RATE_TRACKING
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_NEIGHBOR_TABLE_ERROR_RATES),
-#endif
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_NETWORK_DATA_VERSION),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_OFF_MESH_ROUTES),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ON_MESH_NETS),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_PARENT),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_RLOC16),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_RLOC16_DEBUG_PASSTHRU),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_STABLE_LEADER_NETWORK_DATA),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_STABLE_NETWORK_DATA_VERSION),
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_NETWORK_DATA),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_STABLE_NETWORK_DATA),
-#endif
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ACTIVE_DATASET),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_PENDING_DATASET),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_ADDRESS_TABLE),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_ICMP_PING_OFFLOAD),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_ICMP_PING_OFFLOAD_MODE),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_LL_ADDR),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_ML_PREFIX),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_ML_ADDR),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_MULTICAST_ADDRESS_TABLE),
- NCP_GET_PROP_HANDLER_ENTRY(IPV6_ROUTE_TABLE),
-#if OPENTHREAD_ENABLE_JAM_DETECTION
- NCP_GET_PROP_HANDLER_ENTRY(JAM_DETECT_ENABLE),
- NCP_GET_PROP_HANDLER_ENTRY(JAM_DETECTED),
- NCP_GET_PROP_HANDLER_ENTRY(JAM_DETECT_RSSI_THRESHOLD),
- NCP_GET_PROP_HANDLER_ENTRY(JAM_DETECT_WINDOW),
- NCP_GET_PROP_HANDLER_ENTRY(JAM_DETECT_BUSY),
- NCP_GET_PROP_HANDLER_ENTRY(JAM_DETECT_HISTORY_BITMAP),
-#endif
-#if OPENTHREAD_ENABLE_CHANNEL_MONITOR
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MONITOR_SAMPLE_INTERVAL),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MONITOR_RSSI_THRESHOLD),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MONITOR_SAMPLE_WINDOW),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MONITOR_SAMPLE_COUNT),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MONITOR_CHANNEL_OCCUPANCY),
-#endif
-#if OPENTHREAD_ENABLE_LEGACY
- NCP_GET_PROP_HANDLER_ENTRY(NEST_LEGACY_ULA_PREFIX),
- NCP_GET_PROP_HANDLER_ENTRY(NEST_LEGACY_LAST_NODE_JOINED),
-#endif
- // MAC counters
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_ACK_REQ),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_ACKED),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_NO_ACK_REQ),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_DATA),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_DATA_POLL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_BEACON),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_BEACON_REQ),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_OTHER),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_RETRY),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_UNICAST),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_PKT_BROADCAST),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_ERR_CCA),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_ERR_ABORT),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_DATA),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_DATA_POLL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_BEACON),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_BEACON_REQ),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_OTHER),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_FILT_WL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_FILT_DA),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_UNICAST),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_BROADCAST),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_ERR_EMPTY),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_ERR_UKWN_NBR),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_ERR_NVLD_SADDR),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_ERR_SECURITY),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_ERR_BAD_FCS),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_ERR_OTHER),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_PKT_DUP),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_ALL_MAC_COUNTERS),
- // NCP counters
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_IP_SEC_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_IP_INSEC_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_IP_DROPPED),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_IP_SEC_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_IP_INSEC_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_IP_DROPPED),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_TX_SPINEL_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_SPINEL_TOTAL),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_RX_SPINEL_ERR),
- // IP counters
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_IP_TX_SUCCESS),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_IP_RX_SUCCESS),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_IP_TX_FAILURE),
- NCP_GET_PROP_HANDLER_ENTRY(CNTR_IP_RX_FAILURE),
-#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_NETWORK_TIME),
-#endif
-#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
-
-#if OPENTHREAD_FTD
- NCP_GET_PROP_HANDLER_ENTRY(NET_PSKC),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_LEADER_WEIGHT),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_CHILD_TABLE),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_CHILD_TABLE_ADDRESSES),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ROUTER_TABLE),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_LOCAL_LEADER_WEIGHT),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ROUTER_ROLE_ENABLED),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_CHILD_COUNT_MAX),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ROUTER_UPGRADE_THRESHOLD),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ROUTER_DOWNGRADE_THRESHOLD),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_CONTEXT_REUSE_DELAY),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_NETWORK_ID_TIMEOUT),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ROUTER_SELECTION_JITTER),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_PREFERRED_ROUTER_ID),
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_ADDRESS_CACHE_TABLE),
-#if OPENTHREAD_ENABLE_COMMISSIONER
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_COMMISSIONER_ENABLED),
-#endif
-#if OPENTHREAD_ENABLE_TMF_PROXY
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_TMF_PROXY_ENABLED),
-#endif
-#if OPENTHREAD_CONFIG_ENABLE_STEERING_DATA_SET_OOB
- NCP_GET_PROP_HANDLER_ENTRY(THREAD_STEERING_DATA),
-#endif
-#if OPENTHREAD_ENABLE_CHANNEL_MANAGER
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_NEW_CHANNEL),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_DELAY),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_SUPPORTED_CHANNELS),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_FAVORED_CHANNELS),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_CHANNEL_SELECT),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_AUTO_SELECT_ENABLED),
- NCP_GET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_AUTO_SELECT_INTERVAL),
-#endif
-#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
- NCP_GET_PROP_HANDLER_ENTRY(TIME_SYNC_PERIOD),
- NCP_GET_PROP_HANDLER_ENTRY(TIME_SYNC_XTAL_THRESHOLD),
-#endif
-
-#endif // OPENTHREAD_FTD
-
-#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
- NCP_GET_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_ENABLED),
-#endif
-};
-
-#define NCP_SET_PROP_HANDLER_ENTRY(name) \
- { \
- SPINEL_PROP_##name, &NcpBase::SetPropertyHandler_##name \
- }
-
-const NcpBase::PropertyHandlerEntry NcpBase::mSetPropertyHandlerTable[] = {
-#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
- NCP_SET_PROP_HANDLER_ENTRY(MAC_15_4_SADDR),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_ENABLED),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_SHORT_ADDRESSES),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_EXTENDED_ADDRESSES),
- NCP_SET_PROP_HANDLER_ENTRY(PHY_ENABLED),
-#endif // OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
- NCP_SET_PROP_HANDLER_ENTRY(POWER_STATE),
- NCP_SET_PROP_HANDLER_ENTRY(MCU_POWER_STATE),
- NCP_SET_PROP_HANDLER_ENTRY(UNSOL_UPDATE_FILTER),
- NCP_SET_PROP_HANDLER_ENTRY(PHY_TX_POWER),
- NCP_SET_PROP_HANDLER_ENTRY(PHY_CHAN),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_PROMISCUOUS_MODE),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_15_4_PANID),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_15_4_LADDR),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_RAW_STREAM_ENABLED),
-#if OPENTHREAD_MTD || OPENTHREAD_FTD
- NCP_SET_PROP_HANDLER_ENTRY(MAC_DATA_POLL_PERIOD),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_SCAN_MASK),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_SCAN_STATE),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_SCAN_PERIOD),
- NCP_SET_PROP_HANDLER_ENTRY(NET_IF_UP),
- NCP_SET_PROP_HANDLER_ENTRY(NET_STACK_UP),
- NCP_SET_PROP_HANDLER_ENTRY(NET_ROLE),
- NCP_SET_PROP_HANDLER_ENTRY(NET_NETWORK_NAME),
- NCP_SET_PROP_HANDLER_ENTRY(NET_XPANID),
- NCP_SET_PROP_HANDLER_ENTRY(NET_MASTER_KEY),
- NCP_SET_PROP_HANDLER_ENTRY(NET_KEY_SEQUENCE_COUNTER),
- NCP_SET_PROP_HANDLER_ENTRY(NET_KEY_SWITCH_GUARDTIME),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ASSISTING_PORTS),
- NCP_SET_PROP_HANDLER_ENTRY(STREAM_NET_INSECURE),
- NCP_SET_PROP_HANDLER_ENTRY(STREAM_NET),
- NCP_SET_PROP_HANDLER_ENTRY(IPV6_ML_PREFIX),
- NCP_SET_PROP_HANDLER_ENTRY(IPV6_ICMP_PING_OFFLOAD),
- NCP_SET_PROP_HANDLER_ENTRY(IPV6_ICMP_PING_OFFLOAD_MODE),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_RLOC16_DEBUG_PASSTHRU),
-#if OPENTHREAD_ENABLE_MAC_FILTER
- NCP_SET_PROP_HANDLER_ENTRY(MAC_WHITELIST),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_WHITELIST_ENABLED),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_BLACKLIST),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_BLACKLIST_ENABLED),
- NCP_SET_PROP_HANDLER_ENTRY(MAC_FIXED_RSS),
-#endif
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_MODE),
- NCP_SET_PROP_HANDLER_ENTRY(NET_REQUIRE_JOIN_EXISTING),
- NCP_SET_PROP_HANDLER_ENTRY(DEBUG_NCP_LOG_LEVEL),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_DISCOVERY_SCAN_JOINER_FLAG),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_DISCOVERY_SCAN_ENABLE_FILTERING),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_DISCOVERY_SCAN_PANID),
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ALLOW_LOCAL_NET_DATA_CHANGE),
-#endif
-#if OPENTHREAD_ENABLE_JAM_DETECTION
- NCP_SET_PROP_HANDLER_ENTRY(JAM_DETECT_ENABLE),
- NCP_SET_PROP_HANDLER_ENTRY(JAM_DETECT_RSSI_THRESHOLD),
- NCP_SET_PROP_HANDLER_ENTRY(JAM_DETECT_WINDOW),
- NCP_SET_PROP_HANDLER_ENTRY(JAM_DETECT_BUSY),
-#endif
-#if OPENTHREAD_ENABLE_LEGACY
- NCP_SET_PROP_HANDLER_ENTRY(NEST_LEGACY_ULA_PREFIX),
-#endif
- NCP_SET_PROP_HANDLER_ENTRY(CNTR_RESET),
-#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
-#if OPENTHREAD_FTD
- NCP_SET_PROP_HANDLER_ENTRY(NET_PSKC),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_CHILD_TIMEOUT),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_NETWORK_ID_TIMEOUT),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_LOCAL_LEADER_WEIGHT),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ROUTER_ROLE_ENABLED),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_CHILD_COUNT_MAX),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ROUTER_UPGRADE_THRESHOLD),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ROUTER_DOWNGRADE_THRESHOLD),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_CONTEXT_REUSE_DELAY),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ROUTER_SELECTION_JITTER),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_PREFERRED_ROUTER_ID),
-#if OPENTHREAD_CONFIG_ENABLE_STEERING_DATA_SET_OOB
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_STEERING_DATA),
-#endif
-#if OPENTHREAD_ENABLE_TMF_PROXY
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_TMF_PROXY_ENABLED),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_TMF_PROXY_STREAM),
-#endif
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_ACTIVE_DATASET),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_PENDING_DATASET),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_MGMT_ACTIVE_DATASET),
- NCP_SET_PROP_HANDLER_ENTRY(THREAD_MGMT_PENDING_DATASET),
-#if OPENTHREAD_ENABLE_CHANNEL_MANAGER
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_NEW_CHANNEL),
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_DELAY),
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_SUPPORTED_CHANNELS),
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_FAVORED_CHANNELS),
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_CHANNEL_SELECT),
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_AUTO_SELECT_ENABLED),
- NCP_SET_PROP_HANDLER_ENTRY(CHANNEL_MANAGER_AUTO_SELECT_INTERVAL),
-#endif
-#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
- NCP_SET_PROP_HANDLER_ENTRY(TIME_SYNC_PERIOD),
- NCP_SET_PROP_HANDLER_ENTRY(TIME_SYNC_XTAL_THRESHOLD),
-#endif
-#endif // #if OPENTHREAD_FTD
-};
-
-#define NCP_INSERT_PROP_HANDLER_ENTRY(name) \
- { \
- SPINEL_PROP_##name, &NcpBase::InsertPropertyHandler_##name \
- }
-
-const NcpBase::PropertyHandlerEntry NcpBase::mInsertPropertyHandlerTable[] = {
- NCP_INSERT_PROP_HANDLER_ENTRY(UNSOL_UPDATE_FILTER),
-#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
- NCP_INSERT_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_SHORT_ADDRESSES),
- NCP_INSERT_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_EXTENDED_ADDRESSES),
-#endif
-#if OPENTHREAD_MTD || OPENTHREAD_FTD
- NCP_INSERT_PROP_HANDLER_ENTRY(IPV6_ADDRESS_TABLE),
- NCP_INSERT_PROP_HANDLER_ENTRY(IPV6_MULTICAST_ADDRESS_TABLE),
- NCP_INSERT_PROP_HANDLER_ENTRY(THREAD_ASSISTING_PORTS),
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_INSERT_PROP_HANDLER_ENTRY(THREAD_OFF_MESH_ROUTES),
- NCP_INSERT_PROP_HANDLER_ENTRY(THREAD_ON_MESH_NETS),
-#endif
-#if OPENTHREAD_ENABLE_MAC_FILTER
- NCP_INSERT_PROP_HANDLER_ENTRY(MAC_WHITELIST),
- NCP_INSERT_PROP_HANDLER_ENTRY(MAC_BLACKLIST),
- NCP_INSERT_PROP_HANDLER_ENTRY(MAC_FIXED_RSS),
-#endif
-#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
-#if OPENTHREAD_FTD
-#if OPENTHREAD_ENABLE_COMMISSIONER
- NCP_INSERT_PROP_HANDLER_ENTRY(THREAD_JOINERS),
-#endif
-#endif // OPENTHREAD_FTD
-};
-
-#define NCP_REMOVE_PROP_HANDLER_ENTRY(name) \
- { \
- SPINEL_PROP_##name, &NcpBase::RemovePropertyHandler_##name \
- }
-
-const NcpBase::PropertyHandlerEntry NcpBase::mRemovePropertyHandlerTable[] = {
- NCP_REMOVE_PROP_HANDLER_ENTRY(UNSOL_UPDATE_FILTER),
-#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
- NCP_REMOVE_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_SHORT_ADDRESSES),
- NCP_REMOVE_PROP_HANDLER_ENTRY(MAC_SRC_MATCH_EXTENDED_ADDRESSES),
-#endif
-#if OPENTHREAD_MTD || OPENTHREAD_FTD
- NCP_REMOVE_PROP_HANDLER_ENTRY(IPV6_ADDRESS_TABLE),
- NCP_REMOVE_PROP_HANDLER_ENTRY(IPV6_MULTICAST_ADDRESS_TABLE),
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_REMOVE_PROP_HANDLER_ENTRY(THREAD_OFF_MESH_ROUTES),
- NCP_REMOVE_PROP_HANDLER_ENTRY(THREAD_ON_MESH_NETS),
-#endif
- NCP_REMOVE_PROP_HANDLER_ENTRY(THREAD_ASSISTING_PORTS),
-#if OPENTHREAD_ENABLE_MAC_FILTER
- NCP_REMOVE_PROP_HANDLER_ENTRY(MAC_WHITELIST),
- NCP_REMOVE_PROP_HANDLER_ENTRY(MAC_BLACKLIST),
- NCP_REMOVE_PROP_HANDLER_ENTRY(MAC_FIXED_RSS),
-#endif
-#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
-#if OPENTHREAD_FTD
- NCP_REMOVE_PROP_HANDLER_ENTRY(THREAD_ACTIVE_ROUTER_IDS),
-#endif
-};
-
// ----------------------------------------------------------------------------
// MARK: Utility Functions
// ----------------------------------------------------------------------------
@@ -1320,46 +931,6 @@ exit:
// MARK: Property Get/Set/Insert/Remove Commands
// ----------------------------------------------------------------------------
-NcpBase::PropertyHandler NcpBase::FindPropertyHandler(spinel_prop_key_t aKey,
- const PropertyHandlerEntry *aTableEntry,
- size_t aTableLen)
-{
- PropertyHandler handler = NULL;
-
- while (aTableLen--)
- {
- if (aTableEntry->mPropKey == aKey)
- {
- handler = aTableEntry->mHandler;
- break;
- }
-
- aTableEntry++;
- }
-
- return handler;
-}
-
-NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
-{
- return FindPropertyHandler(aKey, mGetPropertyHandlerTable, OT_ARRAY_LENGTH(mGetPropertyHandlerTable));
-}
-
-NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
-{
- return FindPropertyHandler(aKey, mSetPropertyHandlerTable, OT_ARRAY_LENGTH(mSetPropertyHandlerTable));
-}
-
-NcpBase::PropertyHandler NcpBase::FindInsertPropertyHandler(spinel_prop_key_t aKey)
-{
- return FindPropertyHandler(aKey, mInsertPropertyHandlerTable, OT_ARRAY_LENGTH(mInsertPropertyHandlerTable));
-}
-
-NcpBase::PropertyHandler NcpBase::FindRemovePropertyHandler(spinel_prop_key_t aKey)
-{
- return FindPropertyHandler(aKey, mRemovePropertyHandlerTable, OT_ARRAY_LENGTH(mRemovePropertyHandlerTable));
-}
-
// Returns `true` and updates the `aError` on success.
bool NcpBase::HandlePropertySetForSpecialProperties(uint8_t aHeader, spinel_prop_key_t aKey, otError &aError)
{
@@ -1372,21 +943,21 @@ bool NcpBase::HandlePropertySetForSpecialProperties(uint8_t aHeader, spinel_prop
switch (aKey)
{
case SPINEL_PROP_HOST_POWER_STATE:
- ExitNow(aError = SetPropertyHandler_HOST_POWER_STATE(aHeader));
+ ExitNow(aError = HandlePropertySet_SPINEL_PROP_HOST_POWER_STATE(aHeader));
#if OPENTHREAD_ENABLE_DIAG
case SPINEL_PROP_NEST_STREAM_MFG:
- ExitNow(aError = SetPropertyHandler_NEST_STREAM_MFG(aHeader));
+ ExitNow(aError = HandlePropertySet_SPINEL_PROP_NEST_STREAM_MFG(aHeader));
#endif
#if OPENTHREAD_FTD && OPENTHREAD_ENABLE_COMMISSIONER
case SPINEL_PROP_THREAD_COMMISSIONER_ENABLED:
- ExitNow(aError = SetPropertyHandler_THREAD_COMMISSIONER_ENABLED(aHeader));
+ ExitNow(aError = HandlePropertySet_SPINEL_PROP_THREAD_COMMISSIONER_ENABLED(aHeader));
#endif
#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
case SPINEL_PROP_STREAM_RAW:
- ExitNow(aError = SetPropertyHandler_STREAM_RAW(aHeader));
+ ExitNow(aError = HandlePropertySet_SPINEL_PROP_STREAM_RAW(aHeader));
#endif
default:
@@ -1732,7 +1303,7 @@ exit:
#if OPENTHREAD_ENABLE_DIAG
-otError NcpBase::SetPropertyHandler_NEST_STREAM_MFG(uint8_t aHeader)
+otError NcpBase::HandlePropertySet_SPINEL_PROP_NEST_STREAM_MFG(uint8_t aHeader)
{
const char *string = NULL;
const char *output = NULL;
@@ -1755,7 +1326,7 @@ exit:
#endif // OPENTHREAD_ENABLE_DIAG
-otError NcpBase::GetPropertyHandler_PHY_ENABLED(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
return mEncoder.WriteBool(otLinkRawIsEnabled(mInstance));
@@ -1764,12 +1335,12 @@ otError NcpBase::GetPropertyHandler_PHY_ENABLED(void)
#endif
}
-otError NcpBase::GetPropertyHandler_PHY_CHAN(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(otLinkGetChannel(mInstance));
}
-otError NcpBase::SetPropertyHandler_PHY_CHAN(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
unsigned int channel = 0;
otError error = OT_ERROR_NONE;
@@ -1795,13 +1366,13 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_MAC_PROMISCUOUS_MODE(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(otPlatRadioGetPromiscuous(mInstance) ? SPINEL_MAC_PROMISCUOUS_MODE_FULL
: SPINEL_MAC_PROMISCUOUS_MODE_OFF);
}
-otError NcpBase::SetPropertyHandler_MAC_PROMISCUOUS_MODE(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
uint8_t mode = 0;
otError error = OT_ERROR_NONE;
@@ -1828,12 +1399,12 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_MAC_15_4_PANID(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint16(otLinkGetPanId(mInstance));
}
-otError NcpBase::SetPropertyHandler_MAC_15_4_PANID(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
uint16_t panid;
otError error = OT_ERROR_NONE;
@@ -1846,12 +1417,12 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_MAC_15_4_LADDR(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteEui64(*otLinkGetExtendedAddress(mInstance));
}
-otError NcpBase::SetPropertyHandler_MAC_15_4_LADDR(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
const otExtAddress *extAddress;
otError error = OT_ERROR_NONE;
@@ -1864,17 +1435,17 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_MAC_15_4_SADDR(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint16(otLinkGetShortAddress(mInstance));
}
-otError NcpBase::GetPropertyHandler_MAC_RAW_STREAM_ENABLED(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteBool(mIsRawStreamEnabled);
}
-otError NcpBase::SetPropertyHandler_MAC_RAW_STREAM_ENABLED(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
bool enabled = false;
otError error = OT_ERROR_NONE;
@@ -1903,7 +1474,7 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_UNSOL_UPDATE_FILTER(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
otError error = OT_ERROR_NONE;
uint8_t numEntries;
@@ -1923,7 +1494,7 @@ exit:
return error;
}
-otError NcpBase::SetPropertyHandler_UNSOL_UPDATE_FILTER(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
unsigned int propKey;
otError error = OT_ERROR_NONE;
@@ -1952,7 +1523,7 @@ exit:
return error;
}
-otError NcpBase::InsertPropertyHandler_UNSOL_UPDATE_FILTER(void)
+template <> otError NcpBase::HandlePropertyInsert(void)
{
otError error = OT_ERROR_NONE;
unsigned int propKey;
@@ -1965,7 +1536,7 @@ exit:
return error;
}
-otError NcpBase::RemovePropertyHandler_UNSOL_UPDATE_FILTER(void)
+template <> otError NcpBase::HandlePropertyRemove(void)
{
otError error = OT_ERROR_NONE;
unsigned int propKey;
@@ -1978,12 +1549,12 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_LAST_STATUS(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUintPacked(mLastStatus);
}
-otError NcpBase::GetPropertyHandler_PROTOCOL_VERSION(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
otError error = OT_ERROR_NONE;
@@ -1994,17 +1565,17 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_INTERFACE_TYPE(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUintPacked(SPINEL_PROTOCOL_TYPE_THREAD);
}
-otError NcpBase::GetPropertyHandler_VENDOR_ID(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUintPacked(0); // Vendor ID. Zero for unknown.
}
-otError NcpBase::GetPropertyHandler_CAPS(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
otError error = OT_ERROR_NONE;
@@ -2081,19 +1652,19 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_NCP_VERSION(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUtf8(otGetVersionString());
}
-otError NcpBase::GetPropertyHandler_INTERFACE_COUNT(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(1); // Only one interface for now
}
#if OPENTHREAD_CONFIG_NCP_ENABLE_MCU_POWER_STATE_CONTROL
-otError NcpBase::GetPropertyHandler_MCU_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
spinel_mcu_power_state_t state = SPINEL_MCU_POWER_STATE_ON;
@@ -2115,7 +1686,7 @@ otError NcpBase::GetPropertyHandler_MCU_POWER_STATE(void)
return mEncoder.WriteUint8(state);
}
-otError NcpBase::SetPropertyHandler_MCU_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
otError error = OT_ERROR_NONE;
otPlatMcuPowerState powerState;
@@ -2170,29 +1741,29 @@ exit:
#else // OPENTHREAD_CONFIG_NCP_ENABLE_MCU_POWER_STATE_CONTROL
-otError NcpBase::GetPropertyHandler_MCU_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(SPINEL_MCU_POWER_STATE_ON);
}
-otError NcpBase::SetPropertyHandler_MCU_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
return OT_ERROR_DISABLED_FEATURE;
}
#endif // OPENTHREAD_CONFIG_NCP_ENABLE_MCU_POWER_STATE_CONTROL
-otError NcpBase::GetPropertyHandler_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(SPINEL_POWER_STATE_ONLINE);
}
-otError NcpBase::SetPropertyHandler_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
return OT_ERROR_NOT_IMPLEMENTED;
}
-otError NcpBase::GetPropertyHandler_HWADDR(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
otExtAddress hwAddr;
otPlatRadioGetIeeeEui64(mInstance, hwAddr.m8);
@@ -2200,13 +1771,13 @@ otError NcpBase::GetPropertyHandler_HWADDR(void)
return mEncoder.WriteEui64(hwAddr);
}
-otError NcpBase::GetPropertyHandler_LOCK(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
// TODO: Implement property lock (Needs API!)
return mEncoder.OverwriteWithLastStatusError(SPINEL_STATUS_UNIMPLEMENTED);
}
-otError NcpBase::GetPropertyHandler_HOST_POWER_STATE(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(mHostPowerState);
}
@@ -2217,7 +1788,7 @@ otError NcpBase::GetPropertyHandler_HOST_POWER_STATE(void)
// that host is sleep (b) the response is critical so if there is no spinel
// buffer to prepare the response, the current spinel header is saved to
// prepare and send the response as soon as buffer space becomes available.
-otError NcpBase::SetPropertyHandler_HOST_POWER_STATE(uint8_t aHeader)
+otError NcpBase::HandlePropertySet_SPINEL_PROP_HOST_POWER_STATE(uint8_t aHeader)
{
uint8_t powerState;
otError error = OT_ERROR_NONE;
@@ -2284,7 +1855,7 @@ otError NcpBase::SetPropertyHandler_HOST_POWER_STATE(uint8_t aHeader)
return error;
}
-otError NcpBase::GetPropertyHandler_UNSOL_UPDATE_LIST(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
otError error = OT_ERROR_NONE;
uint8_t numEntries;
@@ -2304,12 +1875,12 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_PHY_RX_SENSITIVITY(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteInt8(otPlatRadioGetReceiveSensitivity(mInstance));
}
-otError NcpBase::GetPropertyHandler_PHY_TX_POWER(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
int8_t power;
otError error;
@@ -2328,7 +1899,7 @@ otError NcpBase::GetPropertyHandler_PHY_TX_POWER(void)
return error;
}
-otError NcpBase::SetPropertyHandler_PHY_TX_POWER(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
int8_t txPower = 0;
otError error = OT_ERROR_NONE;
@@ -2340,7 +1911,7 @@ exit:
return error;
}
-otError NcpBase::GetPropertyHandler_DEBUG_TEST_ASSERT(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
assert(false);
@@ -2352,7 +1923,7 @@ otError NcpBase::GetPropertyHandler_DEBUG_TEST_ASSERT(void)
OT_UNREACHABLE_CODE(return mEncoder.WriteBool(false);)
}
-otError NcpBase::GetPropertyHandler_DEBUG_TEST_WATCHDOG(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
while (true)
;
@@ -2360,12 +1931,12 @@ otError NcpBase::GetPropertyHandler_DEBUG_TEST_WATCHDOG(void)
OT_UNREACHABLE_CODE(return OT_ERROR_NONE;)
}
-otError NcpBase::GetPropertyHandler_DEBUG_NCP_LOG_LEVEL(void)
+template <> otError NcpBase::HandlePropertyGet(void)
{
return mEncoder.WriteUint8(ConvertLogLevel(otGetDynamicLogLevel(mInstance)));
}
-otError NcpBase::SetPropertyHandler_DEBUG_NCP_LOG_LEVEL(void)
+template <> otError NcpBase::HandlePropertySet(void)
{
uint8_t spinelNcpLogLevel = 0;
otLogLevel logLevel;
diff --git a/src/ncp/ncp_base.hpp b/src/ncp/ncp_base.hpp
index d174ba4b7..73f9a22e8 100644
--- a/src/ncp/ncp_base.hpp
+++ b/src/ncp/ncp_base.hpp
@@ -60,11 +60,6 @@
namespace ot {
namespace Ncp {
-#define NCP_GET_PROP_HANDLER(name) otError GetPropertyHandler_##name(void)
-#define NCP_SET_PROP_HANDLER(name) otError SetPropertyHandler_##name(void)
-#define NCP_INSERT_PROP_HANDLER(name) otError InsertPropertyHandler_##name(void)
-#define NCP_REMOVE_PROP_HANDLER(name) otError RemovePropertyHandler_##name(void)
-
class NcpBase
{
public:
@@ -180,11 +175,15 @@ public:
protected:
typedef otError (NcpBase::*PropertyHandler)(void);
- struct PropertyHandlerEntry
- {
- spinel_prop_key_t mPropKey;
- PropertyHandler mHandler;
- };
+ template otError HandlePropertyGet(void);
+ template otError HandlePropertySet(void);
+ template otError HandlePropertyInsert(void);
+ template otError HandlePropertyRemove(void);
+
+ otError HandlePropertySet_SPINEL_PROP_NEST_STREAM_MFG(uint8_t aHeader);
+ otError HandlePropertySet_SPINEL_PROP_HOST_POWER_STATE(uint8_t aHeader);
+ otError HandlePropertySet_SPINEL_PROP_STREAM_RAW(uint8_t aHeader);
+ otError HandlePropertySet_SPINEL_PROP_THREAD_COMMISSIONER_ENABLED(uint8_t aHeader);
/**
* This struct represents a spinel response entry.
@@ -206,7 +205,6 @@ protected:
otError HandleCommand(uint8_t aHeader);
- PropertyHandler FindPropertyHandler(spinel_prop_key_t aKey, const PropertyHandlerEntry *aTable, size_t aTableLen);
PropertyHandler FindGetPropertyHandler(spinel_prop_key_t aKey);
PropertyHandler FindSetPropertyHandler(spinel_prop_key_t aKey);
PropertyHandler FindInsertPropertyHandler(spinel_prop_key_t aKey);
@@ -365,350 +363,15 @@ protected:
// --------------------------------------------------------------------------
// Common Properties
- NCP_GET_PROP_HANDLER(LAST_STATUS);
- NCP_GET_PROP_HANDLER(PROTOCOL_VERSION);
- NCP_GET_PROP_HANDLER(INTERFACE_TYPE);
- NCP_GET_PROP_HANDLER(VENDOR_ID);
- NCP_GET_PROP_HANDLER(CAPS);
- NCP_GET_PROP_HANDLER(DEBUG_TEST_ASSERT);
- NCP_GET_PROP_HANDLER(DEBUG_TEST_WATCHDOG);
- NCP_GET_PROP_HANDLER(DEBUG_NCP_LOG_LEVEL);
- NCP_SET_PROP_HANDLER(DEBUG_NCP_LOG_LEVEL);
- NCP_GET_PROP_HANDLER(NCP_VERSION);
- NCP_GET_PROP_HANDLER(INTERFACE_COUNT);
- NCP_GET_PROP_HANDLER(POWER_STATE);
- NCP_SET_PROP_HANDLER(POWER_STATE);
- NCP_GET_PROP_HANDLER(MCU_POWER_STATE);
- NCP_SET_PROP_HANDLER(MCU_POWER_STATE);
- NCP_GET_PROP_HANDLER(HWADDR);
- NCP_GET_PROP_HANDLER(LOCK);
- NCP_GET_PROP_HANDLER(HOST_POWER_STATE);
- NCP_GET_PROP_HANDLER(UNSOL_UPDATE_FILTER);
- NCP_SET_PROP_HANDLER(UNSOL_UPDATE_FILTER);
- NCP_INSERT_PROP_HANDLER(UNSOL_UPDATE_FILTER);
- NCP_REMOVE_PROP_HANDLER(UNSOL_UPDATE_FILTER);
- NCP_GET_PROP_HANDLER(UNSOL_UPDATE_LIST);
-
- NCP_GET_PROP_HANDLER(PHY_RX_SENSITIVITY);
- NCP_GET_PROP_HANDLER(PHY_TX_POWER);
- NCP_SET_PROP_HANDLER(PHY_TX_POWER);
- NCP_GET_PROP_HANDLER(PHY_ENABLED);
- NCP_SET_PROP_HANDLER(PHY_CHAN);
- NCP_GET_PROP_HANDLER(PHY_CHAN);
-
- NCP_GET_PROP_HANDLER(MAC_15_4_PANID);
- NCP_SET_PROP_HANDLER(MAC_15_4_PANID);
- NCP_GET_PROP_HANDLER(MAC_15_4_LADDR);
- NCP_SET_PROP_HANDLER(MAC_15_4_LADDR);
- NCP_GET_PROP_HANDLER(MAC_15_4_SADDR);
- NCP_GET_PROP_HANDLER(MAC_PROMISCUOUS_MODE);
- NCP_SET_PROP_HANDLER(MAC_PROMISCUOUS_MODE);
- NCP_GET_PROP_HANDLER(MAC_RAW_STREAM_ENABLED);
- NCP_SET_PROP_HANDLER(MAC_RAW_STREAM_ENABLED);
- NCP_GET_PROP_HANDLER(MAC_DATA_POLL_PERIOD);
- NCP_SET_PROP_HANDLER(MAC_DATA_POLL_PERIOD);
-
// --------------------------------------------------------------------------
// Raw Link API Properties
-#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
-
- NCP_SET_PROP_HANDLER(PHY_ENABLED);
-
- NCP_SET_PROP_HANDLER(MAC_15_4_SADDR);
- NCP_GET_PROP_HANDLER(MAC_SRC_MATCH_ENABLED);
- NCP_SET_PROP_HANDLER(MAC_SRC_MATCH_ENABLED);
- NCP_SET_PROP_HANDLER(MAC_SRC_MATCH_SHORT_ADDRESSES);
- NCP_INSERT_PROP_HANDLER(MAC_SRC_MATCH_SHORT_ADDRESSES);
- NCP_REMOVE_PROP_HANDLER(MAC_SRC_MATCH_SHORT_ADDRESSES);
- NCP_SET_PROP_HANDLER(MAC_SRC_MATCH_EXTENDED_ADDRESSES);
- NCP_INSERT_PROP_HANDLER(MAC_SRC_MATCH_EXTENDED_ADDRESSES);
- NCP_REMOVE_PROP_HANDLER(MAC_SRC_MATCH_EXTENDED_ADDRESSES);
-
-#endif // OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
-
// --------------------------------------------------------------------------
// MTD (or FTD) Properties
-#if OPENTHREAD_MTD || OPENTHREAD_FTD
-
- NCP_SET_PROP_HANDLER(STREAM_NET);
- NCP_SET_PROP_HANDLER(STREAM_NET_INSECURE);
-
- NCP_GET_PROP_HANDLER(PHY_FREQ);
- NCP_GET_PROP_HANDLER(PHY_CHAN_SUPPORTED);
- NCP_GET_PROP_HANDLER(PHY_RSSI);
-
- NCP_GET_PROP_HANDLER(MAC_EXTENDED_ADDR);
- NCP_GET_PROP_HANDLER(MAC_SCAN_MASK);
- NCP_SET_PROP_HANDLER(MAC_SCAN_MASK);
- NCP_GET_PROP_HANDLER(MAC_SCAN_PERIOD);
- NCP_SET_PROP_HANDLER(MAC_SCAN_PERIOD);
- NCP_GET_PROP_HANDLER(MAC_SCAN_STATE);
- NCP_SET_PROP_HANDLER(MAC_SCAN_STATE);
- NCP_GET_PROP_HANDLER(MAC_CCA_FAILURE_RATE);
-#if OPENTHREAD_ENABLE_MAC_FILTER
- NCP_GET_PROP_HANDLER(MAC_WHITELIST_ENABLED);
- NCP_SET_PROP_HANDLER(MAC_WHITELIST_ENABLED);
- NCP_GET_PROP_HANDLER(MAC_WHITELIST);
- NCP_SET_PROP_HANDLER(MAC_WHITELIST);
- NCP_INSERT_PROP_HANDLER(MAC_WHITELIST);
- NCP_REMOVE_PROP_HANDLER(MAC_WHITELIST);
- NCP_GET_PROP_HANDLER(MAC_BLACKLIST_ENABLED);
- NCP_SET_PROP_HANDLER(MAC_BLACKLIST_ENABLED);
- NCP_GET_PROP_HANDLER(MAC_BLACKLIST);
- NCP_SET_PROP_HANDLER(MAC_BLACKLIST);
- NCP_INSERT_PROP_HANDLER(MAC_BLACKLIST);
- NCP_REMOVE_PROP_HANDLER(MAC_BLACKLIST);
- NCP_GET_PROP_HANDLER(MAC_FIXED_RSS);
- NCP_SET_PROP_HANDLER(MAC_FIXED_RSS);
- NCP_INSERT_PROP_HANDLER(MAC_FIXED_RSS);
- NCP_REMOVE_PROP_HANDLER(MAC_FIXED_RSS);
-#endif
-
- NCP_GET_PROP_HANDLER(NET_SAVED);
- NCP_GET_PROP_HANDLER(NET_IF_UP);
- NCP_SET_PROP_HANDLER(NET_IF_UP);
- NCP_GET_PROP_HANDLER(NET_STACK_UP);
- NCP_SET_PROP_HANDLER(NET_STACK_UP);
- NCP_GET_PROP_HANDLER(NET_ROLE);
- NCP_SET_PROP_HANDLER(NET_ROLE);
- NCP_GET_PROP_HANDLER(NET_NETWORK_NAME);
- NCP_SET_PROP_HANDLER(NET_NETWORK_NAME);
- NCP_GET_PROP_HANDLER(NET_XPANID);
- NCP_SET_PROP_HANDLER(NET_XPANID);
- NCP_GET_PROP_HANDLER(NET_MASTER_KEY);
- NCP_SET_PROP_HANDLER(NET_MASTER_KEY);
- NCP_GET_PROP_HANDLER(NET_KEY_SEQUENCE_COUNTER);
- NCP_SET_PROP_HANDLER(NET_KEY_SEQUENCE_COUNTER);
- NCP_GET_PROP_HANDLER(NET_PARTITION_ID);
- NCP_GET_PROP_HANDLER(NET_KEY_SWITCH_GUARDTIME);
- NCP_SET_PROP_HANDLER(NET_KEY_SWITCH_GUARDTIME);
-
- NCP_GET_PROP_HANDLER(IPV6_ML_PREFIX);
- NCP_SET_PROP_HANDLER(IPV6_ML_PREFIX);
- NCP_GET_PROP_HANDLER(IPV6_ML_ADDR);
- NCP_GET_PROP_HANDLER(IPV6_LL_ADDR);
- NCP_GET_PROP_HANDLER(IPV6_ADDRESS_TABLE);
- NCP_INSERT_PROP_HANDLER(IPV6_ADDRESS_TABLE);
- NCP_REMOVE_PROP_HANDLER(IPV6_ADDRESS_TABLE);
- NCP_GET_PROP_HANDLER(IPV6_ROUTE_TABLE);
- NCP_GET_PROP_HANDLER(IPV6_ICMP_PING_OFFLOAD);
- NCP_SET_PROP_HANDLER(IPV6_ICMP_PING_OFFLOAD);
- NCP_GET_PROP_HANDLER(IPV6_MULTICAST_ADDRESS_TABLE);
- NCP_INSERT_PROP_HANDLER(IPV6_MULTICAST_ADDRESS_TABLE);
- NCP_REMOVE_PROP_HANDLER(IPV6_MULTICAST_ADDRESS_TABLE);
- NCP_GET_PROP_HANDLER(IPV6_ICMP_PING_OFFLOAD_MODE);
- NCP_SET_PROP_HANDLER(IPV6_ICMP_PING_OFFLOAD_MODE);
-
- NCP_GET_PROP_HANDLER(THREAD_LEADER);
- NCP_GET_PROP_HANDLER(THREAD_RLOC16_DEBUG_PASSTHRU);
- NCP_SET_PROP_HANDLER(THREAD_RLOC16_DEBUG_PASSTHRU);
- NCP_GET_PROP_HANDLER(THREAD_OFF_MESH_ROUTES);
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_INSERT_PROP_HANDLER(THREAD_OFF_MESH_ROUTES);
- NCP_REMOVE_PROP_HANDLER(THREAD_OFF_MESH_ROUTES);
-#endif
- NCP_GET_PROP_HANDLER(THREAD_ON_MESH_NETS);
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_INSERT_PROP_HANDLER(THREAD_ON_MESH_NETS);
- NCP_REMOVE_PROP_HANDLER(THREAD_ON_MESH_NETS);
-#endif
- NCP_GET_PROP_HANDLER(THREAD_LEADER_ADDR);
- NCP_GET_PROP_HANDLER(THREAD_PARENT);
- NCP_GET_PROP_HANDLER(THREAD_NEIGHBOR_TABLE);
-#if OPENTHREAD_CONFIG_ENABLE_TX_ERROR_RATE_TRACKING
- NCP_GET_PROP_HANDLER(THREAD_NEIGHBOR_TABLE_ERROR_RATES);
-#endif
- NCP_GET_PROP_HANDLER(THREAD_LEADER_RID);
- NCP_GET_PROP_HANDLER(THREAD_LEADER_WEIGHT);
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_GET_PROP_HANDLER(THREAD_NETWORK_DATA);
- NCP_GET_PROP_HANDLER(THREAD_STABLE_NETWORK_DATA);
-#endif
- NCP_GET_PROP_HANDLER(THREAD_NETWORK_DATA_VERSION);
- NCP_GET_PROP_HANDLER(THREAD_STABLE_NETWORK_DATA_VERSION);
- NCP_GET_PROP_HANDLER(THREAD_LEADER_NETWORK_DATA);
- NCP_GET_PROP_HANDLER(THREAD_STABLE_LEADER_NETWORK_DATA);
- NCP_GET_PROP_HANDLER(THREAD_ASSISTING_PORTS);
- NCP_SET_PROP_HANDLER(THREAD_ASSISTING_PORTS);
- NCP_INSERT_PROP_HANDLER(THREAD_ASSISTING_PORTS);
- NCP_REMOVE_PROP_HANDLER(THREAD_ASSISTING_PORTS);
- NCP_GET_PROP_HANDLER(THREAD_ALLOW_LOCAL_NET_DATA_CHANGE);
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
- NCP_SET_PROP_HANDLER(THREAD_ALLOW_LOCAL_NET_DATA_CHANGE);
-#endif
- NCP_GET_PROP_HANDLER(THREAD_MODE);
- NCP_SET_PROP_HANDLER(THREAD_MODE);
- NCP_GET_PROP_HANDLER(THREAD_CHILD_TIMEOUT);
- NCP_GET_PROP_HANDLER(THREAD_RLOC16);
- NCP_GET_PROP_HANDLER(NET_REQUIRE_JOIN_EXISTING);
- NCP_SET_PROP_HANDLER(NET_REQUIRE_JOIN_EXISTING);
- NCP_GET_PROP_HANDLER(THREAD_DISCOVERY_SCAN_JOINER_FLAG);
- NCP_SET_PROP_HANDLER(THREAD_DISCOVERY_SCAN_JOINER_FLAG);
- NCP_GET_PROP_HANDLER(THREAD_DISCOVERY_SCAN_ENABLE_FILTERING);
- NCP_SET_PROP_HANDLER(THREAD_DISCOVERY_SCAN_ENABLE_FILTERING);
- NCP_GET_PROP_HANDLER(THREAD_DISCOVERY_SCAN_PANID);
- NCP_SET_PROP_HANDLER(THREAD_DISCOVERY_SCAN_PANID);
- NCP_GET_PROP_HANDLER(THREAD_ACTIVE_DATASET);
- NCP_GET_PROP_HANDLER(THREAD_PENDING_DATASET);
-
- NCP_GET_PROP_HANDLER(CNTR_ALL_MAC_COUNTERS);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_ACK_REQ);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_ACKED);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_NO_ACK_REQ);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_DATA);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_DATA_POLL);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_BEACON);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_BEACON_REQ);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_OTHER);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_RETRY);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_UNICAST);
- NCP_GET_PROP_HANDLER(CNTR_TX_PKT_BROADCAST);
- NCP_GET_PROP_HANDLER(CNTR_TX_ERR_CCA);
- NCP_GET_PROP_HANDLER(CNTR_TX_ERR_ABORT);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_DATA);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_DATA_POLL);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_BEACON);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_BEACON_REQ);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_OTHER);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_FILT_WL);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_FILT_DA);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_UNICAST);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_BROADCAST);
- NCP_GET_PROP_HANDLER(CNTR_RX_ERR_EMPTY);
- NCP_GET_PROP_HANDLER(CNTR_RX_ERR_UKWN_NBR);
- NCP_GET_PROP_HANDLER(CNTR_RX_ERR_NVLD_SADDR);
- NCP_GET_PROP_HANDLER(CNTR_RX_ERR_SECURITY);
- NCP_GET_PROP_HANDLER(CNTR_RX_ERR_BAD_FCS);
- NCP_GET_PROP_HANDLER(CNTR_RX_ERR_OTHER);
- NCP_GET_PROP_HANDLER(CNTR_RX_PKT_DUP);
- NCP_GET_PROP_HANDLER(CNTR_TX_IP_SEC_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_TX_IP_INSEC_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_TX_IP_DROPPED);
- NCP_GET_PROP_HANDLER(CNTR_RX_IP_SEC_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_RX_IP_INSEC_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_RX_IP_DROPPED);
- NCP_GET_PROP_HANDLER(CNTR_TX_SPINEL_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_RX_SPINEL_TOTAL);
- NCP_GET_PROP_HANDLER(CNTR_RX_SPINEL_OUT_OF_ORDER_TID);
- NCP_GET_PROP_HANDLER(CNTR_RX_SPINEL_ERR);
- NCP_GET_PROP_HANDLER(CNTR_IP_TX_SUCCESS);
- NCP_GET_PROP_HANDLER(CNTR_IP_RX_SUCCESS);
- NCP_GET_PROP_HANDLER(CNTR_IP_TX_FAILURE);
- NCP_GET_PROP_HANDLER(CNTR_IP_RX_FAILURE);
- NCP_SET_PROP_HANDLER(CNTR_RESET);
- NCP_GET_PROP_HANDLER(MSG_BUFFER_COUNTERS);
-
-#if OPENTHREAD_ENABLE_JAM_DETECTION
- NCP_GET_PROP_HANDLER(JAM_DETECTED);
- NCP_GET_PROP_HANDLER(JAM_DETECT_ENABLE);
- NCP_SET_PROP_HANDLER(JAM_DETECT_ENABLE);
- NCP_GET_PROP_HANDLER(JAM_DETECT_RSSI_THRESHOLD);
- NCP_SET_PROP_HANDLER(JAM_DETECT_RSSI_THRESHOLD);
- NCP_GET_PROP_HANDLER(JAM_DETECT_WINDOW);
- NCP_SET_PROP_HANDLER(JAM_DETECT_WINDOW);
- NCP_GET_PROP_HANDLER(JAM_DETECT_BUSY);
- NCP_SET_PROP_HANDLER(JAM_DETECT_BUSY);
- NCP_GET_PROP_HANDLER(JAM_DETECT_HISTORY_BITMAP);
-#endif
-
-#if OPENTHREAD_ENABLE_CHANNEL_MONITOR
- NCP_GET_PROP_HANDLER(CHANNEL_MONITOR_SAMPLE_INTERVAL);
- NCP_GET_PROP_HANDLER(CHANNEL_MONITOR_RSSI_THRESHOLD);
- NCP_GET_PROP_HANDLER(CHANNEL_MONITOR_SAMPLE_WINDOW);
- NCP_GET_PROP_HANDLER(CHANNEL_MONITOR_SAMPLE_COUNT);
- NCP_GET_PROP_HANDLER(CHANNEL_MONITOR_CHANNEL_OCCUPANCY);
-#endif
-
-#if OPENTHREAD_ENABLE_LEGACY
- NCP_GET_PROP_HANDLER(NEST_LEGACY_ULA_PREFIX);
- NCP_SET_PROP_HANDLER(NEST_LEGACY_ULA_PREFIX);
- NCP_GET_PROP_HANDLER(NEST_LEGACY_LAST_NODE_JOINED);
-#endif
-
-#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
- NCP_GET_PROP_HANDLER(THREAD_NETWORK_TIME);
-#endif
-
-#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
-
// --------------------------------------------------------------------------
// FTD Only Properties
-#if OPENTHREAD_FTD
-
- NCP_GET_PROP_HANDLER(NET_PSKC);
- NCP_SET_PROP_HANDLER(NET_PSKC);
-
- NCP_GET_PROP_HANDLER(THREAD_CHILD_TABLE);
- NCP_GET_PROP_HANDLER(THREAD_CHILD_TABLE_ADDRESSES);
- NCP_GET_PROP_HANDLER(THREAD_ROUTER_TABLE);
- NCP_GET_PROP_HANDLER(THREAD_CHILD_COUNT_MAX);
- NCP_SET_PROP_HANDLER(THREAD_CHILD_COUNT_MAX);
- NCP_SET_PROP_HANDLER(THREAD_CHILD_TIMEOUT);
- NCP_GET_PROP_HANDLER(THREAD_CONTEXT_REUSE_DELAY);
- NCP_SET_PROP_HANDLER(THREAD_CONTEXT_REUSE_DELAY);
- NCP_GET_PROP_HANDLER(THREAD_LOCAL_LEADER_WEIGHT);
- NCP_SET_PROP_HANDLER(THREAD_LOCAL_LEADER_WEIGHT);
- NCP_GET_PROP_HANDLER(THREAD_NETWORK_ID_TIMEOUT);
- NCP_SET_PROP_HANDLER(THREAD_NETWORK_ID_TIMEOUT);
- NCP_GET_PROP_HANDLER(THREAD_ROUTER_ROLE_ENABLED);
- NCP_SET_PROP_HANDLER(THREAD_ROUTER_ROLE_ENABLED);
- NCP_GET_PROP_HANDLER(THREAD_ROUTER_UPGRADE_THRESHOLD);
- NCP_SET_PROP_HANDLER(THREAD_ROUTER_UPGRADE_THRESHOLD);
- NCP_GET_PROP_HANDLER(THREAD_ROUTER_DOWNGRADE_THRESHOLD);
- NCP_SET_PROP_HANDLER(THREAD_ROUTER_DOWNGRADE_THRESHOLD);
- NCP_GET_PROP_HANDLER(THREAD_ROUTER_SELECTION_JITTER);
- NCP_SET_PROP_HANDLER(THREAD_ROUTER_SELECTION_JITTER);
- NCP_GET_PROP_HANDLER(THREAD_PREFERRED_ROUTER_ID);
- NCP_SET_PROP_HANDLER(THREAD_PREFERRED_ROUTER_ID);
-#if OPENTHREAD_CONFIG_ENABLE_STEERING_DATA_SET_OOB
- NCP_GET_PROP_HANDLER(THREAD_STEERING_DATA);
- NCP_SET_PROP_HANDLER(THREAD_STEERING_DATA);
-#endif
-#if OPENTHREAD_ENABLE_COMMISSIONER
- NCP_GET_PROP_HANDLER(THREAD_COMMISSIONER_ENABLED);
- NCP_INSERT_PROP_HANDLER(THREAD_JOINERS);
-#endif
-#if OPENTHREAD_ENABLE_TMF_PROXY
- NCP_GET_PROP_HANDLER(THREAD_TMF_PROXY_ENABLED);
- NCP_SET_PROP_HANDLER(THREAD_TMF_PROXY_ENABLED);
- NCP_SET_PROP_HANDLER(THREAD_TMF_PROXY_STREAM);
-#endif
- NCP_REMOVE_PROP_HANDLER(THREAD_ACTIVE_ROUTER_IDS);
- NCP_SET_PROP_HANDLER(THREAD_ACTIVE_DATASET);
- NCP_SET_PROP_HANDLER(THREAD_PENDING_DATASET);
- NCP_SET_PROP_HANDLER(THREAD_MGMT_ACTIVE_DATASET);
- NCP_SET_PROP_HANDLER(THREAD_MGMT_PENDING_DATASET);
- NCP_GET_PROP_HANDLER(THREAD_ADDRESS_CACHE_TABLE);
-#if OPENTHREAD_ENABLE_CHANNEL_MANAGER
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_NEW_CHANNEL);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_NEW_CHANNEL);
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_DELAY);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_DELAY);
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_SUPPORTED_CHANNELS);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_SUPPORTED_CHANNELS);
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_FAVORED_CHANNELS);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_FAVORED_CHANNELS);
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_CHANNEL_SELECT);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_CHANNEL_SELECT);
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_AUTO_SELECT_ENABLED);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_AUTO_SELECT_ENABLED);
- NCP_GET_PROP_HANDLER(CHANNEL_MANAGER_AUTO_SELECT_INTERVAL);
- NCP_SET_PROP_HANDLER(CHANNEL_MANAGER_AUTO_SELECT_INTERVAL);
-#endif
-#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
- NCP_GET_PROP_HANDLER(TIME_SYNC_PERIOD);
- NCP_SET_PROP_HANDLER(TIME_SYNC_PERIOD);
- NCP_GET_PROP_HANDLER(TIME_SYNC_XTAL_THRESHOLD);
- NCP_SET_PROP_HANDLER(TIME_SYNC_XTAL_THRESHOLD);
-#endif
-
-#endif // OPENTHREAD_FTD
-
// --------------------------------------------------------------------------
// Property "set" handlers for special properties for which the spinel
// response needs to be created from within the set handler.
@@ -824,12 +487,6 @@ protected:
kInvalidScanChannel = -1, // Invalid scan channel.
};
- // Command Handlers
- static const PropertyHandlerEntry mGetPropertyHandlerTable[];
- static const PropertyHandlerEntry mSetPropertyHandlerTable[];
- static const PropertyHandlerEntry mInsertPropertyHandlerTable[];
- static const PropertyHandlerEntry mRemovePropertyHandlerTable[];
-
spinel_status_t mLastStatus;
uint32_t mSupportedChannelMask;
uint32_t mChannelMask;
diff --git a/src/ncp/ncp_base_dispatcher.cpp b/src/ncp/ncp_base_dispatcher.cpp
new file mode 100644
index 000000000..538946674
--- /dev/null
+++ b/src/ncp/ncp_base_dispatcher.cpp
@@ -0,0 +1,992 @@
+/*
+ * Copyright (c) 2018, The OpenThread Authors.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @file
+ * This file implements general thread device required Spinel interface to the OpenThread stack.
+ */
+
+#include "ncp_base.hpp"
+
+namespace ot {
+namespace Ncp {
+
+// ----------------------------------------------------------------------------
+// MARK: Property Handler Jump Tables and Methods
+// ----------------------------------------------------------------------------
+NcpBase::PropertyHandler NcpBase::FindGetPropertyHandler(spinel_prop_key_t aKey)
+{
+ NcpBase::PropertyHandler handler;
+
+ switch (aKey)
+ {
+ case SPINEL_PROP_CAPS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_DEBUG_TEST_ASSERT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_DEBUG_TEST_WATCHDOG:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_DEBUG_NCP_LOG_LEVEL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_HWADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_HOST_POWER_STATE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_INTERFACE_COUNT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_INTERFACE_TYPE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_LAST_STATUS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_LOCK:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_CHAN:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_RX_SENSITIVITY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_TX_POWER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_POWER_STATE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MCU_POWER_STATE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PROTOCOL_VERSION:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_15_4_PANID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_15_4_LADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_15_4_SADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_RAW_STREAM_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_PROMISCUOUS_MODE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NCP_VERSION:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_UNSOL_UPDATE_FILTER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_UNSOL_UPDATE_LIST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_VENDOR_ID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_MTD || OPENTHREAD_FTD
+ case SPINEL_PROP_MAC_DATA_POLL_PERIOD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_EXTENDED_ADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_SCAN_STATE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_SCAN_MASK:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_SCAN_PERIOD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_CCA_FAILURE_RATE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_ENABLE_MAC_FILTER
+ case SPINEL_PROP_MAC_BLACKLIST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_BLACKLIST_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_FIXED_RSS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_WHITELIST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_MAC_WHITELIST_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+ case SPINEL_PROP_MSG_BUFFER_COUNTERS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_CHAN_SUPPORTED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_FREQ:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_PHY_RSSI:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_IF_UP:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_MASTER_KEY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_NETWORK_NAME:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_PARTITION_ID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_ROLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_SAVED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_STACK_UP:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NET_XPANID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ASSISTING_PORTS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_CHILD_TIMEOUT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_DISCOVERY_SCAN_JOINER_FLAG:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_DISCOVERY_SCAN_ENABLE_FILTERING:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_LEADER_ADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_LEADER_NETWORK_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_LEADER_RID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_MODE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_NEIGHBOR_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_CONFIG_ENABLE_TX_ERROR_RATE_TRACKING
+ case SPINEL_PROP_THREAD_NEIGHBOR_TABLE_ERROR_RATES:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+ case SPINEL_PROP_THREAD_NETWORK_DATA_VERSION:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_OFF_MESH_ROUTES:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ON_MESH_NETS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_PARENT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_RLOC16:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_STABLE_LEADER_NETWORK_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_STABLE_NETWORK_DATA_VERSION:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_ENABLE_BORDER_ROUTER
+ case SPINEL_PROP_THREAD_NETWORK_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_STABLE_NETWORK_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+ case SPINEL_PROP_THREAD_ACTIVE_DATASET:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_PENDING_DATASET:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_ADDRESS_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD_MODE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_LL_ADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_ML_PREFIX:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_ML_ADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_IPV6_ROUTE_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_ENABLE_JAM_DETECTION
+ case SPINEL_PROP_JAM_DETECT_ENABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_JAM_DETECTED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_JAM_DETECT_RSSI_THRESHOLD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_JAM_DETECT_WINDOW:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_JAM_DETECT_BUSY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_JAM_DETECT_HISTORY_BITMAP:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#if OPENTHREAD_ENABLE_CHANNEL_MONITOR
+ case SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_INTERVAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MONITOR_RSSI_THRESHOLD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_WINDOW:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MONITOR_SAMPLE_COUNT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MONITOR_CHANNEL_OCCUPANCY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#if OPENTHREAD_ENABLE_LEGACY
+ case SPINEL_PROP_NEST_LEGACY_ULA_PREFIX:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_NEST_LEGACY_LAST_NODE_JOINED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+ // MAC counters
+ case SPINEL_PROP_CNTR_TX_PKT_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_ACK_REQ:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_ACKED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_NO_ACK_REQ:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_DATA_POLL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_BEACON:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_BEACON_REQ:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_OTHER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_RETRY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_UNICAST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_PKT_BROADCAST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_ERR_CCA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_ERR_ABORT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_DATA_POLL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_BEACON:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_BEACON_REQ:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_OTHER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_FILT_WL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_FILT_DA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_UNICAST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_BROADCAST:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_ERR_EMPTY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_ERR_UKWN_NBR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_ERR_NVLD_SADDR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_ERR_SECURITY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_ERR_BAD_FCS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_ERR_OTHER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_PKT_DUP:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_ALL_MAC_COUNTERS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ // NCP counters
+ case SPINEL_PROP_CNTR_TX_IP_SEC_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_IP_INSEC_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_IP_DROPPED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_IP_SEC_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_IP_INSEC_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_IP_DROPPED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_TX_SPINEL_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_SPINEL_TOTAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_RX_SPINEL_ERR:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ // IP counters
+ case SPINEL_PROP_CNTR_IP_TX_SUCCESS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_IP_RX_SUCCESS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_IP_TX_FAILURE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CNTR_IP_RX_FAILURE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
+ case SPINEL_PROP_THREAD_NETWORK_TIME:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#endif // OPENTHREAD_MTD || OPENTHREAD_FTD
+
+#if OPENTHREAD_FTD
+ case SPINEL_PROP_NET_PSKC:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_LEADER_WEIGHT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_CHILD_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_CHILD_TABLE_ADDRESSES:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ROUTER_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_LOCAL_LEADER_WEIGHT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ROUTER_ROLE_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_CHILD_COUNT_MAX:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ROUTER_UPGRADE_THRESHOLD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ROUTER_DOWNGRADE_THRESHOLD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_CONTEXT_REUSE_DELAY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_NETWORK_ID_TIMEOUT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ROUTER_SELECTION_JITTER:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_PREFERRED_ROUTER_ID:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_THREAD_ADDRESS_CACHE_TABLE:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#if OPENTHREAD_ENABLE_COMMISSIONER
+ case SPINEL_PROP_THREAD_COMMISSIONER_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#if OPENTHREAD_ENABLE_TMF_PROXY
+ case SPINEL_PROP_THREAD_TMF_PROXY_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#if OPENTHREAD_CONFIG_ENABLE_STEERING_DATA_SET_OOB
+ case SPINEL_PROP_THREAD_STEERING_DATA:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#if OPENTHREAD_ENABLE_CHANNEL_MANAGER
+ case SPINEL_PROP_CHANNEL_MANAGER_NEW_CHANNEL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MANAGER_DELAY:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MANAGER_SUPPORTED_CHANNELS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MANAGER_FAVORED_CHANNELS:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MANAGER_CHANNEL_SELECT:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_CHANNEL_MANAGER_AUTO_SELECT_INTERVAL:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+#if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
+ case SPINEL_PROP_TIME_SYNC_PERIOD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+ case SPINEL_PROP_TIME_SYNC_XTAL_THRESHOLD:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif // OPENTHREAD_CONFIG_ENABLE_TIME_SYNC
+#endif // OPENTHREAD_FTD
+
+#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
+ case SPINEL_PROP_MAC_SRC_MATCH_ENABLED:
+ handler = &NcpBase::HandlePropertyGet;
+ break;
+#endif
+ default:
+ handler = NULL;
+ }
+
+ return handler;
+}
+
+NcpBase::PropertyHandler NcpBase::FindSetPropertyHandler(spinel_prop_key_t aKey)
+{
+ NcpBase::PropertyHandler handler;
+
+ switch (aKey)
+ {
+#if OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
+ case SPINEL_PROP_MAC_15_4_SADDR:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_SRC_MATCH_ENABLED:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_PHY_ENABLED:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+#endif // OPENTHREAD_RADIO || OPENTHREAD_ENABLE_RAW_LINK_API
+ case SPINEL_PROP_POWER_STATE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MCU_POWER_STATE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_UNSOL_UPDATE_FILTER:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_PHY_TX_POWER:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_PHY_CHAN:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_PROMISCUOUS_MODE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_15_4_PANID:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_15_4_LADDR:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_RAW_STREAM_ENABLED:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+#if OPENTHREAD_MTD || OPENTHREAD_FTD
+ case SPINEL_PROP_MAC_DATA_POLL_PERIOD:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_SCAN_MASK:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_SCAN_STATE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_SCAN_PERIOD:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_IF_UP:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_STACK_UP:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_ROLE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_NETWORK_NAME:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_XPANID:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_MASTER_KEY:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_THREAD_ASSISTING_PORTS:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_STREAM_NET_INSECURE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_STREAM_NET:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_IPV6_ML_PREFIX:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD_MODE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+#if OPENTHREAD_ENABLE_MAC_FILTER
+ case SPINEL_PROP_MAC_WHITELIST:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_WHITELIST_ENABLED:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_BLACKLIST:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_BLACKLIST_ENABLED:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_MAC_FIXED_RSS:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+#endif
+ case SPINEL_PROP_THREAD_MODE:
+ handler = &NcpBase::HandlePropertySet;
+ break;
+ case SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING:
+ handler = &NcpBase::HandlePropertySet