Add API to set the IEEE 802.15.4 Extended Address. (#289)

This commit is contained in:
Jonathan Hui
2016-07-28 10:55:23 -07:00
committed by GitHub
parent 5f3f992b11
commit 143ea37a0a
10 changed files with 110 additions and 9 deletions
+2 -1
View File
@@ -265,7 +265,8 @@ enum
OT_THREAD_CHILD_ADDED = 1 << 6, ///< Child was added
OT_THREAD_CHILD_REMOVED = 1 << 7, ///< Child was removed
OT_IP6_ML_ADDR_CHANGED = 1 << 8, ///< The mesh-local address has changed
OT_IP6_LL_ADDR_CHANGED = 1 << 8, ///< The link-local address has changed
OT_IP6_ML_ADDR_CHANGED = 1 << 9, ///< The mesh-local address has changed
};
/**
+11
View File
@@ -316,6 +316,17 @@ void otSetChildTimeout(uint32_t aTimeout);
*/
const uint8_t *otGetExtendedAddress(void);
/**
* This function sets the IEEE 802.15.4 Extended Address.
*
* @param[in] aExtendedAddress A pointer to the IEEE 802.15.4 Extended Address.
*
* @retval kThreadError_None Successfully set the IEEE 802.15.4 Extended Address.
* @retval kThreadError_InvalidArgs @p aExtendedAddress was NULL.
*
*/
ThreadError otSetExtendedAddress(const otExtAddress *aExtendedAddress);
/**
* Get the IEEE 802.15.4 Extended PAN ID.
*
+12 -2
View File
@@ -185,7 +185,17 @@ Get the IEEE 802.15.4 Extended Address.
```bash
> extaddr
0xdead00beef00cafe
dead00beef00cafe
Done
```
### extaddr \<extaddr\>
Set the IEEE 802.15.4 Extended Address.
```bash
> extaddr dead00beef00cafe
dead00beef00cafe
Done
```
@@ -195,7 +205,7 @@ Get the Thread Extended PAN ID value.
```bash
> extpanid
0xdead00beef00cafe
dead00beef00cafe
Done
```
+18 -5
View File
@@ -386,11 +386,24 @@ exit:
void Interpreter::ProcessExtAddress(int argc, char *argv[])
{
OutputBytes(otGetExtendedAddress(), OT_EXT_ADDRESS_SIZE);
sServer->OutputFormat("\r\n");
AppendResult(kThreadError_None);
(void)argc;
(void)argv;
ThreadError error = kThreadError_None;
if (argc == 0)
{
OutputBytes(otGetExtendedAddress(), OT_EXT_ADDRESS_SIZE);
sServer->OutputFormat("\r\n");
}
else
{
otExtAddress extAddress;
VerifyOrExit(Hex2Bin(argv[0], extAddress.m8, sizeof(otExtAddress)) >= 0, error = kThreadError_Parse);
otSetExtendedAddress(&extAddress);
}
exit:
AppendResult(error);
}
void Interpreter::ProcessExtPanId(int argc, char *argv[])
+7 -1
View File
@@ -199,15 +199,21 @@ const ExtAddress *Mac::GetExtAddress(void) const
ThreadError Mac::SetExtAddress(const ExtAddress &aExtAddress)
{
ThreadError error;
uint8_t buf[8];
VerifyOrExit(!aExtAddress.IsGroup(), error = kThreadError_InvalidArgs);
for (size_t i = 0; i < sizeof(buf); i++)
{
buf[i] = mExtAddress.m8[7 - i];
}
SuccessOrExit(error = otPlatRadioSetExtendedAddress(buf));
mExtAddress = aExtAddress;
return otPlatRadioSetExtendedAddress(buf);
exit:
return error;
}
ShortAddress Mac::GetShortAddress(void) const
+18
View File
@@ -81,6 +81,15 @@ typedef otShortAddress ShortAddress;
class ExtAddress: public otExtAddress
{
public:
/**
* This method indicates whether or not the Group bit is set.
*
* @retval TRUE If the group bit is set.
* @retval FALSE If the group bit is not set.
*
*/
bool IsGroup(void) const { return (m8[0] & kGroupFlag) != 0; }
/**
* This method sets the Group bit.
*
@@ -96,6 +105,15 @@ public:
}
}
/**
* This method indicates whether or not the Local bit is set.
*
* @retval TRUE If the local bit is set.
* @retval FALSE If the local bit is not set.
*
*/
bool IsLocal(void) const { return (m8[0] & kLocalFlag) != 0; }
/**
* This method sets the Local bit.
*
+13
View File
@@ -96,6 +96,19 @@ const uint8_t *otGetExtendedAddress(void)
return reinterpret_cast<const uint8_t *>(sThreadNetif->GetMac().GetExtAddress());
}
ThreadError otSetExtendedAddress(const otExtAddress *aExtAddress)
{
ThreadError error = kThreadError_None;
VerifyOrExit(aExtAddress != NULL, error = kThreadError_InvalidArgs);
SuccessOrExit(error = sThreadNetif->GetMac().SetExtAddress(*static_cast<const Mac::ExtAddress *>(aExtAddress)));
SuccessOrExit(error = sThreadNetif->GetMle().UpdateLinkLocalAddress());
exit:
return error;
}
const uint8_t *otGetExtendedPanId(void)
{
return sThreadNetif->GetMac().GetExtendedPanId();
+11
View File
@@ -342,6 +342,17 @@ exit:
return error;
}
ThreadError Mle::UpdateLinkLocalAddress(void)
{
mNetif.RemoveUnicastAddress(mLinkLocal64);
mLinkLocal64.GetAddress().SetIid(*mMac.GetExtAddress());
mNetif.AddUnicastAddress(mLinkLocal64);
mNetif.SetStateChangedFlags(OT_IP6_LL_ADDR_CHANGED);
return kThreadError_None;
}
const uint8_t *Mle::GetMeshLocalPrefix(void) const
{
return mMeshLocal16.GetAddress().mFields.m8;
+10
View File
@@ -406,6 +406,16 @@ public:
*/
ThreadError SetMeshLocalPrefix(const uint8_t *aPrefix);
/**
* This method updates the link local address.
*
* Call this method when the IEEE 802.15.4 Extended Address has changed.
*
* @retval kThreadError_None Successfully updated the link local address.
*
*/
ThreadError UpdateLinkLocalAddress(void);
/**
* This method returns a pointer to the link-local all Thread nodes multicast address.
*
+8
View File
@@ -477,6 +477,14 @@ void NcpBase::UpdateChangedProps()
ResetReasonToSpinelStatus(otPlatGetResetReason())
);
}
else if ((mChangedFlags & OT_IP6_LL_ADDR_CHANGED) != 0)
{
mChangedFlags &= ~OT_IP6_LL_ADDR_CHANGED;
HandleCommandPropertyGet(
SPINEL_HEADER_FLAG | SPINEL_HEADER_IID_0,
SPINEL_PROP_IPV6_LL_ADDR
);
}
else if ((mChangedFlags & OT_IP6_ML_ADDR_CHANGED) != 0)
{
mChangedFlags &= ~OT_IP6_ML_ADDR_CHANGED;