ubus model work in progress.

This commit is contained in:
jbnadal
2018-04-04 18:14:42 +02:00
parent 69e71281b2
commit a7b3344363
9 changed files with 143 additions and 145 deletions

View File

@@ -15,6 +15,7 @@ file(
GLOB_RECURSE GLOB_RECURSE
source_files source_files
${workspaceRoot}/src/prog/domod/src/main.cpp ${workspaceRoot}/src/prog/domod/src/main.cpp
# devices
${workspaceRoot}/src/prog/domod/src/devices/devices-manager.cpp ${workspaceRoot}/src/prog/domod/src/devices/devices-manager.cpp
${workspaceRoot}/src/prog/domod/src/devices/device.cpp ${workspaceRoot}/src/prog/domod/src/devices/device.cpp
${workspaceRoot}/src/prog/domod/src/devices/light-device.cpp ${workspaceRoot}/src/prog/domod/src/devices/light-device.cpp
@@ -23,17 +24,15 @@ file(
${workspaceRoot}/src/prog/domod/src/devices/light.cpp ${workspaceRoot}/src/prog/domod/src/devices/light.cpp
${workspaceRoot}/src/prog/domod/src/devices/shutter.cpp ${workspaceRoot}/src/prog/domod/src/devices/shutter.cpp
${workspaceRoot}/src/prog/domod/src/devices/sprinkler.cpp ${workspaceRoot}/src/prog/domod/src/devices/sprinkler.cpp
# ubus models
${workspaceRoot}/src/prog/domod/src/ubus/capabilities.cpp
${workspaceRoot}/src/prog/domod/src/ubus/capabilities_lights.cpp
#${workspaceRoot}/src/prog/domod/src/timers/event.cpp #${workspaceRoot}/src/prog/domod/src/timers/event.cpp
#${workspaceRoot}/src/prog/domod/src/ubus/timers.cpp #${workspaceRoot}/src/prog/domod/src/ubus/timers.cpp
) )
# $ENV{SRC_DIR}/src/prog/domod/src/timers/Timers.cpp # $ENV{SRC_DIR}/src/prog/domod/src/timers/Timers.cpp
# $ENV{SRC_DIR}/src/prog/domod/src/timers/Clock.cpp # $ENV{SRC_DIR}/src/prog/domod/src/timers/Clock.cpp
#
# $ENV{SRC_DIR}/src/prog/domod/src/ubus/capabilities.cpp
# $ENV{SRC_DIR}/src/prog/domod/src/ubus/capabilities_lights.cpp
# $ENV{SRC_DIR}/src/prog/domod/src/ubus/capabilities_shutters.cpp # $ENV{SRC_DIR}/src/prog/domod/src/ubus/capabilities_shutters.cpp
# $ENV{SRC_DIR}/src/prog/domod/src/ubus/capabilities_sprinklers.cpp # $ENV{SRC_DIR}/src/prog/domod/src/ubus/capabilities_sprinklers.cpp
# $ENV{SRC_DIR}/src/prog/domod/src/ubus/speach_command.cpp # $ENV{SRC_DIR}/src/prog/domod/src/ubus/speach_command.cpp

View File

@@ -33,12 +33,6 @@
#include "devices/devices-manager.h" #include "devices/devices-manager.h"
/*------------------------------- DEFINES ----------------------------------*/
#define kLightEntry "Lights"
#define kShutterEntry "Shutters"
#define kSprinklerEntry "Sprinklers"
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn DevicesManager * @fn DevicesManager
* *

View File

@@ -36,6 +36,12 @@
#include "devices/device.h" #include "devices/device.h"
/*------------------------------- DEFINES ----------------------------------*/
#define kLightEntry "Lights"
#define kShutterEntry "Shutters"
#define kSprinklerEntry "Sprinklers"
/*---------------------------------- Deps -----------------------------------*/ /*---------------------------------- Deps -----------------------------------*/
/*--------------------------------- CLASS ----------------------------------*/ /*--------------------------------- CLASS ----------------------------------*/

View File

