Commit 2d0a05ab authored by limm's avatar limm

v2.0

parent 3169de12
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -670,11 +670,6 @@ ...@@ -670,11 +670,6 @@
<type>1</type> <type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/util/time-util.c</locationURI> <locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/util/time-util.c</locationURI>
</link> </link>
<link>
<name>zcl-framework-core/util.c</name>
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/util/util.c</locationURI>
</link>
<link> <link>
<name>zcl-framework-core/zdo-cli.c</name> <name>zcl-framework-core/zdo-cli.c</name>
<type>1</type> <type>1</type>
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
<attribute side="server" code="0x100a" define="FanMode" type="ENUM8" min="0x00" max="0x09" writable="true" default="0x00" optional="true" >FanMode</attribute> <attribute side="server" code="0x100a" define="FanMode" type="ENUM8" min="0x00" max="0x09" writable="true" default="0x00" optional="true" >FanMode</attribute>
<attribute side="server" code="0x100b" define="OnOff" type="BOOLEAN" min="0x00" max="0x01" writable="true" default="0x00" optional="true" >OnOff</attribute> <attribute side="server" code="0x100b" define="OnOff" type="BOOLEAN" min="0x00" max="0x01" writable="true" default="0x00" optional="true" >OnOff</attribute>
<attribute side="server" code="0x100c" define="NoDisturbMode" type="BOOLEAN" min="0x00" max="0x01" writable="true" default="0x00" optional="true" >NoDisturbMode</attribute> <attribute side="server" code="0x100c" define="NoDisturbMode" type="BOOLEAN" min="0x00" max="0x01" writable="true" default="0x00" optional="true" >NoDisturbMode</attribute>
<attribute side="server" code="0x100d" define="RunMode" type="INT8U" min="0x00" max="0x03" writable="true" default="0x00" optional="true" >RunMode</attribute>
</cluster> </cluster>
</configurator> </configurator>
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "common_process.h" #include "common_process.h"
#include "uart_handler.h" #include "uart_handler.h"
#include <00ikonke-app/general/ikk-opt-tunnel.h> #include <00ikonke-app/general/ikk-opt-tunnel.h>
#include <00ikonke-app/general/ikk-cluster.h>
#include "./general/ikk-common-utils.h" #include "./general/ikk-common-utils.h"
DEVICVE_INFO_ST g_sDevice_Info = { DEVICVE_INFO_ST g_sDevice_Info = {
...@@ -19,7 +18,6 @@ DEVICVE_INFO_ST g_sDevice_Info = { ...@@ -19,7 +18,6 @@ DEVICVE_INFO_ST g_sDevice_Info = {
.mcu_hardware_version = 0xff, .mcu_hardware_version = 0xff,
.mcu_hardware_version = 0xff, .mcu_hardware_version = 0xff,
}; };
bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
uint8_t i = cmd->payloadStartIndex; uint8_t i = cmd->payloadStartIndex;
...@@ -43,10 +41,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -43,10 +41,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.air_condition.on_off) if(sDevice_attr_last.air_condition.on_off)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else else
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_OnOff_Attr(0,endpoint,&temp_data); // Write_OnOff_Attr(0,endpoint,&temp_data);
} }
...@@ -56,10 +54,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -56,10 +54,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.floor_heating.on_off) if(sDevice_attr_last.floor_heating.on_off)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else else
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false, invalidMaskEui64, RESET_ENDPOINT);
// Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); // Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); // kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
} }
...@@ -69,10 +67,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -69,10 +67,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.fan.on_off) if(sDevice_attr_last.fan.on_off)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else else
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false, invalidMaskEui64, RESET_ENDPOINT);
// Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); // Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); // kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
} }
...@@ -86,10 +84,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -86,10 +84,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.air_condition.on_off == 0) if(sDevice_attr_last.air_condition.on_off == 0)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else else
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false, invalidMaskEui64, RESET_ENDPOINT);
// Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); // Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); // kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
...@@ -101,10 +99,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -101,10 +99,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.floor_heating.on_off == 0) if(sDevice_attr_last.floor_heating.on_off == 0)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else else
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false, invalidMaskEui64, RESET_ENDPOINT);
// Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); // Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); // kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
} }
...@@ -114,10 +112,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -114,10 +112,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.fan.on_off == 0) if(sDevice_attr_last.fan.on_off == 0)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false , false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else else
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, true , false, true, false, invalidMaskEui64, RESET_ENDPOINT);
// Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); // Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); // kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
} }
...@@ -131,12 +129,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -131,12 +129,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
temp_data = 1; temp_data = 1;
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else{ else{
temp_data = 0; temp_data = 0;
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
} }
else if( endpoint == 2 ) else if( endpoint == 2 )
...@@ -145,12 +143,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -145,12 +143,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
temp_data = 1; temp_data = 1;
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else{ else{
temp_data = 0; temp_data = 0;
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
} }
else if( endpoint == 3 ) else if( endpoint == 3 )
...@@ -159,12 +157,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -159,12 +157,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
temp_data = 1; temp_data = 1;
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
else{ else{
temp_data = 0; temp_data = 0;
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
} }
} }
break; break;
...@@ -188,12 +186,22 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -188,12 +186,22 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("##### datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 5] ); iKonkeAfSelfPrint("##### datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 5] );
if((datavalue >= 1600)&&(datavalue <= 3000)) if((datavalue >= 1600)&&(datavalue <= 3000))
{ {
temp_16_t = datavalue /10; temp_16_t = datavalue /10;
Control_MCU(&g_sMsgNode,endpoint,CMD_TARGET_TEMPER,temp_16_t); //自动模式下不能调节目标温度
kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false); if( ((endpoint == 2)&&(sDevice_attr_last.floor_heating.system_type == 1))
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) ||((endpoint == 1)&&(sDevice_attr_last.air_condition.system_type == 7)) )
// Write_TargetTemp_Attr(0,endpoint,&datavalue); {
return false; emberAfSendImmediateDefaultResponse(EMBER_ZCL_STATUS_INVALID_VALUE);
return true;
}
else{
Control_MCU(&g_sMsgNode,endpoint,CMD_TARGET_TEMPER,temp_16_t);
kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_TargetTemp_Attr(0,endpoint,&datavalue);
return false;
}
} }
else else
{ {
...@@ -206,12 +214,16 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -206,12 +214,16 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
uint8_t datavalue = cmd->buffer[i + 3]; uint8_t datavalue = cmd->buffer[i + 3];
iKonkeAfSelfPrint("##### datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] ); iKonkeAfSelfPrint("##### datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if( (((datavalue == 3)||(datavalue == 4)||(datavalue == 7)||(datavalue == 8))&&(endpoint == 1)) || if( (((datavalue == 3)||(datavalue == 4)||(datavalue == 7)||(datavalue == 8))&&(endpoint == 1)&&(g_sDevice_Info.Device_subType == 0)) ||
(((datavalue == 1)||(datavalue == 2))&&(endpoint == 2))) (((datavalue == 1)||(datavalue == 2))&&(endpoint == 2)) ||
((endpoint == 1)&&(g_sDevice_Info.Device_subType == 1)&&((sDevice_attr_last.air_condition.operate_mode == 0 ) || (sDevice_attr_last.air_condition.operate_mode == 3))&&((datavalue == 3)||(datavalue == 4)||(datavalue == 7))) ||
((endpoint == 1)&&(g_sDevice_Info.Device_subType == 1)&&(sDevice_attr_last.air_condition.operate_mode == 1)&&((datavalue == 3)||(datavalue == 7))) || //风机盘管单冷模式
((endpoint == 1)&&(g_sDevice_Info.Device_subType == 1)&&(sDevice_attr_last.air_condition.operate_mode == 2)&&((datavalue == 4)||(datavalue == 7))) ///风机盘管单热模式
)
{ {
temp_data = datavalue; temp_data = datavalue;
Control_MCU(&g_sMsgNode,endpoint,CMD_SYSTEM,temp_data); Control_MCU(&g_sMsgNode,endpoint,CMD_SYSTEM,temp_data);
kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_SystemMode_Attr(0,endpoint,&datavalue); // Write_SystemMode_Attr(0,endpoint,&datavalue);
return false; return false;
...@@ -227,10 +239,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -227,10 +239,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
int8_t datavalue = cmd->buffer[i + 3]; int8_t datavalue = cmd->buffer[i + 3];
iKonkeAfSelfPrint("#####Calibration datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] ); iKonkeAfSelfPrint("#####Calibration datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if(((datavalue >= 0)&&(datavalue <= 0x5A))||((datavalue > -90)&&(datavalue <0))) if(((datavalue >= 0)&&(datavalue <= 0x5A))||((datavalue >= -90)&&(datavalue <0)))
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_CALI_TEMPER,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_CALI_TEMPER,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_CalibrationTemp_Attr(1,endpoint,&datavalue); // Write_CalibrationTemp_Attr(1,endpoint,&datavalue);
return false; return false;
...@@ -259,7 +271,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -259,7 +271,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if( ((datavalue > 0)&&(datavalue <4)) || (datavalue == 5)) if( ((datavalue > 0)&&(datavalue <4)) || (datavalue == 5))
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_WIND_SPEED,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_WIND_SPEED,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_FAN_CONTROL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_FAN_CONTROL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_FanSpeed_Attr(0,endpoint,&datavalue); // Write_FanSpeed_Attr(0,endpoint,&datavalue);
return false; return false;
...@@ -287,7 +299,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -287,7 +299,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if( datavalue >= 0) if( datavalue >= 0)
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_CHILD_LOCK,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_CHILD_LOCK,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_Child_Lock_Attr(1,endpoint,&datavalue); // Write_Child_Lock_Attr(1,endpoint,&datavalue);
return false; return false;
...@@ -308,7 +320,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -308,7 +320,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if( ( (datavalue == 2)||(datavalue == 10) )&&(endpoint == 3) ) if( ( (datavalue == 2)||(datavalue == 10) )&&(endpoint == 3) )
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_SYSTEM,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_SYSTEM,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
return false; return false;
} }
else else
...@@ -324,7 +336,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -324,7 +336,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####delay off, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] ); iKonkeAfSelfPrint("#####delay off, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if( (datavalue >= 0)&&(datavalue <= 240)){ if( (datavalue >= 0)&&(datavalue <= 240)){
Control_MCU(&g_sMsgNode,endpoint,CMD_DELAY_OFF,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_DELAY_OFF,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_Delay_off_Attr(1,endpoint,&datavalue); // Write_Delay_off_Attr(1,endpoint,&datavalue);
return false; return false;
...@@ -341,7 +353,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -341,7 +353,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####Swing_Mode, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] ); iKonkeAfSelfPrint("#####Swing_Mode, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if( (datavalue >= 0)&&(datavalue <3)){ if( (datavalue >= 0)&&(datavalue <3)){
Control_MCU(&g_sMsgNode,endpoint,CMD_WIND_DIRECT,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_WIND_DIRECT,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_Wind_Direct_Attr(1,endpoint,&datavalue); // Write_Wind_Direct_Attr(1,endpoint,&datavalue);
return false; return false;
...@@ -358,7 +370,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -358,7 +370,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####Screen_Saver_Time, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] ); iKonkeAfSelfPrint("#####Screen_Saver_Time, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if(datavalue <10){ if(datavalue <10){
Control_MCU(&g_sMsgNode,endpoint,CMD_SCREEN_SAVE,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_SCREEN_SAVE,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_Screen_Save_Time_Attr(1,endpoint,&datavalue); // Write_Screen_Save_Time_Attr(1,endpoint,&datavalue);
return false; return false;
...@@ -373,11 +385,11 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -373,11 +385,11 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{ {
int8_t datavalue = cmd->buffer[i + 3]; int8_t datavalue = cmd->buffer[i + 3];
iKonkeAfSelfPrint("#####Calibration datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] ); iKonkeAfSelfPrint("#####Calibration datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if( (((datavalue >= 0)&&(datavalue <= 0x5A))||((datavalue > -90)&&(datavalue <0))) if( (((datavalue >= 0)&&(datavalue <= 0x5A))||((datavalue >= -90)&&(datavalue <0)))
&&(g_sDevice_Info.Device_Type == Device_Type_Fan) ) &&(g_sDevice_Info.Device_Type == Device_Type_Fan) )
{ {
Control_MCU(&g_sMsgNode,endpoint,CMD_CALI_TEMPER,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_CALI_TEMPER,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_CalibrationTemp_Attr(1,endpoint,&datavalue); // Write_CalibrationTemp_Attr(1,endpoint,&datavalue);
return false; return false;
...@@ -395,7 +407,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd) ...@@ -395,7 +407,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####Screen_Saver_Time, datavalue (%d),%d \r\n",datavalue); iKonkeAfSelfPrint("#####Screen_Saver_Time, datavalue (%d),%d \r\n",datavalue);
if( (datavalue > 0)&&(datavalue <0xffff)){ if( (datavalue > 0)&&(datavalue <0xffff)){
Control_MCU(&g_sMsgNode,endpoint,CMD_FILTER_CLEAN,datavalue); Control_MCU(&g_sMsgNode,endpoint,CMD_FILTER_CLEAN,datavalue);
kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) // if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_Filter_Clean_Time_Attr(1,endpoint,(uint8_t *)&datavalue); // Write_Filter_Clean_Time_Attr(1,endpoint,(uint8_t *)&datavalue);
return false; return false;
...@@ -554,7 +566,7 @@ bool emberAfThermostatClusterSetpointRaiseLowerCallback(uint8_t mode, ...@@ -554,7 +566,7 @@ bool emberAfThermostatClusterSetpointRaiseLowerCallback(uint8_t mode,
uiCurrent_Target_Temper *= 10; uiCurrent_Target_Temper *= 10;
if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) //wait test if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS) //wait test
{ {
kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false); kZclClusterSetPermitReportInfo(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteServerAttribute(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID emberAfWriteServerAttribute(endpoint, ZCL_THERMOSTAT_CLUSTER_ID, ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID
,(uint8_t*)&uiCurrent_Target_Temper,ZCL_INT16S_ATTRIBUTE_TYPE); ,(uint8_t*)&uiCurrent_Target_Temper,ZCL_INT16S_ATTRIBUTE_TYPE);
iKonkeAfSelfPrint("####Set Temper Command Control Success !!\r\n"); iKonkeAfSelfPrint("####Set Temper Command Control Success !!\r\n");
...@@ -591,9 +603,9 @@ void emberAfFanControlClusterServerAttributeChangedCallback(uint8_t endpoint, ...@@ -591,9 +603,9 @@ void emberAfFanControlClusterServerAttributeChangedCallback(uint8_t endpoint,
EmberStatus Write_Attr(bool Report,uint8_t ep,uint16_t cluster,uint16_t attr, uint8_t* dataPtr,EmberAfAttributeType datatype) EmberStatus Write_Attr(bool Report,uint8_t ep,uint16_t cluster,uint16_t attr, uint8_t* dataPtr,EmberAfAttributeType datatype)
{ {
if(Report == 1) if(Report == 1)
kZclClusterSetPermitReportInfo(ep, cluster, true, false, true, false); kZclClusterSetPermitReportInfo(ep, cluster, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
else else
kZclClusterSetPermitReportInfo(ep, cluster, false, false, false, false); kZclClusterSetPermitReportInfo(ep, cluster, false, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
EmberStatus status=emberAfWriteServerAttribute(ep, cluster, attr ,(uint8_t*)dataPtr,datatype); EmberStatus status=emberAfWriteServerAttribute(ep, cluster, attr ,(uint8_t*)dataPtr,datatype);
return status; return status;
} }
...@@ -604,14 +616,88 @@ uint8_t Read_Zigbee_Version(void) ...@@ -604,14 +616,88 @@ uint8_t Read_Zigbee_Version(void)
(uint8_t *)&version, sizeof(version), NULL); (uint8_t *)&version, sizeof(version), NULL);
return version; return version;
} }
EmberEventControl ikkReportInfoCheckEventControl;
ZclReportControlSt sFilter_Report_Data = {0};
boolean Add_Filter_Report_To_Queue(ZclReportControlInfoSt *Report_info,uint64_t currentTime)
{
for(uint8_t i = 0;i <MAX_QUEUE_SIZE;i++)
{
if(!sFilter_Report_Data.index[i])
{
sFilter_Report_Data.index[i] = 1;
sFilter_Report_Data.add_data_begain_time[i] = currentTime;
iKonkeAfSelfPrint("####Add attribute success,attribute = (%02x),i = %d\r\n",Report_info->attribute,i);
emberEventControlSetDelayMS(ikkReportInfoCheckEventControl,10);
memcpy((ZclReportControlInfoSt*)&sFilter_Report_Data.sReport_Info[i],Report_info,sizeof(ZclReportControlInfoSt));
return true;
}
}
return false;
}
boolean Remove_Filter_Report_From_Queue(uint16_t attribute_id)
{
for(uint8_t i = 0;i <MAX_QUEUE_SIZE;i++)
{
if((sFilter_Report_Data.index[i])&&(attribute_id == sFilter_Report_Data.sReport_Info[i].attribute))
{
sFilter_Report_Data.index[i] = 0;
sFilter_Report_Data.add_data_begain_time[i] = 0;
memset(&sFilter_Report_Data.sReport_Info[i],0,sizeof(ZclReportControlInfoSt));
return true;
}
}
return false;
}
boolean IS_Resend_Report_Data(uint16_t attribute_id,ZclReportControlInfoSt *Report_info)
{
for(uint8_t i = 0;i <MAX_QUEUE_SIZE;i++)
{
iKonkeAfSelfPrint("####IS_Resend_Report_Data,i = (%d)\r\n",i);
if((sFilter_Report_Data.index[i])&&(attribute_id == sFilter_Report_Data.sReport_Info[i].attribute))
{
sFilter_Report_Data.index[i] = 0;
sFilter_Report_Data.add_data_begain_time[i] = 0;
memcpy(Report_info,(ZclReportControlInfoSt*)&sFilter_Report_Data.sReport_Info[i],sizeof(ZclReportControlInfoSt));
iKonkeAfSelfPrint("####find attribute,attribute = (%02x)\r\n",Report_info->attribute);
memset(&sFilter_Report_Data.sReport_Info[i],0,sizeof(ZclReportControlInfoSt));
return true;
}
}
return false;
}
//2s 超时,删除队列数据
void Check_Queue(void)
{
uint64_t currentTime = halCommonGetInt64uMillisecondTick();
for(uint8_t i = 0;i <MAX_QUEUE_SIZE;i++)
{
if( (sFilter_Report_Data.index[i])
&&((currentTime- sFilter_Report_Data.add_data_begain_time[i]) >=2*1000))
{
sFilter_Report_Data.index[i] = 0;
sFilter_Report_Data.add_data_begain_time[i] = 0;
memset(&sFilter_Report_Data.sReport_Info[i],0,sizeof(ZclReportControlInfoSt));
iKonkeAfSelfPrint("####Timeout ,Remove it !\r\n");
}
}
}
void ikkReportInfoCheckEventHandler(void)
{
emberEventControlSetInactive( ikkReportInfoCheckEventControl);
Check_Queue();
emberEventControlSetDelayMS(ikkReportInfoCheckEventControl,10);
}
kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd) kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
{ {
/*begin add by maozj 20191127 add get gateway EUI64*/ /*begin add by maozj 20191127 add get gateway EUI64*/
EmberNodeId sender = emberGetSender(); EmberNodeId sender = emberGetSender();
// Gateway Eui64 address cache. // Gateway Eui64 address cache.
EmberEUI64 senderEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberEUI64 eui64GatewayAddr = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; EmberEUI64 eui64GatewayAddr = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberEUI64 tmpEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; EmberEUI64 tmpEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberStatus status = emberGetSenderEui64(eui64GatewayAddr); EmberStatus status = emberGetSenderEui64(senderEui64);
uint8_t i = cmd->payloadStartIndex; uint8_t i = cmd->payloadStartIndex;
uint8_t dataValue = 0; uint8_t dataValue = 0;
uint16_t dataValue1 = 0; uint16_t dataValue1 = 0;
...@@ -619,6 +705,7 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd) ...@@ -619,6 +705,7 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
uint16_t attribute_id = U16MERG(cmd->buffer[i + 1], cmd->buffer[i + 0]); uint16_t attribute_id = U16MERG(cmd->buffer[i + 1], cmd->buffer[i + 0]);
uint8_t dataType = cmd->buffer[i + 2]; uint8_t dataType = cmd->buffer[i + 2];
uint8_t endpoint = cmd->apsFrame->destinationEndpoint; uint8_t endpoint = cmd->apsFrame->destinationEndpoint;
uint64_t currentTime = halCommonGetInt64uMillisecondTick();
/***********************************多控处理************************************************/ /***********************************多控处理************************************************/
if((!cmd->clusterSpecific) && (cmd->direction == (uint8_t)ZCL_DIRECTION_SERVER_TO_CLIENT) \ if((!cmd->clusterSpecific) && (cmd->direction == (uint8_t)ZCL_DIRECTION_SERVER_TO_CLIENT) \
&& (!cmd->mfgSpecific)) && (!cmd->mfgSpecific))
...@@ -658,18 +745,18 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd) ...@@ -658,18 +745,18 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
switch(attribute_id) switch(attribute_id)
{ {
case FCC0_ATTR_Error_Code: // case FCC0_ATTR_Error_Code:
{ // {
if(cmd->apsFrame->sourceEndpoint == 1) // if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.error = dataValue; // sDevice_attr_new.air_condition.error = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 2) // else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.error = dataValue; // sDevice_attr_new.floor_heating.error = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 3) // else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.error = dataValue; // sDevice_attr_new.fan.error = dataValue;
data_type = ZCL_INT8U_ATTRIBUTE_TYPE; // data_type = ZCL_INT8U_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ERROR_CODE,dataValue); // Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ERROR_CODE,dataValue);
} // }
break; // break;
case FCC0_ATTR_Child_Lock: case FCC0_ATTR_Child_Lock:
{ {
if(cmd->apsFrame->sourceEndpoint == 1) if(cmd->apsFrame->sourceEndpoint == 1)
...@@ -744,30 +831,30 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd) ...@@ -744,30 +831,30 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_TARGET_TEMPER,dataValue1/10); Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_TARGET_TEMPER,dataValue1/10);
} }
break; break;
case FCC0_ATTR_Current_Temperature: // case FCC0_ATTR_Current_Temperature:
{ // {
if(cmd->apsFrame->sourceEndpoint == 1) // if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.real_temperature = dataValue1; // sDevice_attr_new.air_condition.real_temperature = dataValue1;
else if(cmd->apsFrame->sourceEndpoint == 2) // else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.real_temperature = dataValue1; // sDevice_attr_new.floor_heating.real_temperature = dataValue1;
else if(cmd->apsFrame->sourceEndpoint == 3) // else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.real_temperature = dataValue1; // sDevice_attr_new.fan.real_temperature = dataValue1;
data_type = ZCL_INT16S_ATTRIBUTE_TYPE; // data_type = ZCL_INT16S_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CURRENT_TEMPER,dataValue1); // Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CURRENT_TEMPER,dataValue1);
} // }
break; // break;
case FCC0_ATTR_Calibration_Temperature: // case FCC0_ATTR_Calibration_Temperature:
{ // {
if(cmd->apsFrame->sourceEndpoint == 1) // if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.correct_temperature = dataValue; // sDevice_attr_new.air_condition.correct_temperature = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 2) // else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.correct_temperature = dataValue; // sDevice_attr_new.floor_heating.correct_temperature = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 3) // else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.correct_temperature = dataValue; // sDevice_attr_new.fan.correct_temperature = dataValue;
data_type = ZCL_INT8S_ATTRIBUTE_TYPE; // data_type = ZCL_INT8S_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CALI_TEMPER,dataValue); // Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CALI_TEMPER,dataValue);
} // }
break; // break;
case FCC0_ATTR_Fan_Mode: case FCC0_ATTR_Fan_Mode:
{ {
if(cmd->apsFrame->sourceEndpoint == 1) if(cmd->apsFrame->sourceEndpoint == 1)
...@@ -790,28 +877,30 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd) ...@@ -790,28 +877,30 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ON_OFF,dataValue); Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ON_OFF,dataValue);
} }
break; break;
case FCC0_ATTR_No_Disturb_Mode: // case FCC0_ATTR_No_Disturb_Mode:
{ // {
if(cmd->apsFrame->sourceEndpoint == 1) // if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.no_disturb_mode = dataValue; // sDevice_attr_new.air_condition.no_disturb_mode = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 2) // else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.no_disturb_mode = dataValue; // sDevice_attr_new.floor_heating.no_disturb_mode = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 3) // else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.no_disturb_mode = dataValue; // sDevice_attr_new.fan.no_disturb_mode = dataValue;
data_type = ZCL_BOOLEAN_ATTRIBUTE_TYPE; // data_type = ZCL_BOOLEAN_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_NO_DISTURB_MODE,dataValue); // Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_NO_DISTURB_MODE,dataValue);
} // }
break; // break;
default: default:
break; break;
} }
kZclClusterSetPermitReportInfo(cmd->apsFrame->sourceEndpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false); ZclReportControlInfoSt ZclReportFCC0Info;
if(emberAfGetDataSize(data_type) == 1) ZclReportFCC0Info.attribute = attribute_id;
emberAfWriteServerAttribute(cmd->apsFrame->sourceEndpoint,ZCL_OPT_TUNNEL_CLUSTER_ID,attribute_id, ZclReportFCC0Info.cluster = 0Xfcc0;
(uint8_t *)&dataValue,data_type); ZclReportFCC0Info.endpoint = cmd->apsFrame->destinationEndpoint;
else ZclReportFCC0Info.dest_endpoint = cmd->apsFrame->sourceEndpoint;
emberAfWriteServerAttribute(cmd->apsFrame->sourceEndpoint,ZCL_OPT_TUNNEL_CLUSTER_ID,attribute_id, ZclReportFCC0Info.isMultiContorl = true;
(uint8_t *)&dataValue1,data_type); MEMCOPY(ZclReportFCC0Info.maskEui64Addr, senderEui64, EUI64_SIZE);
iKonkeAfSelfPrint("####send EUI = %x-%x-%x-%x!!!!\r\n",senderEui64[0],senderEui64[1],senderEui64[2],senderEui64[3]);
Add_Filter_Report_To_Queue(&ZclReportFCC0Info,currentTime);
emberAfSendImmediateDefaultResponse(EMBER_ZCL_STATUS_SUCCESS); emberAfSendImmediateDefaultResponse(EMBER_ZCL_STATUS_SUCCESS);
return KET_OK; return KET_OK;
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "app/framework/include/af.h" #include "app/framework/include/af.h"
#include "././00ikonke-app/general/ikk-debug.h" #include "././00ikonke-app/general/ikk-debug.h"
#include "./general/ikk-module-def.h" #include "./general/ikk-module-def.h"
#include <00ikonke-app/general/ikk-cluster.h>
#define BUILD_UINT16(lowByte, highByte) \ #define BUILD_UINT16(lowByte, highByte) \
((uint16_t)(((lowByte) & 0x00FF) + (((highByte) & 0x00FF) << 8))) ((uint16_t)(((lowByte) & 0x00FF) + (((highByte) & 0x00FF) << 8)))
...@@ -23,7 +24,7 @@ ...@@ -23,7 +24,7 @@
#define FCC0_ATTR_Fan_Mode 0X100A #define FCC0_ATTR_Fan_Mode 0X100A
#define FCC0_ATTR_ON_OFF 0X100B #define FCC0_ATTR_ON_OFF 0X100B
#define FCC0_ATTR_No_Disturb_Mode 0X100C #define FCC0_ATTR_No_Disturb_Mode 0X100C
#define FCC0_ATTR_No_Run_Mode 0X100D
...@@ -31,6 +32,9 @@ ...@@ -31,6 +32,9 @@
#define Device_Type_Floor_Heating 2 #define Device_Type_Floor_Heating 2
#define Device_Type_Fan 3 #define Device_Type_Fan 3
#define MAX_QUEUE_SIZE 15
static uint8_t invalidMaskEui64[8] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberStatus Write_Attr(bool Report,uint8_t ep,uint16_t cluster,uint16_t attr, uint8_t* dataPtr,EmberAfAttributeType datatype); EmberStatus Write_Attr(bool Report,uint8_t ep,uint16_t cluster,uint16_t attr, uint8_t* dataPtr,EmberAfAttributeType datatype);
...@@ -67,11 +71,21 @@ typedef struct ...@@ -67,11 +71,21 @@ typedef struct
uint8_t mcu_hardware_version; uint8_t mcu_hardware_version;
}DEVICVE_INFO_ST; }DEVICVE_INFO_ST;
typedef struct {
ZclReportControlInfoSt sReport_Info[MAX_QUEUE_SIZE];
uint8_t index[MAX_QUEUE_SIZE] ;
uint64_t add_data_begain_time[MAX_QUEUE_SIZE];
}ZclReportControlSt;
extern DEVICVE_INFO_ST g_sDevice_Info; extern DEVICVE_INFO_ST g_sDevice_Info;
uint8_t Read_Zigbee_Version(void); uint8_t Read_Zigbee_Version(void);
kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd); kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd);
void kGetBindConfigInfo(void); void kGetBindConfigInfo(void);
void Reset_Binding_Token(void); void Reset_Binding_Token(void);
void Check_Queue(void);
boolean IS_Resend_Report_Data(uint16_t attribute_id,ZclReportControlInfoSt *Report_info);
/**********************common interface*******************************/ /**********************common interface*******************************/
uint8_t Get_Device_Endpoint(void); uint8_t Get_Device_Endpoint(void);
uint8_t Get_Binding_Device_EP(void); uint8_t Get_Binding_Device_EP(void);
......
...@@ -262,12 +262,12 @@ void ikkUartRecvLoopCheck(UMsgNodeSt *pNode, int waitto_ms ) ...@@ -262,12 +262,12 @@ void ikkUartRecvLoopCheck(UMsgNodeSt *pNode, int waitto_ms )
{ {
if( emberSerialReadAvailable(g_uManagerInsc.port)) { if( emberSerialReadAvailable(g_uManagerInsc.port)) {
while(emberSerialReadByte(g_uManagerInsc.port, &data) == EMBER_SUCCESS ) { while(emberSerialReadByte(g_uManagerInsc.port, &data) == EMBER_SUCCESS ) {
iKonkeAfSelfPrint(">>>>>>1111Recv Data %x\r\n", data); // iKonkeAfSelfPrint(">>>>>>1111Recv Data %x\r\n", data);
currentTime = halCommonGetInt64uMillisecondTick(); currentTime = halCommonGetInt64uMillisecondTick();
//add by maozj 20200602 //add by maozj 20200602
//When the data header is detected, fix the problem that the data is too long to verify successfully //When the data header is detected, fix the problem that the data is too long to verify successfully
if (currentTime - lastTime >= UART_MAX_RECV_INTERVAL_TIMEOUT){ if (currentTime - lastTime >= UART_MAX_RECV_INTERVAL_TIMEOUT){
iKonkeAfSelfPrint(">>>>>>>>>>1111New data package\r\n"); // iKonkeAfSelfPrint(">>>>>>>>>>1111New data package\r\n");
recving = false; recving = false;
} }
lastTime = currentTime; lastTime = currentTime;
......
...@@ -161,28 +161,22 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd ) ...@@ -161,28 +161,22 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
/*begin add by maozj 20191127 add get gateway EUI64*/ /*begin add by maozj 20191127 add get gateway EUI64*/
EmberNodeId sender = emberGetSender(); EmberNodeId sender = emberGetSender();
// Gateway Eui64 address cache. // Gateway Eui64 address cache.
EmberEUI64 eui64GatewayAddr = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; EmberEUI64 senderEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberEUI64 tmpEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; EmberEUI64 invalidEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberStatus status = emberGetSenderEui64(eui64GatewayAddr); EmberStatus status = emberGetSenderEui64(senderEui64);
// iKonkeAfSelfPrint("Get EUI64 PreCommand: status(0x%x)%X%X%X%X%X%X%X%X\r\n",status, eui64GatewayAddr[7], eui64GatewayAddr[6] iKonkeAfSelfPrint("####emberAfPreCommandReceivedCallback,dir(%d),mfgSpe(%d),id(%d),cluSpe(%d),####\r\n", cmd->direction, cmd->mfgSpecific, cmd->apsFrame->clusterId, cmd->clusterSpecific);
// , eui64GatewayAddr[5], eui64GatewayAddr[4], eui64GatewayAddr[3], eui64GatewayAddr[2]
// , eui64GatewayAddr[1], eui64GatewayAddr[0]);
//source is gateway //source is gateway
if (sender == 0x0000){ if (sender == 0x0000){
kNwkGetGateWayEui64(eui64GatewayAddr); kNwkGetGateWayEui64(senderEui64);
//iKonkeAfSelfPrint("----xxx getEui64FromFlash %x%x%x%x%x%x%x%x --",g_Eui64GatewayAddr[7], g_Eui64GatewayAddr[6], \
// g_Eui64GatewayAddr[5], g_Eui64GatewayAddr[4], g_Eui64GatewayAddr[3], g_Eui64GatewayAddr[2], g_Eui64GatewayAddr[1],g_Eui64GatewayAddr[0]); if(MEMCOMPARE(senderEui64, invalidEui64, EUI64_SIZE)){
if(MEMCOMPARE(eui64GatewayAddr, tmpEui64, EUI64_SIZE)){
// iKonkeAfSelfPrint("Get EUI64 PreCommand is existed\r\n"); // iKonkeAfSelfPrint("Get EUI64 PreCommand is existed\r\n");
}else { }else {
EmberStatus status = emberGetSenderEui64(eui64GatewayAddr); EmberStatus status = emberGetSenderEui64(senderEui64);
if (status == EMBER_SUCCESS){ if (status == EMBER_SUCCESS){
if(kUtilsIsValidEui64Addr(eui64GatewayAddr)) { if(kUtilsIsValidEui64Addr(senderEui64)) {
kNwkSetGateWayEui64(eui64GatewayAddr); kNwkSetGateWayEui64(senderEui64);
iKonkeAfSelfPrint("Get EUI64 PreCommand: %X%X%X%X%X%X%X%X\r\n", eui64GatewayAddr[7], eui64GatewayAddr[6]
, eui64GatewayAddr[5], eui64GatewayAddr[4], eui64GatewayAddr[3], eui64GatewayAddr[2]
, eui64GatewayAddr[1], eui64GatewayAddr[0]);
} }
}else { }else {
iKonkeAfSelfPrint("Get EUI64 failed\r\n"); iKonkeAfSelfPrint("Get EUI64 failed\r\n");
...@@ -336,6 +330,7 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd ) ...@@ -336,6 +330,7 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
case (ZCL_ON_OFF_CLUSTER_ID): case (ZCL_ON_OFF_CLUSTER_ID):
{ {
ZclOnOffControlInfoSt ZclOnOffControlInfo;
if( (cmd->clusterSpecific) && (cmd->direction == (uint8_t)ZCL_DIRECTION_CLIENT_TO_SERVER) && if( (cmd->clusterSpecific) && (cmd->direction == (uint8_t)ZCL_DIRECTION_CLIENT_TO_SERVER) &&
(!cmd->mfgSpecific)) { (!cmd->mfgSpecific)) {
switch(cmd->commandId) { switch(cmd->commandId) {
...@@ -345,7 +340,13 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd ) ...@@ -345,7 +340,13 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
{ {
//add by maozj 20191224 //add by maozj 20191224
if (g_pfSceneClusterRecallCallback){ if (g_pfSceneClusterRecallCallback){
g_pfSceneClusterRecallCallback(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->commandId, true, false, true, true, NULL);//restore immediately report //KKK
ZclOnOffControlInfo.isMultiContorl = false;
ZclOnOffControlInfo.onOffValue = cmd->commandId;
ZclOnOffControlInfo.endpoint = cmd->apsFrame->destinationEndpoint;
ZclOnOffControlInfo.dest_endpoint = RESET_ENDPOINT;
MEMCOPY(ZclOnOffControlInfo.maskEui64Addr, invalidEui64, EUI64_SIZE);
g_pfSceneClusterRecallCallback(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->commandId, true, false, true, true, (ZclOnOffControlInfoSt*)&ZclOnOffControlInfo);//restore immediately report
} }
break; break;
...@@ -398,17 +399,22 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd ) ...@@ -398,17 +399,22 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
{ {
case 0x00: case 0x00:
case 0x01: case 0x01:
{
emberAfWriteServerAttribute(cmd->apsFrame->destinationEndpoint,
ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_OFF_ATTRIBUTE_ID,
(uint8_t *)&onOffValue,
ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
break;
case 0x02: case 0x02:
{
// emberAfWriteServerAttribute(cmd->apsFrame->destinationEndpoint,
// ZCL_ON_OFF_CLUSTER_ID,
// ZCL_ON_OFF_ATTRIBUTE_ID,
// (uint8_t *)&onOffValue,
// ZCL_BOOLEAN_ATTRIBUTE_TYPE);
//KKK 记录当前 rcv ieee
ZclOnOffControlInfo.endpoint = cmd->apsFrame->destinationEndpoint;
ZclOnOffControlInfo.dest_endpoint = cmd->apsFrame->sourceEndpoint;
ZclOnOffControlInfo.isMultiContorl = true;
ZclOnOffControlInfo.onOffValue = onOffValue;
MEMCOPY(ZclOnOffControlInfo.maskEui64Addr, senderEui64, EUI64_SIZE);
g_pfSceneClusterRecallCallback(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, onOffValue, true, false, true, true, (ZclOnOffControlInfoSt*)&ZclOnOffControlInfo);//restore immediately report
break; break;
}
default: default:
break; break;
} }
...@@ -1480,13 +1486,16 @@ bool kZclClusterGetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, ...@@ -1480,13 +1486,16 @@ bool kZclClusterGetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster,
zclReportPermit->sceneRecallFlg = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg; zclReportPermit->sceneRecallFlg = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg;
zclReportPermit->reportGatewayEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable; zclReportPermit->reportGatewayEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable;
zclReportPermit->reportChildDeviceEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable; zclReportPermit->reportChildDeviceEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable;
//KKK
MEMCOPY(zclReportPermit->maskEui64Addr, g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, EUI64_SIZE);
zclReportPermit->dest_endpoint = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].dest_endpoint;
return true; return true;
} }
return false; return false;
} }
//permit info set //permit info set
bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable) bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable, uint8_t *maskEui64Addr,uint8_t dest_endpoint)
{ {
bool ret = false; bool ret = false;
...@@ -1503,6 +1512,12 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, ...@@ -1503,6 +1512,12 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster,
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable = reportChildDeviceEnable; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable = reportChildDeviceEnable;
if (maskEui64Addr != NULL){
MEMCOPY(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, maskEui64Addr, EUI64_SIZE);
} else {
MEMSET(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, 0xFF, EUI64_SIZE);
}
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].dest_endpoint = dest_endpoint;
ret = true; ret = true;
} }
}else { //广播 }else { //广播
...@@ -1514,6 +1529,12 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, ...@@ -1514,6 +1529,12 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster,
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable = reportChildDeviceEnable; g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportChildDeviceEnable = reportChildDeviceEnable;
if (maskEui64Addr != NULL){
MEMCOPY(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, maskEui64Addr, EUI64_SIZE);
} else {
MEMSET(g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].maskEui64Addr, 0xFF, EUI64_SIZE);
}
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].dest_endpoint = dest_endpoint;
ret = true; ret = true;
} }
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "kkAllInOneFloorHeatingMG21SDK665V1.h" #include "kkAllInOneFloorHeatingMG21SDK665V1.h"
#define DEFAULT_TRANSITION_TIME_S (3) #define DEFAULT_TRANSITION_TIME_S (3)
#define RESET_ENDPOINT 0xFE
// sleepy device poll procedule control manager // sleepy device poll procedule control manager
typedef struct tag_poll_control_manager { typedef struct tag_poll_control_manager {
...@@ -27,6 +28,9 @@ typedef struct tag_zcl_report_table{ ...@@ -27,6 +28,9 @@ typedef struct tag_zcl_report_table{
bool sceneRecallFlg; bool sceneRecallFlg;
bool reportGatewayEnable; bool reportGatewayEnable;
bool reportChildDeviceEnable; bool reportChildDeviceEnable;
EmberEUI64 maskEui64Addr;
uint8_t dest_endpoint;
}ZclReportTableSt; }ZclReportTableSt;
typedef struct { typedef struct {
...@@ -37,7 +41,16 @@ typedef struct { ...@@ -37,7 +41,16 @@ typedef struct {
bool isMultiContorl; //whether multi-control, used to judge whether send response or multi-control bool isMultiContorl; //whether multi-control, used to judge whether send response or multi-control
bool isSendResponse; bool isSendResponse;
}ZclLevelControlInfoSt; }ZclLevelControlInfoSt;
typedef struct {
uint8_t endpoint;
uint8_t onOffValue;
uint16_t cluster;
uint16_t attribute;
bool isMultiContorl; //whether multi-control, used to judge whether send response or multi-control
bool isSendResponse;
EmberEUI64 maskEui64Addr;
uint8_t dest_endpoint;
}ZclReportControlInfoSt;
typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum; typedef enum{ EOOC_OFF = 0, EOOC_ON, EOOC_TOGGLE, EOOC_UNKNOW }OnOffCtrlEnum;
typedef enum{ EOOS_OFF = 0, EOOS_ON, EOOS_UNKNOW }OnOffStatusEnum; typedef enum{ EOOS_OFF = 0, EOOS_ON, EOOS_UNKNOW }OnOffStatusEnum;
...@@ -146,8 +159,7 @@ void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size) ...@@ -146,8 +159,7 @@ void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size)
bool kZclClusterGetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, ZclReportTableSt *zclReportPermit); bool kZclClusterGetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, ZclReportTableSt *zclReportPermit);
bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, bool reportEnable, bool sceneRecallFlg bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable, uint8_t *maskEui64Addr,uint8_t dest_endpoint);
, bool reportGatewayEnable, bool reportChildDeviceEnable);
#if 0 #if 0
/* DESP: Send different data separately according to whether or not to bind multiple controllers /* DESP: Send different data separately according to whether or not to bind multiple controllers
* Auth: maozj.20200511. * Auth: maozj.20200511.
......
...@@ -25,6 +25,7 @@ uint8_t g_tmp_buffer[OPTTUNNEL_CHUNK_MAXLEN+1] = { 0 }, g_tmp_length = 0; ...@@ -25,6 +25,7 @@ uint8_t g_tmp_buffer[OPTTUNNEL_CHUNK_MAXLEN+1] = { 0 }, g_tmp_length = 0;
EmberEventControl kOptTunnelMtoRRDelayRspEventControl; EmberEventControl kOptTunnelMtoRRDelayRspEventControl;
static uint8_t ucReceived_Many_To_One_Cmd = 0;
EmberAfStatus emAfReadOrWriteAttribute(EmberAfAttributeSearchRecord *attRecord, EmberAfStatus emAfReadOrWriteAttribute(EmberAfAttributeSearchRecord *attRecord,
EmberAfAttributeMetadata **metadata, EmberAfAttributeMetadata **metadata,
uint8_t *buffer, uint8_t *buffer,
...@@ -358,7 +359,11 @@ void kOptTunnelMtoRRDelayRspEventHandler(void ) ...@@ -358,7 +359,11 @@ void kOptTunnelMtoRRDelayRspEventHandler(void )
emberEventControlSetInactive(kOptTunnelMtoRRDelayRspEventControl); emberEventControlSetInactive(kOptTunnelMtoRRDelayRspEventControl);
iKonkeAfSelfPrint("####### MtoO report time(%llu)\r\n", halCommonGetInt64uMillisecondTick()); iKonkeAfSelfPrint("####### MtoO report time(%llu)\r\n", halCommonGetInt64uMillisecondTick());
//Prevent interference when reading CMEI Or ISN Or installation code, resulting in error report //Prevent interference when reading CMEI Or ISN Or installation code, resulting in error report
kOptTunnelCommonReport(ECA_OPTDATA); if(ucReceived_Many_To_One_Cmd == 1)
{
ucReceived_Many_To_One_Cmd = 0;
kOptTunnelCommonReport(ECA_OPTDATA);
}
emberEventControlSetInactive(kOptTunnelMtoRRDelayRspEventControl); emberEventControlSetInactive(kOptTunnelMtoRRDelayRspEventControl);
} }
...@@ -372,6 +377,7 @@ void kOptTunnelMessageResponse(OptMethodEm method, uint16_t attribute_id, EmberA ...@@ -372,6 +377,7 @@ void kOptTunnelMessageResponse(OptMethodEm method, uint16_t attribute_id, EmberA
// command ack. // command ack.
iKonkeAfSelfPrint("kOptTunnelMessageResponse ->>1 method(%d), attr(%2x), status(%d) length(%d) rspLenth(%d)\r\n",\ iKonkeAfSelfPrint("kOptTunnelMessageResponse ->>1 method(%d), attr(%2x), status(%d) length(%d) rspLenth(%d)\r\n",\
method, attribute_id, status, length, appResponseLength); method, attribute_id, status, length, appResponseLength);
if( method == EOM_READ ) { if( method == EOM_READ ) {
emberAfPutInt8uInResp(ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID ); emberAfPutInt8uInResp(ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID );
}else { }else {
...@@ -466,6 +472,7 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method, uint16_t attribute_id, ui ...@@ -466,6 +472,7 @@ kk_err_t kOptTunnelMessageIncoming(OptMethodEm method, uint16_t attribute_id, ui
//kOptTunnelAttrChunkLocalWrite(attribute_id, (uint8_t *)&rand_value, sizeof(uint16_t)); //kOptTunnelAttrChunkLocalWrite(attribute_id, (uint8_t *)&rand_value, sizeof(uint16_t));
emberEventControlSetDelayMS(kOptTunnelMtoRRDelayRspEventControl, rand_value); emberEventControlSetDelayMS(kOptTunnelMtoRRDelayRspEventControl, rand_value);
ucReceived_Many_To_One_Cmd = 1;
iKonkeAfSelfPrint("$$$$$$$$$$$$$ RSP-RANDOM: pay(%d, %d), %d\r\n", payload[0], payload[1], rand_value); iKonkeAfSelfPrint("$$$$$$$$$$$$$ RSP-RANDOM: pay(%d, %d), %d\r\n", payload[0], payload[1], rand_value);
break; break;
} }
......
...@@ -7,7 +7,6 @@ Release Notes: ...@@ -7,7 +7,6 @@ Release Notes:
SV1.0 20200927 SV1.0 20200927
1.初始版本 1.初始版本
* ******/ * ******/
#define HEART_DEBUG false #define HEART_DEBUG false
...@@ -20,7 +19,6 @@ uint8_t runStatus = RUN_STATUS_NORMAL ; ...@@ -20,7 +19,6 @@ uint8_t runStatus = RUN_STATUS_NORMAL ;
static uint8_t g_u8MessageSeqRecord = 0XFF; static uint8_t g_u8MessageSeqRecord = 0XFF;
//delay to report cmei and isn after network joined //delay to report cmei and isn after network joined
#define DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS (3 * 1000) #define DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS (3 * 1000)
...@@ -75,6 +73,7 @@ static uint8_t g_u8MessageSeqRecord = 0XFF; ...@@ -75,6 +73,7 @@ static uint8_t g_u8MessageSeqRecord = 0XFF;
typedef enum {SCENES1=0xF1,SCENES2=0xF2,SCENES3=0xF3,SCENES4=0xF4}SCENES_STATUS; //modify by zbw@200511 typedef enum {SCENES1=0xF1,SCENES2=0xF2,SCENES3=0xF3,SCENES4=0xF4}SCENES_STATUS; //modify by zbw@200511
typedef enum {KEY_SYS_ID=1,KEY1_ID, KEY2_ID, KEY3_ID, KEY4_ID,KEY5_ID,KEY6_ID}KEY_ID_ENUM; typedef enum {KEY_SYS_ID=1,KEY1_ID, KEY2_ID, KEY3_ID, KEY4_ID,KEY5_ID,KEY6_ID}KEY_ID_ENUM;
typedef enum {LED_SYS_ID=1,LED1_ID, LED2_ID, LED3_ID, LED4_ID, LED5_ID, LED6_ID}LED_ID_ENUM; typedef enum {LED_SYS_ID=1,LED1_ID, LED2_ID, LED3_ID, LED4_ID, LED5_ID, LED6_ID}LED_ID_ENUM;
typedef enum {RELAY_CHANNEL1_ID=1,RELAY_CHANNEL2_ID, RELAY_CHANNEL3_ID, RELAY_CHANNEL4_ID}RELAY_ID_ENUM; typedef enum {RELAY_CHANNEL1_ID=1,RELAY_CHANNEL2_ID, RELAY_CHANNEL3_ID, RELAY_CHANNEL4_ID}RELAY_ID_ENUM;
...@@ -134,8 +133,9 @@ SensorStatusSt g_stSensorStatusBuffer = { ...@@ -134,8 +133,9 @@ SensorStatusSt g_stSensorStatusBuffer = {
.status = 0x0, .status = 0x0,
}; };
extern uint8_t generatedDefaults[]; extern uint8_t generatedDefaults[];
#define Software_Version 0x14 #define Software_Version 0x20
#define Hardware_Version 0x10 #define Hardware_Version 0x10
#define MODEID_AIR_MEIDI 0x03008611 //美的线控器 #define MODEID_AIR_MEIDI 0x03008611 //美的线控器
...@@ -538,7 +538,7 @@ void kUserScheduleTaskHandlerCallback(uint8_t schedule_id ) ...@@ -538,7 +538,7 @@ void kUserScheduleTaskHandlerCallback(uint8_t schedule_id )
kOptTunnelCommonReport(ECA_OPTDATA); kOptTunnelCommonReport(ECA_OPTDATA);
} }
else if(!kIsKonkeRemoteGateway()) { else if(!kIsKonkeRemoteGateway()) {
kZclClusterSetPermitReportInfo(1, ZCL_ON_OFF_CLUSTER_ID, false, false, true, false); kZclClusterSetPermitReportInfo(1, ZCL_ON_OFF_CLUSTER_ID, false, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
//add by maozj 20200512 report on off status //add by maozj 20200512 report on off status
if (g_bIsNotKonkeGatewayFirstReportedFlg \ if (g_bIsNotKonkeGatewayFirstReportedFlg \
...@@ -594,33 +594,36 @@ EmberAfStatus emberAfPreAttributeChangeCallback(int8u endpoint, ...@@ -594,33 +594,36 @@ EmberAfStatus emberAfPreAttributeChangeCallback(int8u endpoint,
int8u size, int8u size,
int8u* value) int8u* value)
{ {
if(Recall_scence_flag == 0 )
return EMBER_ZCL_STATUS_SUCCESS;
switch(clusterId) switch(clusterId)
{ {
case ZCL_ON_OFF_CLUSTER_ID: case ZCL_ON_OFF_CLUSTER_ID:
{ {
if(Recall_scence_flag == 0 )
return EMBER_ZCL_STATUS_SUCCESS;
uint8_t on_off = value[0]; uint8_t on_off = value[0];
kZclClusterSetPermitReportInfo(endpoint,ZCL_ON_OFF_CLUSTER_ID, false, true, false, false); kZclClusterSetPermitReportInfo(endpoint,ZCL_ON_OFF_CLUSTER_ID, false, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
if( ((endpoint == 1)&&(sDevice_attr_last.air_condition.on_off !=on_off )) if( ((endpoint == 1)&&(sDevice_attr_last.air_condition.on_off !=on_off ))
||( (endpoint == 2)&&(sDevice_attr_last.floor_heating.on_off !=on_off )) ||( (endpoint == 2)&&(sDevice_attr_last.floor_heating.on_off !=on_off ))
||((endpoint == 3)&&(sDevice_attr_last.fan.on_off !=on_off )) ) ||((endpoint == 3)&&(sDevice_attr_last.fan.on_off !=on_off )) )
{ {
kZclClusterSetPermitReportInfo(endpoint,ZCL_ON_OFF_CLUSTER_ID, false, true, false, false); kZclClusterSetPermitReportInfo(endpoint,ZCL_ON_OFF_CLUSTER_ID, false, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,on_off); Control_MCU(&g_sMsgNode,endpoint,CMD_ON_OFF,on_off);
} }
} }
break; break;
case ZCL_THERMOSTAT_CLUSTER_ID: case ZCL_THERMOSTAT_CLUSTER_ID:
{ {
if(Recall_scence_flag == 0 )
return EMBER_ZCL_STATUS_SUCCESS;
if(attributeId == ZCL_SYSTEM_MODE_ATTRIBUTE_ID) if(attributeId == ZCL_SYSTEM_MODE_ATTRIBUTE_ID)
{ {
uint8_t system = value[0]; uint8_t system = value[0];
if( ((system !=sDevice_attr_last.air_condition.system_type)&&(g_sDevice_Info.Device_Type == Device_Type_Air_Condition)) || if( ((system !=sDevice_attr_last.air_condition.system_type)&&(g_sDevice_Info.Device_Type == Device_Type_Air_Condition)) ||
((system !=sDevice_attr_last.floor_heating.system_type)&&(g_sDevice_Info.Device_Type == Device_Type_Floor_Heating)) ) ((system !=sDevice_attr_last.floor_heating.system_type)&&(g_sDevice_Info.Device_Type == Device_Type_Floor_Heating)) )
{ {
kZclClusterSetPermitReportInfo(endpoint,ZCL_THERMOSTAT_CLUSTER_ID, false, true, false, false); kZclClusterSetPermitReportInfo(endpoint,ZCL_THERMOSTAT_CLUSTER_ID, false, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
Control_MCU(&g_sMsgNode,endpoint,CMD_SYSTEM,system); Control_MCU(&g_sMsgNode,endpoint,CMD_SYSTEM,system);
} }
} }
...@@ -633,17 +636,34 @@ EmberAfStatus emberAfPreAttributeChangeCallback(int8u endpoint, ...@@ -633,17 +636,34 @@ EmberAfStatus emberAfPreAttributeChangeCallback(int8u endpoint,
if( ((Target_Temper !=sDevice_attr_last.air_condition.set_temperature)&&(g_sDevice_Info.Device_Type == Device_Type_Air_Condition)) || if( ((Target_Temper !=sDevice_attr_last.air_condition.set_temperature)&&(g_sDevice_Info.Device_Type == Device_Type_Air_Condition)) ||
((Target_Temper !=sDevice_attr_last.floor_heating.set_temperature)&&(g_sDevice_Info.Device_Type == Device_Type_Floor_Heating)) ) ((Target_Temper !=sDevice_attr_last.floor_heating.set_temperature)&&(g_sDevice_Info.Device_Type == Device_Type_Floor_Heating)) )
{ {
kZclClusterSetPermitReportInfo(endpoint,ZCL_THERMOSTAT_CLUSTER_ID, false, true, false, false); kZclClusterSetPermitReportInfo(endpoint,ZCL_THERMOSTAT_CLUSTER_ID, false, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
Control_MCU(&g_sMsgNode,endpoint,CMD_TARGET_TEMPER,Target_Temper); Control_MCU(&g_sMsgNode,endpoint,CMD_TARGET_TEMPER,Target_Temper);
} }
} }
} }
} }
break; break;
case ZCL_OPT_TUNNEL_CLUSTER_ID:
{
ZclReportControlInfoSt Report_info;
iKonkeAfSelfPrint("####emberAfPreAttributeChangeCallback ,attribute id= 0x%2x\r\n",attributeId);
if(IS_Resend_Report_Data(attributeId,&Report_info))
{
//如果是回传的reprot,只响应,不再发起多控
iKonkeAfSelfPrint("####Reset Mode,111111111111111111111\r\n");
if( (attributeId == FCC0_ATTR_Child_Lock)||(attributeId ==FCC0_ATTR_Delay_Off)
||(attributeId == FCC0_ATTR_Screen_Saver_Time)||(attributeId == FCC0_ATTR_Filter_Clean_Time)||((endpoint == 3)&&(attributeId == FCC0_ATTR_System_Mode)))
kZclClusterSetPermitReportInfo(endpoint,ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, Report_info.maskEui64Addr, Report_info.dest_endpoint);
else
kZclClusterSetPermitReportInfo(endpoint,ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
}
break;
}
default: default:
break; break;
} }
iKonkeAfSelfPrint("####emberAfPostAttributeChangeCallback ep = %d,cluster =%2x,attr = %2x\r\n",endpoint,clusterId,attributeId); //iKonkeAfSelfPrint("####emberAfPostAttributeChangeCallback ep = %d,cluster =%2x,attr = %2x\r\n",endpoint,clusterId,attributeId);
emberEventControlSetDelayMS(kDelayClearFlagEventControl, 700); emberEventControlSetDelayMS(kDelayClearFlagEventControl, 700);
return EMBER_ZCL_STATUS_SUCCESS; return EMBER_ZCL_STATUS_SUCCESS;
...@@ -660,7 +680,7 @@ void kDelayClearFlagEventHandler(void) ...@@ -660,7 +680,7 @@ void kDelayClearFlagEventHandler(void)
void kZclClusterRecallSceneCallback(uint8_t endpoint, uint16_t cluster, uint8_t command_id void kZclClusterRecallSceneCallback(uint8_t endpoint, uint16_t cluster, uint8_t command_id
, bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable, void *param) , bool reportEnable, bool sceneRecallFlg, bool reportGatewayEnable, bool reportChildDeviceEnable, void *param)
{ {
kZclClusterSetPermitReportInfo(endpoint,cluster, reportEnable, sceneRecallFlg, reportGatewayEnable, reportChildDeviceEnable); kZclClusterSetPermitReportInfo(endpoint,cluster, reportEnable, sceneRecallFlg, reportGatewayEnable, reportChildDeviceEnable, invalidMaskEui64, RESET_ENDPOINT);
iKonkeAfSelfPrint("####kZclClusterRecallSceneCallback\r\n"); iKonkeAfSelfPrint("####kZclClusterRecallSceneCallback\r\n");
if(cluster == ZCL_SCENES_CLUSTER_ID) if(cluster == ZCL_SCENES_CLUSTER_ID)
{ {
...@@ -684,7 +704,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI ...@@ -684,7 +704,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI
if(*difference == 0) if(*difference == 0)
{ {
//上报数据,恢复正常状态 //上报数据,恢复正常状态
kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false); kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
iKonkeAfSelfPrint("######kZclClusterReportChangeCallback attribute is not changed\r\n"); iKonkeAfSelfPrint("######kZclClusterReportChangeCallback attribute is not changed\r\n");
return false; return false;
} }
...@@ -735,7 +755,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI ...@@ -735,7 +755,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI
// //kOptTunnelReportingPlagiarizeOriginal(endpoint, clusterId, attributeId, CLUSTER_MASK_SERVER); // //kOptTunnelReportingPlagiarizeOriginal(endpoint, clusterId, attributeId, CLUSTER_MASK_SERVER);
// return false; // return false;
// } // }
//kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false); //kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
return true; return true;
} }
} }
...@@ -747,13 +767,13 @@ void kOnOffDelayReportAttrEventHandler(void) ...@@ -747,13 +767,13 @@ void kOnOffDelayReportAttrEventHandler(void)
{ {
iKonkeAfSelfPrint("##############kOnOffDelayReportAttrEventHandler\r\n"); iKonkeAfSelfPrint("##############kOnOffDelayReportAttrEventHandler\r\n");
emberEventControlSetInactive( kOnOffDelayReportAttrEventControl); emberEventControlSetInactive( kOnOffDelayReportAttrEventControl);
kZclClusterSetPermitReportInfo(g_sDevice_Info.Device_Type, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(g_sDevice_Info.Device_Type, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kOptTunnelReportingPlagiarizeOriginal(g_sDevice_Info.Device_Type, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, CLUSTER_MASK_SERVER); kOptTunnelReportingPlagiarizeOriginal(g_sDevice_Info.Device_Type, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, CLUSTER_MASK_SERVER);
} }
void kSystemModeDelayReportAttrEventHandler(void) void kSystemModeDelayReportAttrEventHandler(void)
{ {
emberEventControlSetInactive( kSystemModeDelayReportAttrEventControl); emberEventControlSetInactive( kSystemModeDelayReportAttrEventControl);
kZclClusterSetPermitReportInfo(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kOptTunnelReportingPlagiarizeOriginal(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, ZCL_SYSTEM_MODE_ATTRIBUTE_ID, CLUSTER_MASK_SERVER); kOptTunnelReportingPlagiarizeOriginal(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, ZCL_SYSTEM_MODE_ATTRIBUTE_ID, CLUSTER_MASK_SERVER);
} }
...@@ -761,14 +781,14 @@ void kTargetTemperDelayReportAttrEventHandler(void) ...@@ -761,14 +781,14 @@ void kTargetTemperDelayReportAttrEventHandler(void)
{ {
iKonkeAfSelfPrint("##############kTargetTemperDelayReportAttrEventHandler\r\n"); iKonkeAfSelfPrint("##############kTargetTemperDelayReportAttrEventHandler\r\n");
emberEventControlSetInactive( kTargetTemperDelayReportAttrEventControl); emberEventControlSetInactive( kTargetTemperDelayReportAttrEventControl);
kZclClusterSetPermitReportInfo(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kOptTunnelReportingPlagiarizeOriginal(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID, CLUSTER_MASK_SERVER); kOptTunnelReportingPlagiarizeOriginal(g_sDevice_Info.Device_Type, ZCL_THERMOSTAT_CLUSTER_ID, ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID, CLUSTER_MASK_SERVER);
} }
void kEndpoint4DelayReportAttrEventHandler(void) void kEndpoint4DelayReportAttrEventHandler(void)
{ {
emberEventControlSetInactive( kEndpoint4DelayReportAttrEventControl); emberEventControlSetInactive( kEndpoint4DelayReportAttrEventControl);
kZclClusterSetPermitReportInfo(4, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(4, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
uint8_t newValue = 1; uint8_t newValue = 1;
emberAfWriteAttribute(4, emberAfWriteAttribute(4,
ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_CLUSTER_ID,
...@@ -961,6 +981,16 @@ void UartMsgProcessHandle(UMsgNodeSt *pMsgNode ) ...@@ -961,6 +981,16 @@ void UartMsgProcessHandle(UMsgNodeSt *pMsgNode )
* PARAM[pframe][in/out] input command frame content, output command process result ack content. * PARAM[pframe][in/out] input command frame content, output command process result ack content.
* Auth: dingmz_frc.20190701. * Auth: dingmz_frc.20190701.
* */ * */
void Get_MCU_Status_Immediately(UMsgNodeSt *uMsgNode,uint8_t channel_id,uint16_t opcode)
{
DATA_FIELDED sData_Field = {0};
uint8_t data = 0;
sData_Field.ucData_Field_Len = 4;
sData_Field.ucChannel_ID = channel_id;
sData_Field.uiOpcode = Swap_16U_Data(opcode);
memcpy(sData_Field.uiPaload,&data,1);
uart_send_data(uMsgNode,0x30,0xff,&sData_Field,true);
}
kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_in_out[], uint8_t *length_in_out ) kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_in_out[], uint8_t *length_in_out )
{ {
extern DEVICVE_INFO_ST g_sDevice_Info; extern DEVICVE_INFO_ST g_sDevice_Info;
...@@ -973,13 +1003,29 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i ...@@ -973,13 +1003,29 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
iKonkeAfSelfPrint("%X ", args_in_out[index]); iKonkeAfSelfPrint("%X ", args_in_out[index]);
} }
iKonkeAfSelfPrint("--------------------------------------\r\n"); //test iKonkeAfSelfPrint("--------------------------------------\r\n"); //test
if(opcode == 0)
if( (g_sDevice_Info.mcu_software_version == 0xff)) //|| //未读取到版本,重新请求一次
// ((g_sDevice_Info.Device_Type == Device_Type_Air_Condition)&&(g_sDevice_Info.Device_subType == 0)&&
// (sDevice_attr_last.air_condition.air_brand == 0xff) ) ) //未读到空调品牌
{ {
Query_MCU_Info(); //读取MCU的状态信息
Rewite_Attr_Witchout_Report(); Get_MCU_Status_Immediately(&g_sMsgNode,g_sDevice_Info.Device_Type,OPCODE_GENERAL_MCU_DATA_QUERY);
iKonkeAfSelfPrint("\r\n-- MSG Receive[%d]:\r\n", g_sMsgNode.ack_length);
iKonkeAfSelfPrintBuffer(g_sMsgNode.buffer, g_sMsgNode.ack_length, true);
iKonkeAfSelfPrint("\r\n-----------------\r\n");
//同步mcu属性
if( (g_sDevice_Info.mcu_software_version == 0xff))
{
g_sDevice_Info.mcu_software_version = g_sMsgNode.buffer[10];
g_sDevice_Info.mcu_hardware_version = g_sMsgNode.buffer[11];
g_sDevice_Info.Device_Type = g_sMsgNode.buffer[12];
g_sDevice_Info.Device_subType = g_sMsgNode.buffer[13];
}
if(g_sDevice_Info.Device_Type == 1)
AirAttributeChangedReceiveReport(g_sDevice_Info.Device_Type,(AIR_ATTR_ST *)&g_sMsgNode.buffer[14]);
else if(g_sDevice_Info.Device_Type == 2)
FloorHeatingAttributeChangedReceiveReport(g_sDevice_Info.Device_Type,(FLOOR_HEATING_ATTR *)&g_sMsgNode.buffer[14]);
else if(g_sDevice_Info.Device_Type == 3)
FanAttributeChangedReceiveReport(g_sDevice_Info.Device_Type,(FAN_ATTR_ST *)&g_sMsgNode.buffer[14]);
} }
switch(opcode) { switch(opcode) {
case (0x00): // get the device snap. case (0x00): // get the device snap.
...@@ -1007,6 +1053,7 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i ...@@ -1007,6 +1053,7 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
//空调线控器 //空调线控器
args_in_out[i++] = sDevice_attr_last.air_condition.air_brand; args_in_out[i++] = sDevice_attr_last.air_condition.air_brand;
args_in_out[i++] = sDevice_attr_last.air_condition.air_type; args_in_out[i++] = sDevice_attr_last.air_condition.air_type;
args_in_out[i++] = sDevice_attr_last.air_condition.operate_mode;
args_in_out[i++] = sDevice_attr_last.floor_heating.error; args_in_out[i++] = sDevice_attr_last.floor_heating.error;
args_in_out[i++] = sDevice_attr_last.floor_heating.on_off; args_in_out[i++] = sDevice_attr_last.floor_heating.on_off;
...@@ -1062,7 +1109,7 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i ...@@ -1062,7 +1109,7 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
if (mode != 0x00 && mode != 0x01){ if (mode != 0x00 && mode != 0x01){
args_in_out[0] = ERR_NO_COMMAND_FORMAT; args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}else { }else {
kSetIndicatorNotDisturbModeFlg(mode); //kSetIndicatorNotDisturbModeFlg(mode);
if(channel == 0) if(channel == 0)
Set_No_Disturb_Mode(g_sDevice_Info.Device_Type,mode); Set_No_Disturb_Mode(g_sDevice_Info.Device_Type,mode);
else else
...@@ -1156,12 +1203,12 @@ void kkSystemSetUpEventHandler(void ) ...@@ -1156,12 +1203,12 @@ void kkSystemSetUpEventHandler(void )
kSystemSetupStatusSet(SETUP_STATUS_EXIT, 1500); kSystemSetupStatusSet(SETUP_STATUS_EXIT, 1500);
break; break;
case SETUP_STATUS_EXIT: case SETUP_STATUS_EXIT:
kZclClusterSetPermitReportInfo(1, ZCL_DIAGNOSTICS_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(1, ZCL_DIAGNOSTICS_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(1, ZCL_POWER_CONFIG_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(1, ZCL_POWER_CONFIG_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(1, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(1, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(1, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true); kZclClusterSetPermitReportInfo(1, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(1, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true); kZclClusterSetPermitReportInfo(1, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(1, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true); kZclClusterSetPermitReportInfo(1, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
g_u8SystemSetupStatus = SETUP_STATUS_INIT; g_u8SystemSetupStatus = SETUP_STATUS_INIT;
break; break;
...@@ -1306,7 +1353,7 @@ static void kClearBatteryVoltageAndPercentage(void) ...@@ -1306,7 +1353,7 @@ static void kClearBatteryVoltageAndPercentage(void)
{ {
#if 1 #if 1
uint8_t value = 0; uint8_t value = 0;
kZclClusterSetPermitReportInfo(1, ZCL_POWER_CONFIG_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(1, ZCL_POWER_CONFIG_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteServerAttribute(1, ZCL_POWER_CONFIG_CLUSTER_ID, ZCL_BATTERY_VOLTAGE_ATTRIBUTE_ID, &value, ZCL_INT8U_ATTRIBUTE_TYPE); emberAfWriteServerAttribute(1, ZCL_POWER_CONFIG_CLUSTER_ID, ZCL_BATTERY_VOLTAGE_ATTRIBUTE_ID, &value, ZCL_INT8U_ATTRIBUTE_TYPE);
emberAfWriteServerAttribute(1, ZCL_POWER_CONFIG_CLUSTER_ID, ZCL_BATTERY_PERCENTAGE_REMAINING_ATTRIBUTE_ID, &value, ZCL_INT8U_ATTRIBUTE_TYPE); emberAfWriteServerAttribute(1, ZCL_POWER_CONFIG_CLUSTER_ID, ZCL_BATTERY_PERCENTAGE_REMAINING_ATTRIBUTE_ID, &value, ZCL_INT8U_ATTRIBUTE_TYPE);
#endif #endif
......
...@@ -43,12 +43,12 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id) ...@@ -43,12 +43,12 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id)
{ {
//开关 //开关
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&data->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&data->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
...@@ -63,12 +63,12 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id) ...@@ -63,12 +63,12 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id)
real_temper = 65536 - temp; real_temper = 65536 - temp;
} }
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
...@@ -77,137 +77,142 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id) ...@@ -77,137 +77,142 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id)
set_temper = (data->set_temperature)*10; set_temper = (data->set_temperature)*10;
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
//模式 //模式
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&data->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID,true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID,true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&data->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
//风速 //风速
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&data->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
CLUSTER_MASK_SERVER,&data->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
//错误码 //错误码
if(channel_id == 1) if(channel_id == 1)
{ {
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID,true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID,true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&data->error,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->error,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID,true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID,true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&data->error,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->error,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
//童锁 //童锁
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
EmberAfStatus status = emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, EmberAfStatus status = emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&data->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&data->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
//延时关机时间 //延时关机时间
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&data->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&data->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
//风向 //风向
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode,
CLUSTER_MASK_SERVER,&data->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode,
CLUSTER_MASK_SERVER,&data->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
//屏保时间 //屏保时间
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&data->screen_save_time,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&data->screen_save_time,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&data->screen_save_time,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&data->screen_save_time,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
//滤网清洗时间 //滤网清洗时间
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&data->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&data->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&data->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&data->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
} }
//校准温度 //校准温度
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&data->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&data->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
} }
//勿扰模式 //勿扰模式
if(channel_id == 1){ if(channel_id == 1){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&data->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&data->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&data->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
//风机盘管运行模式
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Run_Mode,
CLUSTER_MASK_SERVER,&data->operate_mode,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint8_t channel_id) void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint8_t channel_id)
{ {
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
...@@ -222,103 +227,103 @@ void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint ...@@ -222,103 +227,103 @@ void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint
real_temper = 65536 - temp; real_temper = 65536 - temp;
} }
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
int16s set_temper = device_attr->set_temperature*10; int16s set_temper = device_attr->set_temperature*10;
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
if(channel_id == 2) if(channel_id == 2)
{ {
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
uint8_t screen_save = device_attr->screen_save_time; uint8_t screen_save = device_attr->screen_save_time;
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
} }
if(channel_id == 2){ if(channel_id == 2){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
...@@ -326,12 +331,12 @@ void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint ...@@ -326,12 +331,12 @@ void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint
void First_Sync_FanAttribute_Data(uint8_t channel_id , FAN_ATTR_ST *device_attr) void First_Sync_FanAttribute_Data(uint8_t channel_id , FAN_ATTR_ST *device_attr)
{ {
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
...@@ -346,113 +351,113 @@ void First_Sync_FanAttribute_Data(uint8_t channel_id , FAN_ATTR_ST *device_attr) ...@@ -346,113 +351,113 @@ void First_Sync_FanAttribute_Data(uint8_t channel_id , FAN_ATTR_ST *device_attr)
real_temper = 65536 - temp; real_temper = 65536 - temp;
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_TEMP_MEASUREMENT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_TEMP_MEASUREMENT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_TEMP_MEASUREMENT_CLUSTER_ID,ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_TEMP_MEASUREMENT_CLUSTER_ID,ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
if(channel_id == 3) if(channel_id == 3)
{ {
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
} }
uint8_t screen_save = device_attr->screen_save_time; uint8_t screen_save = device_attr->screen_save_time;
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
} }
if(channel_id == 3){ if(channel_id == 3){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
else{ else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} }
...@@ -475,23 +480,18 @@ void AirAttributeChangedReceiveReport(uint8_t channel_id , AIR_ATTR_ST *device_a ...@@ -475,23 +480,18 @@ void AirAttributeChangedReceiveReport(uint8_t channel_id , AIR_ATTR_ST *device_a
if(sDevice_attr_last.air_condition.on_off != device_attr->on_off) if(sDevice_attr_last.air_condition.on_off != device_attr->on_off)
{ {
iKonkeAfSelfPrint("on-off current = %d,last = %d\r\n",device_attr->on_off,sDevice_attr_last.air_condition.on_off); iKonkeAfSelfPrint("on-off current = %d,last = %d\r\n",device_attr->on_off,sDevice_attr_last.air_condition.on_off);
if(channel_id == g_sDevice_Info.Device_Type){
if(Is_Recall_Scense_Cmd(channel_id,ZCL_ON_OFF_CLUSTER_ID))
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false);
else
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); if(Is_Recall_Scense_Cmd(channel_id,ZCL_ON_OFF_CLUSTER_ID))
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID, kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); else
} kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
sDevice_attr_last.air_condition.on_off = device_attr->on_off; sDevice_attr_last.air_condition.on_off = device_attr->on_off;
} }
if(sDevice_attr_last.air_condition.real_temperature != device_attr->real_temperature) if(sDevice_attr_last.air_condition.real_temperature != device_attr->real_temperature)
...@@ -505,20 +505,16 @@ void AirAttributeChangedReceiveReport(uint8_t channel_id , AIR_ATTR_ST *device_a ...@@ -505,20 +505,16 @@ void AirAttributeChangedReceiveReport(uint8_t channel_id , AIR_ATTR_ST *device_a
temp = temp*10; temp = temp*10;
real_temper = 65536 - temp; real_temper = 65536 - temp;
} }
if(channel_id == g_sDevice_Info.Device_Type){
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); //不需要多控
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID, kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID,
} CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
iKonkeAfSelfPrint("real_temperature current = %d,last = %d\r\n", iKonkeAfSelfPrint("real_temperature current = %d,last = %d\r\n",
device_attr->real_temperature,sDevice_attr_last.air_condition.real_temperature); device_attr->real_temperature,sDevice_attr_last.air_condition.real_temperature);
sDevice_attr_last.air_condition.real_temperature = device_attr->real_temperature; sDevice_attr_last.air_condition.real_temperature = device_attr->real_temperature;
...@@ -527,193 +523,138 @@ void AirAttributeChangedReceiveReport(uint8_t channel_id , AIR_ATTR_ST *device_a ...@@ -527,193 +523,138 @@ void AirAttributeChangedReceiveReport(uint8_t channel_id , AIR_ATTR_ST *device_a
{ {
int16s set_temper = 0; int16s set_temper = 0;
set_temper = (device_attr->set_temperature)*10; set_temper = (device_attr->set_temperature)*10;
if(channel_id == g_sDevice_Info.Device_Type){
if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID)) if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID))
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, true, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
else else
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
else{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature, CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
iKonkeAfSelfPrint("set_temperature current = %d,last = %d\r\n", iKonkeAfSelfPrint("set_temperature current = %d,last = %d\r\n",
device_attr->set_temperature,sDevice_attr_last.air_condition.set_temperature); device_attr->set_temperature,sDevice_attr_last.air_condition.set_temperature);
sDevice_attr_last.air_condition.set_temperature = device_attr->set_temperature; sDevice_attr_last.air_condition.set_temperature = device_attr->set_temperature;
} }
if(sDevice_attr_last.air_condition.system_type != device_attr->system_type) if(sDevice_attr_last.air_condition.system_type != device_attr->system_type)
{ {
if(channel_id == g_sDevice_Info.Device_Type){
if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID)) if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID))
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
else else
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false ,false, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false ,false, true); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
iKonkeAfSelfPrint("system_type current = %d,last = %d\r\n", iKonkeAfSelfPrint("system_type current = %d,last = %d\r\n",
device_attr->system_type,sDevice_attr_last.air_condition.system_type); device_attr->system_type,sDevice_attr_last.air_condition.system_type);
sDevice_attr_last.air_condition.system_type = device_attr->system_type; sDevice_attr_last.air_condition.system_type = device_attr->system_type;
} }
if(sDevice_attr_last.air_condition.wind_speed != device_attr->wind_speed) if(sDevice_attr_last.air_condition.wind_speed != device_attr->wind_speed)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID,
emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
} kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
else{ emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
iKonkeAfSelfPrint("wind_speed current = %d,last = %d\r\n", iKonkeAfSelfPrint("wind_speed current = %d,last = %d\r\n",
device_attr->wind_speed,sDevice_attr_last.air_condition.wind_speed); device_attr->wind_speed,sDevice_attr_last.air_condition.wind_speed);
sDevice_attr_last.air_condition.wind_speed = device_attr->wind_speed; sDevice_attr_last.air_condition.wind_speed = device_attr->wind_speed;
} }
if(sDevice_attr_last.air_condition.error != device_attr->error) if(sDevice_attr_last.air_condition.error != device_attr->error)
{ {
if(channel_id == g_sDevice_Info.Device_Type) //不需要多控
{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.error = device_attr->error; sDevice_attr_last.air_condition.error = device_attr->error;
} }
if(sDevice_attr_last.air_condition.lock_flage != device_attr->lock_flage) if(sDevice_attr_last.air_condition.lock_flage != device_attr->lock_flage)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
EmberAfStatus status = emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
iKonkeAfSelfPrint("write result =0x%x\r\n",status);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.lock_flage = device_attr->lock_flage; sDevice_attr_last.air_condition.lock_flage = device_attr->lock_flage;
} }
if(sDevice_attr_last.air_condition.power_off_time != device_attr->power_off_time) if(sDevice_attr_last.air_condition.power_off_time != device_attr->power_off_time)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.power_off_time = device_attr->power_off_time; sDevice_attr_last.air_condition.power_off_time = device_attr->power_off_time;
} }
if(sDevice_attr_last.air_condition.air_wind_direct != device_attr->air_wind_direct) if(sDevice_attr_last.air_condition.air_wind_direct != device_attr->air_wind_direct)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode, CLUSTER_MASK_SERVER,&device_attr->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode,
CLUSTER_MASK_SERVER,&device_attr->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.air_wind_direct = device_attr->air_wind_direct; sDevice_attr_last.air_condition.air_wind_direct = device_attr->air_wind_direct;
} }
if(sDevice_attr_last.air_condition.screen_save_time != device_attr->screen_save_time) if(sDevice_attr_last.air_condition.screen_save_time != device_attr->screen_save_time)
{ {
uint8_t screen_save = device_attr->screen_save_time; uint8_t screen_save = device_attr->screen_save_time;
if(channel_id == g_sDevice_Info.Device_Type){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.screen_save_time = device_attr->screen_save_time; sDevice_attr_last.air_condition.screen_save_time = device_attr->screen_save_time;
} }
if(sDevice_attr_last.air_condition.filter_wash_time != device_attr->filter_wash_time) if(sDevice_attr_last.air_condition.filter_wash_time != device_attr->filter_wash_time)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time, CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.filter_wash_time = device_attr->filter_wash_time; sDevice_attr_last.air_condition.filter_wash_time = device_attr->filter_wash_time;
} }
if(sDevice_attr_last.air_condition.correct_temperature != device_attr->correct_temperature) if(sDevice_attr_last.air_condition.correct_temperature != device_attr->correct_temperature)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.correct_temperature = device_attr->correct_temperature; sDevice_attr_last.air_condition.correct_temperature = device_attr->correct_temperature;
} }
if(sDevice_attr_last.air_condition.no_disturb_mode != device_attr->no_disturb_mode) if(sDevice_attr_last.air_condition.no_disturb_mode != device_attr->no_disturb_mode)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.no_disturb_mode = device_attr->no_disturb_mode; sDevice_attr_last.air_condition.no_disturb_mode = device_attr->no_disturb_mode;
} }
if(sDevice_attr_last.air_condition.air_brand != device_attr->air_brand) if(sDevice_attr_last.air_condition.air_brand != device_attr->air_brand)
{ {
sDevice_attr_last.air_condition.air_brand = device_attr->air_brand; sDevice_attr_last.air_condition.air_brand = device_attr->air_brand;
} }
if(sDevice_attr_last.air_condition.no_disturb_mode != device_attr->no_disturb_mode) if(sDevice_attr_last.air_condition.air_type != device_attr->air_type)
{ {
sDevice_attr_last.air_condition.air_type = device_attr->air_type; sDevice_attr_last.air_condition.air_type = device_attr->air_type;
} }
if(sDevice_attr_last.air_condition.operate_mode != device_attr->operate_mode)
{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Run_Mode,
CLUSTER_MASK_SERVER,&device_attr->operate_mode,ZCL_INT8U_ATTRIBUTE_TYPE);
sDevice_attr_last.air_condition.operate_mode = device_attr->operate_mode;
}
print_all_attr_vaule(channel_id); print_all_attr_vaule(channel_id);
} }
...@@ -734,23 +675,17 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN ...@@ -734,23 +675,17 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN
/**************************************Z3标准上报**************************************************/ /**************************************Z3标准上报**************************************************/
if(sDevice_attr_last.floor_heating.on_off != device_attr->on_off) if(sDevice_attr_last.floor_heating.on_off != device_attr->on_off)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ if(Is_Recall_Scense_Cmd(channel_id,ZCL_ON_OFF_CLUSTER_ID))
if(Is_Recall_Scense_Cmd(channel_id,ZCL_ON_OFF_CLUSTER_ID)) kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false); else
else kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.on_off = device_attr->on_off; sDevice_attr_last.floor_heating.on_off = device_attr->on_off;
} }
if(sDevice_attr_last.floor_heating.real_temperature != device_attr->real_temperature) if(sDevice_attr_last.floor_heating.real_temperature != device_attr->real_temperature)
...@@ -764,20 +699,15 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN ...@@ -764,20 +699,15 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN
temp = temp*10; temp = temp*10;
real_temper = 65536 - temp; real_temper = 65536 - temp;
} }
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
else{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature, CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
iKonkeAfSelfPrint("real_temperature current = %d,last = %d\r\n", iKonkeAfSelfPrint("real_temperature current = %d,last = %d\r\n",
device_attr->real_temperature,sDevice_attr_last.floor_heating.real_temperature); device_attr->real_temperature,sDevice_attr_last.floor_heating.real_temperature);
sDevice_attr_last.floor_heating.real_temperature = device_attr->real_temperature; sDevice_attr_last.floor_heating.real_temperature = device_attr->real_temperature;
...@@ -785,131 +715,86 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN ...@@ -785,131 +715,86 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN
if(sDevice_attr_last.floor_heating.set_temperature != device_attr->set_temperature) if(sDevice_attr_last.floor_heating.set_temperature != device_attr->set_temperature)
{ {
int16s set_temper = device_attr->set_temperature*10; int16s set_temper = device_attr->set_temperature*10;
if(channel_id == g_sDevice_Info.Device_Type){ if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID))
if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID)) kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, true, false, false); else
else kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID,
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
} kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
else{ emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature,
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_OCCUPIED_HEATING_SETPOINT_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.set_temperature = device_attr->set_temperature; sDevice_attr_last.floor_heating.set_temperature = device_attr->set_temperature;
} }
if(sDevice_attr_last.floor_heating.system_type != device_attr->system_type) if(sDevice_attr_last.floor_heating.system_type != device_attr->system_type)
{ {
if(channel_id == g_sDevice_Info.Device_Type){
if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID)) if(Is_Recall_Scense_Cmd(channel_id,ZCL_THERMOSTAT_CLUSTER_ID))
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, true, false, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
else else
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_SYSTEM_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.system_type = device_attr->system_type; sDevice_attr_last.floor_heating.system_type = device_attr->system_type;
} }
if(sDevice_attr_last.floor_heating.error != device_attr->error) if(sDevice_attr_last.floor_heating.error != device_attr->error)
{ {
if(channel_id == g_sDevice_Info.Device_Type) //不需要多控
{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.error = device_attr->error; sDevice_attr_last.floor_heating.error = device_attr->error;
} }
if(sDevice_attr_last.floor_heating.lock_flage != device_attr->lock_flage) if(sDevice_attr_last.floor_heating.lock_flage != device_attr->lock_flage)
{ {
if(channel_id == g_sDevice_Info.Device_Type){
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.lock_flage = device_attr->lock_flage; sDevice_attr_last.floor_heating.lock_flage = device_attr->lock_flage;
} }
if(sDevice_attr_last.floor_heating.power_off_time != device_attr->power_off_time) if(sDevice_attr_last.floor_heating.power_off_time != device_attr->power_off_time)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.power_off_time = device_attr->power_off_time; sDevice_attr_last.floor_heating.power_off_time = device_attr->power_off_time;
} }
if(sDevice_attr_last.floor_heating.screen_save_time != device_attr->screen_save_time) if(sDevice_attr_last.floor_heating.screen_save_time != device_attr->screen_save_time)
{ {
uint8_t screen_save = device_attr->screen_save_time; uint8_t screen_save = device_attr->screen_save_time;
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.screen_save_time = device_attr->screen_save_time; sDevice_attr_last.floor_heating.screen_save_time = device_attr->screen_save_time;
} }
if(sDevice_attr_last.floor_heating.correct_temperature != device_attr->correct_temperature) if(sDevice_attr_last.floor_heating.correct_temperature != device_attr->correct_temperature)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_LOCAL_TEMPERATURE_CALIBRATION_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.correct_temperature = device_attr->correct_temperature; sDevice_attr_last.floor_heating.correct_temperature = device_attr->correct_temperature;
} }
if(sDevice_attr_last.floor_heating.no_disturb_mode != device_attr->no_disturb_mode) if(sDevice_attr_last.floor_heating.no_disturb_mode != device_attr->no_disturb_mode)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.no_disturb_mode = device_attr->no_disturb_mode; sDevice_attr_last.floor_heating.no_disturb_mode = device_attr->no_disturb_mode;
} }
print_all_attr_vaule(channel_id); print_all_attr_vaule(channel_id);
...@@ -931,22 +816,17 @@ void FanAttributeChangedReceiveReport(uint8_t channel_id , FAN_ATTR_ST *device_a ...@@ -931,22 +816,17 @@ void FanAttributeChangedReceiveReport(uint8_t channel_id , FAN_ATTR_ST *device_a
/**************************************Z3标准上报**************************************************/ /**************************************Z3标准上报**************************************************/
if(sDevice_attr_last.fan.on_off != device_attr->on_off) if(sDevice_attr_last.fan.on_off != device_attr->on_off)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ if(Is_Recall_Scense_Cmd(channel_id,ZCL_ON_OFF_CLUSTER_ID))
if(Is_Recall_Scense_Cmd(channel_id,ZCL_ON_OFF_CLUSTER_ID)) kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false); else
else kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
} kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
else{ emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_ON_OFF,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.on_off = device_attr->on_off; sDevice_attr_last.fan.on_off = device_attr->on_off;
} }
if(sDevice_attr_last.fan.real_temperature != device_attr->real_temperature) if(sDevice_attr_last.fan.real_temperature != device_attr->real_temperature)
...@@ -960,153 +840,97 @@ void FanAttributeChangedReceiveReport(uint8_t channel_id , FAN_ATTR_ST *device_a ...@@ -960,153 +840,97 @@ void FanAttributeChangedReceiveReport(uint8_t channel_id , FAN_ATTR_ST *device_a
temp = temp*10; temp = temp*10;
real_temper = 65536 - temp; real_temper = 65536 - temp;
} }
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_TEMP_MEASUREMENT_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_TEMP_MEASUREMENT_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_TEMP_MEASUREMENT_CLUSTER_ID,ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID, emberAfWriteAttribute(channel_id,ZCL_TEMP_MEASUREMENT_CLUSTER_ID,ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
else{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature, CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_TEMP_MEASUREMENT_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_TEMP_MEASUREMENT_CLUSTER_ID,ZCL_TEMP_MEASURED_VALUE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.real_temperature = device_attr->real_temperature; sDevice_attr_last.fan.real_temperature = device_attr->real_temperature;
} }
if(sDevice_attr_last.fan.system_type != device_attr->system_type) if(sDevice_attr_last.fan.system_type != device_attr->system_type)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode, CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.system_type = device_attr->system_type; sDevice_attr_last.fan.system_type = device_attr->system_type;
} }
if(sDevice_attr_last.fan.wind_speed != device_attr->wind_speed) if(sDevice_attr_last.fan.wind_speed != device_attr->wind_speed)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID,
emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID, CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
} kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true, invalidMaskEui64, RESET_ENDPOINT);
else{ emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true); CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, false);
emberAfWriteAttribute(channel_id,ZCL_FAN_CONTROL_CLUSTER_ID,ZCL_FAN_CONTROL_FAN_MODE_ATTRIBUTE_ID,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.wind_speed = device_attr->wind_speed; sDevice_attr_last.fan.wind_speed = device_attr->wind_speed;
} }
if(sDevice_attr_last.fan.error != device_attr->error) if(sDevice_attr_last.fan.error != device_attr->error)
{ {
if(channel_id == g_sDevice_Info.Device_Type) //不需要多控
{ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code, CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.error = device_attr->error; sDevice_attr_last.fan.error = device_attr->error;
} }
if(sDevice_attr_last.fan.lock_flage != device_attr->lock_flage) if(sDevice_attr_last.fan.lock_flage != device_attr->lock_flage)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock, CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.lock_flage = device_attr->lock_flage; sDevice_attr_last.fan.lock_flage = device_attr->lock_flage;
} }
if(sDevice_attr_last.fan.power_off_time != device_attr->power_off_time) if(sDevice_attr_last.fan.power_off_time != device_attr->power_off_time)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off, CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.power_off_time = device_attr->power_off_time; sDevice_attr_last.fan.power_off_time = device_attr->power_off_time;
} }
if(sDevice_attr_last.fan.screen_save_time != device_attr->screen_save_time) if(sDevice_attr_last.fan.screen_save_time != device_attr->screen_save_time)
{ {
uint8_t screen_save = device_attr->screen_save_time; uint8_t screen_save = device_attr->screen_save_time;
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time, CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.screen_save_time = device_attr->screen_save_time; sDevice_attr_last.fan.screen_save_time = device_attr->screen_save_time;
} }
if(sDevice_attr_last.fan.filter_wash_time != device_attr->filter_wash_time) if(sDevice_attr_last.fan.filter_wash_time != device_attr->filter_wash_time)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time, CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Filter_Clean_Time,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.filter_wash_time = device_attr->filter_wash_time; sDevice_attr_last.fan.filter_wash_time = device_attr->filter_wash_time;
} }
if(sDevice_attr_last.fan.correct_temperature != device_attr->correct_temperature) if(sDevice_attr_last.fan.correct_temperature != device_attr->correct_temperature)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.correct_temperature = device_attr->correct_temperature; sDevice_attr_last.fan.correct_temperature = device_attr->correct_temperature;
} }
if(sDevice_attr_last.fan.no_disturb_mode != device_attr->no_disturb_mode) if(sDevice_attr_last.fan.no_disturb_mode != device_attr->no_disturb_mode)
{ {
if(channel_id == g_sDevice_Info.Device_Type){ //不需要多控
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false); kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode, emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE); CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_No_Disturb_Mode,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.no_disturb_mode = device_attr->no_disturb_mode; sDevice_attr_last.fan.no_disturb_mode = device_attr->no_disturb_mode;
} }
print_all_attr_vaule(channel_id); print_all_attr_vaule(channel_id);
...@@ -1131,10 +955,13 @@ void Command_Process_Handler(DATA_FIELDED *Data_Field) ...@@ -1131,10 +955,13 @@ void Command_Process_Handler(DATA_FIELDED *Data_Field)
uint8_t Net_cmd = Data_Field->uiPaload[0]; uint8_t Net_cmd = Data_Field->uiPaload[0];
if(Net_cmd) //入网 if(Net_cmd) //入网
{ {
kNwkFactoryReset(false); if(kNwkGetCurrentStatus() == ENS_LEAVED)
//steering timeout can be set {
iKonkeAfSelfPrint("#####Start Steering\r\n"); kNwkFactoryReset(false);
kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS, JoinCompleteCallback); //steering timeout can be set
iKonkeAfSelfPrint("#####Start Steering\r\n");
kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS, JoinCompleteCallback);
}
} }
else else
{ {
...@@ -1410,7 +1237,7 @@ uint8_t uart_send_data(UMsgNodeSt *uMsgNode,uint8_t ucControl_Field,uint8_t uiSe ...@@ -1410,7 +1237,7 @@ uint8_t uart_send_data(UMsgNodeSt *uMsgNode,uint8_t ucControl_Field,uint8_t uiSe
else else
uMsgNode->ack = NULL; uMsgNode->ack = NULL;
uMsgNode->ack_length = 0; uMsgNode->ack_length = 0;
return kUartMsgSent(uMsgNode ,0); return kUartMsgSent(uMsgNode ,(isGetResult?200:0));
} }
uint16_t check_sum( uint8_t* msg, uint8_t len) uint16_t check_sum( uint8_t* msg, uint8_t len)
{ {
......
...@@ -96,6 +96,7 @@ typedef struct ...@@ -96,6 +96,7 @@ typedef struct
uint8_t no_disturb_mode; //勿扰模式 uint8_t no_disturb_mode; //勿扰模式
uint8_t air_brand; //空调品牌 uint8_t air_brand; //空调品牌
uint8_t air_type; //空调类型 uint8_t air_type; //空调类型
uint8_t operate_mode; //风机盘管模式
}__attribute__((packed))AIR_ATTR_ST; }__attribute__((packed))AIR_ATTR_ST;
typedef struct typedef struct
{ {
......
...@@ -43,22 +43,24 @@ efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flas ...@@ -43,22 +43,24 @@ efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flas
on on
} }
{setupId:debugConfiguration {setupId:debugConfiguration
off on
area name off area name off
appSerial=1 appSerial=1
compile,DEBUG
compile,EMBER_AF_PLUGIN_NVM3 compile,EMBER_AF_PLUGIN_NVM3
compile,EMBER_AF_PLUGIN_REPORTING compile,EMBER_AF_PLUGIN_REPORTING
compile,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY compile,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY
compile,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY compile,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY
compile,ON_OFF_CLUSTER compile,ON_OFF_CLUSTER
compile,SCENES_CLUSTER compile,SCENES_CLUSTER
compile,ZDO enable,DEBUG
enable,EMBER_AF_PLUGIN_NVM3 enable,EMBER_AF_PLUGIN_NVM3
enable,EMBER_AF_PLUGIN_REPORTING enable,EMBER_AF_PLUGIN_REPORTING
enable,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY enable,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY
enable,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY enable,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY
enable,ON_OFF_CLUSTER enable,ON_OFF_CLUSTER
enable,SCENES_CLUSTER enable,SCENES_CLUSTER
disable,ZDO
} }
{setupId:eventConfiguration {setupId:eventConfiguration
ikkUartRecvLoopCheckEventControl,ikkUartRecvLoopCheckEventHandler ikkUartRecvLoopCheckEventControl,ikkUartRecvLoopCheckEventHandler
...@@ -78,6 +80,7 @@ kDelayClearSequenceEventControl,kDelayClearSequenceEventHandler ...@@ -78,6 +80,7 @@ kDelayClearSequenceEventControl,kDelayClearSequenceEventHandler
ikkGetBindInfoEventControl,ikkGetBindInfoEventHandler ikkGetBindInfoEventControl,ikkGetBindInfoEventHandler
ikkDelayRebootEventControl,ikkDelayRebootEventHandler ikkDelayRebootEventControl,ikkDelayRebootEventHandler
kDelayClearFlagEventControl,kDelayClearFlagEventHandler kDelayClearFlagEventControl,kDelayClearFlagEventHandler
ikkReportInfoCheckEventControl,ikkReportInfoCheckEventHandler
} }
{setupId:halOptions {setupId:halOptions
} }
...@@ -140,6 +143,20 @@ beginAttrList:OPTIONAL ...@@ -140,6 +143,20 @@ beginAttrList:OPTIONAL
cl:0xFCC0, at:0x100A, di:server, mf:0x0000 cl:0xFCC0, at:0x100A, di:server, mf:0x0000
cl:0xFCC0, at:0x100B, di:server, mf:0x0000 cl:0xFCC0, at:0x100B, di:server, mf:0x0000
cl:0xFCC0, at:0x100C, di:server, mf:0x0000 cl:0xFCC0, at:0x100C, di:server, mf:0x0000
cl:0xFCC0, at:0x1000, di:server, mf:0x0000
cl:0xFCC0, at:0x1001, di:server, mf:0x0000
cl:0xFCC0, at:0x1002, di:server, mf:0x0000
cl:0xFCC0, at:0x1003, di:server, mf:0x0000
cl:0xFCC0, at:0x1004, di:server, mf:0x0000
cl:0xFCC0, at:0x1005, di:server, mf:0x0000
cl:0xFCC0, at:0x1006, di:server, mf:0x0000
cl:0xFCC0, at:0x1007, di:server, mf:0x0000
cl:0xFCC0, at:0x1008, di:server, mf:0x0000
cl:0xFCC0, at:0x1009, di:server, mf:0x0000
cl:0xFCC0, at:0x100A, di:server, mf:0x0000
cl:0xFCC0, at:0x100B, di:server, mf:0x0000
cl:0xFCC0, at:0x100C, di:server, mf:0x0000
cl:0xFCC0, at:0x100D, di:server, mf:0x0000
endAttrList:OPTIONAL endAttrList:OPTIONAL
beginAttrList:SAVED_TO_FLASH beginAttrList:SAVED_TO_FLASH
cl:0x0006, at:0x0000, di:server, mf:0x0000 cl:0x0006, at:0x0000, di:server, mf:0x0000
...@@ -153,23 +170,31 @@ beginAttrList:REPORTABLE ...@@ -153,23 +170,31 @@ beginAttrList:REPORTABLE
cl:0xFCC0, at:0x1000, di:server, mf:0x0000 cl:0xFCC0, at:0x1000, di:server, mf:0x0000
cl:0xFCC0, at:0x1001, di:server, mf:0x0000 cl:0xFCC0, at:0x1001, di:server, mf:0x0000
cl:0xFCC0, at:0x1002, di:server, mf:0x0000 cl:0xFCC0, at:0x1002, di:server, mf:0x0000
cl:0xFCC0, at:0x1003, di:server, mf:0x0000
cl:0xFCC0, at:0x1004, di:server, mf:0x0000 cl:0xFCC0, at:0x1004, di:server, mf:0x0000
cl:0xFCC0, at:0x1005, di:server, mf:0x0000
cl:0xFCC0, at:0x1006, di:server, mf:0x0000 cl:0xFCC0, at:0x1006, di:server, mf:0x0000
cl:0xFCC0, at:0x1007, di:server, mf:0x0000
cl:0xFCC0, at:0x1008, di:server, mf:0x0000 cl:0xFCC0, at:0x1008, di:server, mf:0x0000
cl:0xFCC0, at:0x1009, di:server, mf:0x0000
cl:0xFCC0, at:0x100A, di:server, mf:0x0000 cl:0xFCC0, at:0x100A, di:server, mf:0x0000
cl:0xFCC0, at:0x100B, di:server, mf:0x0000 cl:0xFCC0, at:0x100B, di:server, mf:0x0000
cl:0xFCC0, at:0x100C, di:server, mf:0x0000 cl:0xFCC0, at:0x100C, di:server, mf:0x0000
cl:0xFCC0, at:0x1000, di:server, mf:0x0000
cl:0xFCC0, at:0x1001, di:server, mf:0x0000
cl:0xFCC0, at:0x1002, di:server, mf:0x0000
cl:0xFCC0, at:0x1004, di:server, mf:0x0000
cl:0xFCC0, at:0x1006, di:server, mf:0x0000
cl:0xFCC0, at:0x1008, di:server, mf:0x0000
cl:0xFCC0, at:0x100A, di:server, mf:0x0000
cl:0xFCC0, at:0x100B, di:server, mf:0x0000
cl:0xFCC0, at:0x100C, di:server, mf:0x0000
cl:0xFCC0, at:0x1005, di:server, mf:0x0000
cl:0xFCC0, at:0x1009, di:server, mf:0x0000
cl:0xFCC0, at:0x1007, di:server, mf:0x0000
endAttrList:REPORTABLE endAttrList:REPORTABLE
beginAttributeDefaults beginAttributeDefaults
cl:0x0000, at:0x0001, di:server, mf:0x0000 => 0x14 cl:0x0000, at:0x0001, di:server, mf:0x0000 => 0x21
cl:0x0000, at:0x0003, di:server, mf:0x0000 => 0x10 cl:0x0000, at:0x0003, di:server, mf:0x0000 => 0x10
cl:0x0000, at:0x0004, di:server, mf:0x0000 => Konke cl:0x0000, at:0x0004, di:server, mf:0x0000 => Konke
cl:0x0000, at:0x0005, di:server, mf:0x0000 => 3AFE101003008611 cl:0x0000, at:0x0005, di:server, mf:0x0000 => 3AFE211003008611
cl:0x0000, at:0x0006, di:server, mf:0x0000 => 20201126 cl:0x0000, at:0x0006, di:server, mf:0x0000 => 20210309
cl:0x0000, at:0x0007, di:server, mf:0x0000 => 0x01 cl:0x0000, at:0x0007, di:server, mf:0x0000 => 0x01
cl:0x0000, at:0x0000, di:server, mf:0x0000 => 0x01 cl:0x0000, at:0x0000, di:server, mf:0x0000 => 0x01
cl:0x0000, at:0x0002, di:server, mf:0x0000 => 0x01 cl:0x0000, at:0x0002, di:server, mf:0x0000 => 0x01
...@@ -184,6 +209,20 @@ cl:0x0201, at:0x001E, di:server, mf:0x0000 => 1,0:0 ...@@ -184,6 +209,20 @@ cl:0x0201, at:0x001E, di:server, mf:0x0000 => 1,0:0
cl:0x0402, at:0x0000, di:server, mf:0x0000 => 1,0:0 cl:0x0402, at:0x0000, di:server, mf:0x0000 => 1,0:0
cl:0x0202, at:0x0000, di:server, mf:0x0000 => 1,0:0 cl:0x0202, at:0x0000, di:server, mf:0x0000 => 1,0:0
cl:0x0201, at:0x0010, di:server, mf:0x0000 => 1,0:0 cl:0x0201, at:0x0010, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1000, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1001, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1002, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1003, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1004, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1005, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1006, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1007, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1008, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x1009, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x100A, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x100B, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x100C, di:server, mf:0x0000 => 1,0:0
cl:0xFCC0, at:0x100D, di:server, mf:0x0000 => 1,0:0
endAttributeDefaultReportingConfig endAttributeDefaultReportingConfig
configuredNetwork:*type:ZIGBEE_PRO, name:Primary configuredNetwork:*type:ZIGBEE_PRO, name:Primary
beginEndpointType:Primary beginEndpointType:Primary
...@@ -803,9 +842,9 @@ AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A] ...@@ -803,9 +842,9 @@ AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION,0x10 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION,0x10
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID,17061 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID,17061
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE,254 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE,254
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE,62
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_CACHE_SIZE,335
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_PACKET_BUFFER_COUNT,200 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_PACKET_BUFFER_COUNT,200
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_APS_UNICAST_MESSAGE_COUNT,64 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_APS_UNICAST_MESSAGE_COUNT,64
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_BROADCAST_TABLE_SIZE,64 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_BROADCAST_TABLE_SIZE,64
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION,0x14 AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE,62
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_CACHE_SIZE,400
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION,0x21
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
extern EmberEventControl emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventControl; \ extern EmberEventControl emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventControl; \
extern EmberEventControl ikkDelayRebootEventControl; \ extern EmberEventControl ikkDelayRebootEventControl; \
extern EmberEventControl ikkGetBindInfoEventControl; \ extern EmberEventControl ikkGetBindInfoEventControl; \
extern EmberEventControl ikkReportInfoCheckEventControl; \
extern EmberEventControl ikkUartMsgDispatchEventControl; \ extern EmberEventControl ikkUartMsgDispatchEventControl; \
extern EmberEventControl ikkUartRecvLoopCheckEventControl; \ extern EmberEventControl ikkUartRecvLoopCheckEventControl; \
extern EmberEventControl ikkUartSentLoopCheckEventControl; \ extern EmberEventControl ikkUartSentLoopCheckEventControl; \
...@@ -50,6 +51,7 @@ ...@@ -50,6 +51,7 @@
extern void emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventHandler(void); \ extern void emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventHandler(void); \
extern void ikkDelayRebootEventHandler(void); \ extern void ikkDelayRebootEventHandler(void); \
extern void ikkGetBindInfoEventHandler(void); \ extern void ikkGetBindInfoEventHandler(void); \
extern void ikkReportInfoCheckEventHandler(void); \
extern void ikkUartMsgDispatchEventHandler(void); \ extern void ikkUartMsgDispatchEventHandler(void); \
extern void ikkUartRecvLoopCheckEventHandler(void); \ extern void ikkUartRecvLoopCheckEventHandler(void); \
extern void ikkUartSentLoopCheckEventHandler(void); \ extern void ikkUartSentLoopCheckEventHandler(void); \
...@@ -98,6 +100,7 @@ ...@@ -98,6 +100,7 @@
{ &emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventControl, emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventHandler }, \ { &emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventControl, emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventHandler }, \
{ &ikkDelayRebootEventControl, ikkDelayRebootEventHandler }, \ { &ikkDelayRebootEventControl, ikkDelayRebootEventHandler }, \
{ &ikkGetBindInfoEventControl, ikkGetBindInfoEventHandler }, \ { &ikkGetBindInfoEventControl, ikkGetBindInfoEventHandler }, \
{ &ikkReportInfoCheckEventControl, ikkReportInfoCheckEventHandler }, \
{ &ikkUartMsgDispatchEventControl, ikkUartMsgDispatchEventHandler }, \ { &ikkUartMsgDispatchEventControl, ikkUartMsgDispatchEventHandler }, \
{ &ikkUartRecvLoopCheckEventControl, ikkUartRecvLoopCheckEventHandler }, \ { &ikkUartRecvLoopCheckEventControl, ikkUartRecvLoopCheckEventHandler }, \
{ &ikkUartSentLoopCheckEventControl, ikkUartSentLoopCheckEventHandler }, \ { &ikkUartSentLoopCheckEventControl, ikkUartSentLoopCheckEventHandler }, \
...@@ -132,6 +135,7 @@ ...@@ -132,6 +135,7 @@
"Update TC Link Key Plugin BeginTcLinkKeyUpdate", \ "Update TC Link Key Plugin BeginTcLinkKeyUpdate", \
"Ikk delay reboot event control", \ "Ikk delay reboot event control", \
"Ikk get bind info event control", \ "Ikk get bind info event control", \
"Event data", \
"Ikk uart msg dispatch event control", \ "Ikk uart msg dispatch event control", \
"Ikk uart recv loop check event control", \ "Ikk uart recv loop check event control", \
"Ikk uart sent loop check event control", \ "Ikk uart sent loop check event control", \
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
EmberEventControl emberAfIdentifyClusterServerTickCallbackControl3; \ EmberEventControl emberAfIdentifyClusterServerTickCallbackControl3; \
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl3; \ EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl3; \
extern EmberEventControl emberAfPluginFormAndJoinCleanupEventControl; \ extern EmberEventControl emberAfPluginFormAndJoinCleanupEventControl; \
extern EmberEventControl emberAfPluginGreenPowerClientChannelEventControl; \
extern EmberEventControl emberAfPluginGreenPowerClientExitCommissioningEventControl; \
extern EmberEventControl emberAfPluginNetworkSteeringFinishSteeringEventControl; \ extern EmberEventControl emberAfPluginNetworkSteeringFinishSteeringEventControl; \
extern EmberEventControl emberAfPluginOtaStorageSimpleEepromPageEraseEventControl; \ extern EmberEventControl emberAfPluginOtaStorageSimpleEepromPageEraseEventControl; \
extern EmberEventControl emberAfPluginReportingTickEventControl; \ extern EmberEventControl emberAfPluginReportingTickEventControl; \
...@@ -39,6 +41,8 @@ ...@@ -39,6 +41,8 @@
extern EmberEventControl kUserJoinSucceedProcedureEventControl; \ extern EmberEventControl kUserJoinSucceedProcedureEventControl; \
extern EmberEventControl kkSystemSetUpEventControl; \ extern EmberEventControl kkSystemSetUpEventControl; \
extern void emberAfPluginFormAndJoinCleanupEventHandler(void); \ extern void emberAfPluginFormAndJoinCleanupEventHandler(void); \
extern void emberAfPluginGreenPowerClientChannelEventHandler(void); \
extern void emberAfPluginGreenPowerClientExitCommissioningEventHandler(void); \
extern void emberAfPluginNetworkSteeringFinishSteeringEventHandler(void); \ extern void emberAfPluginNetworkSteeringFinishSteeringEventHandler(void); \
extern void emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler(void); \ extern void emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler(void); \
extern void emberAfPluginReportingTickEventHandler(void); \ extern void emberAfPluginReportingTickEventHandler(void); \
...@@ -85,6 +89,8 @@ ...@@ -85,6 +89,8 @@
{ &emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallbackWrapperFunction3 }, \ { &emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallbackWrapperFunction3 }, \
{ &emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3 }, \ { &emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3 }, \
{ &emberAfPluginFormAndJoinCleanupEventControl, emberAfPluginFormAndJoinCleanupEventHandler }, \ { &emberAfPluginFormAndJoinCleanupEventControl, emberAfPluginFormAndJoinCleanupEventHandler }, \
{ &emberAfPluginGreenPowerClientChannelEventControl, emberAfPluginGreenPowerClientChannelEventHandler }, \
{ &emberAfPluginGreenPowerClientExitCommissioningEventControl, emberAfPluginGreenPowerClientExitCommissioningEventHandler }, \
{ &emberAfPluginNetworkSteeringFinishSteeringEventControl, emberAfPluginNetworkSteeringFinishSteeringEventHandler }, \ { &emberAfPluginNetworkSteeringFinishSteeringEventControl, emberAfPluginNetworkSteeringFinishSteeringEventHandler }, \
{ &emberAfPluginOtaStorageSimpleEepromPageEraseEventControl, emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler }, \ { &emberAfPluginOtaStorageSimpleEepromPageEraseEventControl, emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler }, \
{ &emberAfPluginReportingTickEventControl, emberAfPluginReportingTickEventHandler }, \ { &emberAfPluginReportingTickEventControl, emberAfPluginReportingTickEventHandler }, \
...@@ -117,6 +123,8 @@ ...@@ -117,6 +123,8 @@
"Identify Cluster Server EP 3", \ "Identify Cluster Server EP 3", \
"Over the Air Bootloading Cluster Client EP 3", \ "Over the Air Bootloading Cluster Client EP 3", \
"Form and Join Library Plugin Cleanup", \ "Form and Join Library Plugin Cleanup", \
"Green Power Client Plugin Channel", \
"Green Power Client Plugin ExitCommissioning", \
"Network Steering Plugin FinishSteering", \ "Network Steering Plugin FinishSteering", \
"OTA Simple Storage EEPROM Driver Plugin PageErase", \ "OTA Simple Storage EEPROM Driver Plugin PageErase", \
"Reporting Plugin Tick", \ "Reporting Plugin Tick", \
......
...@@ -4786,6 +4786,7 @@ ...@@ -4786,6 +4786,7 @@
#define ZCL_FanMode_ATTRIBUTE_ID 0x100A // Ver.: always #define ZCL_FanMode_ATTRIBUTE_ID 0x100A // Ver.: always
#define ZCL_OnOff_ATTRIBUTE_ID 0x100B // Ver.: always #define ZCL_OnOff_ATTRIBUTE_ID 0x100B // Ver.: always
#define ZCL_NoDisturbMode_ATTRIBUTE_ID 0x100C // Ver.: always #define ZCL_NoDisturbMode_ATTRIBUTE_ID 0x100C // Ver.: always
#define ZCL_RunMode_ATTRIBUTE_ID 0x100D // Ver.: always
#endif // SILABS_EMBER_AF_ATTRIBUTE_ID #endif // SILABS_EMBER_AF_ATTRIBUTE_ID
...@@ -1389,35 +1389,6 @@ bool emberAfPluginReportingGetDefaultReportingConfigCallback(EmberAfPluginReport ...@@ -1389,35 +1389,6 @@ bool emberAfPluginReportingGetDefaultReportingConfigCallback(EmberAfPluginReport
return true; return true;
} }
/** @brief Pre Attribute Change
*
* This function is called by the application framework before it changes an
* attribute value. The value passed into this callback is the value to which
* the attribute is to be set by the framework. The application should return
* ::EMBER_ZCL_STATUS_SUCCESS to permit the change or any other ::EmberAfStatus
* to reject it.
*
* @param endpoint Ver.: always
* @param clusterId Ver.: always
* @param attributeId Ver.: always
* @param mask Ver.: always
* @param manufacturerCode Ver.: always
* @param type Ver.: always
* @param size Ver.: always
* @param value Ver.: always
*/
EmberAfStatus emberAfPreAttributeChangeCallback(uint8_t endpoint,
EmberAfClusterId clusterId,
EmberAfAttributeId attributeId,
uint8_t mask,
uint16_t manufacturerCode,
uint8_t type,
uint8_t size,
uint8_t* value)
{
return EMBER_ZCL_STATUS_SUCCESS;
}
/** @brief Pre Cli Send /** @brief Pre Cli Send
* *
* This function is called by the framework when it is about to pass a message * This function is called by the framework when it is about to pass a message
......
...@@ -90,14 +90,14 @@ def GBL(): ...@@ -90,14 +90,14 @@ def GBL():
def OTA(): def OTA():
if not '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x14 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"': if not '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x21 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"':
sys.exit(0) sys.exit(0)
print (" ") print (" ")
print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.") print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.")
print ("It uses the parameters defined there. ") print ("It uses the parameters defined there. ")
print (" ") print (" ")
# wine needed by postbuild script under studio for mac/linux # wine needed by postbuild script under studio for mac/linux
IMAGE_BUILDER = '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x14 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"'.replace("\t", "\\t") IMAGE_BUILDER = '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x21 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"'.replace("\t", "\\t")
WINE_CMD = WINE.replace("cmd /C ","") if not "echo" in IMAGE_BUILDER else WINE WINE_CMD = WINE.replace("cmd /C ","") if not "echo" in IMAGE_BUILDER else WINE
OTA_COMMAND = WINE_CMD + IMAGE_BUILDER OTA_COMMAND = WINE_CMD + IMAGE_BUILDER
OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR) OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR)
......
...@@ -90,14 +90,14 @@ def GBL(): ...@@ -90,14 +90,14 @@ def GBL():
def OTA(): def OTA():
if not '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x13 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"': if not '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x20 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"':
sys.exit(0) sys.exit(0)
print (" ") print (" ")
print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.") print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.")
print ("It uses the parameters defined there. ") print ("It uses the parameters defined there. ")
print (" ") print (" ")
# wine needed by postbuild script under studio for mac/linux # wine needed by postbuild script under studio for mac/linux
IMAGE_BUILDER = '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x13 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"'.replace("\t", "\\t") IMAGE_BUILDER = '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x20 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"'.replace("\t", "\\t")
WINE_CMD = WINE.replace("cmd /C ","") if not "echo" in IMAGE_BUILDER else WINE WINE_CMD = WINE.replace("cmd /C ","") if not "echo" in IMAGE_BUILDER else WINE
OTA_COMMAND = WINE_CMD + IMAGE_BUILDER OTA_COMMAND = WINE_CMD + IMAGE_BUILDER
OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR) OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR)
......
...@@ -222,7 +222,7 @@ ...@@ -222,7 +222,7 @@
<state>APPLICATION_MFG_TOKEN_HEADER="znet-mfg-token.h"</state> <state>APPLICATION_MFG_TOKEN_HEADER="znet-mfg-token.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_FILE="configs/config-device-acceleration.h"</state> <state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_FILE="configs/config-device-acceleration.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_APP_FILE="config-device-acceleration-app.h"</state> <state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_APP_FILE="config-device-acceleration-app.h"</state>
<state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=335</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state> <state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=400</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state>
</option> </option>
<option> <option>
<name>CCPreprocFile</name> <name>CCPreprocFile</name>
...@@ -610,7 +610,7 @@ ...@@ -610,7 +610,7 @@
<state>APPLICATION_MFG_TOKEN_HEADER="znet-mfg-token.h"</state> <state>APPLICATION_MFG_TOKEN_HEADER="znet-mfg-token.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_FILE="configs/config-device-acceleration.h"</state> <state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_FILE="configs/config-device-acceleration.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_APP_FILE="config-device-acceleration-app.h"</state> <state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_APP_FILE="config-device-acceleration-app.h"</state>
<state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=335</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state> <state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=400</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state>
</option> </option>
<option> <option>
<name>AList</name> <name>AList</name>
......
...@@ -64,6 +64,7 @@ ...@@ -64,6 +64,7 @@
#define ZCL_USING_OPT_TUNNEL_CLUSTER_FanMode_ATTRIBUTE #define ZCL_USING_OPT_TUNNEL_CLUSTER_FanMode_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_OnOff_ATTRIBUTE #define ZCL_USING_OPT_TUNNEL_CLUSTER_OnOff_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_NoDisturbMode_ATTRIBUTE #define ZCL_USING_OPT_TUNNEL_CLUSTER_NoDisturbMode_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_RunMode_ATTRIBUTE
#define EMBER_AF_MANUFACTURER_CODE 0x1268 #define EMBER_AF_MANUFACTURER_CODE 0x1268
#define EMBER_AF_DEFAULT_RESPONSE_POLICY_CONDITIONAL #define EMBER_AF_DEFAULT_RESPONSE_POLICY_CONDITIONAL
...@@ -204,20 +205,20 @@ ...@@ -204,20 +205,20 @@
/**** Debug printing section ****/ /**** Debug printing section ****/
// Global switch // Global switch
// #define EMBER_AF_PRINT_ENABLE #define EMBER_AF_PRINT_ENABLE
// Individual areas // Individual areas
#define EMBER_AF_PRINT_CORE 0x0001 #define EMBER_AF_PRINT_CORE 0x0001
#define EMBER_AF_PRINT_APP 0x0002 #define EMBER_AF_PRINT_DEBUG 0x0002
#define EMBER_AF_PRINT_ATTRIBUTES 0x0004 #define EMBER_AF_PRINT_APP 0x0004
#define EMBER_AF_PRINT_ZDO 0x0008 #define EMBER_AF_PRINT_ATTRIBUTES 0x0008
#define EMBER_AF_PRINT_SCENES_CLUSTER 0x0010 #define EMBER_AF_PRINT_SCENES_CLUSTER 0x0010
#define EMBER_AF_PRINT_ON_OFF_CLUSTER 0x0020 #define EMBER_AF_PRINT_ON_OFF_CLUSTER 0x0020
#define EMBER_AF_PRINT_BITS { 0x3F } #define EMBER_AF_PRINT_BITS { 0x3F }
#define EMBER_AF_PRINT_NAMES { \ #define EMBER_AF_PRINT_NAMES { \
"Core",\ "Core",\
"Debug",\
"Application",\ "Application",\
"Attributes",\ "Attributes",\
"ZDO (ZigBee Device Object)",\
"Scenes",\ "Scenes",\
"On/off",\ "On/off",\
NULL\ NULL\
...@@ -333,7 +334,7 @@ ...@@ -333,7 +334,7 @@
#define EMBER_AF_PLUGIN_NVM3 #define EMBER_AF_PLUGIN_NVM3
// User options for plugin NVM3 Library // User options for plugin NVM3 Library
#define EMBER_AF_PLUGIN_NVM3_FLASH_PAGES 8 #define EMBER_AF_PLUGIN_NVM3_FLASH_PAGES 8
#define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 335 #define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 400
#define EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE 254 #define EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE 254
#define EMBER_AF_PLUGIN_NVM3_USER_REPACK_HEADROOM 0 #define EMBER_AF_PLUGIN_NVM3_USER_REPACK_HEADROOM 0
...@@ -369,7 +370,7 @@ ...@@ -369,7 +370,7 @@
#define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION #define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION
// User options for plugin OTA Bootload Cluster Client Policy // User options for plugin OTA Bootload Cluster Client Policy
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID 17061 #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID 17061
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION 20 #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION 33
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION 16 #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION 16
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_EBL_VERIFICATION #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_EBL_VERIFICATION
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS
......
...@@ -64,6 +64,7 @@ ...@@ -64,6 +64,7 @@
#define ZCL_USING_OPT_TUNNEL_CLUSTER_FanMode_ATTRIBUTE #define ZCL_USING_OPT_TUNNEL_CLUSTER_FanMode_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_OnOff_ATTRIBUTE #define ZCL_USING_OPT_TUNNEL_CLUSTER_OnOff_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_NoDisturbMode_ATTRIBUTE #define ZCL_USING_OPT_TUNNEL_CLUSTER_NoDisturbMode_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_RunMode_ATTRIBUTE
#define EMBER_AF_MANUFACTURER_CODE 0x1268 #define EMBER_AF_MANUFACTURER_CODE 0x1268
#define EMBER_AF_DEFAULT_RESPONSE_POLICY_CONDITIONAL #define EMBER_AF_DEFAULT_RESPONSE_POLICY_CONDITIONAL
...@@ -204,20 +205,20 @@ ...@@ -204,20 +205,20 @@
/**** Debug printing section ****/ /**** Debug printing section ****/
// Global switch // Global switch
// #define EMBER_AF_PRINT_ENABLE #define EMBER_AF_PRINT_ENABLE
// Individual areas // Individual areas
#define EMBER_AF_PRINT_CORE 0x0001 #define EMBER_AF_PRINT_CORE 0x0001
#define EMBER_AF_PRINT_APP 0x0002 #define EMBER_AF_PRINT_DEBUG 0x0002
#define EMBER_AF_PRINT_ATTRIBUTES 0x0004 #define EMBER_AF_PRINT_APP 0x0004
#define EMBER_AF_PRINT_ZDO 0x0008 #define EMBER_AF_PRINT_ATTRIBUTES 0x0008
#define EMBER_AF_PRINT_SCENES_CLUSTER 0x0010 #define EMBER_AF_PRINT_SCENES_CLUSTER 0x0010
#define EMBER_AF_PRINT_ON_OFF_CLUSTER 0x0020 #define EMBER_AF_PRINT_ON_OFF_CLUSTER 0x0020
#define EMBER_AF_PRINT_BITS { 0x3F } #define EMBER_AF_PRINT_BITS { 0x3F }
#define EMBER_AF_PRINT_NAMES { \ #define EMBER_AF_PRINT_NAMES { \
"Core",\ "Core",\
"Debug",\
"Application",\ "Application",\
"Attributes",\ "Attributes",\
"ZDO (ZigBee Device Object)",\
"Scenes",\ "Scenes",\
"On/off",\ "On/off",\
NULL\ NULL\
...@@ -333,7 +334,7 @@ ...@@ -333,7 +334,7 @@
#define EMBER_AF_PLUGIN_NVM3 #define EMBER_AF_PLUGIN_NVM3
// User options for plugin NVM3 Library // User options for plugin NVM3 Library
#define EMBER_AF_PLUGIN_NVM3_FLASH_PAGES 8 #define EMBER_AF_PLUGIN_NVM3_FLASH_PAGES 8
#define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 335 #define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 400
#define EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE 254 #define EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE 254
#define EMBER_AF_PLUGIN_NVM3_USER_REPACK_HEADROOM 0 #define EMBER_AF_PLUGIN_NVM3_USER_REPACK_HEADROOM 0
...@@ -369,7 +370,7 @@ ...@@ -369,7 +370,7 @@
#define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION #define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION
// User options for plugin OTA Bootload Cluster Client Policy // User options for plugin OTA Bootload Cluster Client Policy
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID 17061 #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID 17061
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION 19 #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION 32
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION 16 #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION 16
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_EBL_VERIFICATION #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_EBL_VERIFICATION
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS #define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS
......
...@@ -15,8 +15,8 @@ ...@@ -15,8 +15,8 @@
#if BIGENDIAN_CPU #if BIGENDIAN_CPU
#define GENERATED_DEFAULTS { \ #define GENERATED_DEFAULTS { \
5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \ 5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \
16,'3','A','F','E','1','0','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \ 16,'3','A','F','E','2','1','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \ 8,'2','0','2','1','0','3','0','9',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \
0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \ 0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x09, 0xAC, 0x2F /* 95,Default value: Green Power,gpp functionality */, \ 0x09, 0xAC, 0x2F /* 95,Default value: Green Power,gpp functionality */, \
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
#else // ! BIGENDIAN_CPU #else // ! BIGENDIAN_CPU
#define GENERATED_DEFAULTS { \ #define GENERATED_DEFAULTS { \
5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \ 5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \
16,'3','A','F','E','1','0','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \ 16,'3','A','F','E','2','1','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \ 8,'2','0','2','1','0','3','0','9',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \
0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \ 0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x2F, 0xAC, 0x09 /* 95,Default value: Green Power,gpp functionality */, \ 0x2F, 0xAC, 0x09 /* 95,Default value: Green Power,gpp functionality */, \
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
// Generated attributes // Generated attributes
#define GENERATED_ATTRIBUTES { \ #define GENERATED_ATTRIBUTES { \
{ 0x0000, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 0 / Basic / ZCL version*/\ { 0x0000, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 0 / Basic / ZCL version*/\
{ 0x0001, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x14 } }, /* 1 / Basic / application version*/\ { 0x0001, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x21 } }, /* 1 / Basic / application version*/\
{ 0x0002, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 2 / Basic / stack version*/\ { 0x0002, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 2 / Basic / stack version*/\
{ 0x0003, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x10 } }, /* 3 / Basic / hardware version*/\ { 0x0003, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x10 } }, /* 3 / Basic / hardware version*/\
{ 0x0004, ZCL_CHAR_STRING_ATTRIBUTE_TYPE, 33, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)&(generatedDefaults[0]) } }, /* 4 / Basic / manufacturer name*/\ { 0x0004, ZCL_CHAR_STRING_ATTRIBUTE_TYPE, 33, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)&(generatedDefaults[0]) } }, /* 4 / Basic / manufacturer name*/\
...@@ -104,6 +104,7 @@ ...@@ -104,6 +104,7 @@
{ 0x100A, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 60 / OptTunnel / FanMode*/\ { 0x100A, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 60 / OptTunnel / FanMode*/\
{ 0x100B, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 61 / OptTunnel / OnOff*/\ { 0x100B, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 61 / OptTunnel / OnOff*/\
{ 0x100C, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 62 / OptTunnel / NoDisturbMode*/\ { 0x100C, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 62 / OptTunnel / NoDisturbMode*/\
{ 0x100D, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 63 / OptTunnel / RunMode*/\
} }
...@@ -131,7 +132,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -131,7 +132,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \ { 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \
{ 0x0B05, (EmberAfAttributeMetadata*)&(generatedAttributes[47]), 3, 4, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0B05, (EmberAfAttributeMetadata*)&(generatedAttributes[47]), 3, 4, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 0, 0, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 0, 0, (CLUSTER_MASK_CLIENT), NULL, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 13, 16, (CLUSTER_MASK_SERVER), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 14, 17, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \
...@@ -140,7 +141,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -140,7 +141,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ 0x0006, (EmberAfAttributeMetadata*)&(generatedAttributes[20]), 2, 3, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayOnOffClusterServer, }, \ { 0x0006, (EmberAfAttributeMetadata*)&(generatedAttributes[20]), 2, 3, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayOnOffClusterServer, }, \
{ 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \ { 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \
{ 0x0201, (EmberAfAttributeMetadata*)&(generatedAttributes[32]), 8, 12, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayThermostatClusterServer, }, \ { 0x0201, (EmberAfAttributeMetadata*)&(generatedAttributes[32]), 8, 12, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayThermostatClusterServer, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 13, 16, (CLUSTER_MASK_SERVER), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 14, 17, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \
...@@ -150,16 +151,16 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -150,16 +151,16 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \ { 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \
{ 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \ { 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \
{ 0x0402, (EmberAfAttributeMetadata*)&(generatedAttributes[43]), 4, 8, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0402, (EmberAfAttributeMetadata*)&(generatedAttributes[43]), 4, 8, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 13, 16, (CLUSTER_MASK_SERVER), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 14, 17, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0021, (EmberAfAttributeMetadata*)&(generatedAttributes[26]), 6, 27, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0x0021, (EmberAfAttributeMetadata*)&(generatedAttributes[26]), 6, 27, (CLUSTER_MASK_CLIENT), NULL, }, \
} }
// Endpoint types // Endpoint types
#define GENERATED_ENDPOINT_TYPES { \ #define GENERATED_ENDPOINT_TYPES { \
{ (EmberAfCluster*)&(generatedClusters[0]), 12, 71 }, \ { (EmberAfCluster*)&(generatedClusters[0]), 12, 72 }, \
{ (EmberAfCluster*)&(generatedClusters[12]), 9, 63 }, \ { (EmberAfCluster*)&(generatedClusters[12]), 9, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[21]), 10, 63 }, \ { (EmberAfCluster*)&(generatedClusters[21]), 10, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[31]), 1, 27 }, \ { (EmberAfCluster*)&(generatedClusters[31]), 1, 27 }, \
} }
...@@ -183,7 +184,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -183,7 +184,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
#define ATTRIBUTE_SINGLETONS_SIZE (90) #define ATTRIBUTE_SINGLETONS_SIZE (90)
// Total size of attribute storage // Total size of attribute storage
#define ATTRIBUTE_MAX_SIZE 224 #define ATTRIBUTE_MAX_SIZE 227
// Array of endpoints that are supported // Array of endpoints that are supported
#define FIXED_ENDPOINT_ARRAY { 1, 2, 3, 242 } #define FIXED_ENDPOINT_ARRAY { 1, 2, 3, 242 }
...@@ -303,54 +304,51 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -303,54 +304,51 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1003, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0010, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0010, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0012, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0012, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1003, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0402, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0402, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1003, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
} }
#define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE (55) #define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE (52)
#endif // SILABS_AF_ENDPOINT_CONFIG #endif // SILABS_AF_ENDPOINT_CONFIG
...@@ -15,8 +15,8 @@ ...@@ -15,8 +15,8 @@
#if BIGENDIAN_CPU #if BIGENDIAN_CPU
#define GENERATED_DEFAULTS { \ #define GENERATED_DEFAULTS { \
5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \ 5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \
16,'3','A','F','E','1','0','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \ 16,'3','A','F','E','2','0','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \ 8,'2','0','2','1','0','3','0','9',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \
0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \ 0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x09, 0xAC, 0x2F /* 95,Default value: Green Power,gpp functionality */, \ 0x09, 0xAC, 0x2F /* 95,Default value: Green Power,gpp functionality */, \
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
#else // ! BIGENDIAN_CPU #else // ! BIGENDIAN_CPU
#define GENERATED_DEFAULTS { \ #define GENERATED_DEFAULTS { \
5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \ 5,'K','o','n','k','e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0,Default value: Basic,manufacturer name */, \
16,'3','A','F','E','1','0','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \ 16,'3','A','F','E','2','0','1','0','0','3','0','0','8','6','1','1',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 33,Default value: Basic,model identifier */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \ 8,'2','0','2','1','0','3','0','9',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 83,Default value: Over the Air Bootloading,OTA Upgrade Server ID */, \
0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \ 0xFF, 0xFF, 0xFF, 0xFF /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x2F, 0xAC, 0x09 /* 95,Default value: Green Power,gpp functionality */, \ 0x2F, 0xAC, 0x09 /* 95,Default value: Green Power,gpp functionality */, \
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
// Generated attributes // Generated attributes
#define GENERATED_ATTRIBUTES { \ #define GENERATED_ATTRIBUTES { \
{ 0x0000, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 0 / Basic / ZCL version*/\ { 0x0000, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 0 / Basic / ZCL version*/\
{ 0x0001, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x13 } }, /* 1 / Basic / application version*/\ { 0x0001, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x20 } }, /* 1 / Basic / application version*/\
{ 0x0002, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 2 / Basic / stack version*/\ { 0x0002, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x01 } }, /* 2 / Basic / stack version*/\
{ 0x0003, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x10 } }, /* 3 / Basic / hardware version*/\ { 0x0003, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)0x10 } }, /* 3 / Basic / hardware version*/\
{ 0x0004, ZCL_CHAR_STRING_ATTRIBUTE_TYPE, 33, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)&(generatedDefaults[0]) } }, /* 4 / Basic / manufacturer name*/\ { 0x0004, ZCL_CHAR_STRING_ATTRIBUTE_TYPE, 33, (ATTRIBUTE_MASK_SINGLETON), { (uint8_t*)&(generatedDefaults[0]) } }, /* 4 / Basic / manufacturer name*/\
...@@ -104,6 +104,7 @@ ...@@ -104,6 +104,7 @@
{ 0x100A, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 60 / OptTunnel / FanMode*/\ { 0x100A, ZCL_ENUM8_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 60 / OptTunnel / FanMode*/\
{ 0x100B, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 61 / OptTunnel / OnOff*/\ { 0x100B, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 61 / OptTunnel / OnOff*/\
{ 0x100C, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 62 / OptTunnel / NoDisturbMode*/\ { 0x100C, ZCL_BOOLEAN_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 62 / OptTunnel / NoDisturbMode*/\
{ 0x100D, ZCL_INT8U_ATTRIBUTE_TYPE, 1, (ATTRIBUTE_MASK_WRITABLE), { (uint8_t*)0x00 } }, /* 63 / OptTunnel / RunMode*/\
} }
...@@ -131,7 +132,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -131,7 +132,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \ { 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \
{ 0x0B05, (EmberAfAttributeMetadata*)&(generatedAttributes[47]), 3, 4, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0B05, (EmberAfAttributeMetadata*)&(generatedAttributes[47]), 3, 4, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 0, 0, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 0, 0, (CLUSTER_MASK_CLIENT), NULL, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 13, 16, (CLUSTER_MASK_SERVER), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 14, 17, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \
...@@ -140,7 +141,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -140,7 +141,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ 0x0006, (EmberAfAttributeMetadata*)&(generatedAttributes[20]), 2, 3, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayOnOffClusterServer, }, \ { 0x0006, (EmberAfAttributeMetadata*)&(generatedAttributes[20]), 2, 3, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayOnOffClusterServer, }, \
{ 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \ { 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \
{ 0x0201, (EmberAfAttributeMetadata*)&(generatedAttributes[32]), 8, 12, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayThermostatClusterServer, }, \ { 0x0201, (EmberAfAttributeMetadata*)&(generatedAttributes[32]), 8, 12, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayThermostatClusterServer, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 13, 16, (CLUSTER_MASK_SERVER), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 14, 17, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0000, (EmberAfAttributeMetadata*)&(generatedAttributes[0]), 9, 0, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[9]), 1, 2, (CLUSTER_MASK_CLIENT), NULL, }, \
{ 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \ { 0x0003, (EmberAfAttributeMetadata*)&(generatedAttributes[10]), 2, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayIdentifyClusterServer, }, \
...@@ -150,16 +151,16 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -150,16 +151,16 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \ { 0x0019, (EmberAfAttributeMetadata*)&(generatedAttributes[22]), 4, 15, (CLUSTER_MASK_CLIENT| CLUSTER_MASK_INIT_FUNCTION| CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION), emberAfFuncArrayOtaBootloadClusterClient, }, \
{ 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \ { 0x0202, (EmberAfAttributeMetadata*)&(generatedAttributes[40]), 3, 4, (CLUSTER_MASK_SERVER| CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION), emberAfFuncArrayFanControlClusterServer, }, \
{ 0x0402, (EmberAfAttributeMetadata*)&(generatedAttributes[43]), 4, 8, (CLUSTER_MASK_SERVER), NULL, }, \ { 0x0402, (EmberAfAttributeMetadata*)&(generatedAttributes[43]), 4, 8, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 13, 16, (CLUSTER_MASK_SERVER), NULL, }, \ { 0xFCC0, (EmberAfAttributeMetadata*)&(generatedAttributes[50]), 14, 17, (CLUSTER_MASK_SERVER), NULL, }, \
{ 0x0021, (EmberAfAttributeMetadata*)&(generatedAttributes[26]), 6, 27, (CLUSTER_MASK_CLIENT), NULL, }, \ { 0x0021, (EmberAfAttributeMetadata*)&(generatedAttributes[26]), 6, 27, (CLUSTER_MASK_CLIENT), NULL, }, \
} }
// Endpoint types // Endpoint types
#define GENERATED_ENDPOINT_TYPES { \ #define GENERATED_ENDPOINT_TYPES { \
{ (EmberAfCluster*)&(generatedClusters[0]), 12, 71 }, \ { (EmberAfCluster*)&(generatedClusters[0]), 12, 72 }, \
{ (EmberAfCluster*)&(generatedClusters[12]), 9, 63 }, \ { (EmberAfCluster*)&(generatedClusters[12]), 9, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[21]), 10, 63 }, \ { (EmberAfCluster*)&(generatedClusters[21]), 10, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[31]), 1, 27 }, \ { (EmberAfCluster*)&(generatedClusters[31]), 1, 27 }, \
} }
...@@ -183,7 +184,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -183,7 +184,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
#define ATTRIBUTE_SINGLETONS_SIZE (90) #define ATTRIBUTE_SINGLETONS_SIZE (90)
// Total size of attribute storage // Total size of attribute storage
#define ATTRIBUTE_MAX_SIZE 224 #define ATTRIBUTE_MAX_SIZE 227
// Array of endpoints that are supported // Array of endpoints that are supported
#define FIXED_ENDPOINT_ARRAY { 1, 2, 3, 242 } #define FIXED_ENDPOINT_ARRAY { 1, 2, 3, 242 }
...@@ -303,54 +304,51 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] = ...@@ -303,54 +304,51 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1003, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0010, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0010, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0012, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x0012, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0x0201, 0x001E, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1003, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0006, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0202, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0402, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0x0402, 0x0000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1003, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \ { EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
} }
#define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE (55) #define EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE (52)
#endif // SILABS_AF_ENDPOINT_CONFIG #endif // SILABS_AF_ENDPOINT_CONFIG
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
#include "znet-bookkeeping.h" #include "znet-bookkeeping.h"
#include "../00ikonke-app/general/ikk-debug.h" #include "../00ikonke-app/general/ikk-debug.h"
#include "../00ikonke-app/general/ikk-cluster.h"
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
#define INVALID_MESSAGE_TAG 0xFF #define INVALID_MESSAGE_TAG 0xFF
...@@ -564,15 +565,8 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame, ...@@ -564,15 +565,8 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame,
uint8_t endpoint_mark = apsFrame->sourceEndpoint; uint8_t endpoint_mark = apsFrame->sourceEndpoint;
uint16_t cluster_mark = apsFrame->clusterId; uint16_t cluster_mark = apsFrame->clusterId;
//add by maozj 20200426 EmberEUI64 invalidMaskEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
typedef struct tag_zcl_report_table{
uint8_t endpoint;
EmberAfClusterId clusterId;
bool reportEnable;
bool sceneRecallFlg;
bool reportGatewayEnable;
bool reportChildDeviceEnable;
}ZclReportTableSt;
EmberEUI64 eui64GatewayAddr; EmberEUI64 eui64GatewayAddr;
extern void kNwkGetGateWayEui64(EmberEUI64 eui64); extern void kNwkGetGateWayEui64(EmberEUI64 eui64);
kNwkGetGateWayEui64(eui64GatewayAddr); kNwkGetGateWayEui64(eui64GatewayAddr);
...@@ -592,22 +586,37 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame, ...@@ -592,22 +586,37 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame,
#if 1 #if 1
//add by maozj 20200512, send to gateway,and multi-control report //add by maozj 20200512, send to gateway,and multi-control report
bool permitStatus = kZclClusterGetPermitReportInfo(binding.local, binding.clusterId, &zclReportInfo); bool permitStatus = kZclClusterGetPermitReportInfo(binding.local, binding.clusterId, &zclReportInfo);
if (permitStatus && (!zclReportInfo.reportGatewayEnable || !zclReportInfo.reportChildDeviceEnable)){ if (permitStatus && (!zclReportInfo.reportGatewayEnable || !zclReportInfo.reportChildDeviceEnable)){ // use flag to not send
//iKonkeAfSelfPrint("\r\n###2222 maskEui64Addr");
//iKonkeAfSelfPrintBuffer(zclReportInfo.maskEui64Addr, 8, true);
if ((zclReportInfo.reportGatewayEnable && !MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE)) \ if ((zclReportInfo.reportGatewayEnable && !MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE)) \
|| (zclReportInfo.reportChildDeviceEnable && MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE))){ || (zclReportInfo.reportChildDeviceEnable && MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE))){
iKonkeAfSelfPrint("\r\n###1111 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable ); iKonkeAfSelfPrint("###1111 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable );
//continue; //continue;
}else { }else {
iKonkeAfSelfPrint("\r\n###2222 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable ); iKonkeAfSelfPrint("###2222 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable );
continue; continue;
} }
iKonkeAfSelfPrint("\r\n###3333 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable ); iKonkeAfSelfPrint("###3333 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable );
}else if (!permitStatus){ }else if (!permitStatus){
iKonkeAfSelfPrint("\r\n###4444 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable ); iKonkeAfSelfPrint("###4444 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable );
continue; continue;
} }
if (!MEMCOMPARE(zclReportInfo.maskEui64Addr, binding.identifier, EUI64_SIZE) && (zclReportInfo.dest_endpoint == binding.remote) && (zclReportInfo.endpoint == binding.local)) { //1y??μ??·oí·¢?í?üá?°ó?¨±í?Dμ??·??ó|£?2?·¢?í?üá?, ??3yμ??·
MEMSET(zclReportInfo.maskEui64Addr, 0xff, EUI64_SIZE);
zclReportInfo.endpoint = RESET_ENDPOINT;
zclReportInfo.dest_endpoint = RESET_ENDPOINT;
//KKK clear addr
iKonkeAfSelfPrint("###5555 ep(%d),cluster(%02x)Send child(%d), gateway(%d)\r\n",binding.local, binding.clusterId, zclReportInfo.reportChildDeviceEnable, zclReportInfo.reportGatewayEnable );
kZclClusterSetPermitReportInfo(endpoint_mark, zclReportInfo.cluster, zclReportInfo.reportEnable, \
zclReportInfo.sceneRecallFlg, zclReportInfo.reportGatewayEnable, zclReportInfo.reportChildDeviceEnable, invalidMaskEui64, RESET_ENDPOINT);
continue;
}
#endif #endif
// if (!MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE)){ // if (!MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE)){
iKonkeAfSelfPrint("###6666 send\r\n");
status = send(EMBER_OUTGOING_VIA_BINDING, status = send(EMBER_OUTGOING_VIA_BINDING,
i, i,
apsFrame, apsFrame,
...@@ -625,8 +634,8 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame, ...@@ -625,8 +634,8 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame,
} }
kZclClusterGetPermitReportInfo(endpoint_mark, cluster_mark, &zclReportInfo); kZclClusterGetPermitReportInfo(endpoint_mark, cluster_mark, &zclReportInfo);
if (zclReportInfo.reportChildDeviceEnable == true){ if (zclReportInfo.reportChildDeviceEnable == true){ // clear report child attr
kZclClusterSetPermitReportInfo(endpoint_mark, zclReportInfo.reportEnable, zclReportInfo.sceneRecallFlg, zclReportInfo.reportGatewayEnable, false); kZclClusterSetPermitReportInfo(endpoint_mark, zclReportInfo.cluster, zclReportInfo.reportEnable, zclReportInfo.sceneRecallFlg, zclReportInfo.reportGatewayEnable, false, invalidMaskEui64, RESET_ENDPOINT);
} }
return status; return status;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment