From 0269ff965f403abbacd1619564f62e89091b88d8 Mon Sep 17 00:00:00 2001
From: Claudio Scafuri <claudio.scafuri@elettra.eu>
Date: Fri, 1 Mar 2024 16:01:01 +0100
Subject: [PATCH] fixes and commands

---
 src/SimulatedE2PS.cpp             | 11 ++++++-----
 src/SimulatedE2PS.h               |  6 +++---
 src/SimulatedE2PS.xmi             |  3 ++-
 src/SimulatedE2PSClass.cpp        | 14 +++++++-------
 src/SimulatedE2PSClass.h          | 12 ++++++------
 src/SimulatedE2PSStateMachine.cpp | 15 ++++++++-------
 6 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/src/SimulatedE2PS.cpp b/src/SimulatedE2PS.cpp
index 83025f5..2dc98db 100644
--- a/src/SimulatedE2PS.cpp
+++ b/src/SimulatedE2PS.cpp
@@ -59,7 +59,7 @@
 //  Reset         |  reset
 //  StartCycling  |  start_cycling
 //  Abort         |  abort
-//  fault         |  fault
+//  Fault         |  fault
 //================================================================
 
 //================================================================
@@ -486,24 +486,25 @@ void SimulatedE2PS::abort()
 }
 //--------------------------------------------------------
 /**
- *	Command fault related method
+ *	Command Fault related method
  * Description:  Force a simulated faulty condtion
  *
  */
 //--------------------------------------------------------
 void SimulatedE2PS::fault()
 {
-	DEBUG_STREAM << "SimulatedE2PS::fault()  - " << device_name << std::endl;
+	DEBUG_STREAM << "SimulatedE2PS::Fault()  - " << device_name << std::endl;
 	/*----- PROTECTED REGION ID(SimulatedE2PS::fault) ENABLED START -----*/
 	/* clang-format on */
 
 	//	Add your own code
+	if (get_state() == Tango::ON) return; // command is idempotent
 	_current_read = 0.0;
 	_current = 0.0;
 	_voltage = 0.0;
 	attr_current->set_write_value(_current);
-	push_change_event("current",&_current_read);
-	push_change_event("currentSet",&_current);
+	push_change_event("current", &_current_read);
+	push_change_event("currentSet", &_current);
 	set_state(Tango::FAULT);
 	push_change_event("State");
 	/* clang-format off */
diff --git a/src/SimulatedE2PS.h b/src/SimulatedE2PS.h
index e6357f4..dcf8853 100644
--- a/src/SimulatedE2PS.h
+++ b/src/SimulatedE2PS.h
@@ -81,7 +81,7 @@ class SimulatedE2PS : public TANGO_BASE_CLASS
 	class cyclethread 		*cycleloop;
 	bool    thread_running;
 	bool abortflag;
-	void psdelay();
+	//void psdelay();
 	Tango::WAttribute  *attr_current;
 /* clang-format off */
 /*----- PROTECTED REGION END -----*/	//	SimulatedE2PS::Data Members
@@ -245,12 +245,12 @@ public:
 	virtual void abort();
 	virtual bool is_Abort_allowed(const CORBA::Any &any);
 	/**
-	 *	Command fault related method
+	 *	Command Fault related method
 	 * Description:  Force a simulated faulty condtion
 	 *
 	 */
 	virtual void fault();
-	virtual bool is_fault_allowed(const CORBA::Any &any);
+	virtual bool is_Fault_allowed(const CORBA::Any &any);
 
 
 	//--------------------------------------------------------
diff --git a/src/SimulatedE2PS.xmi b/src/SimulatedE2PS.xmi
index 90c8112..3b12b35 100644
--- a/src/SimulatedE2PS.xmi
+++ b/src/SimulatedE2PS.xmi
@@ -53,6 +53,7 @@
       </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
     </commands>
     <commands name="Reset" description="Reset the powersupply to a well known state." execMethod="reset" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
       <argin description="">
@@ -86,7 +87,7 @@
       <excludedStates>UNKNOWN</excludedStates>
       <excludedStates>FAULT</excludedStates>
     </commands>
-    <commands name="fault" description="Force a simulated faulty condtion" execMethod="fault" displayLevel="EXPERT" polledPeriod="0" isDynamic="false">
+    <commands name="Fault" description="Force a simulated faulty condtion" execMethod="fault" displayLevel="EXPERT" polledPeriod="0" isDynamic="false">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
       </argin>
diff --git a/src/SimulatedE2PSClass.cpp b/src/SimulatedE2PSClass.cpp
index 32c3963..26d339e 100644
--- a/src/SimulatedE2PSClass.cpp
+++ b/src/SimulatedE2PSClass.cpp
@@ -246,7 +246,7 @@ CORBA::Any *AbortClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CO
 
 //--------------------------------------------------------
 /**
- * method : 		faultClass::execute()
+ * method : 		FaultClass::execute()
  * description : 	method to trigger the execution of the command.
  *
  * @param	device	The device on which the command must be executed
@@ -255,9 +255,9 @@ CORBA::Any *AbortClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CO
  *	returns The command output data (packed in the Any object)
  */
 //--------------------------------------------------------
-CORBA::Any *faultClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+CORBA::Any *FaultClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-	TANGO_LOG_INFO << "faultClass::execute(): arrived" << std::endl;
+	TANGO_LOG_INFO << "FaultClass::execute(): arrived" << std::endl;
 	((static_cast<SimulatedE2PS *>(device))->fault());
 	return new CORBA::Any();
 }
