From 433bfefa7d2296338648beccb17dd3bf9a4903db Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Wed, 11 Jan 2023 12:02:17 +0100 Subject: [PATCH 1/2] code cleanup --- src/utils.cpp | 1 - src/utils.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index 5584cb0..fbea4a1 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -6,7 +6,6 @@ #include "pico/sleep.h" #include "pico/stdlib.h" -// #include "stdlib.h" #include "hardware/clocks.h" #include "hardware/rosc.h" #include "hardware/structs/scb.h" diff --git a/src/utils.h b/src/utils.h index f7c9d2c..56702a1 100644 --- a/src/utils.h +++ b/src/utils.h @@ -33,6 +33,6 @@ void recover_from_sleep(uint scb_orig, uint clock0_orig, uint clock1_orig); void perform_sleep(datetime_t &untilDt); -//void add_one_day(datetime_t &dt); +void add_one_day(datetime_t &dt); void add_one_hour(datetime_t &dt); \ No newline at end of file From e9ce09a02959c0631108a2adcd0d230b49d05611 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Wed, 11 Jan 2023 12:40:21 +0100 Subject: [PATCH 2/2] get rid of xhrono --- src/abfall.cpp | 12 ++++++------ src/utils.cpp | 43 ++++++++++++++++++++++++++++++++++++------- src/utils.h | 3 +-- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/abfall.cpp b/src/abfall.cpp index c4b21e9..9464034 100644 --- a/src/abfall.cpp +++ b/src/abfall.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include @@ -83,11 +82,12 @@ int main() { rtc_get_datetime(&dt); - chrono::year_month_day tomorrowYMD(chrono::year{dt.year}, - chrono::month{static_cast(dt.month)}, - chrono::day{static_cast(dt.day + 1)}); - auto it = std::find_if(dates.begin(), dates.end(), [&tomorrowYMD](const WasteDate &date) { - return date.date == tomorrowYMD; + datetime_t tomorrowYMD = dt; + add_one_day(tomorrowYMD); + + auto it = std::find_if(dates.begin(), dates.end(), [&tomorrowYMD](const WasteDate &x) { + return tomorrowYMD.year == x.date.year && tomorrowYMD.month == x.date.month && + tomorrowYMD.day == x.date.day; }); int8_t hour = isDST(dt) ? dt.hour + 1 : dt.hour; diff --git a/src/utils.cpp b/src/utils.cpp index fbea4a1..9c8caf2 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1,14 +1,16 @@ #include "utils.h" +#include + #include #include #include -#include "pico/sleep.h" -#include "pico/stdlib.h" #include "hardware/clocks.h" #include "hardware/rosc.h" #include "hardware/structs/scb.h" +#include "pico/sleep.h" +#include "pico/stdlib.h" using namespace std; @@ -35,17 +37,42 @@ bool isDST(const datetime_t &dt) { return previousSunday < 25; } -chrono::year_month_day stringToDate(const std::string &dateStr) { +int8_t calcDotw(int year, int month, int day) { + int mon; + if (month > 2) + mon = month; // for march to december month code is same as month + else { + mon = (12 + month); // for Jan and Feb, month code will be 13 and 14 + year--; // decrease year for month Jan and Feb + } + int y = year % 100; // last two digit + int c = year / 100; // first two digit + int w = (day + floor((13 * (mon + 1)) / 5) + y + floor(y / 4) + floor(c / 4) - (2 * c)); + w = (w % 7) - 1; + return w; +} + +datetime_t stringToDate(const std::string &dateStr) { istringstream partss(dateStr); string day_str, month_str, year_str; + getline(partss, day_str, '.'); getline(partss, month_str, '.'); getline(partss, year_str, '.'); + int day = atoi(day_str.c_str()); int month = atoi(month_str.c_str()); int year = atoi(year_str.c_str()); - chrono::year_month_day date{chrono::year{year}, chrono::month{(uint)month}, - chrono::day{(uint)day}}; + + datetime_t date; + date.year = year; + date.month = month; + date.day = day; + date.dotw = calcDotw(year, month, day); + date.hour = 0; + date.min = 0; + date.sec = 0; + return date; } @@ -82,8 +109,10 @@ std::vector parseCsv(const std::string &csv) { // Take existing date or create a new one. std::vector::iterator it; - it = std::find_if(wasteDates.begin(), wasteDates.end(), - [&date](const WasteDate &x) { return date == x.date; }); + it = std::find_if(wasteDates.begin(), wasteDates.end(), [&date](const WasteDate &x) { + return date.year == x.date.year && date.month == x.date.month && + date.day == x.date.day; + }); if (it == wasteDates.end()) { WasteDate wd; wd.date = date; diff --git a/src/utils.h b/src/utils.h index 56702a1..bfce9c4 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include @@ -15,7 +14,7 @@ enum class Waste { }; struct WasteDate { - std::chrono::year_month_day date; + datetime_t date; std::vector wasteTypes; };