diff --git a/firmware/main/app_main.cc b/firmware/main/app_main.cc index 2d5fa35..2690185 100644 --- a/firmware/main/app_main.cc +++ b/firmware/main/app_main.cc @@ -92,7 +92,7 @@ struct PmMeasurementSum { void addMeasurement(const PmsResponse &resp); void reset(); -} __attribute__((packed)); +}; enum class MeasurementType { MS_TEMPERATURE, MS_PARTICULATES }; @@ -745,10 +745,14 @@ static void initWifi() { .pmf_cfg{.capable = true, .required = false}, }, }; - strncpy((char *)wf_conf.sta.ssid, appSettings.wifi.ssid, + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-truncation" + strncpy(reinterpret_cast(wf_conf.sta.ssid), appSettings.wifi.ssid, sizeof(wf_conf.sta.ssid)); - strncpy((char *)wf_conf.sta.password, appSettings.wifi.pass, + strncpy(reinterpret_cast(wf_conf.sta.password), appSettings.wifi.pass, sizeof(wf_conf.sta.password)); +#pragma GCC diagnostic pop ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wf_conf)); diff --git a/firmware/main/timer.hh b/firmware/main/timer.hh index 4e951ef..08c25c8 100644 --- a/firmware/main/timer.hh +++ b/firmware/main/timer.hh @@ -1,18 +1,25 @@ #pragma once #include "freertos/FreeRTOS.h" -#include +#include class Timer { public: // creates and starts the timer - Timer() { ticks = xTaskGetTickCount(); } + Timer() { start = xTaskGetTickCount(); } // returns passed time in seconds TickType_t seconds() { - return (xTaskGetTickCount() - ticks) / configTICK_RATE_HZ; + const TickType_t now = xTaskGetTickCount(); + + const TickType_t passed = + now >= start + ? now - start + : std::numeric_limits::max() - start + now; + + return passed / configTICK_RATE_HZ; } private: - TickType_t ticks; + TickType_t start; };