MeterLogger
Macros | Functions | Variables
config.c File Reference
#include <stddef.h>
#include <esp8266.h>
#include "mqtt.h"
#include "config.h"
#include "user_config.h"
#include "debug.h"
#include "utils.h"
#include "tinyprintf.h"
#include "driver/ext_spi_flash.h"
Include dependency graph for config.c:

Go to the source code of this file.

Macros

#define EXT_CFG_LOCATION   0x0
 
#define EXT_SPI_RAM_SEC_SIZE   0x200
 
#define SAVE_DEFER_TIME   2000
 

Functions

void ICACHE_FLASH_ATTR cfg_save ()
 
void ICACHE_FLASH_ATTR cfg_load ()
 
void ICACHE_FLASH_ATTR cfg_save_defered ()
 
ICACHE_FLASH_ATTR void config_save_timer_func (void *arg)
 

Variables

syscfg_t sys_cfg
 
SAVE_FLAG saveFlag
 
static os_timer_t config_save_timer
 
char config_save_timer_running
 

Macro Definition Documentation

◆ EXT_CFG_LOCATION

#define EXT_CFG_LOCATION   0x0

Definition at line 15 of file config.c.

Referenced by cfg_load(), and cfg_save().

◆ EXT_SPI_RAM_SEC_SIZE

#define EXT_SPI_RAM_SEC_SIZE   0x200

Definition at line 20 of file config.c.

Referenced by cfg_load(), and cfg_save().

◆ SAVE_DEFER_TIME

#define SAVE_DEFER_TIME   2000

Definition at line 23 of file config.c.

Referenced by cfg_save_defered(), and config_save_timer_func().

Function Documentation

◆ cfg_load()

void ICACHE_FLASH_ATTR cfg_load ( )

Definition at line 77 of file config.c.

References ccit_crc16(), syscfg_t::ccit_crc16, CFG_LOCATION, cfg_save(), DEFAULT_METER_SERIAL, DEFAULT_SECURITY, EXT_CFG_LOCATION, ext_spi_flash_read(), EXT_SPI_RAM_SEC_SIZE, ICACHE_FLASH_ATTR, INFO, key, memcpy, memset, METER_SERIAL_LEN, MQTT_CLIENT_ID, MQTT_HOST, MQTT_KEEPALIVE, MQTT_PASS, MQTT_PORT, MQTT_USER, os_memset, os_printf, STA_PASS, STA_SSID, STA_TYPE, system_get_chip_id(), system_param_load(), and tfp_snprintf().

Referenced by tplSetup().

77  {
78  // DEBUG: we suppose nothing else is touching sys_cfg while saving otherwise checksum becomes wrong
79  INFO("\r\nload ...\r\n");
80 #if defined(IMPULSE) && !defined(DEBUG_NO_METER) // use internal flash if built with DEBUG_NO_METER=1
82  (uint32 *)&saveFlag, sizeof(SAVE_FLAG));
83  if (saveFlag.flag == 0) {
85  (uint32 *)&sys_cfg, sizeof(syscfg_t));
86  } else {
88  (uint32 *)&sys_cfg, sizeof(syscfg_t));
89  }
90 #else
92 #endif // IMPULSE
93 
94  // if checksum fails...
95  if (sys_cfg.ccit_crc16 != ccit_crc16(0xffff, (uint8_t *)&sys_cfg, offsetof(syscfg_t, ccit_crc16) - offsetof(syscfg_t, cfg_holder))) {
96 #ifdef DEBUG
97  os_printf("config crc error, default conf loaded\n");
98 #endif // DEBUG
99  // if first time config load default conf
100  os_memset(&sys_cfg, 0x00, sizeof(syscfg_t));
101 
102  tfp_snprintf(sys_cfg.sta_ssid, 64, "%s", STA_SSID);
103  tfp_snprintf(sys_cfg.sta_pwd, 64, "%s", STA_PASS);
104  sys_cfg.sta_type = STA_TYPE;
105 #ifdef AP
106  sys_cfg.ap_enabled = true;
107 #else
108  sys_cfg.ap_enabled = false;
109 #endif
110  tfp_snprintf(sys_cfg.device_id, 16, MQTT_CLIENT_ID, system_get_chip_id());
111  tfp_snprintf(sys_cfg.mqtt_host, 64, "%s", MQTT_HOST);
112  sys_cfg.mqtt_port = MQTT_PORT;
113  tfp_snprintf(sys_cfg.mqtt_user, 32, "%s", MQTT_USER);
114  tfp_snprintf(sys_cfg.mqtt_pass, 32, "%s", MQTT_PASS);
115 
116  sys_cfg.security = DEFAULT_SECURITY; //default non ssl
117 
118  memcpy(sys_cfg.key, key, sizeof(key));
119 
120  sys_cfg.mqtt_keepalive = MQTT_KEEPALIVE;
121 #ifdef IMPULSE
122  tfp_snprintf(sys_cfg.impulse_meter_serial, METER_SERIAL_LEN, DEFAULT_METER_SERIAL);
123  tfp_snprintf(sys_cfg.impulse_meter_energy, 2, "0");
124  tfp_snprintf(sys_cfg.impulses_per_kwh, 4, "100");
125  sys_cfg.impulse_meter_count = 0;
126 #else
127  sys_cfg.ac_thermo_state = 0;
128  sys_cfg.offline_close_at = 0;
129  memset(&sys_cfg.cron_jobs, 0, sizeof(cron_job_t));
130 #endif // IMPULSE
131 
132  INFO(" default configuration\r\n");
133 
134  cfg_save();
135  }
136  else {
137 #ifdef DEBUG
138  os_printf("config crc ok\n");
139 #endif // DEBUG
140  }
141 }
#define MQTT_PORT
Definition: user_config.h:30
ICACHE_FLASH_ATTR bool ext_spi_flash_read(uint32_t src_addr, uint32_t *dst_addr, uint32_t size)
Definition: ext_spi_flash.c:47
#define DEFAULT_SECURITY
Definition: user_config.h:39
#define memset(x, a, b)
Definition: platform.h:21
#define MQTT_USER
Definition: user_config.h:35
#define MQTT_CLIENT_ID
Definition: user_config.h:34
void ICACHE_FLASH_ATTR cfg_save()
Definition: config.c:28
#define STA_TYPE
Definition: user_config.h:67
#define os_printf
Definition: osapi.h:62
#define CFG_LOCATION
Definition: user_config.h:7
#define EXT_SPI_RAM_SEC_SIZE
Definition: config.c:20
#define DEFAULT_METER_SERIAL
Definition: user_config.h:21
#define os_memset
Definition: osapi.h:38
ICACHE_FLASH_ATTR uint16_t ccit_crc16(uint16_t crc16, uint8_t *data_p, unsigned int length)
Definition: utils.c:47
SAVE_FLAG saveFlag
Definition: config.c:13
#define EXT_CFG_LOCATION
Definition: config.c:15
#define METER_SERIAL_LEN
Definition: config.h:39
#define STA_SSID
Definition: user_config.h:65
unsigned int uint32
Definition: c_types.h:54
static const char key[]
Definition: config.h:42
#define MQTT_HOST
Definition: user_config.h:28
ICACHE_FLASH_ATTR int tfp_snprintf(char *str, size_t size, const char *format,...)
Definition: tinyprintf.c:480
uint16_t ccit_crc16
Definition: config.h:70
uint32 system_get_chip_id(void)
#define memcpy(x, a, b)
Definition: platform.h:22
#define MQTT_KEEPALIVE
Definition: user_config.h:32
#define INFO(...)
Definition: debug.h:17
#define MQTT_PASS
Definition: user_config.h:36
#define STA_PASS
Definition: user_config.h:66
syscfg_t sys_cfg
Definition: config.c:12
bool system_param_load(uint16 start_sec, uint16 offset, void *param, uint16 len)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfg_save()

void ICACHE_FLASH_ATTR cfg_save ( )

Definition at line 28 of file config.c.

References ccit_crc16(), syscfg_t::ccit_crc16, CFG_LOCATION, EXT_CFG_LOCATION, ext_spi_flash_erase_sector(), ext_spi_flash_read(), ext_spi_flash_write(), EXT_SPI_RAM_SEC_SIZE, ICACHE_FLASH_ATTR, and system_param_save_with_protect().

Referenced by cfg_load(), cgiSetup(), and config_save_timer_func().