@@ -40,6 +40,9 @@ extern "C" {
#include "timers/timers.h" #include "timers/timers.h"
#include "devices/devices-manager.h" #include "devices/devices-manager.h"
#include "ubus/capabilities.h"
#include "ubus/capabilities_lights.h"
/*-------------------------------- DEFINES ---------------------------------*/ /*-------------------------------- DEFINES ---------------------------------*/
#define k_dir_sep '/' #define k_dir_sep '/'
@@ -142,8 +145,13 @@ int main(int argc, char *argv[])
return -2; return -2;
} }
#endif #endif
return 0;
/* Setup the UBus Models. */
CapabilitiesModel the_capabilities(the_config_path + "./capabilities.json");
CapabilitiesLightsModel the_cap_lights(&the_devices_manager);
return 0;
/* Setup the Ubus context. */ /* Setup the Ubus context. */
the_ctx = setup_ubus(); the_ctx = setup_ubus();
if (the_ctx == NULL) if (the_ctx == NULL)
@@ -151,6 +159,10 @@ int main(int argc, char *argv[])
return -1; return -1;
} }
/* Add the UBus to the model exposed. */
ubus_add_object(the_ctx, &the_capabilities);
ubus_add_object(the_ctx, &the_cap_lights);
/* Main Event Loop. */ /* Main Event Loop. */
uloop_run(); uloop_run();
@@ -161,8 +173,8 @@ int main(int argc, char *argv[])
} }
#if 0 #if 0
#include "ubus/capabilities.h"
#include "ubus/capabilities_lights.h"
#include "ubus/capabilities_shutters.h" #include "ubus/capabilities_shutters.h"
#include "ubus/capabilities_sprinklers.h" #include "ubus/capabilities_sprinklers.h"
#include "ubus/speach_command.h" #include "ubus/speach_command.h"

View File

@@ -23,12 +23,11 @@
* *
*/ */
/*-------------------------------- INCLUDES ---------------------------------*/ /*-------------------------------- INCLUDES ---------------------------------*/
#include <fstream> #include <fstream>
#include <string> #include <string>
#include <sstream> #include <sstream>
extern "C" { extern "C" {
#include <libubox/blobmsg_json.h> #include <libubox/blobmsg_json.h>
@@ -36,15 +35,14 @@ extern "C" {
#include "capabilities.h" #include "capabilities.h"
namespace { namespace
{
using namespace UBus; using namespace UBus;
static ObjectType gCapabilitiesModelUbus_types( static ObjectType gCapabilitiesModelUbus_types(
"capabilities", "capabilities",
Method("get", UBUS_CPP(CapabilitiesModel, Get)) Method("get", UBUS_CPP(CapabilitiesModel, get)));
);
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
@@ -52,45 +50,41 @@ static ObjectType gCapabilitiesModelUbus_types(
* *
* @brief Constructor of the UBus Mixer Volume. * @brief Constructor of the UBus Mixer Volume.
*/ */
CapabilitiesModel::CapabilitiesModel (void) : CapabilitiesModel::CapabilitiesModel(const std::string &a_capability_file) : UBusObject(gCapabilitiesModelUbus_types, "domo.capabilities"),
UBusObject (gCapabilitiesModelUbus_types, "domo.capabilities") m_capability_file(a_capability_file)
{ {
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn ~CapabilitiesModel * @fn ~CapabilitiesModel
* *
* @brief Destructor of the UBus Mixer Volume. * @brief Destructor of the UBus Mixer Volume.
*/ */
CapabilitiesModel::~CapabilitiesModel (void) CapabilitiesModel::~CapabilitiesModel(void)
{ {
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn Get * @fn get
* *
* @brief Get the List of the Capabilities. * @brief Get the List of the Capabilities.
*/ */
int CapabilitiesModel::Get (struct ubus_context *aCtx, struct ubus_request_data *aReq, int CapabilitiesModel::get(struct ubus_context *a_ctx, struct ubus_request_data *a_req, struct blob_attr *)
struct blob_attr *aMsg)
{ {
int theResult; int the_result;
struct blob_buf theBuf = {0}; struct blob_buf the_buf = {0};
std::ifstream theCapFile ("./rsc/capabilities.json"); std::ifstream the_cap_file(m_capability_file);
std::stringstream theBuffer; std::stringstream the_buffer;
theBuffer << theCapFile.rdbuf(); the_buffer << the_cap_file.rdbuf();
blob_buf_init (&theBuf, 0); blob_buf_init(&the_buf, 0);
blobmsg_add_json_from_string (&theBuf, theBuffer.str().c_str()); blobmsg_add_json_from_string(&the_buf, the_buffer.str().c_str());
theResult = ubus_send_reply (aCtx, aReq, theBuf.head); the_result = ubus_send_reply(a_ctx, a_req, the_buf.head);
blob_buf_free (&theBuf); blob_buf_free(&the_buf);
return theResult; return the_result;
} }

View File

@@ -28,23 +28,25 @@
/*------------------------------- INCLUDES ----------------------------------*/ /*------------------------------- INCLUDES ----------------------------------*/
#include <string>
#include <stdint.h> #include <stdint.h>
#include <ubus-cpp/UBusObject.h> #include <ubus-cpp/ubus-object.h>
/*--------------------------------- Define ----------------------------------*/ /*--------------------------------- Define ----------------------------------*/
/*--------------------------------- CLASS ----------------------------------*/ /*--------------------------------- CLASS ----------------------------------*/
class CapabilitiesModel : public UBusObject { class CapabilitiesModel : public UBusObject
{
public:
CapabilitiesModel(const std::string &a_capability_file);
~CapabilitiesModel(void);
public: int get(struct ubus_context *, struct ubus_request_data *, struct blob_attr *);
CapabilitiesModel (void);
~CapabilitiesModel (void); private:
std::string m_capability_file;
int Get (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
private:
}; };
#endif /* _UBUS_CAPABILITIES_MODEL_H */ #endif /* _UBUS_CAPABILITIES_MODEL_H */

View File

@@ -25,30 +25,27 @@
/*-------------------------------- INCLUDES ---------------------------------*/ /*-------------------------------- INCLUDES ---------------------------------*/
#include <json-c/json.h>
extern "C" { extern "C" {
#include <libubox/blobmsg_json.h> #include <libubox/blobmsg_json.h>
} }
#include "devices/devices-manager.h"
#include <jsoncpp/json.h>
#include "devices/Devices.h"
#include "capabilities_lights.h" #include "capabilities_lights.h"
namespace { namespace
{
using namespace UBus; using namespace UBus;
static ObjectType gCapabilitiesLightsUbus_types( static ObjectType gCapabilitiesLightsUbus_types(
"lights", "lights",
Method("get", UBUS_CPP(CapabilitiesLightsModel, Get)), Method("get", UBUS_CPP(CapabilitiesLightsModel, get)),
Method("delete", UBUS_CPP(CapabilitiesLightsModel, Delete)), Method("delete", UBUS_CPP(CapabilitiesLightsModel, del)),
Method("put", UBUS_CPP(CapabilitiesLightsModel, Put)), Method("put", UBUS_CPP(CapabilitiesLightsModel, put)),
Method("post", UBUS_CPP(CapabilitiesLightsModel, Post)) Method("post", UBUS_CPP(CapabilitiesLightsModel, post)));
);
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
@@ -56,112 +53,108 @@ static ObjectType gCapabilitiesLightsUbus_types(
* *
* @brief Constructor of the UBus Mixer Volume. * @brief Constructor of the UBus Mixer Volume.
*/ */
CapabilitiesLightsModel::CapabilitiesLightsModel (Devices *aDevice) : CapabilitiesLightsModel::CapabilitiesLightsModel(DevicesManager *a_device_manager) :
UBusObject (gCapabilitiesLightsUbus_types, "domo.capabilities.lights"), UBusObject(gCapabilitiesLightsUbus_types, "domo.capabilities.lights"),
mDevices (aDevice) m_devices_manager(a_device_manager)
{ {
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn ~CapabilitiesLightsModel * @fn ~CapabilitiesLightsModel
* *
* @brief Destructor of the UBus Mixer Volume. * @brief Destructor of the UBus Mixer Volume.
*/ */
CapabilitiesLightsModel::~CapabilitiesLightsModel (void) CapabilitiesLightsModel::~CapabilitiesLightsModel(void)
{ {
} }
/*! ----------------------------------------------------------------------------
* @fn get
*
* @brief get the List of the Capabilities.
*/
int CapabilitiesLightsModel::get(struct ubus_context *a_ctx, struct ubus_request_data *a_req, struct blob_attr *a_msg)
{
int the_result;
struct blob_buf the_buf = { 0 };
blob_buf_init(&the_buf, 0);
blobmsg_add_json_from_string(&the_buf, m_devices_manager->get(kLightEntry).c_str());
the_result = ubus_send_reply(a_ctx, a_req, the_buf.head);
blob_buf_free(&the_buf);
return the_result;
}
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn Get * @fn del
* *
* @brief Get the List of the Capabilities. * @brief Get the List of the Capabilities.
*/ */
int CapabilitiesLightsModel::Get (struct ubus_context *aCtx, struct ubus_request_data *aReq, int CapabilitiesLightsModel::del(struct ubus_context *, struct ubus_request_data *, struct blob_attr *)
struct blob_attr *aMsg)
{ {
int theResult; int the_result = 0;
struct blob_buf theBuf = {0};
blob_buf_init (&theBuf, 0); return the_result;
blobmsg_add_json_from_string (&theBuf, mDevices->get("Lights").c_str());
theResult = ubus_send_reply (aCtx, aReq, theBuf.head);
blob_buf_free (&theBuf);
return theResult;
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn Delete * @fn put
* *
* @brief Get the List of the Capabilities. * @brief Get the List of the Capabilities.
*/ */
int CapabilitiesLightsModel::Delete (struct ubus_context*, struct ubus_request_data*, struct blob_attr*) int CapabilitiesLightsModel::put(struct ubus_context *, struct ubus_request_data *, struct blob_attr *)
{ {
int theResult = 0; int the_result = 0;
return theResult; return the_result;
} }
/*! ---------------------------------------------------------------------------- /*! ----------------------------------------------------------------------------
* @fn Put * @fn post
* *
* @brief Get the List of the Capabilities. * @brief Get the List of the Capabilities.
*/ */
int CapabilitiesLightsModel::Put (struct ubus_context*, struct ubus_request_data*, struct blob_attr*) int CapabilitiesLightsModel::post(struct ubus_context *a_ctx, struct ubus_request_data *a_req, struct blob_attr *a_msg)
{
int theResult = 0;
return theResult;
}
/*! ----------------------------------------------------------------------------
* @fn Post
*
* @brief Get the List of the Capabilities.
*/
int CapabilitiesLightsModel::Post (struct ubus_context *aCtx, struct ubus_request_data *aReq,
struct blob_attr *aMsg)
{ {
#if 0
int theResult = 0; int theResult = 0;
struct blob_buf theBuf = {0}; struct blob_buf theBuf = {0};
char *theString = blobmsg_format_json (aMsg, true); char *theString = blobmsg_format_json(aMsg, true);
Json::Reader theReader; Json::Reader theReader;
Json::StyledWriter theWriter; Json::StyledWriter theWriter;
Json::Value theRoot; Json::Value theRoot;
Json::Value theOutput; Json::Value theOutput;
Json::Value theElement; Json::Value theElement;
fprintf (stderr,"CapabilitiesLights::Post \n"); fprintf(stderr, "CapabilitiesLights::Post \n");
if (!theReader.parse (theString, theRoot)) {
fprintf (stderr, "Failed parse the parameters.\n"); if (!theReader.parse(theString, theRoot))
return UBUS_STATUS_INVALID_ARGUMENT; {
}
if (mDevices->set ("Lights", theRoot) < 0) { fprintf(stderr, "Failed parse the parameters.\n");
return UBUS_STATUS_INVALID_ARGUMENT;
}
fprintf (stderr, "Failed to set the new state.\n"); if (mDevices->set("Lights", theRoot) < 0)
return -1; {
}
fprintf(stderr, "Failed to set the new state.\n");
return -1;
}
theOutput["Lights"] = theElement; theOutput["Lights"] = theElement;
blob_buf_init (&theBuf, 0); blob_buf_init(&theBuf, 0);
blobmsg_add_json_from_string(&theBuf, theWriter.write(theOutput).c_str());
theResult = ubus_send_reply(aCtx, aReq, theBuf.head);
blob_buf_free(&theBuf);
blobmsg_add_json_from_string (&theBuf, theWriter.write(theOutput).c_str());
theResult = ubus_send_reply (aCtx, aReq, theBuf.head);
blob_buf_free (&theBuf);
return theResult; return theResult;
#endif
} }

View File

@@ -29,31 +29,29 @@
/*------------------------------- INCLUDES ----------------------------------*/ /*------------------------------- INCLUDES ----------------------------------*/
#include <stdint.h> #include <stdint.h>
#include <jsoncpp/json.h>
#include <ubus-cpp/UBusObject.h>
#include <ubus-cpp/ubus-object.h>
/*--------------------------------- Define ----------------------------------*/ /*--------------------------------- Define ----------------------------------*/
class Devices; class DevicesManager;
/*--------------------------------- CLASS ----------------------------------*/ /*--------------------------------- CLASS ----------------------------------*/
class CapabilitiesLightsModel : public UBusObject { class CapabilitiesLightsModel : public UBusObject
{
public: public:
CapabilitiesLightsModel (Devices *aDevice); CapabilitiesLightsModel(DevicesManager *a_device_manager);
~CapabilitiesLightsModel (void); ~CapabilitiesLightsModel(void);
int Get (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
int Delete (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
int Put (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
int Post (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
private: int get(struct ubus_context *, struct ubus_request_data *, struct blob_attr *);
Devices *mDevices; int del(struct ubus_context *, struct ubus_request_data *, struct blob_attr *);
int put(struct ubus_context *, struct ubus_request_data *, struct blob_attr *);
int post(struct ubus_context *, struct ubus_request_data *, struct blob_attr *);
private:
DevicesManager *m_devices_manager;
}; };
#endif /* _UBUS_CAPABILITIES_LIGHTS_MODEL_H */ #endif /* _UBUS_CAPABILITIES_LIGHTS_MODEL_H */

View File

@@ -44,8 +44,8 @@ public:
TimersModel (Timers *aTimers); TimersModel (Timers *aTimers);
~TimersModel (void); ~TimersModel (void);
int Get (struct ubus_context*, struct ubus_request_data*, struct blob_attr*); int Get (struct ubus_context*, struct ubus_request_data*, struct blob_attr *);
int Delete (struct ubus_context*, struct ubus_request_data*, struct blob_attr*); int Delete (struct ubus_context*, struct ubus_request_data*, struct blob_attr *);
private: private:
Timers *mTimers; Timers *mTimers;