Files
OldPeopleHome/zigbee/ZStack-CC2530-r200/Projects/SappWsn/RouterEB/List/saddr.s51
LitterDryFish 6b0d1c0743 add node
2019-08-23 12:26:53 +08:00

1024 lines
36 KiB
Plaintext
Raw Blame History

///////////////////////////////////////////////////////////////////////////////
//
// IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:08
// Copyright 2004-2018 IAR Systems AB.
// PC-locked license - IAR Embedded Workbench for 8051
//
// Core = plain
// Code model = banked
// Data model = large
// Calling convention = xdata reentrant
// Constant location = data_rom
// Dptr setup = 1,16
//
// Source file =
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\services\saddr\saddr.c
// Command line =
// -f C:\Users\VULCAN\AppData\Local\Temp\EWDD20.tmp
// (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\services\saddr\saddr.c
// -D ZIGBEEPRO -D ZTOOL_P1 -D MT_TASK -D MT_SYS_FUNC -D MT_ZDO_FUNC -D
// LCD_SUPPORTED=DEBUG -D SAPP_ZSTACK -lC
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
// -lA
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
// --diag_suppress Pe001,Pa010 -o
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj
// -e --debug --core=plain --dptr=16,1 --data_model=large
// --code_model=banked --calling_convention=xdata_reentrant
// --place_constants=data_rom --nr_virtual_regs 8 -f
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wRouter.cfg
// (-DCPU32MHZ -DROOT=__near_func -DMAC_CFG_APP_PENDING_QUEUE=TRUE
// -DMAC_CFG_TX_DATA_MAX=5 -DMAC_CFG_TX_MAX=8 -DMAC_CFG_RX_MAX=5
// -DRTR_NWK) -f
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wConfig.cfg
// (-DZIGBEEPRO -DSECURE=0 -DZG_SECURE_DYNAMIC=0 -DREFLECTOR
// -DDEFAULT_CHANLIST=0x00800000 -DZDAPP_CONFIG_PAN_ID=0x0057
// -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_MASK=0x007F
// -DBEACON_REQUEST_DELAY=100 -DBEACON_REQ_DELAY_MASK=0x00FF
// -DLINK_STATUS_JITTER_MASK=0x007F -DROUTE_EXPIRY_TIME=30
// -DAPSC_ACK_WAIT_DURATION_POLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7
// -DMAX_RREQ_ENTRIES=8 -DAPSC_MAX_FRAME_RETRIES=3
// -DNWK_MAX_DATA_RETRIES=2 -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9
// -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=40 -DNWK_MAX_BINDING_ENTRIES=4
// -DMAX_BINDING_CLUSTER_IDS=4 "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07,
// 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
// 0x0D}" -DMAC_MAX_FRAME_SIZE=116 -DZDNWKMGR_MIN_TRANSMISSIONS=20
// "-DCONST=const __code" -DGENERIC=__generic -DRFD_RCVC_ALWAYS_ON=FALSE
// -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 -DRESPONSE_POLL_RATE=100
// -DREJOIN_POLL_RATE=440) -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\Source\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\ZMain\TI2530DB\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\include\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\target\CC2530EB\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\include\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\high_level\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\single_chip\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mt\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\osal\include\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\saddr\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\sdata\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\af\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\nwk\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sapi\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sec\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sys\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\zdo\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\
// -I
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\f8w\
// -Ohz --require_prototypes --no_code_motion)
// Locale = Chinese (Simplified)_CHN.936
// List file =
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List\saddr.s51
//
///////////////////////////////////////////////////////////////////////////////
NAME saddr
RTMODEL "__SystemLibrary", "CLib"
RTMODEL "__calling_convention", "xdata_reentrant"
RTMODEL "__code_model", "banked"
RTMODEL "__core", "plain"
RTMODEL "__data_model", "large"
RTMODEL "__dptr_size", "16"
RTMODEL "__extended_stack", "disabled"
RTMODEL "__location_for_constants", "data"
RTMODEL "__number_of_dptrs", "1"
RTMODEL "__register_banks", "*"
RTMODEL "__rt_version", "1"
RSEG DOVERLAY:DATA:NOROOT(0)
RSEG IOVERLAY:IDATA:NOROOT(0)
RSEG ISTACK:IDATA:NOROOT(0)
RSEG PSTACK:XDATA:NOROOT(0)
RSEG XSTACK:XDATA:NOROOT(0)
EXTERN ?V0
EXTERN ?V1
EXTERN ?V2
EXTERN ?BANKED_ENTER_XDATA
EXTERN ?BANKED_LEAVE_XDATA
EXTERN ?BDISPATCH
EXTERN ?BRET
EXTERN ?DEALLOC_XSTACK8
EXTERN ?PUSH_XSTACK_I_THREE
PUBLIC `??sAddrCmp::?relay`
FUNCTION `??sAddrCmp::?relay`,0203H
PUBLIC `??sAddrCpy::?relay`
FUNCTION `??sAddrCpy::?relay`,0203H
PUBLIC `??sAddrExtCmp::?relay`
FUNCTION `??sAddrExtCmp::?relay`,0203H
PUBLIC `??sAddrExtCpy::?relay`
FUNCTION `??sAddrExtCpy::?relay`,0203H
PUBLIC `??sAddrIden::?relay`
FUNCTION `??sAddrIden::?relay`,0203H
PUBLIC sAddrCmp
FUNCTION sAddrCmp,021203H
ARGFRAME XSTACK, 0, STACK
LOCFRAME ISTACK, 2, STACK
PUBLIC sAddrCpy
FUNCTION sAddrCpy,021203H
ARGFRAME XSTACK, 0, STACK
LOCFRAME ISTACK, 3, STACK
PUBLIC sAddrExtCmp
FUNCTION sAddrExtCmp,080203H
ARGFRAME XSTACK, 0, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
LOCFRAME XSTACK, 10, STACK
PUBLIC sAddrExtCpy
FUNCTION sAddrExtCpy,0a1203H
ARGFRAME XSTACK, 0, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
LOCFRAME XSTACK, 14, STACK
PUBLIC sAddrIden
FUNCTION sAddrIden,021203H
ARGFRAME XSTACK, 0, STACK
LOCFRAME ISTACK, 2, STACK
CFI Names cfiNames0
CFI StackFrame CFA_SP SP IDATA
CFI StackFrame CFA_PSP16 PSP16 XDATA
CFI StackFrame CFA_XSP16 XSP16 XDATA
CFI StaticOverlayFrame CFA_IOVERLAY IOVERLAY
CFI StaticOverlayFrame CFA_DOVERLAY DOVERLAY
CFI Resource `PSW.CY`:1, `B.BR0`:1, `B.BR1`:1, `B.BR2`:1, `B.BR3`:1
CFI Resource `B.BR4`:1, `B.BR5`:1, `B.BR6`:1, `B.BR7`:1, `VB.BR8`:1
CFI Resource `VB.BR9`:1, `VB.BR10`:1, `VB.BR11`:1, `VB.BR12`:1
CFI Resource `VB.BR13`:1, `VB.BR14`:1, `VB.BR15`:1, VB:8, B:8, A:8
CFI Resource PSW:8, DPL0:8, DPH0:8, R0:8, R1:8, R2:8, R3:8, R4:8, R5:8
CFI Resource R6:8, R7:8, V0:8, V1:8, V2:8, V3:8, V4:8, V5:8, V6:8, V7:8
CFI Resource SP:8, PSPH:8, PSPL:8, PSP16:16, XSPH:8, XSPL:8, XSP16:16
CFI VirtualResource ?RET:24
CFI Resource ?BRET_EXT:8
CFI VirtualResource ?RET_HIGH:8, ?RET_LOW:8
CFI ResourceParts PSP16 PSPH, PSPL
CFI ResourceParts XSP16 XSPH, XSPL
CFI ResourceParts ?RET ?BRET_EXT, ?RET_HIGH, ?RET_LOW
CFI EndNames cfiNames0
CFI Common cfiCommon0 Using cfiNames0
CFI CodeAlign 1
CFI DataAlign -1
CFI ReturnAddress ?RET CODE
CFI CFA_DOVERLAY Used
CFI CFA_IOVERLAY Used
CFI CFA_SP SP+-3
CFI CFA_PSP16 PSP16+0
CFI CFA_XSP16 XSP16+0
CFI `PSW.CY` SameValue
CFI `B.BR0` SameValue
CFI `B.BR1` SameValue
CFI `B.BR2` SameValue
CFI `B.BR3` SameValue
CFI `B.BR4` SameValue
CFI `B.BR5` SameValue
CFI `B.BR6` SameValue
CFI `B.BR7` SameValue
CFI `VB.BR8` SameValue
CFI `VB.BR9` SameValue
CFI `VB.BR10` SameValue
CFI `VB.BR11` SameValue
CFI `VB.BR12` SameValue
CFI `VB.BR13` SameValue
CFI `VB.BR14` SameValue
CFI `VB.BR15` SameValue
CFI VB SameValue
CFI B Undefined
CFI A Undefined
CFI PSW SameValue
CFI DPL0 SameValue
CFI DPH0 SameValue
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 Undefined
CFI R5 Undefined
CFI R6 SameValue
CFI R7 SameValue
CFI V0 SameValue
CFI V1 SameValue
CFI V2 SameValue
CFI V3 SameValue
CFI V4 SameValue
CFI V5 SameValue
CFI V6 SameValue
CFI V7 SameValue
CFI PSPH Undefined
CFI PSPL Undefined
CFI XSPH Undefined
CFI XSPL Undefined
CFI ?RET Concat
CFI ?BRET_EXT Frame(CFA_SP, 3)
CFI ?RET_HIGH Frame(CFA_SP, 2)
CFI ?RET_LOW Frame(CFA_SP, 1)
CFI EndCommon cfiCommon0
CFI Common cfiCommon1 Using cfiNames0
CFI CodeAlign 1
CFI DataAlign -1
CFI ReturnAddress ?RET CODE
CFI CFA_DOVERLAY Used
CFI CFA_IOVERLAY Used
CFI CFA_SP SP+-2
CFI CFA_PSP16 PSP16+0
CFI CFA_XSP16 XSP16+0
CFI `PSW.CY` SameValue
CFI `B.BR0` SameValue
CFI `B.BR1` SameValue
CFI `B.BR2` SameValue
CFI `B.BR3` SameValue
CFI `B.BR4` SameValue
CFI `B.BR5` SameValue
CFI `B.BR6` SameValue
CFI `B.BR7` SameValue
CFI `VB.BR8` SameValue
CFI `VB.BR9` SameValue
CFI `VB.BR10` SameValue
CFI `VB.BR11` SameValue
CFI `VB.BR12` SameValue
CFI `VB.BR13` SameValue
CFI `VB.BR14` SameValue
CFI `VB.BR15` SameValue
CFI VB SameValue
CFI B SameValue
CFI A SameValue
CFI PSW SameValue
CFI DPL0 SameValue
CFI DPH0 SameValue
CFI R0 SameValue
CFI R1 SameValue
CFI R2 SameValue
CFI R3 SameValue
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI V0 SameValue
CFI V1 SameValue
CFI V2 SameValue
CFI V3 SameValue
CFI V4 SameValue
CFI V5 SameValue
CFI V6 SameValue
CFI V7 SameValue
CFI PSPH Undefined
CFI PSPL Undefined
CFI XSPH Undefined
CFI XSPL Undefined
CFI ?RET Concat
CFI ?BRET_EXT SameValue
CFI ?RET_HIGH Frame(CFA_SP, 2)
CFI ?RET_LOW Frame(CFA_SP, 1)
CFI EndCommon cfiCommon1
osal_memcpy SYMBOL "osal_memcpy"
`??osal_memcpy::?relay` SYMBOL "?relay", osal_memcpy
sAddrCmp SYMBOL "sAddrCmp"
`??sAddrCmp::?relay` SYMBOL "?relay", sAddrCmp
sAddrCpy SYMBOL "sAddrCpy"
`??sAddrCpy::?relay` SYMBOL "?relay", sAddrCpy
sAddrExtCmp SYMBOL "sAddrExtCmp"
`??sAddrExtCmp::?relay` SYMBOL "?relay", sAddrExtCmp
sAddrExtCpy SYMBOL "sAddrExtCpy"
`??sAddrExtCpy::?relay` SYMBOL "?relay", sAddrExtCpy
sAddrIden SYMBOL "sAddrIden"
`??sAddrIden::?relay` SYMBOL "?relay", sAddrIden
EXTERN `??osal_memcpy::?relay`
FUNCTION `??osal_memcpy::?relay`,00H
EXTERN osal_memcpy
FUNCTION osal_memcpy,0202H
ARGFRAME ISTACK, 0, STACK
ARGFRAME PSTACK, 0, STACK
ARGFRAME XSTACK, 14, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
// E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\services\saddr\saddr.c
// 1 /****************************************************************************
// 2 Filename: saddr.c
// 3 Revised: $Date: 2009-12-10 08:32:15 -0800 (Thu, 10 Dec 2009) $
// 4 Revision: $Revision: 21311 $
// 5
// 6 Description: Zigbee and 802.15.4 device address utility functions.
// 7
// 8
// 9 Copyright 2005-2010 Texas Instruments Incorporated. All rights reserved.
// 10
// 11 IMPORTANT: Your use of this Software is limited to those specific rights
// 12 granted under the terms of a software license agreement between the user
// 13 who downloaded the software, his/her employer (which must be your employer)
// 14 and Texas Instruments Incorporated (the "License"). You may not use this
// 15 Software unless you agree to abide by the terms of the License. The License
// 16 limits your use, and you acknowledge, that the Software may not be modified,
// 17 copied or distributed unless embedded on a Texas Instruments microcontroller
// 18 or used solely and exclusively in conjunction with a Texas Instruments radio
// 19 frequency transceiver, which is integrated into your product. Other than for
// 20 the foregoing purpose, you may not use, reproduce, copy, prepare derivative
// 21 works of, modify, distribute, perform, display or sell this Software and/or
// 22 its documentation for any purpose.
// 23
// 24 YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
// 25 PROVIDED 揂S IS<49> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
// 26 INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
// 27 NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
// 28 TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
// 29 NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
// 30 LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
// 31 INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
// 32 OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
// 33 OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
// 34 (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
// 35
// 36 Should you have any questions regarding your right to use this Software,
// 37 contact Texas Instruments Incorporated at www.TI.com.
// 38 ****************************************************************************/
// 39
// 40 /****************************************************************************
// 41 * INCLUDES
// 42 */
// 43 #include "hal_types.h"
// 44 #include "OSAL.h"
// 45 #include "saddr.h"
// 46
// 47 /****************************************************************************
// 48 * @fn sAddrCmp
// 49 *
// 50 * @brief Compare two device addresses.
// 51 *
// 52 * input parameters
// 53 *
// 54 * @param pAddr1 - Pointer to first address.
// 55 * @param pAddr2 - Pointer to second address.
// 56 *
// 57 * output parameters
// 58 *
// 59 * @return TRUE if addresses are equal, FALSE otherwise
// 60 */
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
// 61 bool sAddrCmp(const sAddr_t *pAddr1, const sAddr_t *pAddr2)
sAddrCmp:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function sAddrCmp
CODE
// 62 {
FUNCALL sAddrCmp, sAddrExtCmp
LOCFRAME ISTACK, 2, STACK
LOCFRAME PSTACK, 0, STACK
LOCFRAME XSTACK, 0, STACK
LOCFRAME IOVERLAY, 0, STATIC
LOCFRAME DOVERLAY, 0, STATIC
ARGFRAME ISTACK, 2, STACK
ARGFRAME PSTACK, 0, STACK
ARGFRAME XSTACK, 0, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 63 if (pAddr1->addrMode != pAddr2->addrMode)
LCALL ?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_0:
JNZ ??sAddrCmp_0
// 64 {
// 65 return FALSE;
// 66 }
// 67 else if (pAddr1->addrMode == SADDR_MODE_NONE)
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
JZ ??sAddrCmp_0
// 68 {
// 69 return FALSE;
// 70 }
// 71 else if (pAddr1->addrMode == SADDR_MODE_SHORT)
XRL A,#0x2
MOV DPL,R2
MOV DPH,R3
JNZ ??sAddrCmp_1
// 72 {
// 73 return (bool) (pAddr1->addr.shortAddr == pAddr2->addr.shortAddr);
LCALL ?Subroutine2 & 0xFFFF
// 74 }
??CrossCallReturnLabel_2:
JNZ ??sAddrCmp_2
INC DPTR
MOVX A,@DPTR
XRL A,R1
??sAddrCmp_2:
JNZ ??sAddrCmp_0
MOV R1,#0x1
SJMP ??sAddrCmp_3
// 75 else if (pAddr1->addrMode == SADDR_MODE_EXT)
??sAddrCmp_1:
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,#0x3
JNZ ??sAddrCmp_0
// 76 {
// 77 return (sAddrExtCmp(pAddr1->addr.extAddr, pAddr2->addr.extAddr));
; Setup parameters for call to function sAddrExtCmp
LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
SJMP ??sAddrCmp_3
// 78 }
// 79 else
// 80 {
// 81 return FALSE;
??sAddrCmp_0:
MOV R1,#0x0
// 82 }
??sAddrCmp_3:
CFI EndBlock cfiBlock0
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 83 }
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock1
// 84
// 85 /****************************************************************************
// 86 * @fn sAddrIden
// 87 *
// 88 * @brief Check if two device addresses are identical.
// 89 *
// 90 * This routine is virtually the same as sAddrCmp, which is used
// 91 * to determine if two different addresses are the same. However,
// 92 * this routine can be used to determine if an address is the
// 93 * same as a previously stored address. The key difference is in
// 94 * the former case, if the address mode is "none", then the
// 95 * assumption is that the two addresses can not be the same. But
// 96 * in the latter case, the address mode itself is being compared.
// 97 * So two addresses can be identical even if the address mode is
// 98 * "none", as long as the address mode of both addresses being
// 99 * compared is "none".
// 100 *
// 101 * input parameters
// 102 *
// 103 * @param pAddr1 - Pointer to first address.
// 104 * @param pAddr2 - Pointer to second address.
// 105 *
// 106 * output parameters
// 107 *
// 108 * @return TRUE if addresses are identical, FALSE otherwise
// 109 */
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
// 110 bool sAddrIden(const sAddr_t *pAddr1, const sAddr_t *pAddr2)
sAddrIden:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function sAddrIden
CODE
// 111 {
FUNCALL sAddrIden, sAddrExtCmp
LOCFRAME ISTACK, 2, STACK
LOCFRAME PSTACK, 0, STACK
LOCFRAME XSTACK, 0, STACK
LOCFRAME IOVERLAY, 0, STATIC
LOCFRAME DOVERLAY, 0, STATIC
ARGFRAME ISTACK, 2, STACK
ARGFRAME PSTACK, 0, STACK
ARGFRAME XSTACK, 0, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 112 // first check if the address modes are the same
// 113 if (pAddr1->addrMode != pAddr2->addrMode)
LCALL ?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_1:
JNZ ??sAddrIden_0
// 114 {
// 115 // no, so no point in comparing any further
// 116 return FALSE;
// 117 }
// 118 // the address modes are the same; check if there is no address
// 119 else if (pAddr1->addrMode == SADDR_MODE_NONE)
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
JZ ??sAddrIden_1
// 120 {
// 121 // no address, so no need to compare any further as both addresses have the
// 122 // same address mode but no address, so they are identical
// 123 return TRUE;
// 124 }
// 125 // there's an address; check if it is short
// 126 else if (pAddr1->addrMode == SADDR_MODE_SHORT)
XRL A,#0x2
MOV DPL,R2
MOV DPH,R3
JNZ ??sAddrIden_2
// 127 {
// 128 // compare short addresses
// 129 return (bool) (pAddr1->addr.shortAddr == pAddr2->addr.shortAddr);
LCALL ?Subroutine2 & 0xFFFF
// 130 }
??CrossCallReturnLabel_3:
JNZ ??sAddrIden_3
INC DPTR
MOVX A,@DPTR
XRL A,R1
??sAddrIden_3:
JNZ ??sAddrIden_0
??sAddrIden_1:
MOV R1,#0x1
SJMP ??sAddrIden_4
// 131 // there's an address; check if it is extended
// 132 else if (pAddr1->addrMode == SADDR_MODE_EXT)
??sAddrIden_2:
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,#0x3
JNZ ??sAddrIden_0
// 133 {
// 134 // compare extended addresses
// 135 return (sAddrExtCmp(pAddr1->addr.extAddr, pAddr2->addr.extAddr));
; Setup parameters for call to function sAddrExtCmp
LCALL `??sAddrExtCmp::?relay`; Banked call to: sAddrExtCmp
SJMP ??sAddrIden_4
// 136 }
// 137 else // unknown error
// 138 {
// 139 return FALSE;
??sAddrIden_0:
MOV R1,#0x0
// 140 }
??sAddrIden_4:
SJMP ?Subroutine0
// 141 }
CFI EndBlock cfiBlock2
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
?Subroutine2:
CFI Block cfiCond3 Using cfiCommon0
CFI Function sAddrCmp
CFI Conditional ??CrossCallReturnLabel_2
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-7
CFI Block cfiCond4 Using cfiCommon0
CFI (cfiCond4) Function sAddrIden
CFI (cfiCond4) Conditional ??CrossCallReturnLabel_3
CFI (cfiCond4) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond4) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond4) CFA_SP SP+-7
CFI Block cfiPicker5 Using cfiCommon1
CFI (cfiPicker5) NoFunction
CFI (cfiPicker5) Picker
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R4
MOV DPH,R5
MOVX A,@DPTR
XRL A,R0
RET
CFI EndBlock cfiCond3
CFI EndBlock cfiCond4
CFI EndBlock cfiPicker5
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
?Subroutine1:
CFI Block cfiCond6 Using cfiCommon0
CFI Function sAddrCmp
CFI Conditional ??CrossCallReturnLabel_0
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-7
CFI Block cfiCond7 Using cfiCommon0
CFI (cfiCond7) Function sAddrIden
CFI (cfiCond7) Conditional ??CrossCallReturnLabel_1
CFI (cfiCond7) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond7) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond7) CFA_SP SP+-7
CFI Block cfiPicker8 Using cfiCommon1
CFI (cfiPicker8) NoFunction
CFI (cfiPicker8) Picker
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R0,A
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
XRL A,R0
RET
CFI EndBlock cfiCond6
CFI EndBlock cfiCond7
CFI EndBlock cfiPicker8
// 142
// 143 /****************************************************************************
// 144 * @fn sAddrCpy
// 145 *
// 146 * @brief Copy a device address.
// 147 *
// 148 * input parameters
// 149 *
// 150 * @param pSrc - Pointer to address to copy.
// 151 *
// 152 * output parameters
// 153 *
// 154 * @param pDest - Pointer to address of copy.
// 155 *
// 156 * @return None.
// 157 */
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
// 158 void sAddrCpy(sAddr_t *pDest, const sAddr_t *pSrc)
sAddrCpy:
CFI Block cfiBlock9 Using cfiCommon0
CFI Function sAddrCpy
CODE
// 159 {
FUNCALL sAddrCpy, sAddrExtCpy
LOCFRAME ISTACK, 2, STACK
LOCFRAME PSTACK, 0, STACK
LOCFRAME XSTACK, 0, STACK
LOCFRAME IOVERLAY, 0, STATIC
LOCFRAME DOVERLAY, 0, STATIC
ARGFRAME ISTACK, 2, STACK
ARGFRAME PSTACK, 0, STACK
ARGFRAME XSTACK, 0, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 160 pDest->addrMode = pSrc->addrMode;
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R0,A
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX @DPTR,A
// 161
// 162 if (pDest->addrMode == SADDR_MODE_EXT)
MOV A,#0x3
XRL A,R0
JNZ ??sAddrCpy_0
// 163 {
// 164 sAddrExtCpy(pDest->addr.extAddr, pSrc->addr.extAddr);
; Setup parameters for call to function sAddrExtCpy
LCALL `??sAddrExtCpy::?relay`; Banked call to: sAddrExtCpy
SJMP ??sAddrCpy_1
// 165 }
// 166 else
// 167 {
// 168 pDest->addr.shortAddr = pSrc->addr.shortAddr;
??sAddrCpy_0:
MOV DPL,R4
MOV DPH,R5
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R2
MOV DPH,R3
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 169 }
// 170 }
??sAddrCpy_1:
LJMP ?Subroutine0 & 0xFFFF
CFI EndBlock cfiBlock9
// 171
// 172 /****************************************************************************
// 173 * @fn sAddrExtCmp
// 174 *
// 175 * @brief Compare two extended addresses.
// 176 *
// 177 * input parameters
// 178 *
// 179 * @param pAddr1 - Pointer to first address.
// 180 * @param pAddr2 - Pointer to second address.
// 181 *
// 182 * output parameters
// 183 *
// 184 * @return TRUE if addresses are equal, FALSE otherwise
// 185 */
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
// 186 bool sAddrExtCmp(const uint8 * pAddr1, const uint8 * pAddr2)
sAddrExtCmp:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function sAddrExtCmp
CODE
// 187 {
REQUIRE ?V0
REQUIRE ?V1
MOV A,#-0xa
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
// 188 uint8 i;
// 189
// 190 for (i = SADDR_EXT_LEN; i != 0; i--)
MOV ?V0,#0x8
// 191 {
// 192 if (*pAddr1++ != *pAddr2++)
??sAddrExtCmp_0:
MOV A,R2
MOV R0,A
MOV A,R3
MOV R1,A
MOV DPL,R0
MOV DPH,A
INC DPTR
MOV R2,DPL
MOV R3,DPH
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A
MOV DPL,R6
MOV DPH,A
INC DPTR
MOV R4,DPL
MOV R5,DPH
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
MOV R0,A
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
XRL A,R0
JZ ??sAddrExtCmp_1
// 193 {
// 194 return FALSE;
MOV R1,#0x0
SJMP ??sAddrExtCmp_2
// 195 }
// 196 }
??sAddrExtCmp_1:
DEC ?V0
MOV A,?V0
JNZ ??sAddrExtCmp_0
// 197 return TRUE;
MOV R1,#0x1
??sAddrExtCmp_2:
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
// 198 }
CFI EndBlock cfiBlock10
// 199
// 200 /****************************************************************************
// 201 * @fn sAddrExtCpy
// 202 *
// 203 * @brief Copy an extended address.
// 204 *
// 205 * input parameters
// 206 *
// 207 * @param pSrc - Pointer to address to copy.
// 208 *
// 209 * output parameters
// 210 *
// 211 * @param pDest - Pointer to address of copy.
// 212 *
// 213 * @return pDest + SADDR_EXT_LEN.
// 214 */
RSEG BANKED_CODE:HUGECODE:NOROOT(0)
// 215 void *sAddrExtCpy(uint8 * pDest, const uint8 * pSrc)
sAddrExtCpy:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function sAddrExtCpy
CODE
// 216 {
FUNCALL sAddrExtCpy, osal_memcpy
LOCFRAME ISTACK, 0, STACK
LOCFRAME PSTACK, 0, STACK
LOCFRAME XSTACK, 14, STACK
LOCFRAME IOVERLAY, 0, STATIC
LOCFRAME DOVERLAY, 0, STATIC
ARGFRAME ISTACK, 0, STACK
ARGFRAME PSTACK, 0, STACK
ARGFRAME XSTACK, 14, STACK
ARGFRAME IOVERLAY, 0, STATIC
ARGFRAME DOVERLAY, 0, STATIC
REQUIRE ?V0
REQUIRE ?V1
REQUIRE ?V2
MOV A,#-0xb
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
; Saved register size: 11
; Auto size: 0
// 217 return osal_memcpy(pDest, pSrc, SADDR_EXT_LEN);
; Setup parameters for call to function osal_memcpy
MOV ?V0,R4
MOV ?V1,R5
MOV ?V2,#0x0
MOV R0,#?V0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 14)
MOV R4,#0x8
MOV R5,#0x0
LCALL `??osal_memcpy::?relay`; Banked call to: osal_memcpy
MOV A,#0x3
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 11)
MOV R7,#0x3
LJMP ?BANKED_LEAVE_XDATA
// 218 }
CFI EndBlock cfiBlock11
RSEG BANK_RELAYS:CODE:REORDER:NOROOT(0)
`??sAddrCmp::?relay`:
CODE
LCALL ?BDISPATCH
DATA24
DC24 sAddrCmp
RSEG BANK_RELAYS:CODE:REORDER:NOROOT(0)
`??sAddrIden::?relay`:
CODE
LCALL ?BDISPATCH
DATA24
DC24 sAddrIden
RSEG BANK_RELAYS:CODE:REORDER:NOROOT(0)
`??sAddrCpy::?relay`:
CODE
LCALL ?BDISPATCH
DATA24
DC24 sAddrCpy
RSEG BANK_RELAYS:CODE:REORDER:NOROOT(0)
`??sAddrExtCmp::?relay`:
CODE
LCALL ?BDISPATCH
DATA24
DC24 sAddrExtCmp
RSEG BANK_RELAYS:CODE:REORDER:NOROOT(0)
`??sAddrExtCpy::?relay`:
CODE
LCALL ?BDISPATCH
DATA24
DC24 sAddrExtCpy
END
// 219
// 220
// 221
// 222
//
// 343 bytes in segment BANKED_CODE
// 30 bytes in segment BANK_RELAYS
//
// 30 bytes of CODE memory
// 343 bytes of HUGECODE memory
//
//Errors: none
//Warnings: none