From b82fb898e933e8b61dd9ab657c1f8b4951eda3fa Mon Sep 17 00:00:00 2001 From: Derisis13 Date: Sun, 19 Sep 2021 12:01:49 +0200 Subject: [PATCH] Version 1.5.1 Added dynamic memory management for shutters (functions in shutter.c). Code is now much easier to tailor to specific needs and works better in the limited RAM of routers. Memory leaks were not found by Valgrind Memcheck. --- CMakeLists.txt | 2 +- main.c | 48 +++++++++++++++++++----------------------------- shutter.c | 35 +++++++++++++++++++++++++++++++++++ shutter.h | 5 +++++ 4 files changed, 60 insertions(+), 30 deletions(-) create mode 100644 shutter.c diff --git a/CMakeLists.txt b/CMakeLists.txt index cdf3708..239344c 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,4 +7,4 @@ add_executable(redony main.c timing.c timing.h # moving.c moving.h shutter.h moving_debug.c moving_debug.h - ) \ No newline at end of file + shutter.c) \ No newline at end of file diff --git a/main.c b/main.c index 3409ecc..027e838 100755 --- a/main.c +++ b/main.c @@ -2,6 +2,8 @@ #include "moving.h" #include #define FILEPATH "menetrend.txt" +#define N_of_Shutters 7 +#define rolltimelist {23, 23, 23, 23, 16, 23, 33} /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * SHUTTER AUTOMATA * ----------------- @@ -14,39 +16,26 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ int main () { - shutter ercsi13[] = { - { - 1, 0, 0, 0, 0, 23, 0 //fiúszoba - }, - { - 2, 0, 0, 0, 0, 23, 0 //lányszoba - }, - { - 3, 0, 0, 0, 0, 23, 0 //nappali bal - }, - { - 4, 0, 0, 0, 0, 23, 0 //nappali jobb - }, - { - 5, 0, 0, 0, 0, 16, 0 //konyha - }, - { - 6, 0, 0, 0, 0, 23, 0 //szülői szoba - }, - { - 7, 0, 0, 0, 0, 33, 0 //előtető (lehúzás = kieresztés, felhúzás = behúzás) - } - }; + //set up linked list of shutters + shutter *ercsi13 = NULL; + byte rolltimes[] = rolltimelist; + for (int i = 0; i < N_of_Shutters; ++i) + { + shutter *tmpshutter = create_shutter ((byte)(i + 1), rolltimes[i]); + append_shutter (&ercsi13, tmpshutter); + } + //get the time of launch time_t t = time (NULL); struct tm *now = localtime (&t); //scan the schedule - for (int i = 0; i < 7; ++i) + + for (shutter *tmp = ercsi13; tmp != NULL; tmp = tmp->next) { FILE *schedule = fopen (FILEPATH, "r"); find_today (schedule); - get_timing (&ercsi13[i], schedule); + get_timing (tmp, schedule); fclose (schedule); } @@ -54,19 +43,20 @@ int main () byte ch = 1; //remote defaults to ch 1 //check timings and act accordingly - for (int i = 0; i < 7; ++i) + for (shutter *tmp = ercsi13; tmp != NULL; tmp = tmp->next) { - set_ch (&ercsi13[i], &ch); - switch (check_timing (&ercsi13[i], now)) + set_ch (tmp, &ch); + switch (check_timing (tmp, now)) { case up:press_button (up); break; case stop:break; - case down:lower (&ercsi13[i]); + case down:lower (tmp); break; case prev: case next:break; }; } + free_shutters (ercsi13); return 0; } \ No newline at end of file diff --git a/shutter.c b/shutter.c new file mode 100644 index 0000000..832af05 --- /dev/null +++ b/shutter.c @@ -0,0 +1,35 @@ +// +// Created by lacko on 18/09/2021. +// +#include "shutter.h" +#include "stdlib.h" + +shutter *create_shutter (byte ch, byte rolltime_down) +{ + shutter *new_shutter = calloc (1, sizeof (shutter)); + new_shutter->ch = ch; + new_shutter->rolltime_down = rolltime_down; + return new_shutter; +} + +void append_shutter (shutter **head, shutter *new_shutter) +{ + if (*head == NULL) + { + *head = new_shutter; + return; + } + shutter *tmp = *head; + while (tmp->next != NULL) + tmp = tmp->next; + tmp->next = new_shutter; +} + +void free_shutters (shutter *head) +{ + for (shutter *tmp = head; head != NULL; tmp = head) + { + head = head->next; + free (tmp); + } +} diff --git a/shutter.h b/shutter.h index 8fbc4f9..d2e2641 100644 --- a/shutter.h +++ b/shutter.h @@ -18,6 +18,7 @@ typedef struct shutter { minitime down; //time of lowering byte rolltime_down; //measured in seconds, measured when the shutter is rolling down (usually faster than rolling up) byte percentage; //the percentage to which the shutter is to be lowered + struct shutter *next; } shutter; typedef enum buttons { @@ -27,4 +28,8 @@ typedef enum buttons { prev, next } buttons; + +shutter * create_shutter (byte ch, byte rolltime_down); +void append_shutter (shutter **head, shutter *new_shutter); +void free_shutters (shutter * head); #endif //_SHUTTER_H_