28  {
29 #ifdef IMPULSE
30  uint32_t impulse_meter_count_temp;
31 #endif // IMPULSE
32 
33 #if defined(IMPULSE) && !defined(DEBUG_NO_METER) // use internal flash if built with DEBUG_NO_METER=1
34  do {
35  // try to save until sys_cfg.impulse_meter_count does not change
36  impulse_meter_count_temp = sys_cfg.impulse_meter_count;
37 
38  // calculate checksum on sys_cfg struct without ccit_crc16
39  sys_cfg.ccit_crc16 = ccit_crc16(0xffff, (uint8_t *)&sys_cfg, offsetof(syscfg_t, ccit_crc16) - offsetof(syscfg_t, cfg_holder));
41  (uint32 *)&saveFlag, sizeof(SAVE_FLAG));
42 
43  if (saveFlag.flag == 0) {
44 #ifdef EXT_SPI_RAM_IS_NAND
46 #endif // EXT_SPI_RAM_IS_NAND
48  (uint32 *)&sys_cfg, sizeof(syscfg_t));
49  saveFlag.flag = 1;
50 #ifdef EXT_SPI_RAM_IS_NAND
52 #endif // EXT_SPI_RAM_IS_NAND
54  (uint32 *)&saveFlag, sizeof(SAVE_FLAG));
55  } else {
56 #ifdef EXT_SPI_RAM_IS_NAND
58 #endif // EXT_SPI_RAM_IS_NAND
60  (uint32 *)&sys_cfg, sizeof(syscfg_t));
61  saveFlag.flag = 0;
62 #ifdef EXT_SPI_RAM_IS_NAND
64 #endif // EXT_SPI_RAM_IS_NAND
66  (uint32 *)&saveFlag, sizeof(SAVE_FLAG));
67  }
68  } while (sys_cfg.impulse_meter_count != impulse_meter_count_temp);
69 #else
70  // calculate checksum on sys_cfg struct without ccit_crc16
71  sys_cfg.ccit_crc16 = ccit_crc16(0xffff, (uint8_t *)&sys_cfg, offsetof(syscfg_t, ccit_crc16) - offsetof(syscfg_t, cfg_holder));
73 #endif // IMPULSE
74 }
ICACHE_FLASH_ATTR bool ext_spi_flash_read(uint32_t src_addr, uint32_t *dst_addr, uint32_t size)
Definition: ext_spi_flash.c:47
bool system_param_save_with_protect(uint16 start_sec, void *param, uint16 len)
#define CFG_LOCATION
Definition: user_config.h:7
#define EXT_SPI_RAM_SEC_SIZE
Definition: config.c:20
ICACHE_FLASH_ATTR uint16_t ccit_crc16(uint16_t crc16, uint8_t *data_p, unsigned int length)
Definition: utils.c:47
SAVE_FLAG saveFlag
Definition: config.c:13
#define EXT_CFG_LOCATION
Definition: config.c:15
ICACHE_FLASH_ATTR bool ext_spi_flash_write(uint32_t dst_addr, uint32_t *src_addr, uint32_t size)
Definition: ext_spi_flash.c:78
unsigned int uint32
Definition: c_types.h:54
ICACHE_FLASH_ATTR bool ext_spi_flash_erase_sector(uint16_t sec)
Definition: ext_spi_flash.c:34
uint16_t ccit_crc16
Definition: config.h:70
syscfg_t sys_cfg
Definition: config.c:12
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfg_save_defered()

void ICACHE_FLASH_ATTR cfg_save_defered ( )

Definition at line 144 of file config.c.

References config_save_timer, config_save_timer_func(), ICACHE_FLASH_ATTR, NULL, os_timer_arm, os_timer_disarm, os_timer_func_t, os_timer_setfn, and SAVE_DEFER_TIME.

Referenced by ac_thermo_close(), ac_thermo_open(), add_cron_job_from_query(), and clear_cron_jobs().

144  {
148 }
static os_timer_t config_save_timer
Definition: config.c:24
#define os_timer_disarm
Definition: osapi.h:51
#define NULL
Definition: def.h:47
#define os_timer_func_t
Definition: os_type.h:35
#define os_timer_setfn
Definition: osapi.h:52
ICACHE_FLASH_ATTR void config_save_timer_func(void *arg)
Definition: config.c:151
#define os_timer_arm(a, b, c)
Definition: osapi.h:50
#define SAVE_DEFER_TIME
Definition: config.c:23
Here is the call graph for this function:
Here is the caller graph for this function:

◆ config_save_timer_func()

ICACHE_FLASH_ATTR void config_save_timer_func ( void *  arg)

Definition at line 151 of file config.c.

References cfg_save(), config_save_timer, config_save_timer_func(), config_save_timer_running, NULL, os_timer_arm, os_timer_disarm, os_timer_func_t, os_timer_setfn, and SAVE_DEFER_TIME.

Referenced by cfg_save_defered(), and config_save_timer_func().

151  {
153  // reschedule
157  }
158  else {
159  // stop timer
162 
163  cfg_save();
164  }
165 }
static os_timer_t config_save_timer
Definition: config.c:24
#define os_timer_disarm
Definition: osapi.h:51
#define NULL
Definition: def.h:47
void ICACHE_FLASH_ATTR cfg_save()
Definition: config.c:28
#define os_timer_func_t
Definition: os_type.h:35
#define os_timer_setfn
Definition: osapi.h:52
char config_save_timer_running
Definition: config.c:25
ICACHE_FLASH_ATTR void config_save_timer_func(void *arg)
Definition: config.c:151
#define os_timer_arm(a, b, c)
Definition: osapi.h:50
#define SAVE_DEFER_TIME
Definition: config.c:23
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ config_save_timer

os_timer_t config_save_timer
static

Definition at line 24 of file config.c.

Referenced by cfg_save_defered(), and config_save_timer_func().

◆ config_save_timer_running

char config_save_timer_running

Definition at line 25 of file config.c.

Referenced by config_save_timer_func().

◆ saveFlag

SAVE_FLAG saveFlag

Definition at line 13 of file config.c.

◆ sys_cfg

syscfg_t sys_cfg