From 7319f026924dc9e3603482554d38d89247e91973 Mon Sep 17 00:00:00 2001
From: Lars Baunegaard With <132266664+LarsWithCA@users.noreply.github.com>
Date: Tue, 28 Jan 2025 16:25:09 +0100
Subject: [PATCH] Removed SwitchBoardSensor. RpiVersion: added 64bit OS support
 (#361)

* Removed unused SwitchboardSensor

* RpiVersion: 64 bit support + added cm5-models
---
 CA_DataUploaderLib/IOconf/IOconfLoader.cs     |  1 -
 .../IOconf/IOconfSwitchboardSensor.cs         | 24 ---------
 CA_DataUploaderLib/RPi_versions.csv           |  5 +-
 CA_DataUploaderLib/RpiVersion.cs              |  4 +-
 CA_DataUploaderLib/SwitchBoardController.cs   |  3 +-
 UnitTests/IOconfFileTests.cs                  | 53 -------------------
 UnitTests/IOconfRedundantSensorsTests.cs      | 25 ---------
 7 files changed, 7 insertions(+), 108 deletions(-)
 delete mode 100644 CA_DataUploaderLib/IOconf/IOconfSwitchboardSensor.cs

diff --git a/CA_DataUploaderLib/IOconf/IOconfLoader.cs b/CA_DataUploaderLib/IOconf/IOconfLoader.cs
index c6e62437..ac55cd5f 100644
--- a/CA_DataUploaderLib/IOconf/IOconfLoader.cs
+++ b/CA_DataUploaderLib/IOconf/IOconfLoader.cs
@@ -23,7 +23,6 @@ public class IOconfLoader : IIOconfLoader
             ("RPiTemp", (r, l) => new IOconfRPiTemp(r, l)),
             ("GenericSensor", (r, l) => new IOconfGeneric(r, l)),
             ("GenericOutput", (r, l) => new IOconfGenericOutput(r, l)),
-            ("SwitchboardSensor", (r, l) => new IOconfSwitchboardSensor(r, l)),
             ("Node", (r, l) => new IOconfNode(r, l)),
             ("Code", (r, l) => new IOconfCode(r, l)),
             (IOconfCurrent.TypeName, (r, l) => new IOconfCurrent(r, l)),
diff --git a/CA_DataUploaderLib/IOconf/IOconfSwitchboardSensor.cs b/CA_DataUploaderLib/IOconf/IOconfSwitchboardSensor.cs
deleted file mode 100644
index e6dc883e..00000000
--- a/CA_DataUploaderLib/IOconf/IOconfSwitchboardSensor.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#nullable enable
-using System.Collections.Generic;
-
-namespace CA_DataUploaderLib.IOconf
-{
-    public class IOconfSwitchboardSensor : IOconfInput.Expandable
-    {
-        private readonly string Subsystem;
-
-        public IOconfSwitchboardSensor(string row, int lineNum) : base(row, lineNum, "SwitchboardSensor", false, IOconfOut230Vac.GetSwitchboardBoardSettings())
-        {
-            Format = "SwitchboardSensor;Name;BoxName;[SubsystemName]";
-            var list = ToList();
-            Subsystem = list.Count > 3 ? list[3].ToLower() : "vibration";
-        }
-
-        /// <summary>get expanded conf entries that include both the rms and max within the 100 milliseconds read cycle</summary>
-        /// <remarks>the returned entries have port numbers that correspond to the ones returned by the dc switchboard as parsed by the IOconfOut230Vac.SwitchBoardResponseParser</remarks>
-        public override IEnumerable<IOconfInput> GetExpandedConf() => [
-            NewInput($"{Name}_rms", 6, Subsystem),
-            NewInput($"{Name}_maxIn100ms", 7, Subsystem),
-            ];
-    }
-}
\ No newline at end of file
diff --git a/CA_DataUploaderLib/RPi_versions.csv b/CA_DataUploaderLib/RPi_versions.csv
index 563cc66d..6e134300 100644
--- a/CA_DataUploaderLib/RPi_versions.csv
+++ b/CA_DataUploaderLib/RPi_versions.csv
@@ -64,4 +64,7 @@ c03150;?;Compute Module 4S;1.0;4 GB;(Mfg by Sony)
 d03150;?;Compute Module 4S;1.0;8 GB;(Mfg by Sony)
 b04170;Q4 2023;5;1.0;2GB;(Mfg by Sony)
 c04170;Q4 2023;5;1.0;4GB;(Mfg by Sony)
-d04170;Q4 2023;5;1.0;8GB;(Mfg by Sony)
\ No newline at end of file
+d04170;Q4 2023;5;1.0;8GB;(Mfg by Sony)
+b04180;Q4 2024;Compute Module 5;1.0;2GB;(Mfg by Sony)
+c04180;Q4 2024;Compute Module 5;1.0;4GB;(Mfg by Sony)
+d04180;Q4 2024;Compute Module 5;1.0;8GB;(Mfg by Sony)
\ No newline at end of file
diff --git a/CA_DataUploaderLib/RpiVersion.cs b/CA_DataUploaderLib/RpiVersion.cs
index a560b562..428bc790 100644
--- a/CA_DataUploaderLib/RpiVersion.cs
+++ b/CA_DataUploaderLib/RpiVersion.cs
@@ -166,7 +166,7 @@ private static void WriteResourceToFile(string resourceName, string fileName)
         private static string? GetCPU()
         {
             if (_OS.Platform == PlatformID.Unix)
-                return DULutil.ExecuteShellCommand("cat /proc/cpuinfo | grep 'model name'").SplitNewLine().First().Substring(18).Trim();
+                return DULutil.ExecuteShellCommand("lscpu | grep 'Model name'").SplitNewLine().First().Substring(18).Trim();
 
             return Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
         }
@@ -182,7 +182,7 @@ private static string GetKernelVersion()
         private static int GetNumberOfCores()
         {
             if (_OS.Platform == PlatformID.Unix)
-                return DULutil.ExecuteShellCommand("cat /proc/cpuinfo | grep 'model name'").SplitNewLine().Count;
+                return DULutil.ExecuteShellCommand("cat /proc/cpuinfo | grep 'processor'").SplitNewLine().Count;
 
             return Environment.ProcessorCount;
         }
diff --git a/CA_DataUploaderLib/SwitchBoardController.cs b/CA_DataUploaderLib/SwitchBoardController.cs
index 733da466..c2f9264f 100644
--- a/CA_DataUploaderLib/SwitchBoardController.cs
+++ b/CA_DataUploaderLib/SwitchBoardController.cs
@@ -15,8 +15,7 @@ private SwitchBoardController(IIOconf ioconf, CommandHandler cmd) : base(cmd, "s
             .Concat(ioconf.GetEntries<IOconfOut230Vac>()
                 .GroupBy(p => p.BoxName)
                 .Where(g => !g.Any(p => p.PortNumber > 4)) //avoid port 5 board temperature conflict with boards that support 5 or more ports (without temperatures)
-                .Select(g => g.First().GetBoardTemperatureInputConf()))
-            .Concat(ioconf.GetEntries<IOconfSwitchboardSensor>().SelectMany(i => i.GetExpandedConf())))
+                .Select(g => g.First().GetBoardTemperatureInputConf())))
         {
             //we ignore remote boards and boards missing during the start sequence (as we don't have auto reconnect logic yet for those). Note the BaseSensorBox already reports the missing local boards.
             foreach (var port in ioconf.GetEntries<IOconfOut230Vac>().Where(p => p.Map.IsLocalBoard && p.Map.McuBoard != null))
diff --git a/UnitTests/IOconfFileTests.cs b/UnitTests/IOconfFileTests.cs
index 6d5f52bb..2a7f6b8f 100644
--- a/UnitTests/IOconfFileTests.cs
+++ b/UnitTests/IOconfFileTests.cs
@@ -80,58 +80,5 @@ public void GetBoardStateNames_TemperatureField_Math()
             Assert.AreEqual(1, boardStateNames.Count());
             Assert.AreEqual("tm01_state", boardStateNames.First());
         }
