Index: sources/device/DeviceGlobals.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceGlobals.h (.../DeviceGlobals.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceGlobals.h (.../DeviceGlobals.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -15,44 +15,152 @@ #pragma once // Qt -#include -#define ATTRIBUTE( vTYPE, vATTRIBUTE, vDEFAULT ) \ +// Project +#include "StorageGlobals.h" + +namespace Device { + +const QString _scriptsFolder = Storage::Scripts_Path_Name; + +} + +/* DEVICE ATTRIBUTE PROPERTY DEFINITION */ +// The FLC in vATTRIBUTEFLC means First Letter Capital +#define ATTRIBUTE( vTYPE, vATTRIBUTE, vDEFAULT, vATTRIBUTEFLC) \ private: \ /*! the private property member variable */ \ vTYPE _##vATTRIBUTE = vDEFAULT; \ /*! the property definition */ \ Q_PROPERTY( vTYPE vATTRIBUTE \ - READ vATTRIBUTE \ - WRITE vATTRIBUTE \ + READ vATTRIBUTE /*! it shall only be called in bg by qml */ \ + WRITE qml##vATTRIBUTE \ NOTIFY vATTRIBUTE##Changed) \ - /*! the READ/getter method */ \ + /*! the READ/getter method */ \ vTYPE vATTRIBUTE ( ) { \ return _##vATTRIBUTE; \ } \ - /*! the WRITE method */ \ - void vATTRIBUTE (const vTYPE & v##vATTRIBUTE ) { \ - vATTRIBUTE ( v##vATTRIBUTE, true ); \ + /*! the WRITE method and it shall only be called in bg by qml */ \ + void qml##vATTRIBUTE (const vTYPE & v##vATTRIBUTE ) { \ + /*! This write method is not changing the actual property, + And instead will send only a request to change to device, + and if only device successfully changes, it will notify the view */ \ + vATTRIBUTE##Request ( v##vATTRIBUTE ); \ } \ - /*! the UPDATE method */ \ - void _##vATTRIBUTE##_ (const vTYPE & v##vATTRIBUTE ) { \ - vATTRIBUTE ( v##vATTRIBUTE,false ); \ - } \ - /*! the setter method */ \ - void vATTRIBUTE (const vTYPE & v##vATTRIBUTE, \ - bool vIsRequest ) { \ + /*! the response write method and can be used in c++ response update */ \ + void vATTRIBUTE (const vTYPE & v##vATTRIBUTE ) { \ if ( _##vATTRIBUTE != v##vATTRIBUTE ) { \ _##vATTRIBUTE = v##vATTRIBUTE ; \ - emit vATTRIBUTE##Changed ( _##vATTRIBUTE ); \ + emit vATTRIBUTE##Changed ( v##vATTRIBUTE ); \ } \ - if ( vIsRequest ) \ - vATTRIBUTE##Request ( v##vATTRIBUTE ); \ } \ Q_SIGNALS: /*! the signals for property bindings(Changed) and communications */ \ void vATTRIBUTE##Changed (const vTYPE & v##vATTRIBUTE ); \ private : /*! the function is called once the property is set in qml as request */ \ void vATTRIBUTE##Request (const vTYPE & v##vATTRIBUTE ); \ + Q_SIGNALS : \ + void didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData ); \ + private Q_SLOTS : \ + void onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &vData ); \ + private : - //private slots: - // void on##vATTRIBUTE##Response(const vTYPE & v##vATTRIBUTE ); +/* ---------------------------- DEVICE DEFINITIONS */ +/* ---------------------------- DEV */ +#define DEVICE_DEV_PARENT( vATTRIBUTEFLC ) \ + _process##vATTRIBUTEFLC .setParent(this); +#define DEVICE_DEV_DEFINITION( vATTRIBUTEFLC ) \ + QProcess _process##vATTRIBUTEFLC; \ + Q_SIGNALS : void didAttributeResponse (const Device##vATTRIBUTEFLC##ResponseData &); \ + private Q_SLOTS : void onAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData); \ + private Q_SLOTS : void onProcess##vATTRIBUTEFLC##ExitCode(int vExitCode); \ + private : + +#define DEVICE_DEV_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* App -> Dev */ \ + connect(&_ApplicationController , SIGNAL(didAttributeRequest(const Device##vATTRIBUTEFLC##RequestData &)), \ + this , SLOT( onAttributeRequest(const Device##vATTRIBUTEFLC##RequestData &))); \ + connect(&_process##vATTRIBUTEFLC, SIGNAL( finished(int)), \ + this, SLOT(onProcess##vATTRIBUTEFLC##ExitCode(int))); + +/* ---------------------------- APP */ +#define DEVICE_APP_BRIDGE_DEFINITION( vATTRIBUTEFLC ) \ + Q_SIGNALS : void didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &); \ + private Q_SLOTS : void onAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeRequest(vData); /* Gui -> App */ \ + } \ + Q_SIGNALS : void didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &); \ + private Q_SLOTS : void onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeResponse(vData); /* Gui <- App */ \ + } \ + private : + +#define DEVICE_APP_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* Gui -> App */ \ + connect(&_GuiController , SIGNAL(didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &)), \ + this , SLOT( onAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &))); \ + /* App <- Dev */ \ + connect(&_DeviceController , SIGNAL(didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &)), \ + this , SLOT( onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &))); + +/* ---------------------------- GUI */ +#define DEVICE_GUI_BRIDGE_DEFINITION( vATTRIBUTEFLC ) \ + Q_SIGNALS : void didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &); \ + public Q_SLOTS : void doAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeRequest(vData); /* Gui -> App */ \ + } \ + Q_SIGNALS : void didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &); \ + public Q_SLOTS : void onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeResponse(vData); /* Gui <- App */ \ + } \ + private : + +#define DEVICE_GUI_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* Gui <- App */ \ + connect(&_ApplicationController, SIGNAL(didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &)), \ + this , SLOT( onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &))); + +/* ---------------------------- VIEW */ +#define DEVICE_VIEW_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* to convert the value to the model and emit the signal to go to the controller (Qml -> View) */ \ + connect(this , SIGNAL(didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &)), \ + &_GuiController , SLOT( doAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &))); \ + /* View <- Gui */ \ + connect(&_GuiController , SIGNAL(didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &)), \ + this , SLOT( onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &))); + +/* ---------------------------- DEVICE DEFINITIONS LISTS */ +/* Please list all the device attributes here for each list */ +/* ---------------------------- DEV */ +#define DEVICE_DEV_PARENT_LIST \ + DEVICE_DEV_PARENT ( Brightness ) \ + +#define DEVICE_DEV_INIT_CONNECTIONS_LIST \ + DEVICE_DEV_INIT_CONNECTIONS ( Brightness ) \ + +#define DEVICE_DEV_DEFINITION_LIST \ + DEVICE_DEV_DEFINITION ( Brightness ) \ + +/* ---------------------------- APP */ +#define DEVICE_APP_INIT_CONNECTIONS_LIST \ + DEVICE_APP_INIT_CONNECTIONS ( Brightness ) \ + +#define DEVICE_APP_BRIDGE_DEFINITION_LIST \ + DEVICE_APP_BRIDGE_DEFINITION( Brightness ) \ + +/* ---------------------------- GUI */ +#define DEVICE_GUI_BRIDGE_DEFINITION_LIST \ + DEVICE_GUI_BRIDGE_DEFINITION( Brightness ) \ + +#define DEVICE_GUI_INIT_CONNECTIONS_LIST \ + DEVICE_GUI_INIT_CONNECTIONS ( Brightness ) \ + +/* ---------------------------- VIEW */ +#define DEVICE_VIEW_INIT_CONNECTIONS_LIST \ + DEVICE_VIEW_INIT_CONNECTIONS( Brightness ) \ + +