From d66d849867257b31086a3cec0df67834d3d83fe4 Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Thu, 4 Nov 2021 16:35:32 +0100
Subject: [PATCH] L2SS-470: Do not initialise hardware when booting simulators.

---
 CDB/stations/DTS_ConfigDb.json                | 13 +++++++++++++
 CDB/stations/LTS_ConfigDb.json                | 13 +++++++++++++
 CDB/stations/simulators_ConfigDb.json         | 13 +++++++++++++
 .../tangostationcontrol/devices/boot.py       | 19 ++++++++++++++-----
 4 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/CDB/stations/DTS_ConfigDb.json b/CDB/stations/DTS_ConfigDb.json
index c5bbf0093..741d9dc91 100644
--- a/CDB/stations/DTS_ConfigDb.json
+++ b/CDB/stations/DTS_ConfigDb.json
@@ -1,5 +1,18 @@
 {
     "servers": {
+        "boot": {
+            "STAT": {
+                "Boot": {
+                    "STAT/Boot/1": {
+                        "properties": {
+                            "Initialise_Hardware": [
+                                "True"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "APSCT": {
             "STAT": {
                 "APSCT": {
diff --git a/CDB/stations/LTS_ConfigDb.json b/CDB/stations/LTS_ConfigDb.json
index 7c03ff143..faa429379 100644
--- a/CDB/stations/LTS_ConfigDb.json
+++ b/CDB/stations/LTS_ConfigDb.json
@@ -1,5 +1,18 @@
 {
     "servers": {
+        "boot": {
+            "STAT": {
+                "Boot": {
+                    "STAT/Boot/1": {
+                        "properties": {
+                            "Initialise_Hardware": [
+                                "True"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "RECV": {
             "STAT": {
                 "RECV": {
diff --git a/CDB/stations/simulators_ConfigDb.json b/CDB/stations/simulators_ConfigDb.json
index df2ffc1c1..c9c1b8135 100644
--- a/CDB/stations/simulators_ConfigDb.json
+++ b/CDB/stations/simulators_ConfigDb.json
@@ -1,5 +1,18 @@
 {
     "servers": {
+        "boot": {
+            "STAT": {
+                "Boot": {
+                    "STAT/Boot/1": {
+                        "properties": {
+                            "Initialise_Hardware": [
+                                "False"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
         "APSCT": {
             "STAT": {
                 "APSCT": {
diff --git a/tangostationcontrol/tangostationcontrol/devices/boot.py b/tangostationcontrol/tangostationcontrol/devices/boot.py
index 574464d6c..c4df70bf5 100644
--- a/tangostationcontrol/tangostationcontrol/devices/boot.py
+++ b/tangostationcontrol/tangostationcontrol/devices/boot.py
@@ -49,8 +49,9 @@ class DevicesInitialiser(object):
         the start() method, and progress can be followed by inspecting the
         members progress (0-100), status (string), and is_running() (bool).
     """
-    def __init__(self, device_names, ignore_unavailable_devices=True, proxy_timeout=10.0):
+    def __init__(self, device_names, ignore_unavailable_devices=True, initialise_hardware=True, proxy_timeout=10.0):
         self.ignore_unavailable_devices = ignore_unavailable_devices
+        self.initialise_hardware = initialise_hardware
 
         self.device_names = device_names
         self.proxy_timeout = proxy_timeout
@@ -207,8 +208,9 @@ class DevicesInitialiser(object):
         self.set_status(f"[restarting {device_name}] Setting defaults.")
         proxy.set_defaults()
 
-        self.set_status(f"[restarting {device_name}] Initialising hardware.")
-        proxy.initialise_hardware()
+        if self.initialise_hardware:
+            self.set_status(f"[restarting {device_name}] Initialising hardware.")
+            proxy.initialise_hardware()
 
         # mark as ready for service
         self.set_status(f"[restarting {device_name}] Turning on device.")
@@ -230,6 +232,13 @@ class Boot(lofar_device):
         default_value=10.0,
     )
 
+    # Initialise the hardware when initialising a station. Can end badly when using simulators.
+    Initialise_Hardware = device_property(
+        dtype='DevBoolean',
+        mandatory=False,
+        default_value=True,
+    )
+
     # Which devices to initialise, and in which order
     Device_Names = device_property(
         dtype='DevVarStringArray',
@@ -291,7 +300,7 @@ class Boot(lofar_device):
     @log_exceptions()
     def configure_for_initialise(self):
         # create an initialiser object so we can query it even before starting the (first) initialisation
-        self.initialiser = DevicesInitialiser(self.Device_Names, self.Ignore_Unavailable_Devices, self.DeviceProxy_Time_Out)
+        self.initialiser = DevicesInitialiser(self.Device_Names, self.Ignore_Unavailable_Devices, self.Initialise_Hardware, self.DeviceProxy_Time_Out)
 
     @command()
     @DebugIt()
@@ -322,7 +331,7 @@ class Boot(lofar_device):
             pass
 
         # start new initialisation attempt
-        self.initialiser = DevicesInitialiser(self.Device_Names, self.Ignore_Unavailable_Devices, self.DeviceProxy_Time_Out)
+        self.initialiser = DevicesInitialiser(self.Device_Names, self.Ignore_Unavailable_Devices, self.Initialise_Hardware, self.DeviceProxy_Time_Out)
         self.initialiser.start()
 
     @command()
-- 
GitLab