cursada_mc2
Base de control de temperatura para EDU-CIAA-NXP
Loading...
Searching...
No Matches
parametros.c
Go to the documentation of this file.
1
6#include "app/parametros.h"
7
9
10#define PARAMETROS_PERSISTENTES_MAGIC 0x5041524DU
11#define PARAMETROS_PERSISTENTES_VERSION 3U
12
20typedef struct {
21 uint32_t magic;
22 uint16_t version;
23 uint16_t tamano;
24 uint32_t crc;
27
31 .histeresis_deci_celsius = 20U,
32 .tiempo_minimo_encendido_ms = 0U,
33 .tiempo_minimo_apagado_ms = 0U,
34 .modo_calentar = true,
35};
36
43static uint32_t parametros_calcular_crc32(const void* datos, uint32_t longitud)
44{
45 const uint8_t* bytes = (const uint8_t*) datos;
46 uint32_t crc = 0xFFFFFFFFU;
47 uint32_t indice = 0U;
48
49 for (indice = 0U; indice < longitud; ++indice) {
50 crc ^= bytes[indice];
51 for (uint32_t bit = 0U; bit < 8U; ++bit) {
52 if ((crc & 1U) != 0U) {
53 crc = (crc >> 1U) ^ 0xEDB88320U;
54 } else {
55 crc >>= 1U;
56 }
57 }
58 }
59
60 return ~crc;
61}
62
67
72{
75 persistentes->tamano = (uint16_t) sizeof(parametros_control_t);
76 persistentes->datos = parametros_actuales_;
77 persistentes->crc = parametros_calcular_crc32(&persistentes->datos, (uint32_t) sizeof(persistentes->datos));
78}
79
84{
85 if (persistentes->magic != PARAMETROS_PERSISTENTES_MAGIC) {
86 return false;
87 }
88
89 if (persistentes->version != PARAMETROS_PERSISTENTES_VERSION) {
90 return false;
91 }
92
93 if (persistentes->tamano != sizeof(parametros_control_t)) {
94 return false;
95 }
96
97 return (persistentes->crc
98 == parametros_calcular_crc32(&persistentes->datos, (uint32_t) sizeof(persistentes->datos)));
99}
100
102{
103 parametros_persistentes_t persistentes;
104
105 if (!driver_eeprom_read(&persistentes, (uint32_t) sizeof(persistentes))) {
106 /* Si no se puede leer EEPROM, se arranca con defaults y se intenta persistirlos. */
108 return parametros_guardar();
109 }
110
111 if (!parametros_persistentes_validos(&persistentes)) {
112 /* Datos incompatibles o corruptos: se descartan y se regeneran desde defaults. */
114 return parametros_guardar();
115 }
116
117 parametros_actuales_ = persistentes.datos;
118 return true;
119}
120
125
127{
128 parametros_persistentes_t persistentes;
129
130 parametros_serializar(&persistentes);
131 return driver_eeprom_write(&persistentes, (uint32_t) sizeof(persistentes));
132}
133
135{
136 /* Restablecer implica actualizar la copia RAM y persistirla inmediatamente. */
138 (void) parametros_guardar();
139}
140
141bool parametros_actualizar(const parametros_control_t* nuevos_parametros)
142{
143 if (nuevos_parametros == 0) {
144 return false;
145 }
146
151 && (parametros_actuales_.modo_calentar == nuevos_parametros->modo_calentar)) {
152 return false;
153 }
154
155 parametros_actuales_ = *nuevos_parametros;
156 return true;
157}
bool driver_eeprom_read(void *destino, uint32_t cantidad)
Lee un bloque desde la region reservada de EEPROM.
bool driver_eeprom_write(const void *origen, uint32_t cantidad)
Escribe un bloque dentro de la region reservada de EEPROM.
Driver de acceso a la EEPROM interna del LPC4337.
static void parametros_serializar(parametros_persistentes_t *persistentes)
Genera la imagen persistida a partir de la copia viva en RAM.
Definition parametros.c:71
static void parametros_cargar_defaults_en_ram(void)
Definition parametros.c:63
static uint32_t parametros_calcular_crc32(const void *datos, uint32_t longitud)
Calcula el CRC32 del bloque persistido de parametros.
Definition parametros.c:43
#define PARAMETROS_PERSISTENTES_VERSION
Definition parametros.c:11
static const parametros_control_t parametros_default_
Definition parametros.c:29
#define PARAMETROS_PERSISTENTES_MAGIC
Definition parametros.c:10
bool parametros_guardar(void)
Definition parametros.c:126
bool parametros_actualizar(const parametros_control_t *nuevos_parametros)
Definition parametros.c:141
static parametros_control_t parametros_actuales_
Definition parametros.c:28
static bool parametros_persistentes_validos(const parametros_persistentes_t *persistentes)
Valida magic, version, tamano y CRC antes de aceptar EEPROM.
Definition parametros.c:83
bool parametros_init(void)
Definition parametros.c:101
void parametros_restablecer_defaults(void)
Definition parametros.c:134
const parametros_control_t * parametros_obtener(void)
Definition parametros.c:121
Persistencia y administracion de parametros de la aplicacion.
uint32_t tiempo_minimo_apagado_ms
Definition parametros.h:16
uint16_t histeresis_deci_celsius
Definition parametros.h:14
uint32_t tiempo_minimo_encendido_ms
Definition parametros.h:15
int16_t setpoint_deci_celsius
Definition parametros.h:13
Formato persistido en EEPROM para los parametros de la aplicacion.
Definition parametros.c:20
parametros_control_t datos
Definition parametros.c:25