Radio API: set short address, extended address, and panid must not fail. (#774)

This commit is contained in:
Jonathan Hui
2016-10-08 18:49:23 -07:00
committed by GitHub
parent 656c919c71
commit 3ebef251eb
5 changed files with 29 additions and 85 deletions
+9 -33
View File
@@ -123,54 +123,30 @@ void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64)
} }
} }
ThreadError otPlatRadioSetPanId(otInstance *aInstance, uint16_t panid) void otPlatRadioSetPanId(otInstance *aInstance, uint16_t panid)
{ {
ThreadError error = kThreadError_Busy;
(void)aInstance; (void)aInstance;
if (sState != kStateTransmit) HWREG(RFCORE_FFSM_PAN_ID0) = panid & 0xFF;
{ HWREG(RFCORE_FFSM_PAN_ID1) = panid >> 8;
HWREG(RFCORE_FFSM_PAN_ID0) = panid & 0xFF;
HWREG(RFCORE_FFSM_PAN_ID1) = panid >> 8;
error = kThreadError_None;
}
return error;
} }
ThreadError otPlatRadioSetExtendedAddress(otInstance *aInstance, uint8_t *address) void otPlatRadioSetExtendedAddress(otInstance *aInstance, uint8_t *address)
{ {
ThreadError error = kThreadError_Busy;
(void)aInstance; (void)aInstance;
if (sState != kStateTransmit) for (int i = 0; i < 8; i++)
{ {
int i; ((volatile uint32_t *)RFCORE_FFSM_EXT_ADDR0)[i] = address[i];
for (i = 0; i < 8; i++)
{
((volatile uint32_t *)RFCORE_FFSM_EXT_ADDR0)[i] = address[i];
}
error = kThreadError_None;
} }
return error;
} }
ThreadError otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t address) void otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t address)
{ {
ThreadError error = kThreadError_Busy;
(void)aInstance; (void)aInstance;
if (sState != kStateTransmit) HWREG(RFCORE_FFSM_SHORT_ADDR0) = address & 0xFF;
{ HWREG(RFCORE_FFSM_SHORT_ADDR1) = address >> 8;
HWREG(RFCORE_FFSM_SHORT_ADDR0) = address & 0xFF;
HWREG(RFCORE_FFSM_SHORT_ADDR1) = address >> 8;
error = kThreadError_None;
}
return error;
} }
void cc2538RadioInit(void) void cc2538RadioInit(void)
+7 -33
View File
@@ -300,52 +300,26 @@ void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64)
aIeeeEui64[7] = NODE_ID & 0xff; aIeeeEui64[7] = NODE_ID & 0xff;
} }
ThreadError otPlatRadioSetPanId(otInstance *aInstance, uint16_t panid) void otPlatRadioSetPanId(otInstance *aInstance, uint16_t panid)
{ {
ThreadError error = kThreadError_Busy;
(void)aInstance; (void)aInstance;
sPanid = panid;
if (sState != kStateTransmit)
{
sPanid = panid;
error = kThreadError_None;
}
return error;
} }
ThreadError otPlatRadioSetExtendedAddress(otInstance *aInstance, uint8_t *address) void otPlatRadioSetExtendedAddress(otInstance *aInstance, uint8_t *address)
{ {
ThreadError error = kThreadError_Busy;
(void)aInstance; (void)aInstance;
if (sState != kStateTransmit) for (size_t i = 0; i < sizeof(sExtendedAddress); i++)
{ {
size_t i; sExtendedAddress[i] = address[sizeof(sExtendedAddress) - 1 - i];
for (i = 0; i < sizeof(sExtendedAddress); i++)
{
sExtendedAddress[i] = address[sizeof(sExtendedAddress) - 1 - i];
}
error = kThreadError_None;
} }
return error;
} }
ThreadError otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t address) void otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t address)
{ {
ThreadError error = kThreadError_Busy;
(void)aInstance; (void)aInstance;
sShortAddress = address;
if (sState != kStateTransmit)
{
sShortAddress = address;
error = kThreadError_None;
}
return error;
} }
void otPlatRadioSetPromiscuous(otInstance *aInstance, bool aEnable) void otPlatRadioSetPromiscuous(otInstance *aInstance, bool aEnable)
+3 -8
View File
@@ -162,31 +162,26 @@ void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64);
* @param[in] aInstance The OpenThread instance structure. * @param[in] aInstance The OpenThread instance structure.
* @param[in] aPanId The IEEE 802.15.4 PAN ID. * @param[in] aPanId The IEEE 802.15.4 PAN ID.
* *
* @retval ::kThreadError_None If the PAN ID was set properly.
*/ */
ThreadError otPlatRadioSetPanId(otInstance *aInstance, uint16_t aPanId); void otPlatRadioSetPanId(otInstance *aInstance, uint16_t aPanId);
/** /**
* Set the Extended Address for address filtering. * Set the Extended Address for address filtering.
* *
*
* @param[in] aInstance The OpenThread instance structure. * @param[in] aInstance The OpenThread instance structure.
* @param[in] aExtendedAddress A pointer to the IEEE 802.15.4 Extended Address. * @param[in] aExtendedAddress A pointer to the IEEE 802.15.4 Extended Address.
* *
* @retval ::kThreadError_None If the Extended Address was set properly.
*/ */
ThreadError otPlatRadioSetExtendedAddress(otInstance *aInstance, uint8_t *aExtendedAddress); void otPlatRadioSetExtendedAddress(otInstance *aInstance, uint8_t *aExtendedAddress);
/** /**
* Set the Short Address for address filtering. * Set the Short Address for address filtering.
* *
*
* @param[in] aInstance The OpenThread instance structure. * @param[in] aInstance The OpenThread instance structure.
* @param[in] aShortAddress The IEEE 802.15.4 Short Address. * @param[in] aShortAddress The IEEE 802.15.4 Short Address.
* *
* @retval ::kThreadError_None If the Short Address was set properly.
*/ */
ThreadError otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t aShortAddress); void otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t aShortAddress);
/** /**
* @} * @}
+7 -5
View File
@@ -351,8 +351,8 @@ const ExtAddress *Mac::GetExtAddress(void) const
ThreadError Mac::SetExtAddress(const ExtAddress &aExtAddress) ThreadError Mac::SetExtAddress(const ExtAddress &aExtAddress)
{ {
ThreadError error; ThreadError error = kThreadError_None;
uint8_t buf[8]; uint8_t buf[sizeof(aExtAddress)];
VerifyOrExit(!aExtAddress.IsGroup(), error = kThreadError_InvalidArgs); VerifyOrExit(!aExtAddress.IsGroup(), error = kThreadError_InvalidArgs);
@@ -361,7 +361,7 @@ ThreadError Mac::SetExtAddress(const ExtAddress &aExtAddress)
buf[i] = aExtAddress.m8[7 - i]; buf[i] = aExtAddress.m8[7 - i];
} }
SuccessOrExit(error = otPlatRadioSetExtendedAddress(mNetif.GetInstance(), buf)); otPlatRadioSetExtendedAddress(mNetif.GetInstance(), buf);
mExtAddress = aExtAddress; mExtAddress = aExtAddress;
exit: exit:
@@ -390,7 +390,8 @@ ShortAddress Mac::GetShortAddress(void) const
ThreadError Mac::SetShortAddress(ShortAddress aShortAddress) ThreadError Mac::SetShortAddress(ShortAddress aShortAddress)
{ {
mShortAddress = aShortAddress; mShortAddress = aShortAddress;
return otPlatRadioSetShortAddress(mNetif.GetInstance(), aShortAddress); otPlatRadioSetShortAddress(mNetif.GetInstance(), aShortAddress);
return kThreadError_None;
} }
uint8_t Mac::GetChannel(void) const uint8_t Mac::GetChannel(void) const
@@ -446,7 +447,8 @@ PanId Mac::GetPanId(void) const
ThreadError Mac::SetPanId(PanId aPanId) ThreadError Mac::SetPanId(PanId aPanId)
{ {
mPanId = aPanId; mPanId = aPanId;
return otPlatRadioSetPanId(mNetif.GetInstance(), mPanId); otPlatRadioSetPanId(mNetif.GetInstance(), mPanId);
return kThreadError_None;
} }
const uint8_t *Mac::GetExtendedPanId(void) const const uint8_t *Mac::GetExtendedPanId(void) const
+3 -6
View File
@@ -96,19 +96,16 @@ extern "C" {
{ {
} }
ThreadError otPlatRadioSetPanId(otInstance *, uint16_t) void otPlatRadioSetPanId(otInstance *, uint16_t)
{ {
return kThreadError_None;
} }
ThreadError otPlatRadioSetExtendedAddress(otInstance *, uint8_t *) void otPlatRadioSetExtendedAddress(otInstance *, uint8_t *)
{ {
return kThreadError_None;
} }
ThreadError otPlatRadioSetShortAddress(otInstance *, uint16_t) void otPlatRadioSetShortAddress(otInstance *, uint16_t)
{ {
return kThreadError_None;
} }
void otPlatRadioSetPromiscuous(otInstance *, bool) void otPlatRadioSetPromiscuous(otInstance *, bool)