-
-        [TestMethod]
-        public void GetBoardStateNames_SwitchboardSensorExpandedInputField()
-        {
-            // Arrange
-            var ioconf = new IOconfFile(@"
-Map; 3900553433511235353736; dc01
-SwitchboardSensor; switchboardSensor_dc01; dc01
-".SplitNewLine(StringSplitOptions.None));
-
-            // Act
-            var boardStateNames = ioconf.GetBoardStateNames("switchboardSensor_dc01_rms").ToList();
-
-            // Assert
-            Assert.AreEqual(1, boardStateNames.Count());
-            Assert.AreEqual("dc01_state", boardStateNames.First());
-        }
-
-        [TestMethod]
-        public void GetBoardStateNames_SwitchboardSensorExpandedInputField_Filter()
-        {
-            // Arrange
-            var ioconf = new IOconfFile(@"
-Map; 3900553433511235353736; dc01
-SwitchboardSensor; switchboardSensor_dc01; dc01
-Filter;switchboardSensor_dc01_rms; Min;600;switchboardSensor_dc01_rms
-".SplitNewLine(StringSplitOptions.None));
-
-            // Act
-            var boardStateNames = ioconf.GetBoardStateNames("switchboardSensor_dc01_rms_filter").ToList();
-
-            // Assert
-            Assert.AreEqual(1, boardStateNames.Count());
-            Assert.AreEqual("dc01_state", boardStateNames.First());
-        }
-
-        [TestMethod]
-        public void GetBoardStateNames_SwitchboardSensorExpandedInputField_Math()
-        {
-            // Arrange
-            var ioconf = new IOconfFile(@"
-Map; 3900553433511235353736; dc01
-SwitchboardSensor; switchboardSensor_dc01; dc01
-Math; switchboardSensor_dc01_rms_math; switchboardSensor_dc01_rms + 1
-".SplitNewLine(StringSplitOptions.None));
-
-            // Act
-            var boardStateNames = ioconf.GetBoardStateNames("switchboardSensor_dc01_rms_math").ToList();
-
-            // Assert
-            Assert.AreEqual(1, boardStateNames.Count());
-            Assert.AreEqual("dc01_state", boardStateNames.First());
-        }
     }
 }
diff --git a/UnitTests/IOconfRedundantSensorsTests.cs b/UnitTests/IOconfRedundantSensorsTests.cs
index 6a071ec9..07a74d5c 100644
--- a/UnitTests/IOconfRedundantSensorsTests.cs
+++ b/UnitTests/IOconfRedundantSensorsTests.cs
@@ -36,31 +36,6 @@ public void ValidateDependencies_PointingToExistingSensor_Ok()
             
         }
 
-        [TestMethod]
-        public void ValidateDependencies_PointingToExpandedInputField_Ok()
-        {
-            // Act
-            _ = new IOconfFile(@"
-Map; 3900553433511235353736; dc01
-SwitchboardSensor; switchboardSensor_dc01; dc01
-RedundantSensors; switchboardSensor_redundant; switchboardSensor_dc01_rms
-".SplitNewLine(StringSplitOptions.None));
-        }
-
-        [TestMethod]
-        public void ValidateDependencies_PointingToBaseExpandableInput_Fail()
-        {
-            // Act
-            var ex = Assert.ThrowsException<FormatException>(() => _ = new IOconfFile(@"
-Map; 3900553433511235353736; dc01
-SwitchboardSensor; switchboardSensor_dc01; dc01
-RedundantSensors; switchboardSensor_redundant; switchboardSensor_dc01
-".SplitNewLine(StringSplitOptions.None)));
-
-            // Assert
-            Assert.IsTrue(ex.Message.Contains("Failed to find"));
-        }
-
         [TestMethod]
         public void ValidateDependencies_PointingToMath_Ok()
         {