📄 zdprofile.s51
字号:
// 240
// 241 return fillAndSend( &ZDP_TransID, &dstAddr, NWK_addr_req, len );
// 242 }
// 243 #endif
// 244
// 245 #if defined ( ZDO_IEEEADDR_REQUEST )
// 246 /*********************************************************************
// 247 * @fn ZDP_IEEEAddrReq
// 248 *
// 249 * @brief This builds and send a IEEE_addr_req message. This
// 250 * function sends a unicast message looking for a 64
// 251 * bit IEEE address with a 16 bit address as bait.
// 252 *
// 253 * @param ReqType - ZDP_IEEEADDR_REQTYPE_SINGLE or
// 254 * ZDP_IEEEADDR_REQTYPE_EXTENDED
// 255 * @param SecurityEnable - Security Options
// 256 *
// 257 * @return afStatus_t
// 258 */
// 259 afStatus_t ZDP_IEEEAddrReq( uint16 shortAddr, byte ReqType,
// 260 byte StartIndex, byte SecurityEnable )
// 261 {
// 262 byte *pBuf = ZDP_TmpBuf;
// 263 byte len = 2 + 1 + 1; // shortAddr + ReqType + StartIndex.
// 264 zAddrType_t dstAddr;
// 265
// 266 dstAddr.addrMode = (afAddrMode_t)Addr16Bit;
// 267 dstAddr.addr.shortAddr = shortAddr;
// 268
// 269 *pBuf++ = LO_UINT16( shortAddr );
// 270 *pBuf++ = HI_UINT16( shortAddr );
// 271
// 272 *pBuf++ = ReqType;
// 273 *pBuf++ = StartIndex;
// 274
// 275 return fillAndSend( &ZDP_TransID, &dstAddr, IEEE_addr_req, len );
// 276 }
// 277 #endif
// 278
// 279 #if defined ( ZDO_MATCH_REQUEST )
// 280 /*********************************************************************
// 281 * @fn ZDP_MatchDescReq
// 282 *
// 283 * @brief This builds and send a Match_Desc_req message. This
// 284 * function sends a broadcast or unicast message
// 285 * requesting the list of endpoint/interfaces that
// 286 * match profile ID and cluster IDs.
// 287 *
// 288 * @param dstAddr - destination address
// 289 * @param ProfileID - Profile ID
// 290 * @param NumInClusters - number of input clusters
// 291 * @param InClusterList - input cluster ID list
// 292 * @param NumOutClusters - number of output clusters
// 293 * @param OutClusterList - output cluster ID list
// 294 * @param SecurityEnable - Security Options
// 295 *
// 296 * @return afStatus_t
// 297 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 298 afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,
ZDP_MatchDescReq:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function ZDP_MatchDescReq
// 299 uint16 ProfileID,
// 300 byte NumInClusters, cId_t *InClusterList,
// 301 byte NumOutClusters, cId_t *OutClusterList,
// 302 byte SecurityEnable )
// 303 {
FUNCALL ZDP_MatchDescReq, NLME_GetProtocolVersion
LOCFRAME XSTACK, 18, STACK
ARGFRAME XSTACK, 18, STACK
FUNCALL ZDP_MatchDescReq, ??fillAndSend
LOCFRAME XSTACK, 20, STACK
ARGFRAME XSTACK, 20, STACK
MOV A,#-0x10
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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 2
MOV A,#-0x2
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A
MOV ?V0 + 6,R1
MOV A,#0x12
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine13 & 0xFFFF
??CrossCallReturnLabel_28:
MOV A,#0x16
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 7,A
MOV A,#0x17
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV ?V0 + 4,A
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 5,A
// 304 byte *pBuf = ZDP_TmpBuf;
LCALL ?Subroutine12 & 0xFFFF
// 305 // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
// 306 byte i, len = 2 + 2 + 1 + 1; // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
// 307 uint8 protoVer = NLME_GetProtocolVersion();
??CrossCallReturnLabel_101:
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R3,A
// 308
// 309 len += (NumInClusters + NumOutClusters)*((protoVer != ZB_PROT_V1_0) ? sizeof ( uint16 ) : sizeof( uint8 ));
MOV A,#0x1
XRL A,R3
JZ ??ZDP_MatchDescReq_0
MOV R0,#0x2
SJMP ??ZDP_MatchDescReq_1
??ZDP_MatchDescReq_0:
MOV R0,#0x1
??ZDP_MatchDescReq_1:
MOV A,?V0 + 7
ADD A,?V0 + 6
MOV B,A
MOV A,R0
MUL AB
ADD A,#0x6
MOV R2,A
// 310
// 311 if ( len >= ZDP_BUF_SZ-1 )
CLR C
SUBB A,#0x4f
JC ??ZDP_MatchDescReq_2
// 312 {
// 313 return afStatus_MEM_FAIL;
MOV R1,#-0x7f
LJMP ??ZDP_MatchDescReq_3 & 0xFFFF
// 314 }
// 315
// 316 *pBuf++ = LO_UINT16( nwkAddr ); // NWKAddrOfInterest
??ZDP_MatchDescReq_2:
MOV A,R6
MOV DPL,?V0 + 2
MOV DPH,?V0 + 3
MOVX @DPTR,A
INC DPTR
// 317 *pBuf++ = HI_UINT16( nwkAddr );
MOV A,R7
LCALL ?Subroutine21 & 0xFFFF
// 318
// 319 *pBuf++ = LO_UINT16( ProfileID ); // Profile ID
// 320 *pBuf++ = HI_UINT16( ProfileID );
// 321
// 322 *pBuf++ = NumInClusters; // Input cluster list
??CrossCallReturnLabel_41:
MOV A,?V0 + 6
LCALL ?Subroutine23 & 0xFFFF
// 323 if ( NumInClusters )
??CrossCallReturnLabel_45:
JZ ??ZDP_MatchDescReq_4
// 324 {
// 325 for (i=0; i<NumInClusters; ++i) {
MOV R4,#0x0
// 326 *pBuf++ = LO_UINT16( InClusterList[i] );
??ZDP_MatchDescReq_5:
MOV A,R4
CLR C
RLC A
MOV R0,A
CLR A
RLC A
MOV R1,A
MOV A,#0x14
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine20 & 0xFFFF
??CrossCallReturnLabel_39:
LCALL ?Subroutine7 & 0xFFFF
// 327 if (protoVer != ZB_PROT_V1_0) {
??CrossCallReturnLabel_17:
JZ ??CrossCallReturnLabel_21
// 328 *pBuf++ = HI_UINT16( InClusterList[i] );
MOV A,#0x14
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine20 & 0xFFFF
??CrossCallReturnLabel_40:
LCALL ?Subroutine9 & 0xFFFF
// 329 }
// 330 }
??CrossCallReturnLabel_21:
INC R4
MOV A,R4
CLR C
SUBB A,?V0 + 6
JC ??ZDP_MatchDescReq_5
// 331 }
// 332
// 333 *pBuf++ = NumOutClusters; // Output cluster list
??ZDP_MatchDescReq_4:
MOV DPL,?V0 + 2
MOV DPH,?V0 + 3
MOV A,?V0 + 7
LCALL ?Subroutine23 & 0xFFFF
// 334 if ( NumOutClusters )
??CrossCallReturnLabel_46:
JZ ??ZDP_MatchDescReq_6
// 335 {
// 336 for (i=0; i<NumOutClusters; ++i) {
MOV R4,#0x0
// 337 *pBuf++ = LO_UINT16( OutClusterList[i] );
??ZDP_MatchDescReq_7:
MOV A,R4
CLR C
RLC A
MOV R0,A
CLR A
RLC A
MOV R1,A
MOV A,?V0 + 4
ADD A,R0
MOV DPL,A
MOV A,?V0 + 5
ADDC A,R1
LCALL ?Subroutine7 & 0xFFFF
// 338 if (protoVer != ZB_PROT_V1_0) {
??CrossCallReturnLabel_18:
JZ ??CrossCallReturnLabel_22
// 339 *pBuf++ = HI_UINT16( OutClusterList[i] );
MOV A,?V0 + 4
ADD A,R0
MOV DPL,A
MOV A,?V0 + 5
ADDC A,R1
LCALL ?Subroutine9 & 0xFFFF
// 340 }
// 341 }
??CrossCallReturnLabel_22:
INC R4
MOV A,R4
CLR C
SUBB A,?V0 + 7
JC ??ZDP_MatchDescReq_7
// 342 }
// 343
// 344 return fillAndSend( &ZDP_TransID, dstAddr, Match_Desc_req, len );
??ZDP_MatchDescReq_6:
; Setup parameters for call to function fillAndSend
MOV ?V0 + 0,#0x6
MOV ?V0 + 1,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 20)
MOV A,R2
MOV R1,A
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
LCALL ?Subroutine11 & 0xFFFF
??CrossCallReturnLabel_25:
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 18)
??ZDP_MatchDescReq_3:
MOV A,#0x2
SJMP ??Subroutine42_0
CFI EndBlock cfiBlock3
// 345 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine42:
CFI Block cfiBlock4 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 17)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -