diff --git a/Libraries/Plugins/StagWare.Linux.NbfcPlugins/CpuTemperatureProvider.cs b/Libraries/Plugins/StagWare.Linux.NbfcPlugins/CpuTemperatureProvider.cs
index fb923d3..830fb1e 100644
--- a/Libraries/Plugins/StagWare.Linux.NbfcPlugins/CpuTemperatureProvider.cs
+++ b/Libraries/Plugins/StagWare.Linux.NbfcPlugins/CpuTemperatureProvider.cs
@@ -1,20 +1,22 @@
using StagWare.FanControl.Plugins;
using System;
-using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace StagWare.Linux.NbfcPlugins
{
[Export(typeof(ITemperatureProvider))]
- [FanControlPluginMetadata("StagWare.Linux.CpuTempProvider", PlatformID.Unix, MinOSVersion = "13.0")]
+ [FanControlPluginMetadata("StagWare.Linux.CpuTempProvider", PlatformID.Unix, MinOSVersion = "3.10")]
public class CpuTemperatureProvider : ITemperatureProvider
{
- const string cpuTempFilePath = "/sys/class/hwmon/hwmon0/cpu1_input";
+ #region Constants
+
+ const string cpuTempFilePath = "/sys/class/hwmon/hwmon0/temp1_input";
+
+ #endregion
+
+ #region ITemperatureProvider implementation
public bool IsInitialized
{
@@ -33,11 +35,7 @@ namespace StagWare.Linux.NbfcPlugins
if (double.TryParse(File.ReadAllText(cpuTempFilePath), out temp))
{
- Debug.WriteLine("GetTemperature failed");
- }
- else
- {
- Debug.WriteLine(string.Format("GetTemperature succeeded: {0.00}", temp));
+ temp /= 1000;
}
return temp;
@@ -45,7 +43,8 @@ namespace StagWare.Linux.NbfcPlugins
public void Dispose()
{
- Debug.WriteLine("Disposed CpuTemperatureProvider");
}
+
+ #endregion
}
}
diff --git a/Libraries/Plugins/StagWare.Linux.NbfcPlugins/EmbeddedController.cs b/Libraries/Plugins/StagWare.Linux.NbfcPlugins/EmbeddedController.cs
index 06bac5f..d65fb79 100644
--- a/Libraries/Plugins/StagWare.Linux.NbfcPlugins/EmbeddedController.cs
+++ b/Libraries/Plugins/StagWare.Linux.NbfcPlugins/EmbeddedController.cs
@@ -1,23 +1,31 @@
using StagWare.FanControl.Plugins;
+using StagWare.Hardware.LPC;
using System;
-using System.Collections.Generic;
using System.ComponentModel.Composition;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.IO;
namespace StagWare.Linux.NbfcPlugins
{
[Export(typeof(IEmbeddedController))]
- [FanControlPluginMetadata("StagWare.Linux.EmbeddedController", PlatformID.Unix, MinOSVersion = "13.0")]
- public class EmbeddedController : IEmbeddedController
+ [FanControlPluginMetadata("StagWare.Linux.EmbeddedController", PlatformID.Unix, MinOSVersion = "3.10")]
+ public class EmbeddedController : EmbeddedControllerBase, IEmbeddedController
{
- public bool IsInitialized
- {
- get;
- private set;
- }
+ #region Constants
+
+ const string PortFilePath = "/dev/port";
+ private const int MaxRetries = 10;
+
+ #endregion
+
+ #region Private Fields
+
+ private FileStream stream;
+
+ #endregion
+
+ #region IEmbeddedController implementation
+
+ public bool IsInitialized { get; private set; }
public void Initialize()
{
@@ -26,40 +34,115 @@ namespace StagWare.Linux.NbfcPlugins
public void WriteByte(byte register, byte value)
{
- Debug.WriteLine(string.Format("WriteByte: {0} => {1}", value, register));
+ int writes = 0;
+
+ while (writes < MaxRetries)
+ {
+ if (TryWriteByte(register, value))
+ {
+ return;
+ }
+
+ writes++;
+ }
}
public void WriteWord(byte register, ushort value)
{
- Debug.WriteLine(string.Format("WriteWord: {0} => {1}", value, register));
+ int writes = 0;
+
+ while (writes < MaxRetries)
+ {
+ if (TryWriteWord(register, value))
+ {
+ return;
+ }
+
+ writes++;
+ }
}
public byte ReadByte(byte register)
{
- Debug.WriteLine(string.Format("ReadByte: {0}", register));
- return 0;
+ byte result = 0;
+ int reads = 0;
+
+ while (reads < MaxRetries)
+ {
+ if (TryReadByte(register, out result))
+ {
+ return result;
+ }
+
+ reads++;
+ }
+
+ return result;
}
public ushort ReadWord(byte register)
{
- Debug.WriteLine(string.Format("ReadWord: {0}", register));
- return 0;
+ int result = 0;
+ int reads = 0;
+
+ while (reads < MaxRetries)
+ {
+ if (TryReadWord(register, out result))
+ {
+ return (ushort)result;
+ }
+
+ reads++;
+ }
+
+ return (ushort)result;
}
public bool AquireLock(int timeout)
{
- Debug.WriteLine("AquireLock");
- return true;
+ bool success = false;
+
+ try
+ {
+ this.stream = File.Open(PortFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
+ }
+ catch
+ {
+ }
+
+ return success;
}
public void ReleaseLock()
{
- Debug.WriteLine("ReleaseLock");
+ if (this.stream != null)
+ {
+ this.stream.Dispose();
+ this.stream = null;
+ }
}
public void Dispose()
{
- Debug.WriteLine("Dispose EmbeddedController");
+ ReleaseLock();
}
+
+ #endregion
+
+ #region EmbeddedControllerBase implementation
+
+ protected override void WritePort(int port, byte value)
+ {
+ this.stream.Seek(port, SeekOrigin.Begin);
+ this.stream.WriteByte(value);
+ }
+
+ protected override byte ReadPort(int port)
+ {
+ this.stream.Seek(port, SeekOrigin.Begin);
+ return (byte)this.stream.ReadByte();
+ }
+
+ #endregion
}
}
diff --git a/Libraries/Plugins/StagWare.Linux.NbfcPlugins/StagWare.Linux.NbfcPlugins.csproj b/Libraries/Plugins/StagWare.Linux.NbfcPlugins/StagWare.Linux.NbfcPlugins.csproj
index a21261b..dceaeb6 100644
--- a/Libraries/Plugins/StagWare.Linux.NbfcPlugins/StagWare.Linux.NbfcPlugins.csproj
+++ b/Libraries/Plugins/StagWare.Linux.NbfcPlugins/StagWare.Linux.NbfcPlugins.csproj
@@ -48,10 +48,14 @@
-
+
{12084b38-c1a2-414c-80a7-b8d02d6f5b84}
StagWare.FanControl
+
+ {1d5d7c81-802f-46e0-913f-8519f157bc3c}
+ StagWare.Hardware.LPC
+