📄 zdprofile.lst
字号:
357 * @param nwkAddr - 16 bit address
358 * @param epIntf - endpoint/interface
359 * @param SecurityEnable - Security Options
360 *
361 * @return afStatus_t
362 */
363 afStatus_t ZDP_SimpleDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,
364 byte endPoint, byte SecurityEnable )
365
366 {
367 ZDP_TmpBuf[0] = LO_UINT16( nwkAddr );
368 ZDP_TmpBuf[1] = HI_UINT16( nwkAddr );
369 ZDP_TmpBuf[2] = endPoint;
370
371 return fillAndSend( &ZDP_TransID, dstAddr, Simple_Desc_req, 3 );
372 }
373 #endif // ZDO_SIMPLEDESC_REQUEST
374
375 #if defined ( ZDO_USERDESCSET_REQUEST )
376 /*********************************************************************
377 * @fn ZDP_UserDescSet
378 *
379 * @brief This builds and send a User_Desc_set message to set
380 * the user descriptor. This function sends unicast
381 * message to the destination device.
382 *
383 * @param dstAddr - destination address
384 * @param nwkAddr - 16 bit address
385 * @param UserDescriptor - user descriptor
386 * @param SecurityEnable - Security Options
387 *
388 * @return afStatus_t
389 */
390 afStatus_t ZDP_UserDescSet( zAddrType_t *dstAddr, uint16 nwkAddr,
391 UserDescriptorFormat_t *UserDescriptor,
392 byte SecurityEnable )
393 {
394 byte *pBuf = ZDP_TmpBuf;
395 byte len = (UserDescriptor->len < AF_MAX_USER_DESCRIPTOR_LEN) ?
396 UserDescriptor->len : AF_MAX_USER_DESCRIPTOR_LEN;
397 byte addrLen = 2;
398
399 *pBuf++ = LO_UINT16( nwkAddr );
400 *pBuf++ = HI_UINT16( nwkAddr );
401
402 if ( NLME_GetProtocolVersion() == ZB_PROT_V1_1 )
403 {
404 *pBuf++ = len;
405 addrLen = 3;
406 }
407 pBuf = osal_memcpy( pBuf, UserDescriptor->desc, len );
408 osal_memset( pBuf, AF_USER_DESCRIPTOR_FILL, AF_MAX_USER_DESCRIPTOR_LEN-len );
409
410 return fillAndSend( &ZDP_TransID, dstAddr, User_Desc_set, (AF_MAX_USER_DESCRIPTOR_LEN + addrLen) );
411 }
412 #endif // ZDO_USERDESCSET_REQUEST
413
414 #if defined ( ZDO_SERVERDISC_REQUEST )
415 /*********************************************************************
416 * @fn ZDP_ServerDiscReq
417 *
418 * @brief Build and send a Server_Discovery_req request message.
419 *
420 * @param serverMask - 16-bit bit-mask of server services being sought.
421 * @param SecurityEnable - Security Options
422 *
423 * @return afStatus_t
424 */
425 afStatus_t ZDP_ServerDiscReq( uint16 serverMask, byte SecurityEnable )
426 {
427 byte *pBuf = ZDP_TmpBuf;
428 zAddrType_t dstAddr;
429
430 dstAddr.addrMode = AddrBroadcast;
431 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVZCZR;
432
433 *pBuf++ = LO_UINT16( serverMask );
434 *pBuf = HI_UINT16( serverMask );
435
436 FillAndSendTxOptions( &ZDP_TransID, &dstAddr, Server_Discovery_req, 2,
437 ((SecurityEnable) ? AF_EN_SECURITY : AF_TX_OPTIONS_NONE) );
438 }
439 #endif
440
441 #if defined ( ZDO_ENDDEVICE_ANNCE_REQUEST ) || defined ( ZDO_ENDDEVICE_ANNCE_GENERATE )
442 /*********************************************************************
443 * @fn ZDP_EndDeviceAnnce
444 *
445 * @brief This builds and send an End_Device_Annce
446 * message. This function sends a broadcast message.
447 *
448 * @param nwkAddr - 16 bit address of the device
449 * @param IEEEAddr - 64 bit address of the device
450 * @param capabilities - device capabilities. This field is only
451 * sent for v1.1 networks.
452 * @param SecurityEnable - Security Options
453 *
454 * @return afStatus_t
455 */
456 afStatus_t ZDP_EndDeviceAnnce( uint16 nwkAddr, byte *IEEEAddr,
457 byte capabilities, byte SecurityEnable )
458 {
459 zAddrType_t dstAddr;
460 uint8 len;
461
462 dstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
463 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;
464
465 ZDP_TmpBuf[0] = LO_UINT16( nwkAddr );
466 ZDP_TmpBuf[1] = HI_UINT16( nwkAddr );
467 osal_cpyExtAddr( &ZDP_TmpBuf[2], IEEEAddr );
468 len = 2 + Z_EXTADDR_LEN;
469
470 if ( NLME_GetProtocolVersion() != ZB_PROT_V1_0 )
471 {
472 ZDP_TmpBuf[10] = capabilities;
473 len++;
474 }
475
476 return fillAndSend( &ZDP_TransID, &dstAddr, End_Device_annce, len );
477 }
478 #endif // ZDO_ENDDEVICE_ANNCE_REQUEST
479
480 /*********************************************************************
481 * Address Responses
482 */
483
484 /*********************************************************************
485 * @fn zdpProcessAddrReq
486 *
487 * @brief Process an incoming NWK_addr_req or IEEE_addr_req message and then
488 * build and send a corresponding NWK_addr_rsp or IEEE_addr_rsp msg.
489 *
490 * @param seq - Message sequence number of the request.
491 * @param src - Source address of the request.
492 * @param msg - Incoming request message.
493 * @param cId - Cluster ID of the request.
494 * @param sty - Security enable/disable options.
495 *
496 * @return none
497 */
\ In segment BANKED_CODE, align 1, keep-with-next
498 static void zdpProcessAddrReq(
\ ??zdpProcessAddrReq:
499 byte seq, zAddrType_t *src, byte *msg, uint16 cId, byte sty )
500 {
\ 000000 74F0 MOV A,#-0x10
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 16
\ 000005 ; Auto size: 1
\ 000005 74FF MOV A,#-0x1
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A E9 MOV A,R1
\ 00000B 85..82 MOV DPL,?XSP + 0
\ 00000E 85..83 MOV DPH,?XSP + 1
\ 000011 F0 MOVX @DPTR,A
\ 000012 8A.. MOV ?V0 + 6,R2
\ 000014 8B.. MOV ?V0 + 7,R3
\ 000016 7411 MOV A,#0x11
\ 000018 12.... LCALL ?XSTACK_DISP0_8
\ 00001B E0 MOVX A,@DPTR
\ 00001C F5.. MOV ?V0 + 4,A
\ 00001E A3 INC DPTR
\ 00001F E0 MOVX A,@DPTR
\ 000020 F5.. MOV ?V0 + 5,A
501 byte reqType = msg[(cId == NWK_addr_req) ? Z_EXTADDR_LEN : sizeof( uint16 ) ];
\ 000022 E5.. MOV A,?V0 + 4
\ 000024 7002 JNZ ??zdpProcessAddrReq_1
\ 000026 E5.. MOV A,?V0 + 5
\ ??zdpProcessAddrReq_1:
\ 000028 7004 JNZ ??zdpProcessAddrReq_2
\ 00002A 7808 MOV R0,#0x8
\ 00002C 8002 SJMP ??zdpProcessAddrReq_3
\ ??zdpProcessAddrReq_2:
\ 00002E 7802 MOV R0,#0x2
\ ??zdpProcessAddrReq_3:
\ 000030 EC MOV A,R4
\ 000031 28 ADD A,R0
\ 000032 F582 MOV DPL,A
\ 000034 ED MOV A,R5
\ 000035 12.... LCALL ??Subroutine24_1 & 0xFFFF
\ ??CrossCallReturnLabel_48:
\ 000038 F5.. MOV ?V0 + 2,A
502
503 uint16 aoi = INVALID_NODE_ADDR;
504 byte *ieee = NULL;
\ 00003A 75..00 MOV ?V0 + 0,#0x0
\ 00003D 75..00 MOV ?V0 + 1,#0x0
505
506 if ( cId == NWK_addr_req )
\ 000040 E5.. MOV A,?V0 + 4
\ 000042 7002 JNZ ??zdpProcessAddrReq_4
\ 000044 E5.. MOV A,?V0 + 5
\ ??zdpProcessAddrReq_4:
\ 000046 701E JNZ ??zdpProcessAddrReq_5
507 {
508 ieee = msg;
\ 000048 8C.. MOV ?V0 + 0,R4
\ 00004A 8D.. MOV ?V0 + 1,R5
509
510 if ( osal_ExtAddrEqual( saveExtAddr, ieee ) )
\ 00004C ; Setup parameters for call to function osal_ExtAddrEqual
\ 00004C 7A.. MOV R2,#(saveExtAddr & 0xff)
\ 00004E 7B.. MOV R3,#((saveExtAddr >> 8) & 0xff)
\ 000050 90.... MOV DPTR,#(osal_ExtAddrEqual & 0xffff)
\ 000053 74.. MOV A,#((osal_ExtAddrEqual >> 16) & 0xff)
\ 000055 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000058 E9 MOV A,R1
\ 000059 7003 JNZ $+5
\ 00005B 02.... LJMP ??zdpProcessAddrReq_6 & 0xFFFF
511 {
512 aoi = ZDAppNwkAddr.addr.shortAddr;
\ 00005E 90.... MOV DPTR,#ZDAppNwkAddr
\ 000061 12.... LCALL ?Subroutine33 & 0xFFFF
\ ??CrossCallReturnLabel_71:
\ 000064 8022 SJMP ??zdpProcessAddrReq_7
513 }
514 /*
515 else if ( reqType == ZDP_ADDR_REQTYPE_MEMBERSHIP )
516 {
517 //ggg - what to do?
518 }
519 */
520 #if defined( ZDO_CACHE ) && ( CACHE_DEV_MAX > 0 )
521 else
522 {
523 aoi = ZDCacheGetNwkAddr( msg );
524 }
525 #endif
526 }
527 else // if ( cId == IEEE_addr_req )
528 {
529 aoi = BUILD_UINT16( msg[0], msg[1] );
\ ??zdpProcessAddrReq_5:
\ 000066 8C82 MOV DPL,R4
\ 000068 8D83 MOV DPH,R5
\ 00006A E0 MOVX A,@DPTR
\ 00006B FA MOV R2,A
\ 00006C A3 INC DPTR
\ 00006D E0 MOVX A,@DPTR
\ 00006E F9 MOV R1,A
\ 00006F E4 CLR A
\ 000070 2A ADD A,R2
\ 000071 FE MOV R6,A
\ 000072 E9 MOV A,R1
\ 000073 3400 ADDC A,#0x0
\ 000075 FF MOV R7,A
530
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -