This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教:Z-Stack 3.0.2 SampleLight Switch例程,Switch无法发送开关值,是什么原因?

Expert 1395 points
Other Parts Discussed in Thread: CC2530, Z-STACK

用Z-Stack 3.0.2 库CC2530芯片:SampleLight设置为协调器,SampleSwitch为终端,抓取的协议看已连接,但是按终端的按键Wireshark抓不到数据,协调器的灯也没变化。

终端的按键代码:

if ( keys & HAL_KEY_SW_7 )
{
zclGeneral_SendOnOff_CmdToggle( SAMPLESW_ENDPOINT,&zclSampleSw_DstAddr,FALSE, bdb_getZCLFrameCounter() );
HalLedSet(HAL_LED_2,HAL_LED_MODE_TOGGLE);
}

可以看到终端这边的LED2切换。但Wireshark软件上看不到数据。请各位指点迷津!谢谢!3.0.2_1.rar

  • 入网就没成功,轻参考如下:
    e2echina.ti.com/.../146528
  • 您好:谢谢您的回复,代码是按您给的链接里的方法来修改的,删除了UI。

    目前在:SampleLight端加:

     if ( keys & HAL_KEY_SW_7)

      {                

    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION|BDB_COMMISSIONING_MODE_FINDING_BINDING);//协调器

    HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);

    }

    在SampleSwitch代码增加:

    if ( keys & HAL_KEY_SW_1 )

      {

    HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);

    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);

     }

    但是依然不能入网。附Wireshark抓包文件:0827.rar

  • 看上去是啊TCLK 那部分弄丢了,你是不是裁剪的有问题,请用原始demo在初始化分别加上上面的两句话。
  • 您好:按您所说的,只在初始化部分各加一句,其它部分没做任何更改,代码如下:

    SampleSwitch终端初始化
    void zclSampleSw_Init( byte task_id )
    {
    zclSampleSw_TaskID = task_id;
    // Set destination address to indirect
    zclSampleSw_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
    zclSampleSw_DstAddr.endPoint = 0;
    zclSampleSw_DstAddr.addr.shortAddr = 0;
    // Register the Simple Descriptor for this application
    bdb_RegisterSimpleDescriptor( &zclSampleSw_SimpleDesc );
    // Register the ZCL General Cluster Library callback functions
    zclGeneral_RegisterCmdCallbacks( SAMPLESW_ENDPOINT, &zclSampleSw_CmdCallbacks );
    zclSampleSw_ResetAttributesToDefaultValues();
    // Register the application's attribute list
    zcl_registerAttrList( SAMPLESW_ENDPOINT, zclSampleSw_NumAttributes, zclSampleSw_Attrs );
    // Register the Application to receive the unprocessed Foundation command/response messages
    zcl_registerForMsg( zclSampleSw_TaskID );
    // Register low voltage NV memory protection application callback
    RegisterVoltageWarningCB( zclSampleApp_BatteryWarningCB );
    // Register for all key events - This app will handle all key events
    RegisterForKeys( zclSampleSw_TaskID );
    bdb_RegisterCommissioningStatusCB( zclSampleSw_ProcessCommissioningStatus );
    // Register for a test endpoint
    afRegister( &sampleSw_TestEp );
    #ifdef ZCL_DIAGNOSTIC
    // Register the application's callback function to read/write attribute data.
    // This is only required when the attribute data format is unknown to ZCL.
    zcl_registerReadWriteCB( SAMPLESW_ENDPOINT, zclDiagnostic_ReadWriteAttrCB, NULL );
    if ( zclDiagnostic_InitStats() == ZSuccess )
    {
    // Here the user could start the timer to save Diagnostics to NV
    }
    #endif
    #if defined (OTA_CLIENT) && (OTA_CLIENT == TRUE)
    // Register for callback events from the ZCL OTA
    zclOTA_Register(zclSampleSw_TaskID);
    #endif
    zdpExternalStateTaskID = zclSampleSw_TaskID;
    UI_Init(zclSampleSw_TaskID, SAMPLEAPP_LCD_AUTO_UPDATE_EVT, SAMPLEAPP_KEY_AUTO_REPEAT_EVT, &zclSampleSw_IdentifyTime, APP_TITLE, &zclSampleSw_UiUpdateLcd, zclSampleSw_UiStatesMain);
    UI_UpdateLcd();
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);//
    }

    SampleLight协调器初始化
    void zclSampleLight_Init( byte task_id )
    {
    zclSampleLight_TaskID = task_id;
    // Set destination address to indirect
    zclSampleLight_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
    zclSampleLight_DstAddr.endPoint = 0;
    zclSampleLight_DstAddr.addr.shortAddr = 0;
    // Register the Simple Descriptor for this application
    bdb_RegisterSimpleDescriptor( &zclSampleLight_SimpleDesc );
    // Register the ZCL General Cluster Library callback functions
    zclGeneral_RegisterCmdCallbacks( SAMPLELIGHT_ENDPOINT, &zclSampleLight_CmdCallbacks );
    // Register the application's attribute list
    zclSampleLight_ResetAttributesToDefaultValues();
    zcl_registerAttrList( SAMPLELIGHT_ENDPOINT, zclSampleLight_NumAttributes, zclSampleLight_Attrs );
    #ifdef ZCL_LEVEL_CTRL
    zclSampleLight_LevelLastLevel = zclSampleLight_LevelCurrentLevel;
    #endif
    // Register the Application to receive the unprocessed Foundation command/response messages
    zcl_registerForMsg( zclSampleLight_TaskID );
    #ifdef ZCL_DISCOVER
    // Register the application's command list
    zcl_registerCmdList( SAMPLELIGHT_ENDPOINT, zclCmdsArraySize, zclSampleLight_Cmds );
    #endif
    // Register low voltage NV memory protection application callback
    RegisterVoltageWarningCB( zclSampleApp_BatteryWarningCB );
    // Register for all key events - This app will handle all key events
    RegisterForKeys( zclSampleLight_TaskID );
    bdb_RegisterCommissioningStatusCB( zclSampleLight_ProcessCommissioningStatus );
    // Register for a test endpoint
    afRegister( &sampleLight_TestEp );
    #ifdef ZCL_DIAGNOSTIC
    // Register the application's callback function to read/write attribute data.
    // This is only required when the attribute data format is unknown to ZCL.
    zcl_registerReadWriteCB( SAMPLELIGHT_ENDPOINT, zclDiagnostic_ReadWriteAttrCB, NULL );
    if ( zclDiagnostic_InitStats() == ZSuccess )
    {
    // Here the user could start the timer to save Diagnostics to NV
    }
    #endif
    //GP_UPDATE
    #if (ZG_BUILD_RTR_TYPE)
    gp_RegisterCommissioningModeCB(gp_CommissioningMode);
    gp_RegisterGPChangeChannelReqCB(gp_ChangeChannelReq);
    #endif
    zdpExternalStateTaskID = zclSampleLight_TaskID;
    UI_Init(zclSampleLight_TaskID, SAMPLEAPP_LCD_AUTO_UPDATE_EVT, SAMPLEAPP_KEY_AUTO_REPEAT_EVT, &zclSampleLight_IdentifyTime, APP_TITLE, &zclSampleLight_UiUpdateLcd, zclSampleLight_UiStatesMain);
    UI_UpdateLcd();
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION|BDB_COMMISSIONING_MODE_FINDING_BINDING);//协调器
    }

    抓包文件如附件:ydm.rar

  • 依然不行,有什么解决办法么?
  • 协调器加 :bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION|BDB_COMMISSIONING_MODE_FINDING_BINDING|BDB_COMMISSIONING_MODE_NWK_STEERING);
    终端:
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_FINDING_BINDING|BDB_COMMISSIONING_MODE_NWK_STEERING);
  • 您好:由于您回复的那条指令看不全,我测试了以下两条指令:

    //bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION|BDB_COMMISSIONING_MODE_FINDING_BINDING

    |BDB_COMMISSIONING_MODE_INITIALIZATION);//2

    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION|BDB_COMMISSIONING_MODE_FINDING_BINDING

    |BDB_COMMISSIONING_MODE_NWK_STEERING);//1

    这两条,依然不行。附两次测试的抓包文件如下,另外跟预编译配置有关系没?我协调器配置位为:

    BDB_REPORTING
    SECURE=1
    TC_LINKKEY_JOIN
    NV_INIT
    xNV_RESTORE
    xZTOOL_P1
    xMT_TASK
    xMT_APP_FUNC
    xMT_SYS_FUNC
    xMT_ZDO_FUNC
    xMT_ZDO_MGMT
    xMT_APP_CNF_FUNC
    LCD_SUPPORTED=DEBUG
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_DISCOVER
    ZCL_WRITE
    ZCL_BASIC
    ZCL_IDENTIFY
    ZCL_ON_OFF
    ZCL_SCENES
    ZCL_GROUPS
    ZCL_LEVEL_CTRL

    终端配置为:

    SECURE=1
    TC_LINKKEY_JOIN
    NV_INIT
    NV_RESTORE
    xPOWER_SAVING
    NWK_AUTO_POLL
    xZTOOL_P1
    xMT_TASK
    xMT_APP_FUNC
    xMT_SYS_FUNC
    xMT_ZDO_FUNC
    xMT_ZDO_MGMT
    xMT_APP_CNF_FUNC
    LCD_SUPPORTED=DEBUG
    MULTICAST_ENABLED=FALSE
    ZCL_READ
    ZCL_DISCOVER
    ZCL_WRITE
    ZCL_BASIC
    ZCL_IDENTIFY
    ZCL_ON_OFF
    ZCL_GROUPS

    谢谢!

    Test1.rarTest2.rar