#ifndef CONTROLLER_CONTROLLER_H #define CONTROLLER_CONTROLLER_H #include #include #include #include #include /** * @brief Information about this controller */ typedef struct controller { /** * @brief A unique UUID for this controller */ uuid_t id; /** * @brief The name of this controller * * Includes a \0 terminator. */ char name[CONTROLLER_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 **relays; } controller; /** * @brief Key to save controller information in database */ typedef enum controller_db_key { KEY_META_ID = 0, KEY_META_NAME = 1, KEY_META_COMMAND_PORT = 2, KEY_META_DISCOVERY_PORT = 3, KEY_META_RELAY_COUNT = 4, KEY_META_RELAYS = 5, } controller_db_key; /** * @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* 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* controller_load(MDB_env *mdb_env); /** * @brief Save a controller to the database * * @param cntrlr Instance of a controller * @param mdb_env Already created MDB_env * * @return Indicator to show success (0) or failure (!0) */ int controller_save(controller *cntrlr, MDB_env *mdb_env); /** * @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 *cntrlr); #endif //CONTROLLER_CONTROLLER_H