XBee API operation library for mbed

SmartLabXBeeCore/Device/Address.cpp

Committer:
yangcq88517
Date:
2016-03-30
Revision:
9:6e4ef3c302b4
Parent:
8:4da2ac03e35e

File content as of revision 9:6e4ef3c302b4:

#include "Address.h"

Address * Address::BROADCAST_ZIGBEE = new Address(0x00000000, 0x0000FFFF, 0xFFFE);
Address * Address::BROADCAST_XBEE = new Address(0x00000000, 0x00000000, 0xFFFF);

Address::Address() {}

Address::Address(const unsigned  char * address64, const unsigned  char * NET16)
{
    if (address64 != NULL)
        memcpy(value,address64,8);

    if (NET16 != NULL) {
        value[8] = NET16[0];
        value[9] = NET16[1];
    }
}

Address::Address(const unsigned  char * addr)
{
    if (addr != NULL)
        memcpy(value,addr,10);
}

Address::Address(long serialNumberHigh, long serialNumberLow, int networkAddress)
{
    setSerialNumberHigh(serialNumberHigh);
    setSerialNumberLow(serialNumberLow);
    setNetworkAddress(networkAddress);
}

unsigned long Address::getSerialNumberHigh()
{
    return (value[0] << 24) | (value[1] << 16) | (value[2] << 8) | value[3];
}

unsigned long Address::getSerialNumberLow()
{
    return (value[4] << 24) | (value[5] << 16) | (value[6] << 8) | value[7];
}

unsigned int Address::getNetworkAddress()
{
    return (value[8] << 8) | value[9];
}

void Address::setSerialNumberHigh(long serialNumberHigh)
{
    value[0] = serialNumberHigh >> 24;
    value[1] = serialNumberHigh >> 16;
    value[2] = serialNumberHigh >> 8;
    value[3] = serialNumberHigh;
}

void Address::setSerialNumberLow(long serialNumberLow)
{
    value[4] = serialNumberLow >> 24;
    value[5] = serialNumberLow >> 16;
    value[6] = serialNumberLow >> 8;
    value[7] = serialNumberLow;
}

void Address::setNetworkAddress(int networkAddress)
{
    value[8] = networkAddress >> 8;
    value[9] = networkAddress;
}

const unsigned  char * Address::getAddressValue()
{
    return value;
}

bool operator ==(const Address &a,const Address &b)
{
    for (uint8_t i = 0; i < 8; i++)
        if (a.value[i] != b.value[i])
            return false;
    return true;
}

bool operator !=(const Address &a,const Address &b)
{
    return !(a==b);
}