#include #include #include #include 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, (void*)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); }