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.

[参考译文] CC2530:睡眠模式

Guru**** 2538930 points
Other Parts Discussed in Thread: CC2530, Z-STACK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/824829/cc2530-sleep-modes

器件型号:CC2530
Thread 中讨论的其他器件: Z-stack

您好!

在睡眠模式(PM2)期间、终端设备是否与网络断开连接? 我的意思是、在唤醒事件之后、短地址是否在进入睡眠模式之前保持其先前的值???

提前感谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、如果在项目中启用 NV_RESTORE、短地址应在进入睡眠模式之前保留其先前的值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    帮助设置 睡眠模式。 我将 ZigUP 与 ADC0 (连接器 P00)上的 TEMP6000传感器配合使用。 我需要每2分钟发送一次传感器数据。

    zcl_zigup.h

    #include 
    #include 
    #include 
    #include 
    
    #include "zcl_lighting.h"
    #include "zcl_exclosing.h"
    #include "zcl_zcl_zigup.h"
    #include
    "zcl_ha.h"
    #include "zcl_diagnostic.h"
    
    #include "zcl_udrech"
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    #include "zdash.delay #include "zb"#dash.ld小时#include "#include "#gain"#zcl.id.h #include "#include "zcl.idr.h #"#include "#def"#include "zcl.idr.h #"#"#include "zcl_unt #def"#include "zcl.idr.h #include "#"#"#"#"#"zcl.ude"#"#"zcl.idr.h #include "#"#"#"#"#"#def"#"zcl.ude"#"#"#"#"#.ude"#"#"#
    
    
    
    //允许 SYS_APP_MSgs
    静态 endPointDESC_t ZigUP_TestEp 的测试端点=
    {
    ZIGUP_Endpoint、
    &zclZigUP_TaskID、
    (SimpleDescriptionFormat_t *) NULL、//对于该测试端点
    (afNetworkLatencyREQ_t) 0没有简单的说明 //无网络延迟请求
    };
    
    devstates_t zclZigUP_NWkState = DEV_init;
    
    void zclZigUP_reporting (uint16 report_reason)
    {
    const uint8 NUM_attributes = 8;
    
    //发送报告
    zclReportCmd_t *pReportCmd;
    
    pReportCmd = osal_mem_alloc (sizeof (zclReportCmd_t)+(NUM_attributes * sizeof (zclReport_t)));
    if (pReportCmd!= NULL)
    {
    pReportCmd->numAttr = NUM_attributes;
    
    pReportCmd->attrList[0].attrID = ATTRID_ON_OFF;
    pReportCmd->atList[0].datatype = ZCL_datatype_Boolean;
    pReportCmd->attrList[0].attrData =(void *)(&State_Light);
    
    pReportCmd->attrList[1].attrID = ATTRID_CPU_TEMP;
    pReportCmd->atList[1].datatype = ZCL_datatype_single_PREC;
    pReportCmd->attrList[1].attrData =(void *)(&CPU_Temperature);
    
    pReportCmd->attrList[2].attrID = ATTRID_EXT_TEMP;
    pReportCmd->atList[2].datatype = ZCL_datatype_single_PREC;
    pReportCmd->attrList[2].attrData =(void *)(&EXT_Temperature);
    
    pReportCmd->attrList[3].attrID = ATTRID_EXT_HUMI;
    pReportCmd->atList[3].datatype = ZCL_datatype_single_PREC;
    pReportCmd->attrList[3].attrData =(void *)(&EXT_湿度);
    
    pReportCmd->attrList[4].attrID = ATTRID_S0_Counts;
    pReportCmd->atList[4].datatype = ZCL_datatype_uint32;
    pReportCmd->attrList[4].attrData =(void *)(&S0);
    
    pReportCmd->attrList[5].attrID = ATTRID_ADC_VOLT;
    pReportCmd->atList[5].datatype = ZCL_datatype_single_PREC;
    pReportCmd->attrList[5].attrData =(void *)(&ADC_Voltage);
    
    pReportCmd->attrList[6].attrID = ATTRID_DIG_INPUT;
    pReportCmd->atList[6]。datatype = ZCL_datatype_uint16;//布尔值或 uint8会导致每两个报告挂起...
    pReportCmd->attrList[6].attrData =(void *)(&dG_IN);
    
    pReportCmd->attrList[7].attrID = ATTRID_REPORT_REASID;
    pReportCmd->atList[7].datatype = ZCL_datatype_uint16;
    pReportCmd->attrList[7].attrData =(void *)(&report_reason);
    
    zclZigUP_DstAddr.addrMode =(afAddrMode_t) Addr16位;
    zclZigUP_DstAddr.addr.shortAddr = 0;
    zclZigUP_DstAddr.endpoint=1;
    
    zcl_SendReportCmd (ZIGUP_Endpoint、&zclZigUP_DstAddr、ZCL_CLUSTER_ID_GEN_ON_OFF、pReportCmd、ZCL_FRAME_CLIENT_SERVER_DIR、 false,zclZigUPSeqNum++);
    }
    
    OSAL_mem_free( pReportCmd );
    }/
    
    
    *********
    * ZCL 通用配置文件回调表
    */
    static zclGeneral_AppCallbacks_t zclZigUP_CmdCallbacks =
    {
    zclZigUP_BasicResetCB、 //基本集群重置命令
    zclZigUP_IdentifyCB, //标识命令
    NULL, //确定触发效果命令
    zclZigUP_IdentifyQueryRspCB, //识别查询响应命令
    zclZigUP_OnOffCB, //开/关集群命令
    NULL, //开/关集群增强型命令关闭,效果
    为 NULL, //开/关集群增强命令开,调用全局场景
    空, //开/关集群增强命令开,定时关
    #ifdef ZCL_Groups
    NULL, //组响应命令
    #endif
    #ifdef ZCL_Scenes
    NULL, //场景存储请求命令
    NULL, //场景调用请求命令
    NULL, //场景响应命令
    #endif
    #ifdef ZCL_ALARMS
    NULL, //警报(响应)命令
    #endif
    #ifdef SE_UK_EXT
    NULL、 //获取事件日志命令
    NULL, //发布事件日志命令
    #endif
    NULL, // RSSI 位置命令
    NULL // RSSI 位置响应命令
    };
    
    静态 zclLighting_AppCallbacks_t zclZigUP_LightingCmd =
    {
    NULL、 //移至 Hue 命令
    NULL, //移动色调命令
    NULL, // Step Hue 命令
    NULL, //移至饱和命令
    NULL, //移动饱和命令
    NULL, //步长饱和命令
    空, //移至 Hue 和 Saturation 命令
    zclZigUP_MoveToColorCB, //移动到颜色命令
    NULL, //移动颜色命令
    NULL, //步骤到颜色命令
    NULL, //移至色温命令
    NULL, //增强移动到 Hue
    NULL, //增强型移动色调;
    NULL, //增强型步长色调;
    NULL、 //增强移动到色调和饱和度;
    NULL、 //颜色循环集命令
    NULL, //停止移动步骤;
    };
    
    静态 zclClouresets_DoorLockAppCallbacks_t zclZigUP_DoorLockCmd 回调=
    {
    zclZigUP_DoorLockCB、 // Doorlock 群集命令
    zclZigUP_DoorLockRspCB、 //门锁响应
    NULL、
    NULL、
    NULL、
    NULL、
    NULL、
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空、
    空、
    空
    空、
    空、
    空
    };
    
    
    /*********
    *@fn zclZigUP_Init
    *
    *@简介 zclGeneral 层的初始化函数。
    *
    *@param 无
    *
    *@返回 无
    */
    void zclZigUP_Init( byte task_id )
    {
    // BindRestoreFromNV();
    zclZigUP_TaskID = task_id;
    
    //将目标地址设置为间接
    zclZigUP_DstAddr.addrMode =(afAddrMode_t) AddrNotPresent;
    zclZigUP_DstAddr.Endpoint = 0;
    zclZigUP_DstAddr.addr.shortAddr = 0;
    
    //此应用程序是家庭自动化配置文件
    zclHA_Init(&zclZigUP_SimpleDesc[0])的一部分;
    
    //注册 ZCL 通用集群库回调函数
    zclGeneral_RegisterCmdCallbacks( ZIGUP_endpoint,&zclZigUP_CmdCallbacks );
    
    //注册 ZCL 照明集群库回调函数
    zclLighting_RegisterCmdCallbacks( ZIGUP_endpoint,&zclZigCL_LightingCmdClockClockClockets );
    
    / ZclockLock_CdoClockClockClockClockClockClockClockClockClock_ClockClockClockClockClockClockClockClockClockClock_Cbacks
    )
    
    //注册应用程序的属性列表
    zcl_registerAttrList( ZIGUP_EndPoint、zclZigUP_NumAttributes、zclZigUP_Attrs );
    
    //注册应用程序以接收未处理的基础命令/响应消息
    zcl_registerForMsg ( zclZigUP_TaskID );
    
    #ifdef ZCL_discover//
    注册应用程序的命令 list
    zcl_registerCmdList( ZIGUP_endpoint, zclCmdArraySize,zclZigcl_cmds );
    #endif
    
    //注册所有关键事件-此应用程序将处理所有关键事件
    RegisterForKeys ( zclZigUP_TaskID );
    
    //为测试端点
    afRegister (&ZigUP_TestEp)注册;
    
    #ifdef ZCL_diagnostic
    //注册应用程序的回调函数以读取/写入属性数据。
    //仅当 ZCL 不知道属性数据格式时才需要此选项。
    zcl_registerReadWriteCB( ZIGUP_Endpoint, zclDiagnostic_ReadWriteAttrCB, NULL );
    
    if (zclDiagnostic_InitStats()=ZSuccessess)
    {
    //用户可以在此处启动计时器,将诊断保存为 nV
    }
    #endif
    
    
    
    
    
    P0SEL = b00001101; // 0=GPIO 1=外设(ADC、UART)
    P0DIR = b00001000; // 1=输出
    P0INP = b00000001; // 1=无牵引
    
    P1SEL = bq01000000; // 0=GPIO 1=外设(SPI)
    P1DIR = b01000110; // 1=输出
    P1INP = b00000000; // 1=无牵引
    
    P2SEL = b00000000; // 0=GPIO 1=外设、优先级
    P2DIR = b00000000; // 1=输出、优先级
    P2INP = b00000000; // 1=无牵引,端口 P0-P2全部上拉
    
    PICTL |= BV (0)| BV (1)| BV (3); //下降沿 INT P0 (S0)+ P1.0-P1.3 (KEY)+ P2.0 (数字输入)
    IEN0 |= BV (7); // EA -全局中断使能
    IEN1 |= BV (5); //端口0中断使能
    IEN2 |= BV (1)| BV (4); //端口1+2中断使能
    
    P0IEN |= BV (6); // S0 (P0.6)中断使能
    P1IEN |= BV (3); //键(P1.3)中断使能
    P2IEN |= BV (0); //拨入(P2.0)中断使能
    
    
    PERCFG |= BV (1); // UART1 SPI 备用#2引脚
    U1CSR = b00000000; // UART1 SPI 主
    设备 U1GCR = b00010000; // UART1 Baud_E
    U1BAUD = b01000000; // UART1 Baud_M
    
    UART_Init();
    
    _delay_ms (GetRandomNumber ());//随机延迟
    
    //关闭
    所有指示灯 Relais (0);
    WS2812_SendLED (0、0、0);
    LED (0);
    
    //通过"分配" NaN 使浮点值无效
    //如果存在传感器,它们将在稍后填充
    EXT_Temperature =*(float*)&float_NaN;
    EXT_湿度=*(float*)&float_NaN;
    ADC_Voltage =*(float*)&float_NaN;
    CPU_Temperature =*(float*)&float_NaN;
    
    //自动检测传感器类型
    if (DHT22_measure())
    {
    TEMP_SENSOR = 1;
    UART_String ("检测到传感器类型 DHT22。");
    }
    否则(ds18b20_get_temp ()
    ){
    TEMP_SENSOR = 2;
    UART_String ("检测到传感器类型 DS18B20);
    }
    else UART_String ("未检测到传感器。");
    
    //开始测量任务以报告值
    osal_start_reload 计时器(zclZigUP_TaskID、ZIGUP_reporting_EVT、ZIGUP_reporting_interval);
    
    UART_String ("初始化完成");
    }/*********
    
    
    *@fn zclSample_event_loop
    *
    *@简短介绍 用于 zclGeneral 的事件循环处理器。
    *
    *@param 无
    *
    *@返回 无
    */
    uint16 zclZigUP_EVENT_LOOP (uint8 task_id、uint16事件)
    {
    afIncomingMSGPclack_t * MSGpkt;
    
    (void) task_id;//有意未引用的参数
    
    if (Events & SYS_EVENT_MSG)
    {
    while (((MSGpkt=(afIncomingMSGPacket_t *) osal_msg_receive (zclZigUP_TaskID))))
    {
    switch ( MSGpkt->HDR.event )
    {
    案例 ZCL_INVING_MSG:
    //传入的 ZCL Foundation 命令/响应消息
    zclZigUP_ProcessIncomingMsg((zclIncomingMsg_t *)MSGpkt);
    中断;
    
    案例 ZDO_State_change:
    zclZigUP_NWkState =(devstates_t)(MSGpkt->HDR.status);
    
    //现在在网络上
    if ((zclZigUP_NWkState =DEV_ZB_COord)||(zclZigUP_NWKState =DEV_router)||(zclZigUP_NWKState =DEV_END_DEVICE))
    {
    //现在在网络
    上}
    中断;
    
    默认值:
    中断;
    }
    
    //释放内存
    OSAL_msg_dealloc((uint8 *)MSGpkt);
    }
    
    //返回未处理的事件
    返回(事件^ SYS_EVENT_MSG);
    }
    
    if (Events & ZIGUP_identify_timeout_EVT)
    {
    if (zclZigUP_IdentifyTime >0) zclZigUP_IdentifyTime --;
    zclZigUP_ProcessIdentifyTimeChange();
    
    返回(事件^ ZIGUP_Identifying_TIMEOUT_EVT);
    }
    
    if (Events & ZIGUP_Reporting_EVT)
    {
    //更新测量值
    measure_QuickStudioff();
    measure_Sensor();
    
    //报告状态
    zclZigUP_Reporting (report_reason_timer);
    
    返回(事件^ ZIGUP_REGISY_EVT);
    }
    
    //丢弃未知事件
    返回0;
    }/
    
    *********
    *@fn zclZigUP_ProcessIdentifyTimeChange
    *
    *@简短调用以处理对 IdentifyTime 属性的任何更改。
    *
    *@param none
    *
    *@return none
    */
    static void zclZigUP_ProcessIdentifyTimeChange (void)
    {
    if (zclZigUP_IdentifyTime >0)
    {
    OSAL_start_timerEx (zclZigUP_TaskID、ZIGUP_Identifying_TIMEOUT_EVT、1000);
    // HalLedBlink (HAL_LED_4、0xFF、HAL_LED_DEFAULT_DUTY、HAL_LED_DEFAULT_TIMER);
    }
    否则
    {
    OSAL_STOP_timerEx (zclZigUP_TaskID、ZIGUP_Identifying_TIMEOUT_EVT);
    }
    
    
    /*********
    *@fn zclZigUP_BasicResetCB
    *
    *@ZCL 通用集群库的简短回调
    * 将所有基本群集属性设置为默认值。
    *
    *@param none
    *
    @return none
    */
    static void zclZigUP_BasicResetCB( void )
    {nLLME_LEaveReq_t
    leaveReq;
    //将每个字段设置为0
    osal_memset (&leaveReq,0,sizeof (nLLME_LEaveReq_t));
    
    //这将使设备在重置后重新加入网络。
    leaveReq.inu返回= true;
    
    //设置 NV 启动选项以强制"新建"加入。
    zgWriteStartupOptions (ZG_STARTUP_SET、ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
    
    //离开网络,如果
    (NLME_LeaveReq (&leaveReq)!= ZSuccessess)
    {则在之后重置
    //无法发出离开;无论如何都要准备重置
    ZDUP_LEAVeReset (false);
    }
    
    
    /*********
    *@fn zclZigUP_IdentifyCB
    *
    *@当
    *时从 ZCL 通用群集库进行简短回调 它收到了此应用程序的 Identity Command。
    *
    *@param srcAddr -响应消息的源地址和端点
    *@param identifyTime -标识自己的秒数
    *
    @return none
    */
    static void zclZigUP_IdentifyCB( zclIdentify_t *pcmd )
    {zcl****IdentifyTime
    = pCmd->Zigbe_IdentifyCB(*zclIdentifyTimeChange_Time)
    
    
    
    
    *@fn zclZigUP_IdentifyQueryRspCB
    *
    @*时 ZCL 通用集群库的简短回调
    它收到了此应用程序的 Identity Query 响应命令。
    *
    **@param srcAddr -请求者的地址
    *@param timeout -标识自己的秒数(对查询响应有效)
    *
    *@返回无
    */
    静态空 zclZigUP_IdentifyQueryRspCB( zclIdentifyQueryRsp_t ******)
    {
    (空)
    
    
    ;}/****CODEPRSP *
    *@fn zclZigUP_OnOffCB
    *
    @*时 ZCL 通用集群库中的简短回调
    它收到了此应用程序的开/关命令。
    *
    *@param cmd - command_on、command_off 或 command_toggle
    *
    *@return none
    */
    static void zclZigUP_OnOffCB (uint8 cmd)
    {
    afIncomingMSGPgpgp_t* pptr = zcl_getRawAFMsg ();zclZigbed_dstAddr.addr.Adr.Adr.portr
    = zclrAddr.Addr.Adr<pAdr<pAdr.Adr<paddr<paddr<p<p
    
    
    char buffer[100];
    sprintf (buffer、"cmd:%u\n"、cmd);
    uart_String (buffer);
    
    
    //如果
    (cmd == command_on)
    {,则打开指示灯
    Relais (light_on);
    }
    //如果
    (cmd = command_off)
    为{,则关闭其他灯
    Relais (light_off);
    }
    //如果
    (cmd = COMMAND_TOGGLE)
    为{,则切换其他灯
    Relais (!State_Light);
    }
    ZStatus_t
    
    zclZigUP_MoveToColorCB (zclCCMoveToColor_t *pCmd)
    {
    //将 CIE 颜色空间转换为 RGB 颜色空间
    //来自 github.com/.../cie_rgb_converter.js
    
    char buffer[100];
    sprintf (buffer、"Light-CMD:x:%u // y:%u\n"、pcmd->colorX、pcmd->colorY);
    UART_String (buffer);
    
    float x = pcmd->colorX/65536.0;//给定的 x 值
    y = p65md /给定的 float 6.0/p65md 值 y
    
    float z = 1.0 - x - y;
    float Y = 1.0;
    float X =(Y / y)* x;
    float Z =(Y / y)* z;
    
    //使用宽 RGB D65转换浮
    点红色= X * 1.656492 - Y * 0.354851 - Z * 0.255038;
    浮点绿色=-X * 0.707196 + Y * 1.655397 + Z * 0.036152;
    浮点蓝色= X * 0.051713 - Y * 0.121364 + Z * 1.011530;
    
    //如果红色、绿色或蓝色大于1.0,则将其设置回1.0的最大值
    (如果(红色>蓝色&&红色>绿色&&红色> 1.0)
    {
    绿色=绿色/红色;
    蓝色=蓝色/红色;
    红色= 1.0;
    }
    否则(绿色>蓝色&&绿色>红色&&绿色> 1.0)
    {
    红色=红色/绿色;
    蓝色=蓝色/绿色;
    绿色= 1.0;
    }
    否则(蓝色>红色&&蓝色>绿色&&蓝色> 1.0)
    {
    红色=红色/蓝色;
    绿色=绿色/蓝色;
    蓝色= 1.0;
    }
    
    //反向伽马校正
    红色=红色<= 0.0031308? 12.92 *红色:(1.0 + 0.055)* pow (红色,(1.0 / 2.4))- 0.055;
    绿色=绿色<= 0.0031308? 12.92 *绿色:(1.0 + 0.055)*低(绿色、(1.0 / 2.4))- 0.055;
    蓝色=蓝色<= 0.0031308? 12.92 *蓝色:(1.0 + 0.055)*低(蓝色、(1.0 / 2.4))- 0.055;
    
    
    //将标准化十进制转换
    为十进制红色*= 255;
    绿色*= 255;
    蓝色*= 255;
    
    uint8 r =(uint8)红色;
    uint8 g =(uint8)绿色;
    uint8 b =(uint8)蓝色;
    
    如果(红色>254.5) r = 255;
    否则(红色<0.5) r = 0;
    
    如果(绿色>254.5);
    否则、如果(绿色< 0.5) g = 0;
    
    如果(蓝色> 254.5) b = 255;
    否则(蓝色< 0.5) b = 0;
    
    sprintf (buffer、"Light-CMD:R:%u // g:%u // b:%u\n"、r、g、b);
    UART_String (buffer);
    
    WS2812_SendLED (r、g、b);
    
    退货(ZSuccessess);
    }
    
    /*********
    *@fn zclZigUP_DoorLockCB
    *
    *@当
    *时从 ZCL 通用群集库进行简短回调 它收到了此应用程序的门锁群集命令。
    *
    *@param pInMsg -处理传入消息
    *@param pInCmd - PIN/RFID 命令代码
    *
    *@return ZStatus_t
    */
    static ZStatus_t zclZigUP_DoorLockCB (zclIncoming_t *pInMsg,zclDoorLock_t *pInCmd){/=static Zclock_DoorLocks=
    
    
    hdr.commandID (=Door_Off)命令(=Door_Door_Clock)
    
    LED (0);
    zclClourese_SendDoorLockStatusResponse (pInMsg->msg->endpoint、&pInMsg->msg->srcAddr、command_closes_lock_door、ZCL_STATUS_SUCCESS、true、true、 pInMsg->HDR.transSeqNum );
    }
    
    // LED 打开-如果
    (pInMsg->hdr.commandID == COMMAND_FLOCK_UNLOCK_DOOR)
    {,则解锁门
    LED (1);
    zclClourese_SendDoorLockStatusResponse (pInMsg->msg->endpoint、&pInMsg->msg->srcAddr、command_closes_unlock_door、ZCL_STATUS_SUCCESS、true、true、 pInMsg->HDR.transSeqNum );
    }
    
    //如果
    (pInMsg->hdr.commandID == command_offsets_toggle_door)
    {,则切换门
    LED (!State_LED);
    zclClourese_SendDoorLockStatusResponse (pInMsg->msg->endpoint、&pInMsg->msg->srcAddr、command_closes_tog_door、ZCL_STATUS_SUCCESS、true、true、 pInMsg->HDR.transSeqNum );
    }
    
    否则
    {
    返回(ZCL_STATUS_FAILURE);//无效命令
    }
    
    返回(ZCL_STATUS_CMD_has _RSP);
    }
    
    /*********
    *@fn zclZigUP_DoorLockRspCB
    *
    *@当
    *时从 ZCL 通用群集库进行简短回调 它收到了针对此应用的门锁响应。
    *
    *@param cmd - Command ID
    *@param srcAddr - Requestor 的地址
    *@param trasSeqNum -事务序列号
    *@param 状态-来自服务器门锁的状态响应 cmd
    *
    *@return ZStatus_t
    */
    static ZStatus_t zclZigUP_DoorLockRspCB (zclInforecing_t *),
    
    返回状态8 * ( ZCL_STATUS_SUCCESS );
    }/*********
    
    
    
    *
    处理 ZCL Foundation 传入命令/响应消息的函
    数*
    /
    
    /*********
    *@fn zclZigUP_ProcessIncomingMsg
    *
    *@简短处理 ZCL Foundation 传入消息
    *
    @param pInMsg -指向已接收消息的指针
    *
    *@返回 none
    */
    static void zclZigUP_ProcessIncomingMsg ( zclIncomingMsg_t *pInMsg )
    {
    switch ( pInMsg->zclHdr.commandID ) zcl_read_zcl_cl_rif_rq_de:
    
    
    
    zclZigUP_ProcessInReadRspCmd ( pInMsg );
    break;
    #endif
    #ifdef ZCL_WRITE
    case ZCL_CMD_WRITE_RSP:
    zclZigUP_ProcessInWriteRspCmd ( pInMsg );
    break;
    #endif
    #ifdef ZCL_report
    //应在此处添加属性报告实现
    方案案例 ZCL_CMD_CONFIG_REPORT:
    // zclZigUP_ProcessInConfigReportCmd ( pInMsg );
    中断;
    
    案例 ZCL_CMD_CONFIG_REPORT_RSP:
    // zclZigUP_ProcessInConfigReportRspCmd (pInMsg);
    中断;
    
    案例 ZCL_CMD_READ_REPORT_CFG:
    // zclZigUP_ProcessInReadReportCfgCmd (pInMsg);
    中断;
    
    案例 ZCL_CMD_READ_REPORT_CFG_RSP:
    // zclZigUP_ProcessInReadReportCfgRspCmd (pInMsg);
    中断;
    
    案例 ZCL_CMD_REPORT:
    // zclZigUP_ProcessInReportCmd (pInMsg);
    break;
    #endif
    case ZCL_CMD_DEFAULT_RSP:
    zclZigUP_ProcessInDefaultRspCmd ( pInMsg );
    break;
    #ifdef ZCL_discover
    case ZCL_CMD_discover_CMDS_received_RSP:
    zclZigUP_ProcessInDiscCmdsRspCmd (pInMsg);
    中断;
    
    案例 ZCL_CMD_discover_CMDS_GEN_RSP:
    zclZigUP_ProcessInDiscCmdsRspCmd (pInMsg);
    中断;
    
    案例 ZCL_CMD_discover_ATTRS_RSP:
    zclZigUP_ProcessInDiscAttrsRspCmd (pInMsg);
    中断;
    
    案例 ZCL_CMD_discover_ATTRS_EXT_RSP:
    zclZigUP_ProcessInDiscAttrsExtRspCmd (pInMsg);
    break;
    #endif
    
    默认值:
    中断;
    }
    
    if (pInMsg->attrCmd) osal_mem_free (pInMsg->attrCmd);
    }
    
    #ifdef ZCL_read
    /*********
    *@fn zclZigUP_ProcessInReadRspCmd
    *
    *@简要处理"配置文件"读取响应命令
    *
    *@param pInMsg -要处理的传入消息
    *
    @返回 none
    */
    static uint8 zclZigUP_ProcessInReadRspCmd ( zclIncomingMsg_t *pInMsg ){zclCint8 zcl_ProcessInReadRspmd
    
    ( zclInReadMsp_t *zclInReadRspmd;*
    
    
    readRspCmd =(zclReadRspCmd_t *) pInMsg->attrCmd;
    for (i = 0;i < readRspCmd->numAttr;i++)
    {
    //将原始读取属性的结果通知发起人
    //尝试,对于每个成功的请求,请求的值
    //属性
    }
    
    return (true);
    }
    #endif // ZCL_read
    
    #ifdef ZCL_write
    /*********
    *@fn zclZigUP_ProcessInWriteRspCmd
    *
    *@简要处理“配置文件”写入响应命令
    *
    *@param pInMsg -要处理的传入消息
    *
    @返回无*
    /
    静态 uint8 zclZigUP_ProcessInWriteRspCmd (zclIncomingMsg_t *pInMsg){*zclZigUP_ProcessInWriteRspmd
    
    (zclInCmd *zclInWriteRsp_t *Cd_t *zclCd_RspeRd;
    
    
    writeRspCmd =(zclWriteRspCmd_t *)pInMsg->attrCmd;
    for ( i = 0;i < writeRspCmd->numAttr;i++)
    {
    //将原始写入属性的结果通知器件
    //命令
    。}
    
    return (true);
    }
    #endif // ZCL_write
    
    /*********
    *@fn zclZigUP_ProcessInDefaultRspCmd
    *
    *@简要处理"配置文件"默认响应命令
    *
    *@param pInMsg -要处理的传入消息
    *
    @return none
    */
    static uint8 zclZigUP_ProcessInDefaultRspCmd ( zclIncomingMsg_t *pInMsg ){// zclD_defaultRspmd
    
    = zclCspmd
    
    //设备收到默认响应命令通知。
    (空) pInMsg;
    
    返回(true);
    }
    
    #ifdef ZCL_discover/*********
    
    *@fn zclZigUP_ProcessInDiscCmdsRspCmd
    *
    @简要处理 Discover 命令响应命令
    *
    @param pInMsg -要处理的传入消息
    *
    @return none
    */
    static uint8 zclZigUP_ProcessInDiscCmdsRspCmd (zclIncomingMsg_t *pInsint 8) zclZigbe_ProcessIndiscoverCmd (
    
    zclCspCspCspCspCspCmCmd)
    
    
    discoverRspCmd =(zclDiscoverCmdsCmdRsp_t *)pInMsg->attrCmd;
    for ( i = 0;i < discoverRspCmd->numCmd;i++)
    {
    //设备收到其属性查找命令结果的通知
    。}
    
    返回(TRUE);
    }
    
    /*********
    *@fn zclZigUP_ProcessInDiscAttrsRspCmd
    *
    *@简要处理"配置文件"发现属性响应命令
    *
    @param pInMsg -要处理的传入消息
    *
    @return none
    */
    static uint8 zclZigUP_ProcessInDiscAttrsRspCmd (zclIncomingMsg_t
    
    )* zclInt 8 zclZiguint_ProcessIndiscover_DissAttrsRspCmd *
    
    
    discoverRspCmd =(zclDiscoverAttrsRspCmd_t *) pInMsg->attrCmd;
    for (i = 0;i < discoverRspCmd->numAttr;i++)
    {
    //设备收到其属性查找命令结果的通知
    。}
    
    返回(TRUE);
    }
    
    /*********
    *@fn zclZigUP_ProcessInDiscAttrsExtRspCmd
    *
    *@简要处理“配置文件”发现属性扩展响应命令
    *
    *@param pInMsg -要处理的传入消息
    *
    @return none
    */
    static uint8 zclZigboverUP_ProcessInDiscsExtRspCmd (zclIningInsMsinc8)*静态 uint8 zclZigbdiscover_ProcessIndiscover_ProcessInscdr *
    
    
    
    
    discoverRspCmd =(zclDiscoverAttrsExtRsp_t *) pInMsg->atttrCmd;
    for (i = 0;i < discoverRspCmd->numAttr;i++)
    {
    //设备收到其属性查找命令结果的通知
    。}
    
    return (true);
    }
    #endif // ZCL_discover
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议您参考 SampleTemperatureSensor 示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,我没有找到任何关于睡眠模式的信息。 :-)

    我在 zcl_sampletemperaturesensor.c 中搜索

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您应该切换到 EndDeviceEB 并搜索 power_saving。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,但我没有找到:-(

    我在 zcl_sampletemperaturesensor.c 中搜索

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试文件搜索(shift-ctrl-f)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您还可以检查 hal_sleep.c 以查看器件如何进入睡眠模式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何启用 power_saving? 睡眠时间是在哪里设置的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以在项目预定义符号中定义 power_saving 以启用它。 定义 power_saving 后,当任务队列中没有内容时,CC2530将自动进入睡眠模式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么?

    启用编译选项、在行的左边选择"x"。

    和  

    器件唤醒多长时间? 10、000?
    在 REPORT_INTERVAL = 10000中定义?

    zcl_sampletemperatures.c

    //报告温度
    的频率#define SAMPLETEMPERATURESENSOR_REPORT_INTERVAL 10000 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这以 ms 为单位、因此10000 =10秒。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、 您可以在行的左边选择"x"以启用编译选项。 除报告间隔外、轮询速率默认每秒唤醒一次器件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何禁用或更改轮询速率时间?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以通过在 f8wconfig.cfg 中更改-DPOLL_RATE 来更改轮询速率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我改变了  

    -DPOLL_RATE = 10000 

    但我的测试仪显示始终为27mA :-)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是使用 TI CC2530DK 还是使用定制板?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用 了 CC2530 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user6111566"]

    我改变了  

    1
    -DPOLL_RATE=10000

    但我的测试仪显示始终为27mA :-)

    [/报价]

    D3 LED 始终亮起、D1闪烁。
    SS2530可能没有设置睡眠模式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为这不是 TI CC2530DK,如果始终亮起且另一个 LED 闪烁,则可能会导致27mA 的电流消耗。 您应该先关闭这两个 LED。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用该

    当我测量电流时、我断开了 SS2530和电路板。

    SS2530可能没有设置睡眠模式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道此板,但您应该检查您的板原理图并设置代码关闭 LED 以再次测量功耗。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我测量电流时、我根本没有使用电路板。 但 模块上没有 LED

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否拍摄一张图片、向我展示如何测量功耗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢。  

    睡眠模式的工作电流为1uA。 :-)
    我需要将 CC2530模块带到路由器以连接到网络。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您分享您解决问题的方式。

    这是一个已知问题、已针对 Z-Stack 3.0.2修复: http://processors.wiki.ti.com/index.php/Zigbee_Known_Issues_and_Proposed_Fixes#Low_power_mode_not_entered_upon_ZED_factory_new_before_commissioning