Skip to content

Commit

Permalink
save and restore temp display mode
Browse files Browse the repository at this point in the history
  • Loading branch information
devbis committed Nov 4, 2023
1 parent 2ca7dcc commit fb9a740
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/app_cfg.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ extern "C" {

#define DEFAULT_POLL_RATE (10 * (4 * POLL_RATE_QUARTERSECONDS))

#define NV_ITEM_ZCL_THERMOSTAT_UI_CFG (NV_ITEM_APP_GP_TRANS_TABLE + 1) // see sdk/proj/drivers/drv_nv.h

/**********************************************************************
* Stack configuration
*/
Expand Down
1 change: 1 addition & 0 deletions src/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ void user_app_init(void)
/* Register endPoint */
af_endpointRegister(SENSOR_DEVICE_ENDPOINT, (af_simple_descriptor_t *)&sensorDevice_simpleDesc, zcl_rx_handler, NULL);

zcl_thermostatDisplayMode_restore();
zcl_reportingTabInit();

/* Register ZCL specific cluster information */
Expand Down
10 changes: 10 additions & 0 deletions src/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,14 @@ typedef struct _comfort_t {
u16 h[2];
} scomfort_t;

/**
* @brief Defined for saving thermostat attributes
*/
typedef struct {
u8 displayMode;
} zcl_nv_thermostatUiCfg_t;


/**********************************************************************
* GLOBAL VARIABLES
*/
Expand Down Expand Up @@ -160,5 +168,7 @@ void sensorDevice_leaveCnfHandler(nlme_leave_cnf_t *pLeaveCnf);
void sensorDevice_leaveIndHandler(nlme_leave_ind_t *pLeaveInd);
void sensorDevice_otaProcessMsgHandler(u8 evt, u8 status);

nv_sts_t zcl_thermostatDisplayMode_save(void);
nv_sts_t zcl_thermostatDisplayMode_restore(void);

#endif /* _DEVICE_H_ */
73 changes: 72 additions & 1 deletion src/sensorEpCfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ const zclAttrInfo_t relative_humdity_attrTbl[] =
#ifdef ZCL_THERMOSTAT_UI_CFG
zcl_thermostatUICfgAttr_t g_zcl_thermostatUICfgAttrs =
{
.displayMode = 0x0000,
.displayMode = 0x00,
};

const zclAttrInfo_t thermostat_ui_cfg_attrTbl[] =
Expand Down Expand Up @@ -321,3 +321,74 @@ u8 SENSOR_DEVICE_CB_CLUSTER_NUM = (sizeof(g_sensorDeviceClusterList)/sizeof(g_se
/**********************************************************************
* FUNCTIONS
*/

/*********************************************************************
* @fn zcl_thermostatDisplayMode_save
*
* @brief
*
* @param None
*
* @return
*/
nv_sts_t zcl_thermostatDisplayMode_save(void)
{
nv_sts_t st = NV_SUCC;

#ifdef ZCL_THERMOSTAT_UI_CFG
#if NV_ENABLE
zcl_nv_thermostatUiCfg_t zcl_nv_thermostatUiCfg;

st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_THERMOSTAT_UI_CFG, sizeof(zcl_nv_thermostatUiCfg), (u8*)&zcl_nv_thermostatUiCfg);

if(st == NV_SUCC){
if((zcl_nv_thermostatUiCfg.displayMode != g_zcl_thermostatUICfgAttrs.displayMode)){
zcl_nv_thermostatUiCfg.displayMode = g_zcl_thermostatUICfgAttrs.displayMode;

// TODO: change module
st = nv_flashWriteNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_THERMOSTAT_UI_CFG, sizeof(zcl_nv_thermostatUiCfg), (u8*)&zcl_nv_thermostatUiCfg);
}
}else if(st == NV_ITEM_NOT_FOUND){
zcl_nv_thermostatUiCfg.displayMode = g_zcl_thermostatUICfgAttrs.displayMode;

// TODO: change module
st = nv_flashWriteNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_THERMOSTAT_UI_CFG, sizeof(zcl_nv_thermostatUiCfg), (u8*)&zcl_nv_thermostatUiCfg);
}
#else
st = NV_ENABLE_PROTECT_ERROR;
#endif
#endif

return st;
}

/*********************************************************************
* @fn zcl_thermostatDisplayMode_restore
*
* @brief
*
* @param None
*
* @return
*/
nv_sts_t zcl_thermostatDisplayMode_restore(void)
{
nv_sts_t st = NV_SUCC;

#ifdef ZCL_THERMOSTAT_UI_CFG
#if NV_ENABLE
zcl_nv_thermostatUiCfg_t zcl_nv_thermostatUiCfg;

// TODO: change module
st = nv_flashReadNew(1, NV_MODULE_ZCL, NV_ITEM_ZCL_THERMOSTAT_UI_CFG, sizeof(zcl_nv_thermostatUiCfg), (u8*)&zcl_nv_thermostatUiCfg);

if(st == NV_SUCC){
g_zcl_thermostatUICfgAttrs.displayMode = zcl_nv_thermostatUiCfg.displayMode;
}
#else
st = NV_ENABLE_PROTECT_ERROR;
#endif
#endif

return st;
}
14 changes: 14 additions & 0 deletions src/zcl_sensorCb.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "tl_common.h"
#include "zb_api.h"
#include "zcl_include.h"
#include "zcl_thermostat_ui_cfg.h"
#include "device.h"
#include "app_ui.h"

Expand Down Expand Up @@ -139,6 +140,19 @@ static void sensorDevice_zclWriteRspCmd(u16 clusterId, zclWriteRspCmd_t *pWriteR
*/
static void sensorDevice_zclWriteReqCmd(u16 clusterId, zclWriteCmd_t *pWriteReqCmd)
{
#ifdef ZCL_THERMOSTAT_UI_CFG
u8 numAttr = pWriteReqCmd->numAttr;
zclWriteRec_t *attr = pWriteReqCmd->attrList;

if(clusterId == ZCL_CLUSTER_HAVC_USER_INTERFACE_CONFIG){
for(u8 i = 0; i < numAttr; i++){
if(attr[i].attrID == ZCL_THERMOSTAT_UI_CFG_ATTRID_TEMPERATUREDISPLAYMODE){
zcl_thermostatDisplayMode_save();
}
}
}
#endif

#ifdef ZCL_POLL_CTRL
u8 numAttr = pWriteReqCmd->numAttr;
zclWriteRec_t *attr = pWriteReqCmd->attrList;
Expand Down

0 comments on commit fb9a740

Please sign in to comment.