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 @@
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/util/time-util.c</locationURI>
</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>
<name>zcl-framework-core/zdo-cli.c</name>
<type>1</type>
......
......@@ -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="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="0x100d" define="RunMode" type="INT8U" min="0x00" max="0x03" writable="true" default="0x00" optional="true" >RunMode</attribute>
</cluster>
</configurator>
......@@ -10,7 +10,6 @@
#include "common_process.h"
#include "uart_handler.h"
#include <00ikonke-app/general/ikk-opt-tunnel.h>
#include <00ikonke-app/general/ikk-cluster.h>
#include "./general/ikk-common-utils.h"
DEVICVE_INFO_ST g_sDevice_Info = {
......@@ -19,7 +18,6 @@ DEVICVE_INFO_ST g_sDevice_Info = {
.mcu_hardware_version = 0xff,
.mcu_hardware_version = 0xff,
};
bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
uint8_t i = cmd->payloadStartIndex;
......@@ -43,10 +41,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.air_condition.on_off)
{
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
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)
// Write_OnOff_Attr(0,endpoint,&temp_data);
}
......@@ -56,10 +54,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.floor_heating.on_off)
{
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
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);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
}
......@@ -69,10 +67,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.fan.on_off)
{
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
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);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
}
......@@ -86,10 +84,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.air_condition.on_off == 0)
{
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
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);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
......@@ -101,10 +99,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.floor_heating.on_off == 0)
{
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
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);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
}
......@@ -114,10 +112,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if(sDevice_attr_last.fan.on_off == 0)
{
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
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);
// kZclClusterSetPermitReportInfo(endpoint, ZCL_ON_OFF_CLUSTER_ID, false, false, false, false);
}
......@@ -131,12 +129,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
temp_data = 1;
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{
temp_data = 0;
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 )
......@@ -145,12 +143,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
temp_data = 1;
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{
temp_data = 0;
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 )
......@@ -159,12 +157,12 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
temp_data = 1;
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{
temp_data = 0;
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;
......@@ -188,13 +186,23 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("##### datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 5] );
if((datavalue >= 1600)&&(datavalue <= 3000))
{
temp_16_t = datavalue /10;
//自动模式下不能调节目标温度
if( ((endpoint == 2)&&(sDevice_attr_last.floor_heating.system_type == 1))
||((endpoint == 1)&&(sDevice_attr_last.air_condition.system_type == 7)) )
{
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);
// if(g_sMsgNode.buffer[POLAD_INDEX] == TP_SUCCESS)
// Write_TargetTemp_Attr(0,endpoint,&datavalue);
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
{
emberAfSendImmediateDefaultResponse(EMBER_ZCL_STATUS_INVALID_VALUE);
......@@ -206,12 +214,16 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
uint8_t 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)) ||
(((datavalue == 1)||(datavalue == 2))&&(endpoint == 2)))
if( (((datavalue == 3)||(datavalue == 4)||(datavalue == 7)||(datavalue == 8))&&(endpoint == 1)&&(g_sDevice_Info.Device_subType == 0)) ||
(((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;
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)
// Write_SystemMode_Attr(0,endpoint,&datavalue);
return false;
......@@ -227,10 +239,10 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
int8_t 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);
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)
// Write_CalibrationTemp_Attr(1,endpoint,&datavalue);
return false;
......@@ -259,7 +271,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if( ((datavalue > 0)&&(datavalue <4)) || (datavalue == 5))
{
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)
// Write_FanSpeed_Attr(0,endpoint,&datavalue);
return false;
......@@ -287,7 +299,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if( datavalue >= 0)
{
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)
// Write_Child_Lock_Attr(1,endpoint,&datavalue);
return false;
......@@ -308,7 +320,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
if( ( (datavalue == 2)||(datavalue == 10) )&&(endpoint == 3) )
{
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;
}
else
......@@ -324,7 +336,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####delay off, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if( (datavalue >= 0)&&(datavalue <= 240)){
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)
// Write_Delay_off_Attr(1,endpoint,&datavalue);
return false;
......@@ -341,7 +353,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####Swing_Mode, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if( (datavalue >= 0)&&(datavalue <3)){
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)
// Write_Wind_Direct_Attr(1,endpoint,&datavalue);
return false;
......@@ -358,7 +370,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####Screen_Saver_Time, datavalue (%d),%d \r\n",datavalue,cmd->buffer[i + 3] );
if(datavalue <10){
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)
// Write_Screen_Save_Time_Attr(1,endpoint,&datavalue);
return false;
......@@ -373,11 +385,11 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
{
int8_t 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) )
{
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)
// Write_CalibrationTemp_Attr(1,endpoint,&datavalue);
return false;
......@@ -395,7 +407,7 @@ bool APP_PreCommandHandlerCallback(EmberAfClusterCommand* cmd)
iKonkeAfSelfPrint("#####Screen_Saver_Time, datavalue (%d),%d \r\n",datavalue);
if( (datavalue > 0)&&(datavalue <0xffff)){
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)
// Write_Filter_Clean_Time_Attr(1,endpoint,(uint8_t *)&datavalue);
return false;
......@@ -554,7 +566,7 @@ bool emberAfThermostatClusterSetpointRaiseLowerCallback(uint8_t mode,
uiCurrent_Target_Temper *= 10;
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
,(uint8_t*)&uiCurrent_Target_Temper,ZCL_INT16S_ATTRIBUTE_TYPE);
iKonkeAfSelfPrint("####Set Temper Command Control Success !!\r\n");
......@@ -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)
{
if(Report == 1)
kZclClusterSetPermitReportInfo(ep, cluster, true, false, true, false);
kZclClusterSetPermitReportInfo(ep, cluster, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
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);
return status;
}
......@@ -604,14 +616,88 @@ uint8_t Read_Zigbee_Version(void)
(uint8_t *)&version, sizeof(version), NULL);
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)
{
/*begin add by maozj 20191127 add get gateway EUI64*/
EmberNodeId sender = emberGetSender();
// 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 tmpEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberStatus status = emberGetSenderEui64(eui64GatewayAddr);
EmberStatus status = emberGetSenderEui64(senderEui64);
uint8_t i = cmd->payloadStartIndex;
uint8_t dataValue = 0;
uint16_t dataValue1 = 0;
......@@ -619,6 +705,7 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
uint16_t attribute_id = U16MERG(cmd->buffer[i + 1], cmd->buffer[i + 0]);
uint8_t dataType = cmd->buffer[i + 2];
uint8_t endpoint = cmd->apsFrame->destinationEndpoint;
uint64_t currentTime = halCommonGetInt64uMillisecondTick();
/***********************************多控处理************************************************/
if((!cmd->clusterSpecific) && (cmd->direction == (uint8_t)ZCL_DIRECTION_SERVER_TO_CLIENT) \
&& (!cmd->mfgSpecific))
......@@ -658,18 +745,18 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
switch(attribute_id)
{
case FCC0_ATTR_Error_Code:
{
if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.error = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.error = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.error = dataValue;
data_type = ZCL_INT8U_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ERROR_CODE,dataValue);
}
break;
// case FCC0_ATTR_Error_Code:
// {
// if(cmd->apsFrame->sourceEndpoint == 1)
// sDevice_attr_new.air_condition.error = dataValue;
// else if(cmd->apsFrame->sourceEndpoint == 2)
// sDevice_attr_new.floor_heating.error = dataValue;
// else if(cmd->apsFrame->sourceEndpoint == 3)
// sDevice_attr_new.fan.error = dataValue;
// data_type = ZCL_INT8U_ATTRIBUTE_TYPE;
// Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ERROR_CODE,dataValue);
// }
// break;
case FCC0_ATTR_Child_Lock:
{
if(cmd->apsFrame->sourceEndpoint == 1)
......@@ -744,30 +831,30 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_TARGET_TEMPER,dataValue1/10);
}
break;
case FCC0_ATTR_Current_Temperature:
{
if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.real_temperature = dataValue1;
else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.real_temperature = dataValue1;
else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.real_temperature = dataValue1;
data_type = ZCL_INT16S_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CURRENT_TEMPER,dataValue1);
}
break;
case FCC0_ATTR_Calibration_Temperature:
{
if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.correct_temperature = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.correct_temperature = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.correct_temperature = dataValue;
data_type = ZCL_INT8S_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CALI_TEMPER,dataValue);
}
break;
// case FCC0_ATTR_Current_Temperature:
// {
// if(cmd->apsFrame->sourceEndpoint == 1)
// sDevice_attr_new.air_condition.real_temperature = dataValue1;
// else if(cmd->apsFrame->sourceEndpoint == 2)
// sDevice_attr_new.floor_heating.real_temperature = dataValue1;
// else if(cmd->apsFrame->sourceEndpoint == 3)
// sDevice_attr_new.fan.real_temperature = dataValue1;
// data_type = ZCL_INT16S_ATTRIBUTE_TYPE;
// Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CURRENT_TEMPER,dataValue1);
// }
// break;
// case FCC0_ATTR_Calibration_Temperature:
// {
// if(cmd->apsFrame->sourceEndpoint == 1)
// sDevice_attr_new.air_condition.correct_temperature = dataValue;
// else if(cmd->apsFrame->sourceEndpoint == 2)
// sDevice_attr_new.floor_heating.correct_temperature = dataValue;
// else if(cmd->apsFrame->sourceEndpoint == 3)
// sDevice_attr_new.fan.correct_temperature = dataValue;
// data_type = ZCL_INT8S_ATTRIBUTE_TYPE;
// Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_CALI_TEMPER,dataValue);
// }
// break;
case FCC0_ATTR_Fan_Mode:
{
if(cmd->apsFrame->sourceEndpoint == 1)
......@@ -790,28 +877,30 @@ kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd)
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_ON_OFF,dataValue);
}
break;
case FCC0_ATTR_No_Disturb_Mode:
{
if(cmd->apsFrame->sourceEndpoint == 1)
sDevice_attr_new.air_condition.no_disturb_mode = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 2)
sDevice_attr_new.floor_heating.no_disturb_mode = dataValue;
else if(cmd->apsFrame->sourceEndpoint == 3)
sDevice_attr_new.fan.no_disturb_mode = dataValue;
data_type = ZCL_BOOLEAN_ATTRIBUTE_TYPE;
Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_NO_DISTURB_MODE,dataValue);
}
break;
// case FCC0_ATTR_No_Disturb_Mode:
// {
// if(cmd->apsFrame->sourceEndpoint == 1)
// sDevice_attr_new.air_condition.no_disturb_mode = dataValue;
// else if(cmd->apsFrame->sourceEndpoint == 2)
// sDevice_attr_new.floor_heating.no_disturb_mode = dataValue;
// else if(cmd->apsFrame->sourceEndpoint == 3)
// sDevice_attr_new.fan.no_disturb_mode = dataValue;
// data_type = ZCL_BOOLEAN_ATTRIBUTE_TYPE;
// Control_MCU(&g_sMsgNode,cmd->apsFrame->sourceEndpoint,CMD_NO_DISTURB_MODE,dataValue);
// }
// break;
default:
break;
}
kZclClusterSetPermitReportInfo(cmd->apsFrame->sourceEndpoint, ZCL_OPT_TUNNEL_CLUSTER_ID, false, false, false, false);
if(emberAfGetDataSize(data_type) == 1)
emberAfWriteServerAttribute(cmd->apsFrame->sourceEndpoint,ZCL_OPT_TUNNEL_CLUSTER_ID,attribute_id,
(uint8_t *)&dataValue,data_type);
else
emberAfWriteServerAttribute(cmd->apsFrame->sourceEndpoint,ZCL_OPT_TUNNEL_CLUSTER_ID,attribute_id,
(uint8_t *)&dataValue1,data_type);
ZclReportControlInfoSt ZclReportFCC0Info;
ZclReportFCC0Info.attribute = attribute_id;
ZclReportFCC0Info.cluster = 0Xfcc0;
ZclReportFCC0Info.endpoint = cmd->apsFrame->destinationEndpoint;
ZclReportFCC0Info.dest_endpoint = cmd->apsFrame->sourceEndpoint;
ZclReportFCC0Info.isMultiContorl = true;
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);
return KET_OK;
}
......
......@@ -4,6 +4,7 @@
#include "app/framework/include/af.h"
#include "././00ikonke-app/general/ikk-debug.h"
#include "./general/ikk-module-def.h"
#include <00ikonke-app/general/ikk-cluster.h>
#define BUILD_UINT16(lowByte, highByte) \
((uint16_t)(((lowByte) & 0x00FF) + (((highByte) & 0x00FF) << 8)))
......@@ -23,7 +24,7 @@
#define FCC0_ATTR_Fan_Mode 0X100A
#define FCC0_ATTR_ON_OFF 0X100B
#define FCC0_ATTR_No_Disturb_Mode 0X100C
#define FCC0_ATTR_No_Run_Mode 0X100D
......@@ -31,6 +32,9 @@
#define Device_Type_Floor_Heating 2
#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);
......@@ -67,11 +71,21 @@ typedef struct
uint8_t mcu_hardware_version;
}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;
uint8_t Read_Zigbee_Version(void);
kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd);
void kGetBindConfigInfo(void);
void Reset_Binding_Token(void);
void Check_Queue(void);
boolean IS_Resend_Report_Data(uint16_t attribute_id,ZclReportControlInfoSt *Report_info);
/**********************common interface*******************************/
uint8_t Get_Device_Endpoint(void);
uint8_t Get_Binding_Device_EP(void);
......
......@@ -262,12 +262,12 @@ void ikkUartRecvLoopCheck(UMsgNodeSt *pNode, int waitto_ms )
{
if( emberSerialReadAvailable(g_uManagerInsc.port)) {
while(emberSerialReadByte(g_uManagerInsc.port, &data) == EMBER_SUCCESS ) {
iKonkeAfSelfPrint(">>>>>>1111Recv Data %x\r\n", data);
// iKonkeAfSelfPrint(">>>>>>1111Recv Data %x\r\n", data);
currentTime = halCommonGetInt64uMillisecondTick();
//add by maozj 20200602
//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){
iKonkeAfSelfPrint(">>>>>>>>>>1111New data package\r\n");
// iKonkeAfSelfPrint(">>>>>>>>>>1111New data package\r\n");
recving = false;
}
lastTime = currentTime;
......
......@@ -161,28 +161,22 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
/*begin add by maozj 20191127 add get gateway EUI64*/
EmberNodeId sender = emberGetSender();
// Gateway Eui64 address cache.
EmberEUI64 eui64GatewayAddr = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberEUI64 tmpEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberStatus status = emberGetSenderEui64(eui64GatewayAddr);
EmberEUI64 senderEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberEUI64 invalidEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
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]
// , eui64GatewayAddr[5], eui64GatewayAddr[4], eui64GatewayAddr[3], eui64GatewayAddr[2]
// , eui64GatewayAddr[1], eui64GatewayAddr[0]);
iKonkeAfSelfPrint("####emberAfPreCommandReceivedCallback,dir(%d),mfgSpe(%d),id(%d),cluSpe(%d),####\r\n", cmd->direction, cmd->mfgSpecific, cmd->apsFrame->clusterId, cmd->clusterSpecific);
//source is gateway
if (sender == 0x0000){
kNwkGetGateWayEui64(eui64GatewayAddr);
//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(eui64GatewayAddr, tmpEui64, EUI64_SIZE)){
kNwkGetGateWayEui64(senderEui64);
if(MEMCOMPARE(senderEui64, invalidEui64, EUI64_SIZE)){
// iKonkeAfSelfPrint("Get EUI64 PreCommand is existed\r\n");
}else {
EmberStatus status = emberGetSenderEui64(eui64GatewayAddr);
EmberStatus status = emberGetSenderEui64(senderEui64);
if (status == EMBER_SUCCESS){
if(kUtilsIsValidEui64Addr(eui64GatewayAddr)) {
kNwkSetGateWayEui64(eui64GatewayAddr);
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]);
if(kUtilsIsValidEui64Addr(senderEui64)) {
kNwkSetGateWayEui64(senderEui64);
}
}else {
iKonkeAfSelfPrint("Get EUI64 failed\r\n");
......@@ -336,6 +330,7 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
case (ZCL_ON_OFF_CLUSTER_ID):
{
ZclOnOffControlInfoSt ZclOnOffControlInfo;
if( (cmd->clusterSpecific) && (cmd->direction == (uint8_t)ZCL_DIRECTION_CLIENT_TO_SERVER) &&
(!cmd->mfgSpecific)) {
switch(cmd->commandId) {
......@@ -345,7 +340,13 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
{
//add by maozj 20191224
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;
......@@ -398,17 +399,22 @@ bool emberAfPreCommandReceivedCallback(EmberAfClusterCommand* cmd )
{
case 0x00:
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:
{
// 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;
}
default:
break;
}
......@@ -1480,13 +1486,16 @@ bool kZclClusterGetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster,
zclReportPermit->sceneRecallFlg = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg;
zclReportPermit->reportGatewayEnable = g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable;
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 false;
}
//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;
......@@ -1503,6 +1512,12 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster,
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable;
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;
}
}else { //广播
......@@ -1514,6 +1529,12 @@ bool kZclClusterSetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster,
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].sceneRecallFlg = sceneRecallFlg;
g_stZclClusterReportPermitTable.g_stZclReportPermitList[index].reportGatewayEnable = reportGatewayEnable;
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;
}
}
......
......@@ -11,6 +11,7 @@
#include "kkAllInOneFloorHeatingMG21SDK665V1.h"
#define DEFAULT_TRANSITION_TIME_S (3)
#define RESET_ENDPOINT 0xFE
// sleepy device poll procedule control manager
typedef struct tag_poll_control_manager {
......@@ -27,6 +28,9 @@ typedef struct tag_zcl_report_table{
bool sceneRecallFlg;
bool reportGatewayEnable;
bool reportChildDeviceEnable;
EmberEUI64 maskEui64Addr;
uint8_t dest_endpoint;
}ZclReportTableSt;
typedef struct {
......@@ -37,7 +41,16 @@ typedef struct {
bool isMultiContorl; //whether multi-control, used to judge whether send response or multi-control
bool isSendResponse;
}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{ EOOS_OFF = 0, EOOS_ON, EOOS_UNKNOW }OnOffStatusEnum;
......@@ -146,8 +159,7 @@ void kZclClusterPermitReportTableInit(BindObjSt clusterBindList[], uint8_t size)
bool kZclClusterGetPermitReportInfo(uint8_t endpoint, EmberAfClusterId cluster, ZclReportTableSt *zclReportPermit);
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);
#if 0
/* DESP: Send different data separately according to whether or not to bind multiple controllers
* Auth: maozj.20200511.
......
......@@ -25,6 +25,7 @@ uint8_t g_tmp_buffer[OPTTUNNEL_CHUNK_MAXLEN+1] = { 0 }, g_tmp_length = 0;
EmberEventControl kOptTunnelMtoRRDelayRspEventControl;
static uint8_t ucReceived_Many_To_One_Cmd = 0;
EmberAfStatus emAfReadOrWriteAttribute(EmberAfAttributeSearchRecord *attRecord,
EmberAfAttributeMetadata **metadata,
uint8_t *buffer,
......@@ -358,7 +359,11 @@ void kOptTunnelMtoRRDelayRspEventHandler(void )
emberEventControlSetInactive(kOptTunnelMtoRRDelayRspEventControl);
iKonkeAfSelfPrint("####### MtoO report time(%llu)\r\n", halCommonGetInt64uMillisecondTick());
//Prevent interference when reading CMEI Or ISN Or installation code, resulting in error report
if(ucReceived_Many_To_One_Cmd == 1)
{
ucReceived_Many_To_One_Cmd = 0;
kOptTunnelCommonReport(ECA_OPTDATA);
}
emberEventControlSetInactive(kOptTunnelMtoRRDelayRspEventControl);
}
......@@ -372,6 +377,7 @@ void kOptTunnelMessageResponse(OptMethodEm method, uint16_t attribute_id, EmberA
// command ack.
iKonkeAfSelfPrint("kOptTunnelMessageResponse ->>1 method(%d), attr(%2x), status(%d) length(%d) rspLenth(%d)\r\n",\
method, attribute_id, status, length, appResponseLength);
if( method == EOM_READ ) {
emberAfPutInt8uInResp(ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID );
}else {
......@@ -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));
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);
break;
}
......
......@@ -7,7 +7,6 @@ Release Notes:
SV1.0 20200927
1.初始版本
* ******/
#define HEART_DEBUG false
......@@ -20,7 +19,6 @@ uint8_t runStatus = RUN_STATUS_NORMAL ;
static uint8_t g_u8MessageSeqRecord = 0XFF;
//delay to report cmei and isn after network joined
#define DELAY_REPORT_DATA_AFTER_NWK_JOINED_MS (3 * 1000)
......@@ -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 {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 {RELAY_CHANNEL1_ID=1,RELAY_CHANNEL2_ID, RELAY_CHANNEL3_ID, RELAY_CHANNEL4_ID}RELAY_ID_ENUM;
......@@ -134,8 +133,9 @@ SensorStatusSt g_stSensorStatusBuffer = {
.status = 0x0,
};
extern uint8_t generatedDefaults[];
#define Software_Version 0x14
#define Software_Version 0x20
#define Hardware_Version 0x10
#define MODEID_AIR_MEIDI 0x03008611 //美的线控器
......@@ -538,7 +538,7 @@ void kUserScheduleTaskHandlerCallback(uint8_t schedule_id )
kOptTunnelCommonReport(ECA_OPTDATA);
}
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
if (g_bIsNotKonkeGatewayFirstReportedFlg \
......@@ -594,33 +594,36 @@ EmberAfStatus emberAfPreAttributeChangeCallback(int8u endpoint,
int8u size,
int8u* value)
{
if(Recall_scence_flag == 0 )
return EMBER_ZCL_STATUS_SUCCESS;
switch(clusterId)
{
case ZCL_ON_OFF_CLUSTER_ID:
{
if(Recall_scence_flag == 0 )
return EMBER_ZCL_STATUS_SUCCESS;
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 ))
||( (endpoint == 2)&&(sDevice_attr_last.floor_heating.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);
}
}
break;
case ZCL_THERMOSTAT_CLUSTER_ID:
{
if(Recall_scence_flag == 0 )
return EMBER_ZCL_STATUS_SUCCESS;
if(attributeId == ZCL_SYSTEM_MODE_ATTRIBUTE_ID)
{
uint8_t system = value[0];
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)) )
{
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);
}
}
......@@ -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)) ||
((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);
}
}
}
}
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:
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);
return EMBER_ZCL_STATUS_SUCCESS;
......@@ -660,7 +680,7 @@ void kDelayClearFlagEventHandler(void)
void kZclClusterRecallSceneCallback(uint8_t endpoint, uint16_t cluster, uint8_t command_id
, 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");
if(cluster == ZCL_SCENES_CLUSTER_ID)
{
......@@ -684,7 +704,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI
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");
return false;
}
......@@ -735,7 +755,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI
// //kOptTunnelReportingPlagiarizeOriginal(endpoint, clusterId, attributeId, CLUSTER_MASK_SERVER);
// return false;
// }
//kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false);
//kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
return true;
}
}
......@@ -747,13 +767,13 @@ void kOnOffDelayReportAttrEventHandler(void)
{
iKonkeAfSelfPrint("##############kOnOffDelayReportAttrEventHandler\r\n");
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);
}
void kSystemModeDelayReportAttrEventHandler(void)
{
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);
}
......@@ -761,14 +781,14 @@ void kTargetTemperDelayReportAttrEventHandler(void)
{
iKonkeAfSelfPrint("##############kTargetTemperDelayReportAttrEventHandler\r\n");
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);
}
void kEndpoint4DelayReportAttrEventHandler(void)
{
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;
emberAfWriteAttribute(4,
ZCL_ON_OFF_CLUSTER_ID,
......@@ -961,6 +981,16 @@ void UartMsgProcessHandle(UMsgNodeSt *pMsgNode )
* PARAM[pframe][in/out] input command frame content, output command process result ack content.
* 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 )
{
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
iKonkeAfSelfPrint("%X ", args_in_out[index]);
}
iKonkeAfSelfPrint("--------------------------------------\r\n"); //test
if(opcode == 0)
{
//读取MCU的状态信息
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");
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) ) ) //未读到空调品牌
//同步mcu属性
if( (g_sDevice_Info.mcu_software_version == 0xff))
{
Query_MCU_Info();
Rewite_Attr_Witchout_Report();
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) {
case (0x00): // get the device snap.
......@@ -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_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.on_off;
......@@ -1062,7 +1109,7 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
if (mode != 0x00 && mode != 0x01){
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}else {
kSetIndicatorNotDisturbModeFlg(mode);
//kSetIndicatorNotDisturbModeFlg(mode);
if(channel == 0)
Set_No_Disturb_Mode(g_sDevice_Info.Device_Type,mode);
else
......@@ -1156,12 +1203,12 @@ void kkSystemSetUpEventHandler(void )
kSystemSetupStatusSet(SETUP_STATUS_EXIT, 1500);
break;
case SETUP_STATUS_EXIT:
kZclClusterSetPermitReportInfo(1, ZCL_DIAGNOSTICS_CLUSTER_ID, true, false, true, false);
kZclClusterSetPermitReportInfo(1, ZCL_POWER_CONFIG_CLUSTER_ID, true, false, true, false);
kZclClusterSetPermitReportInfo(1, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false);
kZclClusterSetPermitReportInfo(1, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true);
kZclClusterSetPermitReportInfo(1, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true);
kZclClusterSetPermitReportInfo(1, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
kZclClusterSetPermitReportInfo(1, ZCL_DIAGNOSTICS_CLUSTER_ID, true, false, true, false, invalidMaskEui64, RESET_ENDPOINT);
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, invalidMaskEui64, RESET_ENDPOINT);
kZclClusterSetPermitReportInfo(1, ZCL_THERMOSTAT_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
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, invalidMaskEui64, RESET_ENDPOINT);
g_u8SystemSetupStatus = SETUP_STATUS_INIT;
break;
......@@ -1306,7 +1353,7 @@ static void kClearBatteryVoltageAndPercentage(void)
{
#if 1
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_PERCENTAGE_REMAINING_ATTRIBUTE_ID, &value, ZCL_INT8U_ATTRIBUTE_TYPE);
#endif
......
......@@ -43,12 +43,12 @@ static void First_Synic_air_Attribute_Data(AIR_ATTR_ST *data,uint8_t channel_id)
{
//开关
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,
CLUSTER_MASK_SERVER,&data->on_off,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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,
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)
real_temper = 65536 - temp;
}
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,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
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,
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)
set_temper = (data->set_temperature)*10;
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,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
//模式
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,
CLUSTER_MASK_SERVER,&data->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
//风速
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,
CLUSTER_MASK_SERVER,&data->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
//错误码
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,
CLUSTER_MASK_SERVER,&data->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
//童锁
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,
CLUSTER_MASK_SERVER,&data->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
//延时关机时间
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,
CLUSTER_MASK_SERVER,&data->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
//风向
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,
CLUSTER_MASK_SERVER,&data->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->air_wind_direct,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
//屏保时间
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,
CLUSTER_MASK_SERVER,(uint8_t *)&data->screen_save_time,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,(uint8_t *)&data->screen_save_time,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
//滤网清洗时间
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,
CLUSTER_MASK_SERVER,(uint8_t *)&data->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,(uint8_t *)&data->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
//校准温度
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,
CLUSTER_MASK_SERVER,&data->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&data->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
//勿扰模式
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,
CLUSTER_MASK_SERVER,&data->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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,
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)
{
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,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_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, 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);
}
......@@ -222,103 +227,103 @@ void First_Synic_FloorHeatingAttribute_Data(FLOOR_HEATING_ATTR *device_attr,uint
real_temper = 65536 - temp;
}
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,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_BOOLEAN_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
int16s set_temper = device_attr->set_temperature*10;
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,
CLUSTER_MASK_SERVER,(uint8_t *)&set_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Target_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&set_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
uint8_t screen_save = device_attr->screen_save_time;
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,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_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, true, invalidMaskEui64, RESET_ENDPOINT);
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);
}
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,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_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, true, invalidMaskEui64, RESET_ENDPOINT);
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);
}
......@@ -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)
{
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,
CLUSTER_MASK_SERVER,&device_attr->on_off,ZCL_BOOLEAN_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, 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);
}
......@@ -346,113 +351,113 @@ void First_Sync_FanAttribute_Data(uint8_t channel_id , FAN_ATTR_ST *device_attr)
real_temper = 65536 - temp;
}
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,
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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Current_Temperature,
CLUSTER_MASK_SERVER,(uint8_t *)&real_temper,ZCL_INT16S_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Fan_Mode,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Delay_Off,
CLUSTER_MASK_SERVER,&device_attr->power_off_time,ZCL_INT8U_ATTRIBUTE_TYPE);
}
uint8_t screen_save = device_attr->screen_save_time;
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,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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,
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, 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,
CLUSTER_MASK_SERVER,(uint8_t *)&device_attr->filter_wash_time,ZCL_INT16U_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_ATTRIBUTE_TYPE);
}
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,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_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, true, invalidMaskEui64, RESET_ENDPOINT);
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);
}
......@@ -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)
{
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);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
else
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false);
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);
}
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,
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.air_condition.on_off = device_attr->on_off;
}
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
temp = temp*10;
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,
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,
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",
device_attr->real_temperature,sDevice_attr_last.air_condition.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
{
int16s set_temper = 0;
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))
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
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,
CLUSTER_MASK_SERVER,(uint8_t *)&set_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, true, invalidMaskEui64, RESET_ENDPOINT);
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);
}
iKonkeAfSelfPrint("set_temperature current = %d,last = %d\r\n",
device_attr->set_temperature,sDevice_attr_last.air_condition.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(channel_id == g_sDevice_Info.Device_Type){
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
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,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
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",
device_attr->system_type,sDevice_attr_last.air_condition.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(channel_id == g_sDevice_Info.Device_Type){
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, false);
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
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);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, false, true);
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,
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,
CLUSTER_MASK_SERVER,&device_attr->wind_speed,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
iKonkeAfSelfPrint("wind_speed current = %d,last = %d\r\n",
device_attr->wind_speed,sDevice_attr_last.air_condition.wind_speed);
sDevice_attr_last.air_condition.wind_speed = device_attr->wind_speed;
}
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);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
//不需要多控
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_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.air_condition.error = device_attr->error;
}
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, false);
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);
iKonkeAfSelfPrint("write result =0x%x\r\n",status);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
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,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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(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_Delay_Off,
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;
}
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, false);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Swing_Mode,
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);
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_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;
}
if(sDevice_attr_last.air_condition.screen_save_time != 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);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Screen_Saver_Time,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
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,
CLUSTER_MASK_SERVER,&screen_save,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
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(channel_id == g_sDevice_Info.Device_Type){
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,
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);
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_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;
}
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,
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;
}
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);
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);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
//不需要多控
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,
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;
}
if(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;
}
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);
}
......@@ -734,23 +675,17 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN
/**************************************Z3标准上报**************************************************/
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))
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
else
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false);
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);
}
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,
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.floor_heating.on_off = device_attr->on_off;
}
if(sDevice_attr_last.floor_heating.real_temperature != device_attr->real_temperature)
......@@ -764,20 +699,15 @@ void FloorHeatingAttributeChangedReceiveReport(uint8_t channel_id , FLOOR_HEATIN
temp = temp*10;
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,
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,
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",
device_attr->real_temperature,sDevice_attr_last.floor_heating.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
if(sDevice_attr_last.floor_heating.set_temperature != device_attr->set_temperature)
{
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))
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
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,
CLUSTER_MASK_SERVER,(uint8_t *)&set_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, true, invalidMaskEui64, RESET_ENDPOINT);
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;
}
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))
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
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,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_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, true, invalidMaskEui64, RESET_ENDPOINT);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
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;
}
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);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
//不需要多控
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_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.floor_heating.error = device_attr->error;
}
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);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
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,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
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(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_Delay_Off,
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;
}
if(sDevice_attr_last.floor_heating.screen_save_time != 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,
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;
}
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,
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;
}
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);
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);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
//不需要多控
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,
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;
}
print_all_attr_vaule(channel_id);
......@@ -931,22 +816,17 @@ void FanAttributeChangedReceiveReport(uint8_t channel_id , FAN_ATTR_ST *device_a
/**************************************Z3标准上报**************************************************/
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))
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false);
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, true, false, false, invalidMaskEui64, RESET_ENDPOINT);
else
kZclClusterSetPermitReportInfo(channel_id, ZCL_ON_OFF_CLUSTER_ID, true, false, true, false);
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);
}
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,
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;
}
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
temp = temp*10;
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,
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,
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;
}
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, false);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
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_System_Mode,
CLUSTER_MASK_SERVER,&device_attr->system_type,ZCL_ENUM8_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.system_type = device_attr->system_type;
}
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, false);
kZclClusterSetPermitReportInfo(channel_id, ZCL_FAN_CONTROL_CLUSTER_ID, true, false, true, true, invalidMaskEui64, RESET_ENDPOINT);
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);
}
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,
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;
}
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);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
//不需要多控
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_Error_Code,
CLUSTER_MASK_SERVER,&device_attr->error,ZCL_INT8U_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.error = device_attr->error;
}
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, false);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Child_Lock,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
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,
CLUSTER_MASK_SERVER,&device_attr->lock_flage,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.lock_flage = device_attr->lock_flage;
}
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, 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_Delay_Off,
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;
}
if(sDevice_attr_last.fan.screen_save_time != 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,
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;
}
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, 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_Filter_Clean_Time,
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;
}
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);
emberAfWriteAttribute(channel_id,ZCL_OPT_TUNNEL_CLUSTER_ID,FCC0_ATTR_Calibration_Temperature,
CLUSTER_MASK_SERVER,&device_attr->correct_temperature,ZCL_INT8S_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, true, false, invalidMaskEui64, RESET_ENDPOINT);
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;
}
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);
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);
}
else{
kZclClusterSetPermitReportInfo(channel_id, ZCL_OPT_TUNNEL_CLUSTER_ID, true, false, true, true);
//不需要多控
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,
CLUSTER_MASK_SERVER,&device_attr->no_disturb_mode,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}
sDevice_attr_last.fan.no_disturb_mode = device_attr->no_disturb_mode;
}
print_all_attr_vaule(channel_id);
......@@ -1130,12 +954,15 @@ void Command_Process_Handler(DATA_FIELDED *Data_Field)
{
uint8_t Net_cmd = Data_Field->uiPaload[0];
if(Net_cmd) //入网
{
if(kNwkGetCurrentStatus() == ENS_LEAVED)
{
kNwkFactoryReset(false);
//steering timeout can be set
iKonkeAfSelfPrint("#####Start Steering\r\n");
kNwkJoiningStart(NWK_STEERING_TIMEOUT_MS, JoinCompleteCallback);
}
}
else
{
bool status = false;
......@@ -1410,7 +1237,7 @@ uint8_t uart_send_data(UMsgNodeSt *uMsgNode,uint8_t ucControl_Field,uint8_t uiSe
else
uMsgNode->ack = NULL;
uMsgNode->ack_length = 0;
return kUartMsgSent(uMsgNode ,0);
return kUartMsgSent(uMsgNode ,(isGetResult?200:0));
}
uint16_t check_sum( uint8_t* msg, uint8_t len)
{
......
......@@ -96,6 +96,7 @@ typedef struct
uint8_t no_disturb_mode; //勿扰模式
uint8_t air_brand; //空调品牌
uint8_t air_type; //空调类型
uint8_t operate_mode; //风机盘管模式
}__attribute__((packed))AIR_ATTR_ST;
typedef struct
{
......
......@@ -43,22 +43,24 @@ efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flas
on
}
{setupId:debugConfiguration
off
on
area name off
appSerial=1
compile,DEBUG
compile,EMBER_AF_PLUGIN_NVM3
compile,EMBER_AF_PLUGIN_REPORTING
compile,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY
compile,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY
compile,ON_OFF_CLUSTER
compile,SCENES_CLUSTER
compile,ZDO
enable,DEBUG
enable,EMBER_AF_PLUGIN_NVM3
enable,EMBER_AF_PLUGIN_REPORTING
enable,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY
enable,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY
enable,ON_OFF_CLUSTER
enable,SCENES_CLUSTER
disable,ZDO
}
{setupId:eventConfiguration
ikkUartRecvLoopCheckEventControl,ikkUartRecvLoopCheckEventHandler
......@@ -78,6 +80,7 @@ kDelayClearSequenceEventControl,kDelayClearSequenceEventHandler
ikkGetBindInfoEventControl,ikkGetBindInfoEventHandler
ikkDelayRebootEventControl,ikkDelayRebootEventHandler
kDelayClearFlagEventControl,kDelayClearFlagEventHandler
ikkReportInfoCheckEventControl,ikkReportInfoCheckEventHandler
}
{setupId:halOptions
}
......@@ -140,6 +143,20 @@ beginAttrList:OPTIONAL
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: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
beginAttrList:SAVED_TO_FLASH
cl:0x0006, at:0x0000, di:server, mf:0x0000
......@@ -153,23 +170,31 @@ beginAttrList:REPORTABLE
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: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
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:0x0004, di:server, mf:0x0000 => Konke
cl:0x0000, at:0x0005, di:server, mf:0x0000 => 3AFE101003008611
cl:0x0000, at:0x0006, di:server, mf:0x0000 => 20201126
cl:0x0000, at:0x0005, di:server, mf:0x0000 => 3AFE211003008611
cl:0x0000, at:0x0006, di:server, mf:0x0000 => 20210309
cl:0x0000, at:0x0007, di:server, mf:0x0000 => 0x01
cl:0x0000, at:0x0000, 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
cl:0x0402, 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: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
configuredNetwork:*type:ZIGBEE_PRO, name:Primary
beginEndpointType:Primary
......@@ -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_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_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_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_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 @@
extern EmberEventControl emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventControl; \
extern EmberEventControl ikkDelayRebootEventControl; \
extern EmberEventControl ikkGetBindInfoEventControl; \
extern EmberEventControl ikkReportInfoCheckEventControl; \
extern EmberEventControl ikkUartMsgDispatchEventControl; \
extern EmberEventControl ikkUartRecvLoopCheckEventControl; \
extern EmberEventControl ikkUartSentLoopCheckEventControl; \
......@@ -50,6 +51,7 @@
extern void emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventHandler(void); \
extern void ikkDelayRebootEventHandler(void); \
extern void ikkGetBindInfoEventHandler(void); \
extern void ikkReportInfoCheckEventHandler(void); \
extern void ikkUartMsgDispatchEventHandler(void); \
extern void ikkUartRecvLoopCheckEventHandler(void); \
extern void ikkUartSentLoopCheckEventHandler(void); \
......@@ -98,6 +100,7 @@
{ &emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventControl, emberAfPluginUpdateTcLinkKeyBeginTcLinkKeyUpdateEventHandler }, \
{ &ikkDelayRebootEventControl, ikkDelayRebootEventHandler }, \
{ &ikkGetBindInfoEventControl, ikkGetBindInfoEventHandler }, \
{ &ikkReportInfoCheckEventControl, ikkReportInfoCheckEventHandler }, \
{ &ikkUartMsgDispatchEventControl, ikkUartMsgDispatchEventHandler }, \
{ &ikkUartRecvLoopCheckEventControl, ikkUartRecvLoopCheckEventHandler }, \
{ &ikkUartSentLoopCheckEventControl, ikkUartSentLoopCheckEventHandler }, \
......@@ -132,6 +135,7 @@
"Update TC Link Key Plugin BeginTcLinkKeyUpdate", \
"Ikk delay reboot event control", \
"Ikk get bind info event control", \
"Event data", \
"Ikk uart msg dispatch event control", \
"Ikk uart recv loop check event control", \
"Ikk uart sent loop check event control", \
......
......@@ -16,6 +16,8 @@
EmberEventControl emberAfIdentifyClusterServerTickCallbackControl3; \
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl3; \
extern EmberEventControl emberAfPluginFormAndJoinCleanupEventControl; \
extern EmberEventControl emberAfPluginGreenPowerClientChannelEventControl; \
extern EmberEventControl emberAfPluginGreenPowerClientExitCommissioningEventControl; \
extern EmberEventControl emberAfPluginNetworkSteeringFinishSteeringEventControl; \
extern EmberEventControl emberAfPluginOtaStorageSimpleEepromPageEraseEventControl; \
extern EmberEventControl emberAfPluginReportingTickEventControl; \
......@@ -39,6 +41,8 @@
extern EmberEventControl kUserJoinSucceedProcedureEventControl; \
extern EmberEventControl kkSystemSetUpEventControl; \
extern void emberAfPluginFormAndJoinCleanupEventHandler(void); \
extern void emberAfPluginGreenPowerClientChannelEventHandler(void); \
extern void emberAfPluginGreenPowerClientExitCommissioningEventHandler(void); \
extern void emberAfPluginNetworkSteeringFinishSteeringEventHandler(void); \
extern void emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler(void); \
extern void emberAfPluginReportingTickEventHandler(void); \
......@@ -85,6 +89,8 @@
{ &emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallbackWrapperFunction3 }, \
{ &emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3 }, \
{ &emberAfPluginFormAndJoinCleanupEventControl, emberAfPluginFormAndJoinCleanupEventHandler }, \
{ &emberAfPluginGreenPowerClientChannelEventControl, emberAfPluginGreenPowerClientChannelEventHandler }, \
{ &emberAfPluginGreenPowerClientExitCommissioningEventControl, emberAfPluginGreenPowerClientExitCommissioningEventHandler }, \
{ &emberAfPluginNetworkSteeringFinishSteeringEventControl, emberAfPluginNetworkSteeringFinishSteeringEventHandler }, \
{ &emberAfPluginOtaStorageSimpleEepromPageEraseEventControl, emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler }, \
{ &emberAfPluginReportingTickEventControl, emberAfPluginReportingTickEventHandler }, \
......@@ -117,6 +123,8 @@
"Identify Cluster Server EP 3", \
"Over the Air Bootloading Cluster Client EP 3", \
"Form and Join Library Plugin Cleanup", \
"Green Power Client Plugin Channel", \
"Green Power Client Plugin ExitCommissioning", \
"Network Steering Plugin FinishSteering", \
"OTA Simple Storage EEPROM Driver Plugin PageErase", \
"Reporting Plugin Tick", \
......
......@@ -4786,6 +4786,7 @@
#define ZCL_FanMode_ATTRIBUTE_ID 0x100A // Ver.: always
#define ZCL_OnOff_ATTRIBUTE_ID 0x100B // Ver.: always
#define ZCL_NoDisturbMode_ATTRIBUTE_ID 0x100C // Ver.: always
#define ZCL_RunMode_ATTRIBUTE_ID 0x100D // Ver.: always
#endif // SILABS_EMBER_AF_ATTRIBUTE_ID
......@@ -1389,35 +1389,6 @@ bool emberAfPluginReportingGetDefaultReportingConfigCallback(EmberAfPluginReport
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
*
* This function is called by the framework when it is about to pass a message
......
......@@ -90,14 +90,14 @@ def GBL():
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)
print (" ")
print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.")
print ("It uses the parameters defined there. ")
print (" ")
# 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
OTA_COMMAND = WINE_CMD + IMAGE_BUILDER
OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR)
......
......@@ -90,14 +90,14 @@ def GBL():
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)
print (" ")
print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.")
print ("It uses the parameters defined there. ")
print (" ")
# 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
OTA_COMMAND = WINE_CMD + IMAGE_BUILDER
OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR)
......
......@@ -222,7 +222,7 @@
<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_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>
<name>CCPreprocFile</name>
......@@ -610,7 +610,7 @@
<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_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>
<name>AList</name>
......
......@@ -64,6 +64,7 @@
#define ZCL_USING_OPT_TUNNEL_CLUSTER_FanMode_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_OnOff_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_DEFAULT_RESPONSE_POLICY_CONDITIONAL
......@@ -204,20 +205,20 @@
/**** Debug printing section ****/
// Global switch
// #define EMBER_AF_PRINT_ENABLE
#define EMBER_AF_PRINT_ENABLE
// Individual areas
#define EMBER_AF_PRINT_CORE 0x0001
#define EMBER_AF_PRINT_APP 0x0002
#define EMBER_AF_PRINT_ATTRIBUTES 0x0004
#define EMBER_AF_PRINT_ZDO 0x0008
#define EMBER_AF_PRINT_DEBUG 0x0002
#define EMBER_AF_PRINT_APP 0x0004
#define EMBER_AF_PRINT_ATTRIBUTES 0x0008
#define EMBER_AF_PRINT_SCENES_CLUSTER 0x0010
#define EMBER_AF_PRINT_ON_OFF_CLUSTER 0x0020
#define EMBER_AF_PRINT_BITS { 0x3F }
#define EMBER_AF_PRINT_NAMES { \
"Core",\
"Debug",\
"Application",\
"Attributes",\
"ZDO (ZigBee Device Object)",\
"Scenes",\
"On/off",\
NULL\
......@@ -333,7 +334,7 @@
#define EMBER_AF_PLUGIN_NVM3
// User options for plugin NVM3 Library
#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_USER_REPACK_HEADROOM 0
......@@ -369,7 +370,7 @@
#define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION
// 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_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_EBL_VERIFICATION
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS
......
......@@ -64,6 +64,7 @@
#define ZCL_USING_OPT_TUNNEL_CLUSTER_FanMode_ATTRIBUTE
#define ZCL_USING_OPT_TUNNEL_CLUSTER_OnOff_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_DEFAULT_RESPONSE_POLICY_CONDITIONAL
......@@ -204,20 +205,20 @@
/**** Debug printing section ****/
// Global switch
// #define EMBER_AF_PRINT_ENABLE
#define EMBER_AF_PRINT_ENABLE
// Individual areas
#define EMBER_AF_PRINT_CORE 0x0001
#define EMBER_AF_PRINT_APP 0x0002
#define EMBER_AF_PRINT_ATTRIBUTES 0x0004
#define EMBER_AF_PRINT_ZDO 0x0008
#define EMBER_AF_PRINT_DEBUG 0x0002
#define EMBER_AF_PRINT_APP 0x0004
#define EMBER_AF_PRINT_ATTRIBUTES 0x0008
#define EMBER_AF_PRINT_SCENES_CLUSTER 0x0010
#define EMBER_AF_PRINT_ON_OFF_CLUSTER 0x0020
#define EMBER_AF_PRINT_BITS { 0x3F }
#define EMBER_AF_PRINT_NAMES { \
"Core",\
"Debug",\
"Application",\
"Attributes",\
"ZDO (ZigBee Device Object)",\
"Scenes",\
"On/off",\
NULL\
......@@ -333,7 +334,7 @@
#define EMBER_AF_PLUGIN_NVM3
// User options for plugin NVM3 Library
#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_USER_REPACK_HEADROOM 0
......@@ -369,7 +370,7 @@
#define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION
// 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_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_EBL_VERIFICATION
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS
......
......@@ -15,8 +15,8 @@
#if BIGENDIAN_CPU
#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 */, \
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 */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
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','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 /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x09, 0xAC, 0x2F /* 95,Default value: Green Power,gpp functionality */, \
......@@ -26,8 +26,8 @@
#else // ! BIGENDIAN_CPU
#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 */, \
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 */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
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','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 /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x2F, 0xAC, 0x09 /* 95,Default value: Green Power,gpp functionality */, \
......@@ -42,7 +42,7 @@
// Generated attributes
#define GENERATED_ATTRIBUTES { \
{ 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*/\
{ 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*/\
......@@ -104,6 +104,7 @@
{ 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*/\
{ 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[] =
{ 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, }, \
{ 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, }, \
{ 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, }, \
......@@ -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, }, \
{ 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, }, \
{ 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, }, \
{ 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, }, \
......@@ -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, }, \
{ 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, }, \
{ 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, }, \
}
// Endpoint types
#define GENERATED_ENDPOINT_TYPES { \
{ (EmberAfCluster*)&(generatedClusters[0]), 12, 71 }, \
{ (EmberAfCluster*)&(generatedClusters[12]), 9, 63 }, \
{ (EmberAfCluster*)&(generatedClusters[21]), 10, 63 }, \
{ (EmberAfCluster*)&(generatedClusters[0]), 12, 72 }, \
{ (EmberAfCluster*)&(generatedClusters[12]), 9, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[21]), 10, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[31]), 1, 27 }, \
}
......@@ -183,7 +184,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
#define ATTRIBUTE_SINGLETONS_SIZE (90)
// Total size of attribute storage
#define ATTRIBUTE_MAX_SIZE 224
#define ATTRIBUTE_MAX_SIZE 227
// Array of endpoints that are supported
#define FIXED_ENDPOINT_ARRAY { 1, 2, 3, 242 }
......@@ -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, 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, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 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, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100C, 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, 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, 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, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 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, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100C, 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, 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, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 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, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 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
......@@ -15,8 +15,8 @@
#if BIGENDIAN_CPU
#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 */, \
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 */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
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','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 /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x09, 0xAC, 0x2F /* 95,Default value: Green Power,gpp functionality */, \
......@@ -26,8 +26,8 @@
#else // ! BIGENDIAN_CPU
#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 */, \
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 */, \
8,'2','0','2','0','1','1','2','6',0,0,0,0,0,0,0,0 /* 66,Default value: Basic,date code */, \
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','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 /* 91,Default value: Over the Air Bootloading,Offset (address) into the file */, \
0x2F, 0xAC, 0x09 /* 95,Default value: Green Power,gpp functionality */, \
......@@ -42,7 +42,7 @@
// Generated attributes
#define GENERATED_ATTRIBUTES { \
{ 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*/\
{ 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*/\
......@@ -104,6 +104,7 @@
{ 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*/\
{ 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[] =
{ 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, }, \
{ 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, }, \
{ 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, }, \
......@@ -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, }, \
{ 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, }, \
{ 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, }, \
{ 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, }, \
......@@ -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, }, \
{ 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, }, \
{ 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, }, \
}
// Endpoint types
#define GENERATED_ENDPOINT_TYPES { \
{ (EmberAfCluster*)&(generatedClusters[0]), 12, 71 }, \
{ (EmberAfCluster*)&(generatedClusters[12]), 9, 63 }, \
{ (EmberAfCluster*)&(generatedClusters[21]), 10, 63 }, \
{ (EmberAfCluster*)&(generatedClusters[0]), 12, 72 }, \
{ (EmberAfCluster*)&(generatedClusters[12]), 9, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[21]), 10, 64 }, \
{ (EmberAfCluster*)&(generatedClusters[31]), 1, 27 }, \
}
......@@ -183,7 +184,7 @@ const EmberAfGenericClusterFunction emberAfFuncArrayFanControlClusterServer[] =
#define ATTRIBUTE_SINGLETONS_SIZE (90)
// Total size of attribute storage
#define ATTRIBUTE_MAX_SIZE 224
#define ATTRIBUTE_MAX_SIZE 227
// Array of endpoints that are supported
#define FIXED_ENDPOINT_ARRAY { 1, 2, 3, 242 }
......@@ -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, 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, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 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, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 1, 0xFCC0, 0x100C, 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, 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, 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, 0xFCC0, 0x1000, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 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, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 2, 0xFCC0, 0x100C, 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, 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, 0x1001, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 65534, 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, 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, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1002, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1004, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1005, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1006, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1007, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1008, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x1009, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100A, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100B, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 0 }, \
{ EMBER_ZCL_REPORTING_DIRECTION_REPORTED, 3, 0xFCC0, 0x100C, CLUSTER_MASK_SERVER, 0x0000, 1, 0, 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
......@@ -91,6 +91,7 @@
#include "znet-bookkeeping.h"
#include "../00ikonke-app/general/ikk-debug.h"
#include "../00ikonke-app/general/ikk-cluster.h"
//------------------------------------------------------------------------------
#define INVALID_MESSAGE_TAG 0xFF
......@@ -564,15 +565,8 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame,
uint8_t endpoint_mark = apsFrame->sourceEndpoint;
uint16_t cluster_mark = apsFrame->clusterId;
//add by maozj 20200426
typedef struct tag_zcl_report_table{
uint8_t endpoint;
EmberAfClusterId clusterId;
bool reportEnable;
bool sceneRecallFlg;
bool reportGatewayEnable;
bool reportChildDeviceEnable;
}ZclReportTableSt;
EmberEUI64 invalidMaskEui64 = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
EmberEUI64 eui64GatewayAddr;
extern void kNwkGetGateWayEui64(EmberEUI64 eui64);
kNwkGetGateWayEui64(eui64GatewayAddr);
......@@ -592,22 +586,37 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame,
#if 1
//add by maozj 20200512, send to gateway,and multi-control report
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)) \
|| (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;
}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;
}
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){
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;
}
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
// if (!MEMCOMPARE(eui64GatewayAddr, binding.identifier, EUI64_SIZE)){
iKonkeAfSelfPrint("###6666 send\r\n");
status = send(EMBER_OUTGOING_VIA_BINDING,
i,
apsFrame,
......@@ -625,8 +634,8 @@ EmberStatus emberAfSendUnicastToBindingsWithCallback(EmberApsFrame *apsFrame,
}
kZclClusterGetPermitReportInfo(endpoint_mark, cluster_mark, &zclReportInfo);
if (zclReportInfo.reportChildDeviceEnable == true){
kZclClusterSetPermitReportInfo(endpoint_mark, zclReportInfo.reportEnable, zclReportInfo.sceneRecallFlg, zclReportInfo.reportGatewayEnable, false);
if (zclReportInfo.reportChildDeviceEnable == true){ // clear report child attr
kZclClusterSetPermitReportInfo(endpoint_mark, zclReportInfo.cluster, zclReportInfo.reportEnable, zclReportInfo.sceneRecallFlg, zclReportInfo.reportGatewayEnable, false, invalidMaskEui64, RESET_ENDPOINT);
}
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