123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- /****************************************************************************
- Filename: saddr.c
- Revised: $Date: 2009-12-10 08:32:15 -0800 (Thu, 10 Dec 2009) $
- Revision: $Revision: 21311 $
- Description: Zigbee and 802.15.4 device address utility functions.
- Copyright 2005-2010 Texas Instruments Incorporated. All rights reserved.
- IMPORTANT: Your use of this Software is limited to those specific rights
- granted under the terms of a software license agreement between the user
- who downloaded the software, his/her employer (which must be your employer)
- and Texas Instruments Incorporated (the "License"). You may not use this
- Software unless you agree to abide by the terms of the License. The License
- limits your use, and you acknowledge, that the Software may not be modified,
- copied or distributed unless embedded on a Texas Instruments microcontroller
- or used solely and exclusively in conjunction with a Texas Instruments radio
- frequency transceiver, which is integrated into your product. Other than for
- the foregoing purpose, you may not use, reproduce, copy, prepare derivative
- works of, modify, distribute, perform, display or sell this Software and/or
- its documentation for any purpose.
- YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
- PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
- INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
- NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
- TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
- NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
- LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
- INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
- OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
- OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
- (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
- Should you have any questions regarding your right to use this Software,
- contact Texas Instruments Incorporated at www.TI.com.
- ****************************************************************************/
- /****************************************************************************
- * INCLUDES
- */
- #include "hal_types.h"
- #include "OSAL.h"
- #include "saddr.h"
- /****************************************************************************
- * @fn sAddrCmp
- *
- * @brief Compare two device addresses.
- *
- * input parameters
- *
- * @param pAddr1 - Pointer to first address.
- * @param pAddr2 - Pointer to second address.
- *
- * output parameters
- *
- * @return TRUE if addresses are equal, FALSE otherwise
- */
- bool sAddrCmp(const sAddr_t *pAddr1, const sAddr_t *pAddr2)
- {
- if (pAddr1->addrMode != pAddr2->addrMode)
- {
- return FALSE;
- }
- else if (pAddr1->addrMode == SADDR_MODE_NONE)
- {
- return FALSE;
- }
- else if (pAddr1->addrMode == SADDR_MODE_SHORT)
- {
- return (bool) (pAddr1->addr.shortAddr == pAddr2->addr.shortAddr);
- }
- else if (pAddr1->addrMode == SADDR_MODE_EXT)
- {
- return (sAddrExtCmp(pAddr1->addr.extAddr, pAddr2->addr.extAddr));
- }
- else
- {
- return FALSE;
- }
- }
- /****************************************************************************
- * @fn sAddrIden
- *
- * @brief Check if two device addresses are identical.
- *
- * This routine is virtually the same as sAddrCmp, which is used
- * to determine if two different addresses are the same. However,
- * this routine can be used to determine if an address is the
- * same as a previously stored address. The key difference is in
- * the former case, if the address mode is "none", then the
- * assumption is that the two addresses can not be the same. But
- * in the latter case, the address mode itself is being compared.
- * So two addresses can be identical even if the address mode is
- * "none", as long as the address mode of both addresses being
- * compared is "none".
- *
- * input parameters
- *
- * @param pAddr1 - Pointer to first address.
- * @param pAddr2 - Pointer to second address.
- *
- * output parameters
- *
- * @return TRUE if addresses are identical, FALSE otherwise
- */
- bool sAddrIden(const sAddr_t *pAddr1, const sAddr_t *pAddr2)
- {
- // first check if the address modes are the same
- if (pAddr1->addrMode != pAddr2->addrMode)
- {
- // no, so no point in comparing any further
- return FALSE;
- }
- // the address modes are the same; check if there is no address
- else if (pAddr1->addrMode == SADDR_MODE_NONE)
- {
- // no address, so no need to compare any further as both addresses have the
- // same address mode but no address, so they are identical
- return TRUE;
- }
- // there's an address; check if it is short
- else if (pAddr1->addrMode == SADDR_MODE_SHORT)
- {
- // compare short addresses
- return (bool) (pAddr1->addr.shortAddr == pAddr2->addr.shortAddr);
- }
- // there's an address; check if it is extended
- else if (pAddr1->addrMode == SADDR_MODE_EXT)
- {
- // compare extended addresses
- return (sAddrExtCmp(pAddr1->addr.extAddr, pAddr2->addr.extAddr));
- }
- else // unknown error
- {
- return FALSE;
- }
- }
- /****************************************************************************
- * @fn sAddrCpy
- *
- * @brief Copy a device address.
- *
- * input parameters
- *
- * @param pSrc - Pointer to address to copy.
- *
- * output parameters
- *
- * @param pDest - Pointer to address of copy.
- *
- * @return None.
- */
- void sAddrCpy(sAddr_t *pDest, const sAddr_t *pSrc)
- {
- pDest->addrMode = pSrc->addrMode;
- if (pDest->addrMode == SADDR_MODE_EXT)
- {
- sAddrExtCpy(pDest->addr.extAddr, pSrc->addr.extAddr);
- }
- else
- {
- pDest->addr.shortAddr = pSrc->addr.shortAddr;
- }
- }
- /****************************************************************************
- * @fn sAddrExtCmp
- *
- * @brief Compare two extended addresses.
- *
- * input parameters
- *
- * @param pAddr1 - Pointer to first address.
- * @param pAddr2 - Pointer to second address.
- *
- * output parameters
- *
- * @return TRUE if addresses are equal, FALSE otherwise
- */
- bool sAddrExtCmp(const uint8 * pAddr1, const uint8 * pAddr2)
- {
- uint8 i;
- for (i = SADDR_EXT_LEN; i != 0; i--)
- {
- if (*pAddr1++ != *pAddr2++)
- {
- return FALSE;
- }
- }
- return TRUE;
- }
- /****************************************************************************
- * @fn sAddrExtCpy
- *
- * @brief Copy an extended address.
- *
- * input parameters
- *
- * @param pSrc - Pointer to address to copy.
- *
- * output parameters
- *
- * @param pDest - Pointer to address of copy.
- *
- * @return pDest + SADDR_EXT_LEN.
- */
- void *sAddrExtCpy(uint8 * pDest, const uint8 * pSrc)
- {
- return osal_memcpy(pDest, pSrc, SADDR_EXT_LEN);
- }
|