add: weekly schedules support

This commit is contained in:
Tobias Reisinger 2020-04-25 00:48:59 +02:00
parent db3bcaf7d1
commit 2fd48ac5e6
18 changed files with 301 additions and 86 deletions

View file

@ -20,9 +20,10 @@ typedef enum
COMMAND_MAPPING_CODE = 0,
COMMAND_MAPPING_NAME = 1,
COMMAND_MAPPING_RELAY_NUM = 2,
COMMAND_MAPPING_SCHEDULE_ID = 3,
COMMAND_MAPPING_PERIODS_COUNT = 4,
COMMAND_MAPPING_PERIODS_BLOB = 5,
COMMAND_MAPPING_SCHEDULES_ARRAY = 3,
COMMAND_MAPPING_SCHEDULE_ID = 4,
COMMAND_MAPPING_PERIODS_COUNT = 5,
COMMAND_MAPPING_PERIODS_BLOB = 6,
} control_mapping_t;
typedef enum

View file

@ -29,6 +29,9 @@ int
helper_load_config(IniDispatch *disp, void *config_void);
void
helpers_parse_cli(int argc, const char **argv, config_t *config);
helper_parse_cli(int argc, const char **argv, config_t *config);
int
helper_get_weekday(const time_t timestamp_now);
#endif /* CONTROLLER_HELPERS_H */

View file

@ -48,7 +48,6 @@ typedef enum
DB_KEY_CONTROLLER_NAME = 1,
DB_KEY_CONTROLLER_COMMAND_PORT = 2,
DB_KEY_CONTROLLER_DISCOVERY_PORT = 3,
DB_KEY_CONTROLLER_RELAYS = 4,
} db_key_controller_e;
/**

View file

@ -12,7 +12,7 @@ typedef struct
{
uint8_t number;
char name[MAX_NAME_LENGTH + 1];
schedule_t *schedule;
schedule_t *schedules[7];
} relay_t;
/**
@ -21,8 +21,6 @@ typedef struct
typedef enum
{
DB_KEY_RELAY_NAME = 0,
DB_KEY_RELAY_SCHEDULE_ID = 1,
DB_KEY_RELAY_SCHEDULE_PERIODS = 2,
} db_key_relay_e;
relay_t*

View file

@ -3,18 +3,35 @@
#include <stdint.h>
#include <uuid/uuid.h>
#include <lmdb.h>
#include <models/period.h>
typedef struct
{
uuid_t id;
uint8_t weekday;
uint16_t length;
period_t **periods;
} schedule_t;
/**
* @brief Key to save schedule information in database
*/
typedef enum
{
DB_KEY_SCHEDULE_ID = 0,
DB_KEY_SCHEDULE_PERIODS = 1,
} db_key_schedule_e;
schedule_t*
schedule_create(uuid_t id, uint16_t length, uint16_t *periods_blob);
schedule_create(uuid_t id, uint8_t weekday, uint16_t length, uint16_t *periods_blob);
schedule_t*
schedule_load(MDB_env *mdb_env, uint8_t relay_num, uint8_t weekday);
int
schedule_save(schedule_t *schedule, uint8_t relay_num, MDB_env *mdb_env);
uint16_t*
schedule_periods_to_blob(schedule_t *schedule);