add: relay/piface support
This commit is contained in:
parent
fa6ceb2bf4
commit
db64e4f820
34 changed files with 1259 additions and 313 deletions
89
models/schedule.c
Normal file
89
models/schedule.c
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <logger.h>
|
||||
#include <models/schedule.h>
|
||||
|
||||
schedule_t*
|
||||
schedule_create(uuid_t id, uint16_t length, uint16_t *periods_blob)
|
||||
{
|
||||
schedule_t *new_schedule = malloc(sizeof(schedule_t));
|
||||
|
||||
memmove(new_schedule->id, id, sizeof(uuid_t));
|
||||
|
||||
new_schedule->length = length;
|
||||
new_schedule->periods = NULL;
|
||||
|
||||
if(length)
|
||||
{
|
||||
new_schedule->periods = malloc(sizeof(period_t*) * length);
|
||||
|
||||
for(uint16_t i = 0; i < length; ++i)
|
||||
{
|
||||
uint16_t start = periods_blob[0 + (i * 2)];
|
||||
uint16_t end = periods_blob[1 + (i * 2)];
|
||||
new_schedule->periods[i] = period_create(start, end);
|
||||
}
|
||||
}
|
||||
|
||||
return new_schedule;
|
||||
}
|
||||
|
||||
uint16_t*
|
||||
schedule_periods_to_blob(schedule_t *schedule)
|
||||
{
|
||||
uint16_t *periods_blob = malloc(sizeof(uint16_t) * ((2 * schedule->length) + 1));
|
||||
periods_blob[0] = schedule->length;
|
||||
|
||||
for(uint16_t i = 0; i < schedule->length; ++i)
|
||||
{
|
||||
|
||||
periods_blob[1 + (i * 2)] = schedule->periods[i]->start;
|
||||
periods_blob[2 + (i * 2)] = schedule->periods[i]->end;
|
||||
}
|
||||
|
||||
return periods_blob;
|
||||
}
|
||||
|
||||
void
|
||||
schedule_free(schedule_t *schedule)
|
||||
{
|
||||
for(uint16_t i = 0; i < schedule->length; ++i)
|
||||
{
|
||||
free(schedule->periods[i]);
|
||||
}
|
||||
free(schedule->periods);
|
||||
free(schedule);
|
||||
}
|
||||
|
||||
void
|
||||
schedule_debug(schedule_t *schedule)
|
||||
{
|
||||
if(schedule == NULL)
|
||||
{
|
||||
LOG_DEBUG("schedule is NULL");
|
||||
return;
|
||||
}
|
||||
char uuid_str[37];
|
||||
uuid_unparse(schedule->id, uuid_str);
|
||||
LOG_DEBUG("(1/3) %s @ %p", uuid_str, schedule);
|
||||
LOG_DEBUG("(2/3) period count: %3d", schedule->length);
|
||||
|
||||
// one block: "HH:MM-HH:MM, " --> size: 13 (14 with '\0')
|
||||
char *periods_debug_str = malloc(sizeof(char) * ((schedule->length * 13) + 1));
|
||||
periods_debug_str[0] = '\0';
|
||||
|
||||
for(uint16_t i = 0; i < schedule->length; ++i)
|
||||
{
|
||||
sprintf(
|
||||
periods_debug_str + (13 * i),
|
||||
"%02d:%02d-%02d:%02d, ",
|
||||
schedule->periods[i]->start / 60,
|
||||
schedule->periods[i]->start % 60,
|
||||
schedule->periods[i]->end / 60,
|
||||
schedule->periods[i]->end % 60
|
||||
);
|
||||
}
|
||||
|
||||
LOG_DEBUG("(3/3) periods: %s", periods_debug_str);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue