controller-legacy/models/relay.c

78 lines
1.5 KiB
C
Raw Normal View History

2019-11-15 00:23:43 +00:00
#include <stdlib.h>
2020-04-13 22:50:55 +00:00
#include <string.h>
#include <uuid/uuid.h>
2019-11-15 00:23:43 +00:00
2020-04-13 22:50:55 +00:00
#include <logger.h>
2020-01-07 01:23:16 +00:00
#include <models/relay.h>
2019-11-15 00:23:43 +00:00
2020-04-13 22:50:55 +00:00
relay_t*
relay_create(uint8_t number)
2019-11-15 00:23:43 +00:00
{
2020-04-13 22:50:55 +00:00
relay_t *new_relay = malloc(sizeof(relay_t));
new_relay->number = number;
new_relay->name[0] = '\0';
uuid_t off_id;
memset(off_id, 0, sizeof(uuid_t));
memcpy(off_id, "off", 3);
new_relay->schedule = schedule_create(off_id, 0, NULL);
return new_relay;
}
void
2020-04-23 23:33:48 +00:00
relay_set_name(relay_t *relay, const char *name)
2020-04-13 22:50:55 +00:00
{
strncpy(relay->name, name, MAX_NAME_LENGTH);
relay->name[MAX_NAME_LENGTH] = '\0';
}
int
relay_is_active(relay_t *relay, time_t timestamp_now)
{
if(relay->schedule->length == 0)
{
return 0;
}
// we don't need days. reduce to hours, minutes and seconds
timestamp_now %= SECONDS_PER_DAY;
// finally remove seconds
timestamp_now /= SECONDS_PER_MINUTE;
for(uint16_t i = 0; i < relay->schedule->length; ++i)
{
if(period_includes_time(relay->schedule->periods[i], timestamp_now))
{
return 1;
}
}
return 0;
}
void
relay_debug(relay_t *relay)
{
if(relay == NULL)
{
2020-04-24 13:08:26 +00:00
LOG_DEBUG("relay is NULL\n");
2020-04-13 22:50:55 +00:00
return;
}
2020-04-24 13:08:26 +00:00
LOG_DEBUG("(1/3) %d @ %p\n", relay->number, (void*)relay);
LOG_DEBUG("(2/3) name: %s\n", relay->name);
LOG_DEBUG("(3/3) schedule:\n");
2020-04-13 22:50:55 +00:00
schedule_debug(relay->schedule);
}
void
relay_free(relay_t *relay)
{
if(relay->schedule)
{
schedule_free(relay->schedule);
}
free(relay);
2019-11-15 00:23:43 +00:00
}