Fix incorrect IEEE address byte re-ordering
This commit is contained in:
parent
2e166a83c7
commit
66edb5b263
2 changed files with 22 additions and 3 deletions
|
@ -49,12 +49,24 @@ ieee_addr_cpy_to(uint8_t *dst, uint8_t len)
|
|||
|
||||
memcpy(dst, &ieee_addr_hc[8 - len], len);
|
||||
} else {
|
||||
/* Reading from Info Page, we need to invert byte order */
|
||||
/* Verify if we detect TI OUI in fourth position. TI store the MAC @ on
|
||||
two parts (4 bytes LSB first and 4 bytes MSB) in this case, we need
|
||||
to flip the 2 parts */
|
||||
int i;
|
||||
uint8_t oui_ti[3] = IEEE_ADDR_OUI_TI;
|
||||
if(((uint8_t *)IEEE_ADDR_LOCATION)[3] == oui_ti[0] && ((uint8_t *)IEEE_ADDR_LOCATION)[2] == oui_ti[1] && ((uint8_t *)IEEE_ADDR_LOCATION)[1] == oui_ti[2]) {
|
||||
for(i = 0; i < len / 2; i++) {
|
||||
dst[i] = ((uint8_t *)IEEE_ADDR_LOCATION)[len / 2 - 1 - i];
|
||||
}
|
||||
for(i = 0; i < len / 2; i++) {
|
||||
dst[i + len / 2] = ((uint8_t *)IEEE_ADDR_LOCATION)[len - 1 - i];
|
||||
}
|
||||
} else {
|
||||
for(i = 0; i < len; i++) {
|
||||
dst[i] = ((uint8_t *)IEEE_ADDR_LOCATION)[len - 1 - i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if IEEE_ADDR_NODE_ID
|
||||
dst[len - 1] = IEEE_ADDR_NODE_ID & 0xFF;
|
||||
|
|
|
@ -48,6 +48,13 @@
|
|||
|
||||
#include <stdint.h>
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/**
|
||||
* \name TI OUI
|
||||
* @{
|
||||
*/
|
||||
#define IEEE_ADDR_OUI_TI { 0x00, 0x12, 0x4B } /**< TI OUI */
|
||||
/** @} */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/**
|
||||
* \name IEEE address locations
|
||||
* @{
|
||||
|
|
Loading…
Reference in a new issue