#ifndef CONTROLLER_CONTROLLER_H #define CONTROLLER_CONTROLLER_H #include #include #include #include #include /** * @brief Information about this controller */ typedef struct { /** * @brief A unique UUID for this controller */ uuid_t id; /** * @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; /** * @brief The discovery port the controller receives broadcasts on */ uint16_t discovery_port; /** * @brief Amount of relays available to this controller */ uint8_t relay_count; 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(MDB_env *mdb_env); /** * @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(controller_t *controller, MDB_env *mdb_env); /** * @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