106 lines
2.1 KiB
C
106 lines
2.1 KiB
C
#ifndef CONTROLLER_CONTROLLER_H
|
|
#define CONTROLLER_CONTROLLER_H
|
|
|
|
#include <uuid/uuid.h>
|
|
#include <stdint.h>
|
|
|
|
#include <config.h>
|
|
#include <models/relay.h>
|
|
|
|
/**
|
|
* @brief Information about this controller
|
|
*/
|
|
typedef struct
|
|
{
|
|
int id;
|
|
|
|
/**
|
|
* @brief A unique UUID for this controller
|
|
*/
|
|
uuid_t uid;
|
|
/**
|
|
* @brief The name of this controller
|
|
*
|
|
* Includes a \0 terminator.
|
|
*/
|
|
char name[MAX_NAME_LENGTH + 1];
|
|
/**
|
|
* @brief The command port the controller was bound to
|
|
*/
|
|
uint16_t command_port;
|
|
|
|
relay_t **relays;
|
|
|
|
} controller_t;
|
|
|
|
/**
|
|
* @brief Key to save controller information in database
|
|
*/
|
|
typedef enum
|
|
{
|
|
DB_KEY_CONTROLLER_ID = 0,
|
|
DB_KEY_CONTROLLER_NAME = 1,
|
|
DB_KEY_CONTROLLER_COMMAND_PORT = 2,
|
|
DB_KEY_CONTROLLER_DISCOVERY_PORT = 3,
|
|
} db_key_controller_e;
|
|
|
|
/**
|
|
* @brief Create a new instance of controller
|
|
*
|
|
* This should not fail. The instance will be created with malloc and genric default values
|
|
*
|
|
* @return A new instance of #controller
|
|
*/
|
|
controller_t*
|
|
controller_create(void);
|
|
|
|
|
|
/**
|
|
* @brief Load a controller for database or create a new one
|
|
*
|
|
* Will return NULL when transaction can't start.
|
|
*
|
|
* @param mdb_env An opened MDB_env to load from
|
|
*
|
|
* @return A loaded or new instance of controller or NULL on database error
|
|
*/
|
|
controller_t*
|
|
controller_load();
|
|
|
|
/**
|
|
* @brief Save a controller to the database
|
|
*
|
|
* @param controller Instance of a controller
|
|
* @param mdb_env Already created MDB_env
|
|
*
|
|
* @return Indicator to show success (0) or failure (!0)
|
|
*/
|
|
int
|
|
controller_save();
|
|
|
|
/**
|
|
* @brief Sets a name to a controller.
|
|
* This function won't perform any checks (e.g. no NULL checks)
|
|
*
|
|
* @param controller Set the name to this controller
|
|
* @param name Name to be set
|
|
*/
|
|
void
|
|
controller_set_name(controller_t *controller, const char *name);
|
|
|
|
void
|
|
controller_free(controller_t *controller);
|
|
|
|
/**
|
|
* @brief Debug an instance of #controller
|
|
*
|
|
* Will use #LOG_DEBUG to log. So log will be depending on #LOG_LEVEL
|
|
*
|
|
* @param cntrlr #controller to debug
|
|
*/
|
|
void
|
|
controller_debug(controller_t *controller);
|
|
|
|
extern controller_t *global_controller;
|
|
|
|
#endif //CONTROLLER_CONTROLLER_H
|