From 4eb4af8eb68102615cf5a4d161745c9441109366 Mon Sep 17 00:00:00 2001 From: MartB Date: Mon, 4 Apr 2022 00:43:03 +0200 Subject: [PATCH] Actually store all start-up settings in nvram now, and do so periodically! --- sampleLight.c | 2 -- sampleLightEpCfg.c | 4 ++-- zcl_sampleLightCb.c | 26 ++++++++++++++++++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/sampleLight.c b/sampleLight.c index 2a9a0d9..ca5cc7f 100644 --- a/sampleLight.c +++ b/sampleLight.c @@ -241,9 +241,7 @@ void app_task(void) report_handler(); -#if 0 /* NOTE: If set to '1', the latest status of lighting will be stored. */ sampleLightAttrsChk(); -#endif } } diff --git a/sampleLightEpCfg.c b/sampleLightEpCfg.c index 22dc1c2..1830bf9 100644 --- a/sampleLightEpCfg.c +++ b/sampleLightEpCfg.c @@ -290,8 +290,8 @@ const zclAttrInfo_t lightColorCtrl_attrTbl[] = {ZCL_ATTRID_ENHANCED_COLOR_MODE, ZCL_DATA_TYPE_ENUM8, ACCESS_CONTROL_READ, (u8 *)&g_zcl_colorCtrlAttrs.enhancedColorMode}, {ZCL_ATTRID_COLOR_CAPABILITIES, ZCL_DATA_TYPE_BITMAP16, ACCESS_CONTROL_READ, (u8 *)&g_zcl_colorCtrlAttrs.colorCapabilities}, {ZCL_ATTRID_NUMBER_OF_PRIMARIES, ZCL_DATA_TYPE_UINT8, ACCESS_CONTROL_READ, (u8 *)&g_zcl_colorCtrlAttrs.numOfPrimaries}, - {ZCL_ATTRID_CURRENT_X, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ, (u16 *)&g_zcl_colorCtrlAttrs.currentX}, - {ZCL_ATTRID_CURRENT_Y, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ, (u16 *)&g_zcl_colorCtrlAttrs.currentY}, + {ZCL_ATTRID_CURRENT_X, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u16 *)&g_zcl_colorCtrlAttrs.currentX}, + {ZCL_ATTRID_CURRENT_Y, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u16 *)&g_zcl_colorCtrlAttrs.currentY}, {ZCL_ATTRID_CURRENT_HUE, ZCL_DATA_TYPE_UINT8, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u8 *)&g_zcl_colorCtrlAttrs.currentHue}, {ZCL_ATTRID_ENHANCED_CURRENT_HUE, ZCL_DATA_TYPE_UINT16, ACCESS_CONTROL_READ, (u16 *)&g_zcl_colorCtrlAttrs.enhancedCurrentHue}, {ZCL_ATTRID_CURRENT_SATURATION, ZCL_DATA_TYPE_UINT8, ACCESS_CONTROL_READ | ACCESS_CONTROL_REPORTABLE, (u8 *)&g_zcl_colorCtrlAttrs.currentSaturation}, diff --git a/zcl_sampleLightCb.c b/zcl_sampleLightCb.c index 26b80fc..5223f7e 100644 --- a/zcl_sampleLightCb.c +++ b/zcl_sampleLightCb.c @@ -148,17 +148,31 @@ static void sampleLight_zclReadRspCmd(zclReadRspCmd_t *pReadRspCmd) */ static void sampleLight_zclWriteReqCmd(u16 clusterId, zclWriteCmd_t *pWriteReqCmd) { + // Check if we got the right clusters, if not return early + if (clusterId != ZCL_CLUSTER_GEN_ON_OFF && clusterId != ZCL_CLUSTER_GEN_LEVEL_CONTROL && clusterId != ZCL_CLUSTER_LIGHTING_COLOR_CONTROL) { + return; + } + u8 numAttr = pWriteReqCmd->numAttr; zclWriteRec_t *attr = pWriteReqCmd->attrList; - if (clusterId == ZCL_CLUSTER_GEN_ON_OFF) + // This iterates over the attributes and double checks the attributes are set correctly, so we dont violate the spec. + for (u8 i = 0; i < numAttr; i++) { - for (u8 i = 0; i < numAttr; i++) + if (clusterId == ZCL_CLUSTER_GEN_ON_OFF && attr[i].attrID == ZCL_ATTRID_START_UP_ONOFF) { - if (attr[i].attrID == ZCL_ATTRID_START_UP_ONOFF) - { - zcl_onOffAttr_save(); - } + zcl_onOffAttr_save(); + break; + } + else if (clusterId == ZCL_CLUSTER_LIGHTING_COLOR_CONTROL && attr[i].attrID == ZCL_ATTRID_START_UP_COLOR_TEMPERATURE_MIREDS) + { + zcl_colorCtrlAttr_save(); + break; + } + else if (clusterId == ZCL_CLUSTER_GEN_LEVEL_CONTROL && attr[i].attrID == ZCL_ATTRID_LEVEL_START_UP_CURRENT_LEVEL) + { + zcl_levelAttr_save(); + break; } } }