@@ -610,14 +610,14 @@ void SimulatedE2PSClass::command_factory()
 			Tango::OPERATOR);
 	command_list.push_back(pAbortCmd);
 
-	//	Command fault
-	faultClass	*pfaultCmd =
-		new faultClass("fault",
+	//	Command Fault
+	FaultClass	*pFaultCmd =
+		new FaultClass("Fault",
 			Tango::DEV_VOID, Tango::DEV_VOID,
 			"",
 			"",
 			Tango::EXPERT);
-	command_list.push_back(pfaultCmd);
+	command_list.push_back(pFaultCmd);
 
 	/*----- PROTECTED REGION ID(SimulatedE2PSClass::command_factory_after) ENABLED START -----*/
 	/* clang-format on */
diff --git a/src/SimulatedE2PSClass.h b/src/SimulatedE2PSClass.h
index 64d6ec1..c24a21a 100644
--- a/src/SimulatedE2PSClass.h
+++ b/src/SimulatedE2PSClass.h
@@ -216,11 +216,11 @@ public:
 	{return (static_cast<SimulatedE2PS *>(dev))->is_Abort_allowed(any);}
 };
 
-//	Command fault class definition
-class faultClass : public Tango::Command
+//	Command Fault class definition
+class FaultClass : public Tango::Command
 {
 public:
-	faultClass(const char   *cmd_name,
+	FaultClass(const char   *cmd_name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -228,15 +228,15 @@ public:
 				   Tango::DispLevel  level)
 	:Command(cmd_name,in,out,in_desc,out_desc, level)	{};
 
-	faultClass(const char   *cmd_name,
+	FaultClass(const char   *cmd_name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(cmd_name,in,out)	{};
-	~faultClass() {};
+	~FaultClass() {};
 
 	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
 	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
-	{return (static_cast<SimulatedE2PS *>(dev))->is_fault_allowed(any);}
+	{return (static_cast<SimulatedE2PS *>(dev))->is_Fault_allowed(any);}
 };
 
 
diff --git a/src/SimulatedE2PSStateMachine.cpp b/src/SimulatedE2PSStateMachine.cpp
index 7861495..d2a8df9 100644
--- a/src/SimulatedE2PSStateMachine.cpp
+++ b/src/SimulatedE2PSStateMachine.cpp
@@ -185,7 +185,8 @@ bool SimulatedE2PS::is_On_allowed(TANGO_UNUSED(const CORBA::Any &any))
 bool SimulatedE2PS::is_Off_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
 	//	Compare device state with not allowed states.
-	if (get_state()==Tango::UNKNOWN)
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT)
 	{
 	/*----- PROTECTED REGION ID(SimulatedE2PS::OffStateAllowed) ENABLED START -----*/
 	/* clang-format on */
@@ -260,17 +261,17 @@ bool SimulatedE2PS::is_Abort_allowed(TANGO_UNUSED(const CORBA::Any &any))
 
 //--------------------------------------------------------
 /**
- *	Method      : SimulatedE2PS::is_fault_allowed()
- * Description:  Execution allowed for fault attribute
+ *	Method      : SimulatedE2PS::is_Fault_allowed()
+ * Description:  Execution allowed for Fault attribute
  */
 //--------------------------------------------------------
-bool SimulatedE2PS::is_fault_allowed(TANGO_UNUSED(const CORBA::Any &any))
+bool SimulatedE2PS::is_Fault_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	//	Not any excluded states for fault command.
-	/*----- PROTECTED REGION ID(SimulatedE2PS::faultStateAllowed) ENABLED START -----*/
+	//	Not any excluded states for Fault command.
+	/*----- PROTECTED REGION ID(SimulatedE2PS::FaultStateAllowed) ENABLED START -----*/
 	/* clang-format on */
 	/* clang-format off */
-	/*----- PROTECTED REGION END -----*/	//	SimulatedE2PS::faultStateAllowed
+	/*----- PROTECTED REGION END -----*/	//	SimulatedE2PS::FaultStateAllowed
 	return true;
 }
 
-- 
GitLab