📄 mt_zdo.lst
字号:
410 }
411 pData += Z_EXTADDR_LEN;
412
413 attr1 = *pData++; // DstEPInt
414
415 x = *pData; // SecuritySuite
416
417 #if defined ( REFLECTOR )
418 if ( devAddr.addr.shortAddr == _NIB.nwkDevAddress )
419 {
420 ZDApp_UnbindReqCB( 0, &devAddr, ptr, attr, cID, &dstAddr, attr1, x );
421 ret = ZSuccess;
422 }
423 else
424 #endif
425 {
426 ret = (byte)ZDP_UnbindReq( &devAddr, ptr, attr, cID, &dstAddr, attr1, x );
427 }
428 break;
429 #endif
430
431 #if defined ( ZDO_MGMT_NWKDISC_REQUEST )
432 case SPI_CMD_ZDO_MGMT_NWKDISC_REQ:
433 devAddr.addrMode = Addr16Bit;
434 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
435 pData += 2;
436 scanChans = BUILD_UINT32( pData[3], pData[2], pData[1], pData[0] );
437 ret = (byte)ZDP_MgmtNwkDiscReq( &devAddr, scanChans, pData[4], pData[5], false );
438 break;
439 #endif
440
441 #if defined ( ZDO_MGMT_LQI_REQUEST )
442 case SPI_CMD_ZDO_MGMT_LQI_REQ:
443 devAddr.addrMode = Addr16Bit;
444 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
445 ret = (byte)ZDP_MgmtLqiReq( &devAddr, pData[2], false );
446 break;
447 #endif
448
449 #if defined ( ZDO_MGMT_RTG_REQUEST )
450 case SPI_CMD_ZDO_MGMT_RTG_REQ:
451 devAddr.addrMode = Addr16Bit;
452 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
453 ret = (byte)ZDP_MgmtRtgReq( &devAddr, pData[2], false );
454 break;
455 #endif
456
457 #if defined ( ZDO_MGMT_BIND_REQUEST )
458 case SPI_CMD_ZDO_MGMT_BIND_REQ:
459 devAddr.addrMode = Addr16Bit;
460 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
461 ret = (byte)ZDP_MgmtBindReq( &devAddr, pData[2], false );
462 break;
463 #endif
464
465 #if defined ( ZDO_MGMT_JOINDIRECT_REQUEST )
466 case SPI_CMD_ZDO_MGMT_DIRECT_JOIN_REQ:
467 devAddr.addrMode = Addr16Bit;
468 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
469 MT_ReverseBytes( &pData[2], Z_EXTADDR_LEN );
470 ret = (byte)ZDP_MgmtDirectJoinReq( &devAddr,
471 &pData[2],
472 pData[2 + Z_EXTADDR_LEN],
473 false );
474 break;
475 #endif
476
477 #if defined ( ZDO_MGMT_LEAVE_REQUEST )
478 case SPI_CMD_ZDO_MGMT_LEAVE_REQ:
479 devAddr.addrMode = Addr16Bit;
480 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
481 MT_ReverseBytes( &pData[2], Z_EXTADDR_LEN );
482 ret = (byte)ZDP_MgmtLeaveReq( &devAddr, &pData[2], false );
483 break;
484 #endif
485
486 #if defined ( ZDO_MGMT_PERMIT_JOIN_REQUEST )
487 case SPI_CMD_ZDO_MGMT_PERMIT_JOIN_REQ:
488 devAddr.addrMode = Addr16Bit;
489 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
490 ret = (byte)ZDP_MgmtPermitJoinReq( &devAddr, pData[2], pData[3], false );
491 break;
492 #endif
493
494
495 #if defined ( ZDO_USERDESCSET_REQUEST )
496 case SPI_CMD_ZDO_USER_DESC_SET:
497 // destination address
498 devAddr.addrMode = Addr16Bit;
499 devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
500 pData += 2;
501
502 // Network address of interest
503 shortAddr = BUILD_UINT16( pData[1], pData[0] );
504 pData += 2;
505
506 // User descriptor
507 userDesc.len = *pData++;
508 osal_memcpy( userDesc.desc, pData, userDesc.len );
509 pData += 16; // len of user desc
510
511 ret =(byte)ZDP_UserDescSet( &devAddr, shortAddr, &userDesc, pData[0] );
512 break;
513 #endif
514
515 #if defined ( ZDO_ENDDEVICE_ANNCE_REQUEST )
516 case SPI_CMD_ZDO_END_DEV_ANNCE:
517 // network address
518 shortAddr = BUILD_UINT16( pData[1], pData[0] );
519 pData += 2;
520
521 // extended address
522 ptr = pData;
523 MT_ReverseBytes( ptr, Z_EXTADDR_LEN );
524 pData += Z_EXTADDR_LEN;
525
526 // security
527 attr = *pData++;
528
529 ret = (byte)ZDP_EndDeviceAnnce( shortAddr, ptr, *pData, attr );
530 break;
531 #endif
532
533 #if defined (ZDO_SERVERDISC_REQUEST )
534 case SPI_CMD_ZDO_SERVERDISC_REQ:
535
536 // Service Mask
537 uAttr = BUILD_UINT16( pData[1], pData[0] );
538 pData += 2;
539 attr = *pData++; // Security suite
540
541 ret = (byte) ZDP_ServerDiscReq( uAttr, attr );
542 break;
543 #endif
544
545 #if defined (ZDO_NETWORKSTART_REQUEST )
546 case SPI_CMD_ZDO_NETWORK_START_REQ:
547 ret = ZDApp_StartUpFromApp( ZDAPP_STARTUP_AUTO );
548 break;
549
550 #endif
551
552 default:
553 break;
554 }
555
556 MT_SendSPIRespMsg( ret, cmd_id, len, respLen );
557 }
558
559 /*********************************************************************
560 * Utility FUNCTIONS
561 */
562
563 /*********************************************************************
564 * @fn zdo_MT_CopyRevExtAddr
565 *
566 */
567 byte *zdo_MT_CopyRevExtAddr( byte *dstMsg, byte *addr )
568 {
569 // Copy the 64-bit address
570 osal_cpyExtAddr( dstMsg, addr );
571 // Reverse byte order
572 MT_ReverseBytes( dstMsg, Z_EXTADDR_LEN );
573 // Return ptr to next destination location
574 return ( dstMsg + Z_EXTADDR_LEN );
575 }
576
577 /*********************************************************************
578 * @fn zdo_MT_MakeExtAddr
579 *
580 */
581 byte *zdo_MT_MakeExtAddr( zAddrType_t *devAddr, byte *pData )
582 {
583 // Define a 64-bit address
584 devAddr->addrMode = Addr64Bit;
585 // Copy and reverse the 64-bit address
586 zdo_MT_CopyRevExtAddr( devAddr->addr.extAddr, pData );
587 // Return ptr to next destination location
588 return ( pData + Z_EXTADDR_LEN );
589 }
590
591 /*********************************************************************
592 * CALLBACK FUNCTIONS
593 */
594
595 #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( ZDO_IEEEADDR_REQUEST )
596 /*********************************************************************
597 * @fn zdo_MTCB_NwkIEEEAddrRspCB
598 *
599 * @brief
600 *
601 * Called by ZDO when a NWK_addr_rsp message is received.
602 *
603 * @param SrcAddr - Source address
604 * @param Status - response status
605 * @param IEEEAddr - 64 bit IEEE address of device
606 * @param nwkAddr - 16 bit network address of device
607 * @param NumAssocDev - number of associated devices to reporting device
608 * @param AssocDevList - array short addresses of associated devices
609 *
610 * @return none
611 */
612 void zdo_MTCB_NwkIEEEAddrRspCB( uint16 type, zAddrType_t *SrcAddr, byte Status,
613 byte *IEEEAddr, uint16 nwkAddr, byte NumAssocDev,
614 byte StartIndex, uint16 *AssocDevList )
615 {
616 byte *pBuf;
617 byte *msg;
618 byte len;
619 byte x;
620
621 /*Allocate a message of size equivalent to the corresponding SPI message
622 (plus a couple of bytes for MT use)so that the same buffer can be sent by
623 MT to the test tool by simply setting the header bytes.*/
624
625 /*In order to allocate the message , we need to know the length and this
626 has to be calculated before we allocate the message*/
627
628 if ( type == SPI_CB_ZDO_NWK_ADDR_RSP )
629 {
630 len = 1 + Z_EXTADDR_LEN + 1 + Z_EXTADDR_LEN + 2 + 1 + 1 + (2*8);
631 // Addrmode + SrcAddr + Status + IEEEAddr + nwkAddr + NumAssocDev + StartIndex
632 }
633 else
634 {
635 len = 1 + Z_EXTADDR_LEN + 1 + Z_EXTADDR_LEN + 1 + 1 + (2*8);
636 // Addrmode + SrcAddr + Status + IEEEAddr + NumAssocDev + StartIndex
637 }
638
639 pBuf = osal_mem_alloc( len );
640
641 if ( pBuf )
642 {
643 msg = pBuf;
644
645 //First fill in details
646 if ( SrcAddr->addrMode == Addr16Bit )
647 {
648 *msg++ = Addr16Bit;
649 for ( x = 0; x < (Z_EXTADDR_LEN - 2); x++ )
650 *msg++ = 0;
651 *msg++ = HI_UINT16( SrcAddr->addr.shortAddr );
652 *msg++ = LO_UINT16( SrcAddr->addr.shortAddr );
653 }
654 else
655 {
656 *msg++ = Addr64Bit;
657 msg = zdo_MT_CopyRevExtAddr( msg, SrcAddr->addr.extAddr );
658 }
659
660 *msg++ = Status;
661 msg = zdo_MT_CopyRevExtAddr( msg, IEEEAddr );
662
663 if ( type == SPI_CB_ZDO_NWK_ADDR_RSP )
664 {
665 *msg++ = HI_UINT16( nwkAddr );
666 *msg++ = LO_UINT16( nwkAddr );
667 }
668
669 *msg++ = NumAssocDev;
670 *msg++ = StartIndex;
671 byte cnt = NumAssocDev - StartIndex;
672
673 for ( x = 0; x < 8; x++ )
674 {
675 if ( x < cnt )
676 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -