From 6ac0047a29aadd06592c406d15b2441bb9e4399f Mon Sep 17 00:00:00 2001
From: amichelo <andrea.michelotti@lnf.infn.it>
Date: Mon, 19 Sep 2022 18:28:28 +0200
Subject: [PATCH] bypass

---
 .../api/node/NodeGetDescription.cpp           |  4 +++-
 .../control_manager/AbstractControlUnit.cpp   |  3 ++-
 .../control_manager/AbstractControlUnit.h     | 20 +++++++++----------
 .../driver_manager/DriverErogatorInterface.h  |  4 ++--
 .../cu_toolkit/driver_manager/DriverManager.h |  7 ++-----
 .../driver_manager/driver/AbstractDriver.cpp  | 11 +++++-----
 .../driver_manager/driver/AbstractDriver.h    | 17 ++++++++--------
 .../driver/AbstractDriverInterface.h          |  2 +-
 .../driver/AbstractDriverPlugin.h             |  2 +-
 .../driver/AbstractRemoteIODriver.h           |  5 +++--
 .../driver/AbstractServerRemoteIODriver.h     |  2 +-
 .../driver_manager/driver/BaseBypassDriver.h  |  2 +-
 .../driver_manager/driver/DriverAccessor.cpp  |  7 +++++++
 .../driver_manager/driver/DriverAccessor.h    |  9 ++++-----
 .../driver/DriverPluginLoader.h               |  2 +-
 .../driver_manager/driver/DriverTypes.h       |  3 ---
 .../driver_manager/driver/ExternalIODriver.h  |  2 +-
 17 files changed, 53 insertions(+), 49 deletions(-)

diff --git a/ChaosMetadataService/api/node/NodeGetDescription.cpp b/ChaosMetadataService/api/node/NodeGetDescription.cpp
index e83c11777..d7d1fed71 100644
--- a/ChaosMetadataService/api/node/NodeGetDescription.cpp
+++ b/ChaosMetadataService/api/node/NodeGetDescription.cpp
@@ -49,7 +49,9 @@ CDWUniquePtr NodeGetDescription::execute(CDWUniquePtr api_data) {
             LOG_AND_TROW(USRA_ERR, err, "Error fetching node  '"+   api_data->getStringValue(NodeDefinitionKey::NODE_UNIQUE_ID)+"' decription")
         }
     } else {
-        LOG_AND_TROW(USRA_ERR, -3, "Node '"+   api_data->getStringValue(NodeDefinitionKey::NODE_UNIQUE_ID)+"' not found")
+       // LOG_AND_TROW(USRA_ERR, -3, "Node '"+   api_data->getStringValue(NodeDefinitionKey::NODE_UNIQUE_ID)+"' not found")
+
+       LERR_<< "Node '"+   api_data->getStringValue(NodeDefinitionKey::NODE_UNIQUE_ID)+"' not found";
     }
     return CDWUniquePtr(result);
 }
diff --git a/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp b/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp
index 2f0c51e19..3a3c67184 100644
--- a/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp
+++ b/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp
@@ -2806,7 +2806,8 @@ void AbstractControlUnit::_setBypassState(bool bypass_stage,
                                   end = accessor_instances.end();
        it != end;
        it++) {
-    (*it)->send(&cmd, chaos::common::constants::CUTimersTimeoutinMSec);
+   // (*it)->send(&cmd, chaos::common::constants::CUTimersTimeoutinMSec);
+  (*it)->setBypass(bypass_stage);
   }
    ACULDBG_ << "BYPASS COMMAND:"<<bypass_stage;
   setBypassFlag(bypass_stage);
diff --git a/chaos/cu_toolkit/control_manager/AbstractControlUnit.h b/chaos/cu_toolkit/control_manager/AbstractControlUnit.h
index 0f5f82e82..8067625a8 100644
--- a/chaos/cu_toolkit/control_manager/AbstractControlUnit.h
+++ b/chaos/cu_toolkit/control_manager/AbstractControlUnit.h
@@ -230,6 +230,16 @@ class AbstractControlUnit : public DeclareAction,
     return chaos::ControlUnitDatapackSystemKey::CU_ALRM_LEVEL;
   }
 
+  //! set the value on the busy flag
+  void setBusyFlag(bool state);
+
+
+  //! set the value on the bypass flag
+  void setBypassFlag(bool state);
+
+  //!return the current value of the busi flag
+  const bool getBusyFlag() const;
+
   inline int stateVariableNameToEnum(const std::string& name) {
     if (name.compare(chaos::ControlUnitDatapackSystemKey::CU_ALRM_LEVEL) == 0) {
       return chaos::cu::control_manager::StateVariableTypeAlarmCU;
@@ -855,16 +865,6 @@ class AbstractControlUnit : public DeclareAction,
    */
   void setState(const std::string& state,bool update=false);
   
-  //! set the value on the busy flag
-  void setBusyFlag(bool state);
-
-
-  //! set the value on the bypass flag
-  void setBypassFlag(bool state);
-
-  //!return the current value of the busi flag
-  const bool getBusyFlag() const;
-
   //!called when an alarm has been modified in his severity
   void alarmChanged(const std::string& state_variable_tag,
                     const std::string& state_variable_name,
diff --git a/chaos/cu_toolkit/driver_manager/DriverErogatorInterface.h b/chaos/cu_toolkit/driver_manager/DriverErogatorInterface.h
index 594a59156..88c0ab629 100644
--- a/chaos/cu_toolkit/driver_manager/DriverErogatorInterface.h
+++ b/chaos/cu_toolkit/driver_manager/DriverErogatorInterface.h
@@ -9,8 +9,8 @@
 #ifndef CHAOSFramework_DriverErogatorInterface_h
 #define CHAOSFramework_DriverErogatorInterface_h
 
-#include <chaos/cu_toolkit/driver_manager/driver/DriverTypes.h>
-#include <chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h>
+#include "driver/DriverTypes.h"
+#include "driver/DriverAccessor.h"
 
 namespace chaos {
 	namespace cu {
diff --git a/chaos/cu_toolkit/driver_manager/DriverManager.h b/chaos/cu_toolkit/driver_manager/DriverManager.h
index 45725962f..504958550 100644
--- a/chaos/cu_toolkit/driver_manager/DriverManager.h
+++ b/chaos/cu_toolkit/driver_manager/DriverManager.h
@@ -30,12 +30,9 @@
 #include <chaos/common/utility/StartableService.h>
 #include <chaos/common/plugin/PluginInspector.h>
 
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h>
-#include <chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h>
+#include "driver/AbstractDriver.h"
+#include "driver/DriverAccessor.h"
 
-#include <boost/thread.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
 
 namespace chaos {
 	namespace cu {
diff --git a/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.cpp b/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.cpp
index 0c687f71a..123a996dc 100644
--- a/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.cpp
+++ b/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.cpp
@@ -22,8 +22,8 @@
 #include <chaos/common/utility/UUIDUtil.h>
 #include <string>
 
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h>
-#include <chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h>
+#include "AbstractDriver.h"
+#include "DriverAccessor.h"
 
 using namespace chaos::common::data;
 using namespace chaos::common::utility;
@@ -38,7 +38,7 @@ using namespace chaos::cu::driver_manager::driver;
 
  ------------------------------------------------------*/
 AbstractDriver::AbstractDriver(BaseBypassShrdPtr custom_bypass_driver)
-    : accessor_count(0), exclusive(false), bypass_driver(MOVE(custom_bypass_driver)), o_exe(this), is_json_param(false), driver_need_to_deinitialize(false), driver_uuid(UUIDUtil::generateUUIDLite()), command_queue(new DriverQueueType()) {}
+    : accessor_count(0), exclusive(false), bypass_driver(MOVE(custom_bypass_driver)),bypassEnabled(false),o_exe(this), is_json_param(false), driver_need_to_deinitialize(false), driver_uuid(UUIDUtil::generateUUIDLite()), command_queue(new DriverQueueType()) {}
 
 /*------------------------------------------------------
 
@@ -416,12 +416,13 @@ void AbstractDriver::driverDeinit() {
   ADLDBG_ << "base driver " << identification_string << " DEINIT";
 }
 
-const bool AbstractDriver::isBypass() const {
-  return o_exe != this;
+ bool AbstractDriver::isBypass()  {
+  return bypassEnabled;
 }
 
 void AbstractDriver::setBypass(bool bypass) {
   // boost::unique_lock<boost::shared_mutex> lock(accesso_list_shr_mux);
+    bypassEnabled =bypass;
 
   if (bypass) {
     LBypassDriverUnqPtrReadLock rl = bypass_driver.getReadLockObject();
diff --git a/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h b/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h
index 4524af466..e93dc8560 100644
--- a/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h
+++ b/chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h
@@ -23,16 +23,14 @@
 #define __CHAOSFramework__AbstractDriver__
 
 #include <string>
-#include <vector>
 
-#include <boost/thread.hpp>
 #include <chaos/common/data/Property.h>
 #include <chaos/common/chaos_errors.h>
 #include <chaos/common/utility/LockableObject.h>
 #include <chaos/common/utility/InizializableService.h>
 #include <chaos/common/thread/TemplatedConcurrentQueue.h>
-#include <chaos/cu_toolkit/driver_manager/driver/DriverTypes.h>
-#include <chaos/cu_toolkit/driver_manager/driver/BaseBypassDriver.h>
+#include "DriverTypes.h"
+#include "BaseBypassDriver.h"
 
 //#include <json/json.h>
 
@@ -74,7 +72,7 @@ namespace chaos{
                     template<typename T>
                     friend class DriverWrapperPlugin;
                     friend class chaos::cu::driver_manager::DriverManager;
-					
+					friend class DriverAccessor;
 					bool driver_need_to_deinitialize;
 					
 					//! unique uuid for the instance
@@ -99,7 +97,7 @@ namespace chaos{
                     bool                            is_json_param;
                    // Json::Reader					json_reader;
                    // Json::Value						json_parameter_document;
-                    
+                    bool bypassEnabled;
                     //! command queue used for receive DrvMsg pack
                     //boost::interprocess::message_queue *commandQueue;
                     ChaosUniquePtr<DriverQueueType> command_queue;
@@ -148,12 +146,11 @@ namespace chaos{
 
 					virtual void driverDeinit();
                     const bool isDriverParamInJson() const;
-                    const bool isBypass()const;
                     /*
                      * called via rpc or via user to implement the bypass
                      * */
-                    void setBypass(bool val);
-                    
+                  
+
                     //enable lock/unlock mutex handling
                     bool exclusive;
                  //   const Json::Value& getDriverParamJsonRootElement() const;
@@ -216,6 +213,8 @@ namespace chaos{
                      * to set last error
                     */
                     void setLastError(const std::string&str);
+                    virtual void setBypass(bool val);
+                    virtual bool isBypass();
                     std::string getLastError(){return lastError;}
                 };
                 
diff --git a/chaos/cu_toolkit/driver_manager/driver/AbstractDriverInterface.h b/chaos/cu_toolkit/driver_manager/driver/AbstractDriverInterface.h
index 1924f1783..8860d2e9d 100644
--- a/chaos/cu_toolkit/driver_manager/driver/AbstractDriverInterface.h
+++ b/chaos/cu_toolkit/driver_manager/driver/AbstractDriverInterface.h
@@ -20,7 +20,7 @@
 #ifndef __ASTRACTDRIVERINTERFACE_H__
 #define __ASTRACTDRIVERINTERFACE_H__
 #include <chaos/common/data/CDataWrapper.h>
-#include <chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h>
+#include "DriverAccessor.h"
 namespace chaos_driver=::chaos::cu::driver_manager::driver;
 
 namespace chaos {
diff --git a/chaos/cu_toolkit/driver_manager/driver/AbstractDriverPlugin.h b/chaos/cu_toolkit/driver_manager/driver/AbstractDriverPlugin.h
index 21bd32ae6..503905f21 100644
--- a/chaos/cu_toolkit/driver_manager/driver/AbstractDriverPlugin.h
+++ b/chaos/cu_toolkit/driver_manager/driver/AbstractDriverPlugin.h
@@ -23,7 +23,7 @@
 #define CHAOSFramework_DriverWrapperPlugin_h
 
 #include <chaos/common/plugin/PluginDefinition.h>
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractDriver.h>
+#include "AbstractDriver.h"
 
 namespace chaos{
     namespace cu {
diff --git a/chaos/cu_toolkit/driver_manager/driver/AbstractRemoteIODriver.h b/chaos/cu_toolkit/driver_manager/driver/AbstractRemoteIODriver.h
index 84cef2ca6..3ceef3038 100644
--- a/chaos/cu_toolkit/driver_manager/driver/AbstractRemoteIODriver.h
+++ b/chaos/cu_toolkit/driver_manager/driver/AbstractRemoteIODriver.h
@@ -29,13 +29,14 @@
 #include <chaos/common/thread/FutureHelper.h>
 #include <chaos/common/utility/LockableObject.h>
 
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractDriverPlugin.h>
+#include "AbstractDriverPlugin.h"
 
+/*
 #include <boost/multi_index/member.hpp>
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/ordered_index.hpp>
 #include <boost/multi_index/hashed_index.hpp>
-
+*/
 #define AUTHORIZATION_KEY           "message_data"
 #define INIT_HARDWARE_PARAM         "driver_param"
 #define OPCODE_HARDWARE_PARAM       "device_param"
diff --git a/chaos/cu_toolkit/driver_manager/driver/AbstractServerRemoteIODriver.h b/chaos/cu_toolkit/driver_manager/driver/AbstractServerRemoteIODriver.h
index 95df77d7f..b73b88ad4 100644
--- a/chaos/cu_toolkit/driver_manager/driver/AbstractServerRemoteIODriver.h
+++ b/chaos/cu_toolkit/driver_manager/driver/AbstractServerRemoteIODriver.h
@@ -21,7 +21,7 @@
 
 #ifndef chaos_cu_toolkit_driver_manager_driver_AbstractServerRemoteIODriver_h
 #define chaos_cu_toolkit_driver_manager_driver_AbstractServerRemoteIODriver_h
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractRemoteIODriver.h>
+#include "AbstractRemoteIODriver.h"
 
 #include <chaos/common/external_unit/ExternalUnitServerEndpoint.h>
 namespace chaos {
diff --git a/chaos/cu_toolkit/driver_manager/driver/BaseBypassDriver.h b/chaos/cu_toolkit/driver_manager/driver/BaseBypassDriver.h
index 5fe9a6148..5056e5c38 100644
--- a/chaos/cu_toolkit/driver_manager/driver/BaseBypassDriver.h
+++ b/chaos/cu_toolkit/driver_manager/driver/BaseBypassDriver.h
@@ -21,7 +21,7 @@
 #ifndef __CHAOSFramework_ECA49652_F22D_45D5_A82E_7A29B3D410F6_BaseBypassDriver_h
 #define __CHAOSFramework_ECA49652_F22D_45D5_A82E_7A29B3D410F6_BaseBypassDriver_h
 
-#include <chaos/cu_toolkit/driver_manager/driver/DriverTypes.h>
+#include "DriverTypes.h"
 
 namespace chaos{
     namespace cu {
diff --git a/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.cpp b/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.cpp
index c26ea7b6a..bd7a61b39 100644
--- a/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.cpp
+++ b/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.cpp
@@ -274,3 +274,10 @@ std::string DriverAccessor::getLastError() {
 
 #endif
 }
+void DriverAccessor::setBypass(bool val){
+  impl->setBypass(val);
+
+}
+const bool DriverAccessor::isBypass() const{
+  return impl->isBypass();
+}
\ No newline at end of file
diff --git a/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h b/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h
index 295bb9e27..241f534ab 100644
--- a/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h
+++ b/chaos/cu_toolkit/driver_manager/driver/DriverAccessor.h
@@ -22,11 +22,9 @@
 #ifndef __CHAOSFramework__DriverAccessor__
 #define __CHAOSFramework__DriverAccessor__
 
-#include <set>
-#include <boost/atomic/atomic.hpp>
-#include <chaos/cu_toolkit/driver_manager/driver/DriverTypes.h>
+#include "DriverTypes.h"
 #include <chaos/common/thread/TemplatedConcurrentQueue.h>
-#include <chaos/cu_toolkit/driver_manager/DriverManager.h>
+#include "../DriverManager.h"
 namespace chaos_thread_ns = chaos::common::thread;
 
 namespace chaos{
@@ -177,7 +175,8 @@ namespace chaos{
                      * @return 0 if success
                      */
                     int setDrvProperty(const std::string& key, const std::string& value);
-
+                    void setBypass(bool val);
+                    const bool isBypass()const;
                     std::string getUID() const;
                     std::string getDriverName() const;
                     std::string getLastError();
diff --git a/chaos/cu_toolkit/driver_manager/driver/DriverPluginLoader.h b/chaos/cu_toolkit/driver_manager/driver/DriverPluginLoader.h
index 14b7f1c27..3b30f8989 100644
--- a/chaos/cu_toolkit/driver_manager/driver/DriverPluginLoader.h
+++ b/chaos/cu_toolkit/driver_manager/driver/DriverPluginLoader.h
@@ -22,7 +22,7 @@
 #ifndef CHAOSFramework_DriverPluginLoader_h
 #define CHAOSFramework_DriverPluginLoader_h
 #include <chaos/common/plugin/PluginLoader.h>
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractDriverPlugin.h>
+#include "AbstractDriverPlugin.h"
 namespace chaos {
     namespace cu{
         namespace driver_manager {
diff --git a/chaos/cu_toolkit/driver_manager/driver/DriverTypes.h b/chaos/cu_toolkit/driver_manager/driver/DriverTypes.h
index 9c1b13698..b16c54475 100644
--- a/chaos/cu_toolkit/driver_manager/driver/DriverTypes.h
+++ b/chaos/cu_toolkit/driver_manager/driver/DriverTypes.h
@@ -23,9 +23,6 @@
 #define CHAOSFramework_DriverGlobal_h
 
 #include <stdint.h>
-#include <boost/lockfree/queue.hpp>
-#include <boost/lockfree/spsc_queue.hpp>
-#include <boost/interprocess/ipc/message_queue.hpp>
 
 #include <chaos/common/data/CDataWrapper.h>
 #include <chaos/common/utility/Atomic.h>
diff --git a/chaos/cu_toolkit/driver_manager/driver/ExternalIODriver.h b/chaos/cu_toolkit/driver_manager/driver/ExternalIODriver.h
index 7bb5e6d6e..211c4a76f 100644
--- a/chaos/cu_toolkit/driver_manager/driver/ExternalIODriver.h
+++ b/chaos/cu_toolkit/driver_manager/driver/ExternalIODriver.h
@@ -23,7 +23,7 @@
 #define __CHAOSFramework__061D444_6ECF_448C_8D63_98139B76FA9D_ExternalIODriver_h
 
 #include <chaos/common/chaos_types.h>
-#include <chaos/cu_toolkit/driver_manager/driver/AbstractRemoteIODriver.h>
+#include "AbstractRemoteIODriver.h"
 namespace chaos {
     namespace cu {
         namespace driver_manager {
-- 
GitLab