Add datamodel
This commit is contained in:
258
src/devices/devices_manager.c
Normal file
258
src/devices/devices_manager.c
Normal file
@@ -0,0 +1,258 @@
|
||||
/*!
|
||||
* devices_manager.c
|
||||
*
|
||||
* Copyright (c) 2015-2019, NADAL Jean-Baptiste. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301 USA
|
||||
*
|
||||
* @Author: NADAL Jean-Baptiste
|
||||
* @Date: 23/12/2019
|
||||
*
|
||||
*/
|
||||
|
||||
// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
|
||||
|
||||
/*-------------------------------- INCLUDES ---------------------------------*/
|
||||
|
||||
#include <strings.h>
|
||||
|
||||
#include <json.h>
|
||||
#include <json_util.h>
|
||||
|
||||
#include "macro.h"
|
||||
#include "domo.h"
|
||||
|
||||
#include "devices_manager.h"
|
||||
|
||||
/*----------------------------- LOCAL FUNCTIONS ----------------------------*/
|
||||
|
||||
int load_outlets(devices_manager_t *dm, struct json_object *node);
|
||||
int create_outlet(struct json_object *node);
|
||||
|
||||
int load_shutters(devices_manager_t *dm, struct json_object *node);
|
||||
int create_shutter(devices_manager_t *dm, struct json_object *node);
|
||||
|
||||
int load_sprinklers(devices_manager_t *dm, struct json_object *node);
|
||||
int create_sprinkler(devices_manager_t *dm, struct json_object *node);
|
||||
|
||||
/*----------------------------- PUBLIC FUNCTIONS ----------------------------*/
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
devices_manager_t *devices_manager_new(void)
|
||||
{
|
||||
devices_manager_t *devices_manager = NEW_OBJECT(devices_manager_t);
|
||||
if (devices_manager == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bzero((void *)devices_manager, sizeof(devices_manager_t));
|
||||
|
||||
// Initialize instance.
|
||||
devices_manager->outlets = qhashtbl(0, 0);
|
||||
devices_manager->shutters = qhashtbl(0, 0);
|
||||
devices_manager->sprinklers = qhashtbl(0, 0);
|
||||
|
||||
return devices_manager;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void devices_manager_free(devices_manager_t *devices_manager)
|
||||
{
|
||||
if (devices_manager == NULL)
|
||||
return;
|
||||
|
||||
if (devices_manager->outlets)
|
||||
{
|
||||
devices_manager->outlets->free(devices_manager->outlets);
|
||||
}
|
||||
if (devices_manager->shutters)
|
||||
{
|
||||
devices_manager->shutters->free(devices_manager->shutters);
|
||||
}
|
||||
if (devices_manager->sprinklers)
|
||||
{
|
||||
devices_manager->sprinklers->free(devices_manager->sprinklers);
|
||||
}
|
||||
free(devices_manager);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_load(devices_manager_t *dm)
|
||||
{
|
||||
struct json_object *the_root_node, *the_value_node;
|
||||
DEBUG("Devices::load...\n");
|
||||
|
||||
the_root_node = json_object_from_file(dm->file_path);
|
||||
if (the_root_node == NULL)
|
||||
{
|
||||
fprintf(stderr, "Failed to parse the Devices File (%s).\n", dm->file_path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (json_object_object_get_ex(the_root_node, kOutletEntry, &the_value_node))
|
||||
{
|
||||
load_outlets(dm, the_value_node);
|
||||
}
|
||||
|
||||
if (json_object_object_get_ex(the_root_node, kShutterEntry, &the_value_node))
|
||||
{
|
||||
load_shutters(dm, the_value_node);
|
||||
}
|
||||
|
||||
if (json_object_object_get_ex(the_root_node, kSprinklerEntry, &the_value_node))
|
||||
{
|
||||
load_sprinklers(dm, the_value_node);
|
||||
}
|
||||
|
||||
/* Clean the json object. */
|
||||
json_object_put(the_root_node);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_save(devices_manager_t *dm)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
char *devices_manager_get(devices_manager_t *dm, const char *capability)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
char *devices_manager_get_by_id(devices_manager_t *dm, const char *capability, uint32_t id)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_set(devices_manager_t *dm, const char *capability, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_set_state(devices_manager_t *dm, const char *capability, int id, bool state)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_create(devices_manager_t *dm, const char *a_capability, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_update(devices_manager_t *dm, const char *a_capability, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int devices_manager_delete(devices_manager_t *dm, const char *a_capability, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*! ----------------------------------------------------------------------------
|
||||
* @fn load_outlets
|
||||
*
|
||||
* @brief Load outlets Object From a Json Node.
|
||||
*/
|
||||
int load_outlets(devices_manager_t *dm, struct json_object *node)
|
||||
{
|
||||
DEBUG("DevicesManager::load_outlets\n");
|
||||
|
||||
/* Get Outlets */
|
||||
if (json_object_get_type(node) == json_type_array)
|
||||
{
|
||||
int length;
|
||||
struct json_object *outlet_node;
|
||||
|
||||
length = json_object_array_length(node);
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
/*
|
||||
OutletDio* the_outlet = new OutletDio;
|
||||
the_outlet_node = json_object_array_get_idx(a_node, i);
|
||||
the_outlet->from_json(the_outlet_node);
|
||||
|
||||
m_outlets.add(the_outlet);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int load_shutters(devices_manager_t *dm, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int create_shutter(devices_manager_t *dm, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int load_sprinklers(devices_manager_t *dm, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int create_sprinkler(devices_manager_t *dm, struct json_object *node)
|
||||
{
|
||||
DEBUG("TODO");
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user