diff --git a/src/devices/devices_manager.c b/src/devices/devices_manager.c index a510c75..598d5e6 100644 --- a/src/devices/devices_manager.c +++ b/src/devices/devices_manager.c @@ -38,6 +38,8 @@ #include "domo.h" #include "outlet_dio.h" +#include "shutter.h" +#include "sprinkler.h" #include "devices_manager.h" @@ -48,9 +50,11 @@ struct json_object *save_outlets(devices_manager_t *dm); int create_outlet(struct json_object *node); int load_shutters(devices_manager_t *dm, struct json_object *node); +struct json_object *save_shutters(devices_manager_t *dm); int create_shutter(devices_manager_t *dm, struct json_object *node); int load_sprinklers(devices_manager_t *dm, struct json_object *node); +struct json_object *save_sprinklers(devices_manager_t *dm); int create_sprinkler(devices_manager_t *dm, struct json_object *node); /*----------------------------- PUBLIC FUNCTIONS ----------------------------*/ @@ -69,8 +73,8 @@ devices_manager_t *devices_manager_new(void) // Initialize instance. devices_manager->outlets = qlist(0); - devices_manager->shutters = qhashtbl(0, 0); - devices_manager->sprinklers = qhashtbl(0, 0); + devices_manager->shutters = qlist(0); + devices_manager->sprinklers = qlist(0); return devices_manager; } @@ -158,9 +162,9 @@ int devices_manager_save(devices_manager_t *dm) // Outlets json_object_object_add(root_node, kOutletEntry, save_outlets(dm)); // Shutters - //json_object_object_add(the_root_node, kShutterEntry, m_shutters.to_json()); + json_object_object_add(root_node, kShutterEntry, save_shutters(dm)); // Sprinklers - //json_object_object_add(the_root_node, kSprinklerEntry, m_sprinklers.to_json()); + json_object_object_add(root_node, kSprinklerEntry, save_sprinklers(dm)); result = json_object_to_file_ext(dm->file_path, root_node, JSON_C_TO_STRING_PRETTY); @@ -174,7 +178,7 @@ int devices_manager_save(devices_manager_t *dm) char *devices_manager_get(devices_manager_t *dm, const char *capability) { - DEBUG("TODO"); + #warning "TODO" return NULL; } @@ -182,7 +186,7 @@ char *devices_manager_get(devices_manager_t *dm, const char *capability) char *devices_manager_get_by_id(devices_manager_t *dm, const char *capability, uint32_t id) { - DEBUG("TODO"); + #warning "TODO" return NULL; } @@ -190,7 +194,7 @@ char *devices_manager_get_by_id(devices_manager_t *dm, const char *capability, u int devices_manager_set(devices_manager_t *dm, const char *capability, struct json_object *node) { - DEBUG("TODO"); + #warning "TODO" return 0; } @@ -198,7 +202,7 @@ int devices_manager_set(devices_manager_t *dm, const char *capability, struct js int devices_manager_set_state(devices_manager_t *dm, const char *capability, int id, bool state) { - DEBUG("TODO"); + #warning "TODO" return 0; } @@ -206,7 +210,7 @@ int devices_manager_set_state(devices_manager_t *dm, const char *capability, int int devices_manager_create(devices_manager_t *dm, const char *a_capability, struct json_object *node) { - DEBUG("TODO"); + #warning "TODO" return 0; } @@ -214,7 +218,7 @@ int devices_manager_create(devices_manager_t *dm, const char *a_capability, stru int devices_manager_update(devices_manager_t *dm, const char *a_capability, struct json_object *node) { - DEBUG("TODO"); + #warning "TODO" return 0; } @@ -222,7 +226,7 @@ int devices_manager_update(devices_manager_t *dm, const char *a_capability, stru int devices_manager_delete(devices_manager_t *dm, const char *a_capability, struct json_object *node) { - DEBUG("TODO"); + #warning "TODO" return 0; } @@ -235,7 +239,7 @@ int devices_manager_delete(devices_manager_t *dm, const char *a_capability, stru */ int load_outlets(devices_manager_t *dm, struct json_object *node) { - DEBUG("DevicesManager::load_outlets\n"); + DEBUG("devicesManager-load_outlets\n"); /* Get Outlets */ if (json_object_get_type(node) == json_type_array) @@ -282,15 +286,54 @@ struct json_object *save_outlets(devices_manager_t *dm) int load_shutters(devices_manager_t *dm, struct json_object *node) { - DEBUG("TODO"); - return 0; + DEBUG("devicesManager-load_shutters\n"); + + /* Get Shutters */ + if (json_object_get_type(node) == json_type_array) + { + int length; + struct json_object *shutter_node; + + length = json_object_array_length(node); + for (int i = 0; i < length; i++) + { + shutter_t *shutter = shutter_new(); + shutter_node = json_object_array_get_idx(node, i); + if (shutter_from_json(shutter, shutter_node) == 0) + { + qlist_addlast(dm->shutters, shutter, sizeof(shutter_t)); + } + } + } + + return 0; +} + +/*--------------------------------------------------------------------------*/ + +struct json_object *save_shutters(devices_manager_t *dm) +{ + struct json_object *root_node; + shutter_t *shutter; + qlist_obj_t obj; + + memset((void *) &obj, 0, sizeof(obj)); + root_node = json_object_new_array(); + + while (qlist_getnext(dm->shutters, &obj, true)) + { + shutter = obj.data; + json_object_array_add(root_node, shutter_to_json_object(shutter)); + } + + return root_node; } /*--------------------------------------------------------------------------*/ int create_shutter(devices_manager_t *dm, struct json_object *node) { - DEBUG("TODO"); + #warning "TODO" return 0; } @@ -298,14 +341,53 @@ int create_shutter(devices_manager_t *dm, struct json_object *node) int load_sprinklers(devices_manager_t *dm, struct json_object *node) { - DEBUG("TODO"); - return 0; + DEBUG("devicesManager-load_sprinkler\n"); + + /* Get Shutters */ + if (json_object_get_type(node) == json_type_array) + { + int length; + struct json_object *sprinkler_node; + + length = json_object_array_length(node); + for (int i = 0; i < length; i++) + { + sprinkler_t *sprinkler = sprinkler_new(); + sprinkler_node = json_object_array_get_idx(node, i); + if (sprinkler_from_json(sprinkler, sprinkler_node) == 0) + { + qlist_addlast(dm->sprinklers, sprinkler, sizeof(sprinkler_t)); + } + } + } + + return 0; +} + +/*--------------------------------------------------------------------------*/ + +struct json_object *save_sprinklers(devices_manager_t *dm) +{ + struct json_object *root_node; + sprinkler_t *sprinkler; + qlist_obj_t obj; + + memset((void *) &obj, 0, sizeof(obj)); + root_node = json_object_new_array(); + + while (qlist_getnext(dm->sprinklers, &obj, true)) + { + sprinkler = obj.data; + json_object_array_add(root_node, sprinkler_to_json_object(sprinkler)); + } + + return root_node; } /*--------------------------------------------------------------------------*/ int create_sprinkler(devices_manager_t *dm, struct json_object *node) { - DEBUG("TODO"); + #warning "TODO" return 0; } diff --git a/src/devices/devices_manager.h b/src/devices/devices_manager.h index df8ba65..dfbc5e4 100644 --- a/src/devices/devices_manager.h +++ b/src/devices/devices_manager.h @@ -49,8 +49,8 @@ struct devices_manager_s char *file_path; qlist_t *outlets; - qhashtbl_t *shutters; - qhashtbl_t *sprinklers; + qlist_t *shutters; + qlist_t *sprinklers; }; /*--------------------------- PUBLIC FUNCTIONS -------------------------------*/ diff --git a/src/main.c b/src/main.c index 8de3113..8993b3e 100644 --- a/src/main.c +++ b/src/main.c @@ -131,8 +131,9 @@ int main(int argc, char **argv) fprintf(stderr, "Failed to Load the devices.\n"); return -1; } - devices_manager_save(device_manager); + #if 0 + devices_manager_save(device_manager); /* Setup the Sequences Manager. */ SequencesManager the_sequences_manager(the_config_path + "/sequences.json", &the_devices_manager); if (the_sequences_manager.load() != 0)