From bbb89b2e41c4279bc5ae800cc6700fc1300326b3 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Fri, 17 Feb 2017 12:08:10 -0800 Subject: [PATCH] `NcpBase`: Add get/set handlers for PHY_TX_POWER (#1335) --- src/ncp/ncp_base.cpp | 39 ++++++++++++++++++++++++++++++++++----- src/ncp/ncp_base.hpp | 1 + 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/ncp/ncp_base.cpp b/src/ncp/ncp_base.cpp index a372c9606..1f8a8ae89 100644 --- a/src/ncp/ncp_base.cpp +++ b/src/ncp/ncp_base.cpp @@ -108,6 +108,7 @@ const NcpBase::GetPropertyHandlerEntry NcpBase::mGetPropertyHandlerTable[] = { SPINEL_PROP_PHY_CHAN_SUPPORTED, &NcpBase::GetPropertyHandler_PHY_CHAN_SUPPORTED }, { SPINEL_PROP_PHY_CHAN, &NcpBase::GetPropertyHandler_PHY_CHAN }, { SPINEL_PROP_PHY_RSSI, &NcpBase::GetPropertyHandler_PHY_RSSI }, + { SPINEL_PROP_PHY_TX_POWER, &NcpBase::GetPropertyHandler_PHY_TX_POWER }, { SPINEL_PROP_MAC_SCAN_STATE, &NcpBase::GetPropertyHandler_MAC_SCAN_STATE }, { SPINEL_PROP_MAC_SCAN_MASK, &NcpBase::GetPropertyHandler_MAC_SCAN_MASK }, @@ -1832,6 +1833,17 @@ ThreadError NcpBase::GetPropertyHandler_PHY_RSSI(uint8_t header, spinel_prop_key ); } +ThreadError NcpBase::GetPropertyHandler_PHY_TX_POWER(uint8_t header, spinel_prop_key_t key) +{ + return SendPropertyUpdate( + header, + SPINEL_CMD_PROP_VALUE_IS, + key, + SPINEL_DATATYPE_INT8_S, + otGetMaxTransmitPower(mInstance) + ); +} + ThreadError NcpBase::GetPropertyHandler_MAC_SCAN_STATE(uint8_t header, spinel_prop_key_t key) { ThreadError errorCode = kThreadError_None; @@ -3327,12 +3339,29 @@ ThreadError NcpBase::SetPropertyHandler_PHY_ENABLED(uint8_t header, spinel_prop_ ThreadError NcpBase::SetPropertyHandler_PHY_TX_POWER(uint8_t header, spinel_prop_key_t key, const uint8_t *value_ptr, uint16_t value_len) { - // TODO: Implement PHY_TX_POWER - (void)key; - (void)value_ptr; - (void)value_len; + int8_t value = 0; + spinel_ssize_t parsedLength; + ThreadError errorCode = kThreadError_None; - return SendLastStatus(header, SPINEL_STATUS_UNIMPLEMENTED); + parsedLength = spinel_datatype_unpack( + value_ptr, + value_len, + SPINEL_DATATYPE_INT8_S, + &value + ); + + if (parsedLength > 0) + { + otSetMaxTransmitPower(mInstance, value); + + errorCode = HandleCommandPropertyGet(header, key); + } + else + { + errorCode = SendLastStatus(header, SPINEL_STATUS_PARSE_ERROR); + } + + return errorCode; } ThreadError NcpBase::SetPropertyHandler_PHY_CHAN(uint8_t header, spinel_prop_key_t key, const uint8_t *value_ptr, diff --git a/src/ncp/ncp_base.hpp b/src/ncp/ncp_base.hpp index b337a6902..c42402a91 100644 --- a/src/ncp/ncp_base.hpp +++ b/src/ncp/ncp_base.hpp @@ -325,6 +325,7 @@ private: ThreadError GetPropertyHandler_PHY_CHAN_SUPPORTED(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_PHY_CHAN(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_PHY_RSSI(uint8_t header, spinel_prop_key_t key); + ThreadError GetPropertyHandler_PHY_TX_POWER(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_MAC_SCAN_STATE(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_MAC_15_4_PANID(uint8_t header, spinel_prop_key_t key); ThreadError GetPropertyHandler_MAC_15_4_LADDR(uint8_t header, spinel_prop_key_t key);