[spinel] define link flags in spinel.h and use throughout ncp_base (#1935)

* Define link flags in Spinel.h and use throughout ncp_base.

* fix syntax errors.
This commit is contained in:
pvanhorn
2017-06-26 12:43:23 -07:00
committed by Jonathan Hui
parent 91b394f423
commit 6ca25d4d03
2 changed files with 52 additions and 74 deletions
+44 -74
View File
@@ -79,14 +79,6 @@ namespace ot {
#define NCP_CHANGED_THREAD_ON_MESH_NETS (1U << 30)
#define NCP_CHANGED_THREAD_OFF_MESH_ROUTES (1U << 29)
enum
{
kThreadMode_RxOnWhenIdle = (1 << 3),
kThreadMode_SecureDataRequest = (1 << 2),
kThreadMode_FullFunctionDevice = (1 << 1),
kThreadMode_FullNetworkData = (1 << 0),
};
#define RSSI_OVERRIDE_DISABLED 127 // Used for PROP_MAC_WHITELIST
#define IGNORE_RETURN_VALUE(s) do { if (s){} } while (0)
@@ -575,6 +567,33 @@ static uint8_t BorderRouterConfigToFlagByte(const otBorderRouterConfig &aConfig)
return flags;
}
static uint8_t LinkFlagsToFlagByte(bool aRxOnWhenIdle, bool aSecureDataRequests, bool aDeviceType, bool aNetworkData)
{
uint8_t flags(0);
if (aRxOnWhenIdle)
{
flags |= SPINEL_THREAD_MODE_RX_ON_WHEN_IDLE;
}
if (aSecureDataRequests)
{
flags |= SPINEL_THREAD_MODE_SECURE_DATA_REQUEST;
}
if (aDeviceType)
{
flags |= SPINEL_THREAD_MODE_FULL_FUNCTION_DEV;
}
if (aNetworkData)
{
flags |= SPINEL_THREAD_MODE_FULL_NETWORK_DATA;
}
return flags;
}
static uint8_t ExternalRoutePreferenceToFlagByte(int aPreference)
{
uint8_t flags;
@@ -2955,27 +2974,10 @@ otError NcpBase::GetPropertyHandler_THREAD_CHILD_TABLE(uint8_t aHeader, spinel_p
continue;
}
modeFlags = 0;
if (childInfo.mRxOnWhenIdle)
{
modeFlags |= kThreadMode_RxOnWhenIdle;
}
if (childInfo.mSecureDataRequest)
{
modeFlags |= kThreadMode_SecureDataRequest;
}
if (childInfo.mFullFunction)
{
modeFlags |= kThreadMode_FullFunctionDevice;
}
if (childInfo.mFullNetworkData)
{
modeFlags |= kThreadMode_FullNetworkData;
}
modeFlags = LinkFlagsToFlagByte(childInfo.mRxOnWhenIdle,
childInfo.mSecureDataRequest,
childInfo.mFullFunction,
childInfo.mFullNetworkData);
SuccessOrExit(
error = OutboundFrameFeedPacked(
@@ -3025,27 +3027,10 @@ otError NcpBase::GetPropertyHandler_THREAD_NEIGHBOR_TABLE(uint8_t aHeader, spine
while (otThreadGetNextNeighborInfo(mInstance, &iter, &neighInfo) == OT_ERROR_NONE)
{
modeFlags = 0;
if (neighInfo.mRxOnWhenIdle)
{
modeFlags |= kThreadMode_RxOnWhenIdle;
}
if (neighInfo.mSecureDataRequest)
{
modeFlags |= kThreadMode_SecureDataRequest;
}
if (neighInfo.mFullFunction)
{
modeFlags |= kThreadMode_FullFunctionDevice;
}
if (neighInfo.mFullNetworkData)
{
modeFlags |= kThreadMode_FullNetworkData;
}
modeFlags = LinkFlagsToFlagByte(neighInfo.mRxOnWhenIdle,
neighInfo.mSecureDataRequest,
neighInfo.mFullFunction,
neighInfo.mFullNetworkData);
SuccessOrExit(
error = OutboundFrameFeedPacked(
@@ -4086,28 +4071,13 @@ otError NcpBase::GetPropertyHandler_NET_PSKC(uint8_t aHeader, spinel_prop_key_t
otError NcpBase::GetPropertyHandler_THREAD_MODE(uint8_t aHeader, spinel_prop_key_t aKey)
{
uint8_t numericMode = 0;
uint8_t numericMode;
otLinkModeConfig modeConfig = otThreadGetLinkMode(mInstance);
if (modeConfig.mRxOnWhenIdle)
{
numericMode |= kThreadMode_RxOnWhenIdle;
}
if (modeConfig.mSecureDataRequests)
{
numericMode |= kThreadMode_SecureDataRequest;
}
if (modeConfig.mDeviceType)
{
numericMode |= kThreadMode_FullFunctionDevice;
}
if (modeConfig.mNetworkData)
{
numericMode |= kThreadMode_FullNetworkData;
}
numericMode = LinkFlagsToFlagByte(modeConfig.mRxOnWhenIdle,
modeConfig.mSecureDataRequests,
modeConfig.mDeviceType,
modeConfig.mNetworkData);
return SendPropertyUpdate(
aHeader,
@@ -6023,11 +5993,11 @@ otError NcpBase::SetPropertyHandler_THREAD_MODE(uint8_t aHeader, spinel_prop_key
VerifyOrExit(parsedLength > 0, error = OT_ERROR_PARSE);
modeConfig.mRxOnWhenIdle = ((numericMode & kThreadMode_RxOnWhenIdle) == kThreadMode_RxOnWhenIdle);
modeConfig.mRxOnWhenIdle = ((numericMode & SPINEL_THREAD_MODE_RX_ON_WHEN_IDLE) == SPINEL_THREAD_MODE_RX_ON_WHEN_IDLE);
modeConfig.mSecureDataRequests =
((numericMode & kThreadMode_SecureDataRequest) == kThreadMode_SecureDataRequest);
modeConfig.mDeviceType = ((numericMode & kThreadMode_FullFunctionDevice) == kThreadMode_FullFunctionDevice);
modeConfig.mNetworkData = ((numericMode & kThreadMode_FullNetworkData) == kThreadMode_FullNetworkData);
((numericMode & SPINEL_THREAD_MODE_SECURE_DATA_REQUEST) == SPINEL_THREAD_MODE_SECURE_DATA_REQUEST);
modeConfig.mDeviceType = ((numericMode & SPINEL_THREAD_MODE_FULL_FUNCTION_DEV) == SPINEL_THREAD_MODE_FULL_FUNCTION_DEV);
modeConfig.mNetworkData = ((numericMode & SPINEL_THREAD_MODE_FULL_NETWORK_DATA) == SPINEL_THREAD_MODE_FULL_NETWORK_DATA);
error = otThreadSetLinkMode(mInstance, modeConfig);
+8
View File
@@ -223,6 +223,14 @@ enum
SPINEL_ROUTE_PREFERENCE_LOW = (3 << SPINEL_NET_FLAG_PREFERENCE_OFFSET),
};
enum
{
SPINEL_THREAD_MODE_FULL_NETWORK_DATA = (1 << 0),
SPINEL_THREAD_MODE_FULL_FUNCTION_DEV = (1 << 1),
SPINEL_THREAD_MODE_SECURE_DATA_REQUEST = (1 << 2),
SPINEL_THREAD_MODE_RX_ON_WHEN_IDLE = (1 << 3),
};
enum {
SPINEL_GPIO_FLAG_DIR_INPUT = 0,
SPINEL_GPIO_FLAG_DIR_OUTPUT = SPINEL_BIT_MASK(0, 8),