微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Z-Stack Home 1.2.2 SampleDoorLock 问题请教

Z-Stack Home 1.2.2 SampleDoorLock 问题请教

时间:10-02 整理:3721RD 点击:

描述:

1、CC2530 非开发套件,使用 SampleDoorLock 作为协调器、SampleDoorLockController作用终端

2、终端(SampleDoorLockController)开启一个定时器来检测按键(100ms),例如:P1_5 ==1时,来发起Becon reques 请求并且可以入网(入网抓包如下图)

3、例如:P1_6 ==1时,来发送解锁命令,但是数据发来出来,抢包没有抢出来。debug能正常进入定时器检测,例程其他地方没有改动,请问问题出在那里呢?谢谢,代码如下:

if ( events &   SAMPLEDOORLOCK_wds )
  {
        osal_start_timerEx( zclSampleDoorLockController_TaskID, SAMPLEDOORLOCK_wds, 100 );
   // zcl_EZModeAction ( EZMODE_ACTION_TIMED_OUT, NULL ); // EZ-Mode timed out
    if(P1_6==1)
    {
    // increase PIN number
    if ( giDoorLockScreenMode == DOORLOCK_PINMODE )
    {
      if ( giDoorLockPINColumnCount < 4 )
      {
        if ( giDoorLockPINCount > 8 )
        {
          giDoorLockPINCount = 0;
        }
        else
        {
          giDoorLockPINCount++;
        }
      }
    }
    // for all other modes, lock/unlock door
    else
    {
      zclDoorLock_t cmd;

      cmd.pPinRfidCode = aiDoorLockPIN;

      static bool locked = TRUE;

      giDoorLockScreenMode = DOORLOCK_MAINMODE;

      if ( locked )
      {
        zclClosures_SendDoorLockUnlockDoor( SAMPLEDOORLOCKCONTROLLER_ENDPOINT, &zclSampleDoorLockController_DstAddr, &cmd, false, zclSampleDoorLockControllerSeqNum++ );
        locked = FALSE;
      }
      else
      {
        zclClosures_SendDoorLockLockDoor( SAMPLEDOORLOCKCONTROLLER_ENDPOINT, &zclSampleDoorLockController_DstAddr, &cmd, false, zclSampleDoorLockControllerSeqNum++ );
        locked = TRUE;
      }
    }
    }
    if(P1_5==1)
    {
     if ( ( giDoorLockScreenMode == DOORLOCK_MAINMODE ) ||
         ( giDoorLockScreenMode == DOORLOCK_HELPMODE ) )
    {
      giDoorLockScreenMode = DOORLOCK_MAINMODE;
#ifdef ZCL_EZMODE
      {
        zclEZMode_InvokeData_t ezModeData;
        static uint16 clusterIDs[] = { ZCL_CLUSTER_ID_CLOSURES_DOOR_LOCK };   // only bind on the on/off cluster

        // Invoke EZ-Mode
        ezModeData.endpoint = SAMPLEDOORLOCKCONTROLLER_ENDPOINT; // endpoint on which to invoke EZ-Mode
        if ( ( zclSampleDoorLockController_NwkState == DEV_ZB_COORD ) ||
             ( zclSampleDoorLockController_NwkState == DEV_ROUTER )   ||
             ( zclSampleDoorLockController_NwkState == DEV_END_DEVICE ) )
        {
          ezModeData.onNetwork = TRUE;      // node is already on the network
        }
        else
        {
          ezModeData.onNetwork = FALSE;     // node is not yet on the network
        }

        ezModeData.initiator = TRUE;            // DoorLock Controller is an initiator
        ezModeData.numActiveInClusters = 0;
        ezModeData.pActiveInClusterIDs = NULL;
        ezModeData.numActiveOutClusters = 1;    // active output cluster
        ezModeData.pActiveOutClusterIDs = clusterIDs;
        zcl_InvokeEZMode( &ezModeData );
#ifdef LCD_SUPPORTED
        HalLcdWriteString( "EZMode", HAL_LCD_LINE_2 );
#endif
      }

// NOT ZCL_EZMODE, Use EndDeviceBind
#else
      {
        zAddrType_t dstAddr;
        HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );

        // Initiate an End Device Bind Request, this bind request will
        // only use a cluster list that is important to binding.
        dstAddr.addrMode = afAddr16Bit;
        dstAddr.addr.shortAddr = 0;   // Coordinator makes the match
        ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
                              SAMPLEDOORLOCKCONTROLLER_ENDPOINT,
                              ZCL_HA_PROFILE_ID,
                              0, NULL,   // No incoming clusters to bind
                              ZCLSAMPLEDOORLOCKCONTROLLER_BINDINGLIST, bindingOutClusters,
                              TRUE );
      }
#endif // ZCL_EZMODE
    }
    }
    return ( events ^   SAMPLEDOORLOCK_wds );
  }

   

如果定义了ZCL_EZMODE的话,首先需要进行两个设备在EZ_MODE下绑定的过程。

确保SampleDoorLock和SampleDoorLockController都处于EZ_MODE的状态下。

另外在一般应用中SampleDoorLock是实际的锁,是低功耗设备,所以是zigbee网络里的end device

SampleDoorLockController是控制端,一般可能是协调器等设备。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top