eikhner

config_defaults.c

Sep 16th, 2025 (edited)
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.93 KB | None | 0 0
  1. /**
  2.  * @file    config_defaults.c
  3.  * @brief   Фабричные дефолты и хелперы нормализации/сброса.
  4.  * @date    2025-09-15
  5.  */
  6.  
  7. #include "config_defaults.h"
  8. #include "eeprom_24xx.h"    /* только если хочешь тут же делать init; можно и в main */
  9. #include <string.h>
  10.  
  11. /* ===== Фабричные дефолты в ПЗУ (Flash) =====
  12.  * Можно держать разные наборы под разные версии payload.
  13.  * Эти const-структуры лежат в Flash, не занимают RAM.
  14.  */
  15.  
  16. static const ConfigPayload kDefaults_v1 = {
  17.     .fan_t1     = 50,
  18.     .fan_t2     = 60,
  19.     .fan_t3     = 70,
  20.     .fan_t4     = 80,
  21.     .fan_tMax   = 85,
  22.     .forcedMode = 0,
  23.  
  24.     .gas_min10  = 5,
  25.     .gas_max10  = 15,
  26.  
  27.     .triac_ms   = 100,
  28.  
  29.     .uart_on    = 0,
  30. };
  31.  
  32.  
  33. /* Если появится v2/v3 — добавляй аналогичные константы: kDefaults_v2, kDefaults_v3, ... */
  34.  
  35. bool config_defaults_get(uint8_t version, ConfigPayload *out_payload)
  36. {
  37.     if (!out_payload) return false;
  38.  
  39.     switch (version) {
  40.     case 1:
  41.         memcpy(out_payload, &kDefaults_v1, sizeof(ConfigPayload));
  42.         return true;
  43.     default:
  44.         /* Версия неизвестна — можно:
  45.          * 1) вернуть false, пусть вызывающий решает, или
  46.          * 2) отдать «самые последние» дефолты (fallback).
  47.          */
  48.         return false;
  49.     }
  50. }
  51.  
  52. void config_sanitize(ConfigPayload *io)
  53. {
  54.     if (!io) return;
  55.  
  56.     /* ----- Вентилятор: 30..130 и неубывающая цепочка ----- */
  57.     const uint8_t TLO = 30, THI = 130;
  58.  
  59.     #define CLAMP_U8(v, lo, hi) do { if ((v) < (lo)) (v) = (lo); else if ((v) > (hi)) (v) = (hi); } while(0)
  60.  
  61.     CLAMP_U8(io->fan_t1,   TLO, THI);
  62.     CLAMP_U8(io->fan_t2,   TLO, THI);
  63.     CLAMP_U8(io->fan_t3,   TLO, THI);
  64.     CLAMP_U8(io->fan_t4,   TLO, THI);
  65.     CLAMP_U8(io->fan_tMax, TLO, THI);
  66.  
  67.     if (io->fan_t2   < io->fan_t1)   io->fan_t2   = io->fan_t1;
  68.     if (io->fan_t3   < io->fan_t2)   io->fan_t3   = io->fan_t2;
  69.     if (io->fan_t4   < io->fan_t3)   io->fan_t4   = io->fan_t3;
  70.     if (io->fan_tMax < io->fan_t4)   io->fan_tMax = io->fan_t4;
  71.  
  72.     /* ----- Принудительный режим: 0..4 ----- */
  73.     if (io->forcedMode > 4) io->forcedMode = 4; /* нижняя граница 0 уже обеспечена типом */
  74.  
  75.     /* ----- Газ (×10): 5..15 и min<=max ----- */
  76.     const uint8_t GLO = 5, GHI = 15;
  77.     CLAMP_U8(io->gas_min10, GLO, GHI);
  78.     CLAMP_U8(io->gas_max10, GLO, GHI);
  79.     if (io->gas_min10 > io->gas_max10)
  80.         io->gas_max10 = io->gas_min10;
  81.  
  82.     /* ----- Триак: 10..250 мс, шаг 10 ----- */
  83.     if (io->triac_ms < 10)   io->triac_ms = 10;
  84.     if (io->triac_ms > 250)  io->triac_ms = 250;
  85.     /* округление к ближайшему шагу 10 */
  86.     io->triac_ms = (uint16_t)((io->triac_ms + 5u) / 10u) * 10u;
  87.     if (io->triac_ms < 10)   io->triac_ms = 10;
  88.     if (io->triac_ms > 250)  io->triac_ms = 250;
  89.  
  90.     /* ----- UART: только 0/1 ----- */
  91.     if (io->uart_on > 1) io->uart_on = 1;
  92.  
  93.     #undef CLAMP_U8
  94. }
  95.  
  96.  
  97. bool config_factory_reset(uint8_t version)
  98. {
  99.     ConfigPayload def = {0};
  100.     if (!config_defaults_get(version, &def)) {
  101.         /* если версия неизвестна — можно выбрать fallback: взять v1 */
  102.         memcpy(&def, &kDefaults_v1, sizeof(def));
  103.     }
  104.  
  105.     config_sanitize(&def);
  106.  
  107.     /* Попробуем сохранить в EEPROM, если она готова.
  108.      * Если ee24_init()/is_ready делаются раньше в main — можно сразу звать save.
  109.      * Иначе тут можно проверить готовность: это на твоё усмотрение.
  110.      */
  111.     return config_store_save(version, &def);
  112. }
  113.  
Advertisement
Add Comment
Please, Sign In to add comment