Thread 中讨论的其他器件: Z-stack
您好!
在睡眠模式(PM2)期间、终端设备是否与网络断开连接? 我的意思是、在唤醒事件之后、短地址是否在进入睡眠模式之前保持其先前的值???
提前感谢
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.
你(们)好
帮助设置 睡眠模式。 我将 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
感谢您分享您解决问题的方式。
这是一个已知问题、已针对 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