diff --git a/DeviceSQL/DeviceSQL-Key.snk b/DeviceSQL-Key.snk
similarity index 100%
rename from DeviceSQL/DeviceSQL-Key.snk
rename to DeviceSQL-Key.snk
diff --git a/DeviceSQL.ChannelManager/DeviceSQL.ChannelManager.sqlproj b/DeviceSQL.ChannelManager/DeviceSQL.ChannelManager.sqlproj
new file mode 100644
index 0000000..2ccf90e
--- /dev/null
+++ b/DeviceSQL.ChannelManager/DeviceSQL.ChannelManager.sqlproj
@@ -0,0 +1,71 @@
+
+
+
+
+ Debug
+ AnyCPU
+ DeviceSQL.ChannelManager
+ 2.0
+ 4.1
+ {6393a621-3002-48ab-8de0-74a03ffc4afb}
+ Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
+ Database
+
+
+ DeviceSQL.ChannelManager
+ DeviceSQL.ChannelManager
+ 1033, CI
+ BySchemaAndSchemaType
+ True
+ v4.8
+ CS
+ Properties
+ False
+ True
+ True
+ ChannelManager
+ UNSAFE
+ False
+ ..\DeviceSQL-Key.snk
+
+
+ bin\Release\
+ $(MSBuildProjectName).sql
+ False
+ pdbonly
+ true
+ false
+ true
+ prompt
+ 4
+
+
+ bin\Debug\
+ $(MSBuildProjectName).sql
+ false
+ true
+ full
+ false
+ true
+ true
+ prompt
+ 4
+
+
+ 11.0
+
+ True
+ 11.0
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.ChannelManager/Properties/AssemblyInfo.cs b/DeviceSQL.ChannelManager/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..fe87538
--- /dev/null
+++ b/DeviceSQL.ChannelManager/Properties/AssemblyInfo.cs
@@ -0,0 +1,24 @@
+using System.Reflection;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with the SQLCLR assembly.
+[assembly: AssemblyTitle("DeviceSQL.ChannelManager")]
+[assembly: AssemblyDescription("DeviceSQL.ChannelManager")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL.DeviceManager/DeviceSQL.DeviceManager.sqlproj b/DeviceSQL.DeviceManager/DeviceSQL.DeviceManager.sqlproj
new file mode 100644
index 0000000..85732f8
--- /dev/null
+++ b/DeviceSQL.DeviceManager/DeviceSQL.DeviceManager.sqlproj
@@ -0,0 +1,72 @@
+
+
+
+
+ Debug
+ AnyCPU
+ DeviceSQL.DeviceManager
+ 2.0
+ 4.1
+ {0186afd4-f3e0-42c0-a6ba-58f704804c31}
+ Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
+ Database
+
+
+ DeviceSQL.DeviceManager
+ DeviceSQL.DeviceManager
+ 1033, CI
+ BySchemaAndSchemaType
+ True
+ v4.8
+ CS
+ Properties
+ False
+ True
+ True
+ DeviceManager
+
+ UNSAFE
+ False
+ ..\DeviceSQL-Key.snk
+
+
+ bin\Release\
+ $(MSBuildProjectName).sql
+ False
+ pdbonly
+ true
+ false
+ true
+ prompt
+ 4
+
+
+ bin\Debug\
+ $(MSBuildProjectName).sql
+ false
+ true
+ full
+ false
+ true
+ true
+ prompt
+ 4
+
+
+ 11.0
+
+ True
+ 11.0
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.DeviceManager/Properties/AssemblyInfo.cs b/DeviceSQL.DeviceManager/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..358f75f
--- /dev/null
+++ b/DeviceSQL.DeviceManager/Properties/AssemblyInfo.cs
@@ -0,0 +1,24 @@
+using System.Reflection;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with the SQLCLR assembly.
+[assembly: AssemblyTitle("DeviceSQL.DeviceManager")]
+[assembly: AssemblyDescription("DeviceSQL.DeviceManager")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL/Device/IMaster.cs b/DeviceSQL.Devices.Common/Device/IMaster.cs
similarity index 100%
rename from DeviceSQL/Device/IMaster.cs
rename to DeviceSQL.Devices.Common/Device/IMaster.cs
diff --git a/DeviceSQL/Device/IMessage.cs b/DeviceSQL.Devices.Common/Device/IMessage.cs
similarity index 100%
rename from DeviceSQL/Device/IMessage.cs
rename to DeviceSQL.Devices.Common/Device/IMessage.cs
diff --git a/DeviceSQL.Utilities.DeploymentScriptFormatter/DeviceSQL.Utilities.DeploymentScriptFormatter.csproj b/DeviceSQL.Devices.Common/DeviceSQL.Devices.Common.csproj
similarity index 53%
rename from DeviceSQL.Utilities.DeploymentScriptFormatter/DeviceSQL.Utilities.DeploymentScriptFormatter.csproj
rename to DeviceSQL.Devices.Common/DeviceSQL.Devices.Common.csproj
index fba2682..c0455b4 100644
--- a/DeviceSQL.Utilities.DeploymentScriptFormatter/DeviceSQL.Utilities.DeploymentScriptFormatter.csproj
+++ b/DeviceSQL.Devices.Common/DeviceSQL.Devices.Common.csproj
@@ -4,16 +4,16 @@
Debug
AnyCPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}
- Exe
- DeviceSQL.Utilities.DeploymentScriptFormatter
- DeviceSQL.Utilities.DeploymentScriptFormatter
- v4.6.1
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}
+ Library
+ Properties
+ DeviceSQL.Devices.Common
+ DeviceSQL.Devices.Common
+ v4.8
512
- true
+ true
- AnyCPU
true
full
false
@@ -23,7 +23,6 @@
4
- AnyCPU
pdbonly
true
bin\Release\
@@ -31,7 +30,17 @@
prompt
4
+
+ false
+
+
+
+
+
+
+ ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll
+
@@ -42,11 +51,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/DeviceSQL.Devices.Common/IO/Channels/ChannelTraceEventArgs.cs b/DeviceSQL.Devices.Common/IO/Channels/ChannelTraceEventArgs.cs
new file mode 100644
index 0000000..9ac8cd6
--- /dev/null
+++ b/DeviceSQL.Devices.Common/IO/Channels/ChannelTraceEventArgs.cs
@@ -0,0 +1,23 @@
+#region Imported Types
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+#endregion
+
+namespace DeviceSQL.IO.Channels
+{
+ public class ChannelTraceEventArgs : EventArgs
+ {
+ public DateTime MessageDateTimeStamp { get; set; }
+ public string Name { get; set; }
+ public DateTime StartTime { get; set; }
+ public string Operation { get; set; }
+ public double Duration { get; set; }
+ public int Sequence { get; set; }
+ public int Count { get; set; }
+ public string Data { get; set; }
+ public string ChannelType { get; set; }
+ }
+}
diff --git a/DeviceSQL/IO/Channels/ChannelTraceListener.cs b/DeviceSQL.Devices.Common/IO/Channels/ChannelTraceListener.cs
similarity index 93%
rename from DeviceSQL/IO/Channels/ChannelTraceListener.cs
rename to DeviceSQL.Devices.Common/IO/Channels/ChannelTraceListener.cs
index 5622e9c..29ef775 100644
--- a/DeviceSQL/IO/Channels/ChannelTraceListener.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/ChannelTraceListener.cs
@@ -8,12 +8,12 @@
namespace DeviceSQL.IO.Channels
{
- internal class ChannelTraceListener : TraceListener
+ public class ChannelTraceListener : TraceListener
{
#region Events
- internal event EventHandler ChannelTraceMessageReceived;
+ public event EventHandler ChannelTraceMessageReceived;
#endregion
@@ -29,7 +29,7 @@ internal class ChannelTraceListener : TraceListener
#endregion
- internal ChannelTraceListener()
+ public ChannelTraceListener()
{
try
{
diff --git a/DeviceSQL/IO/Channels/HexConverter.cs b/DeviceSQL.Devices.Common/IO/Channels/HexConverter.cs
similarity index 86%
rename from DeviceSQL/IO/Channels/HexConverter.cs
rename to DeviceSQL.Devices.Common/IO/Channels/HexConverter.cs
index 80acd20..0771a47 100644
--- a/DeviceSQL/IO/Channels/HexConverter.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/HexConverter.cs
@@ -4,7 +4,12 @@
#endregion
+
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.IO.Channels
+#else
namespace DeviceSQL.IO.Channels
+#endif
{
public static class HexConverter
{
diff --git a/DeviceSQL/IO/Channels/IChannel.cs b/DeviceSQL.Devices.Common/IO/Channels/IChannel.cs
similarity index 92%
rename from DeviceSQL/IO/Channels/IChannel.cs
rename to DeviceSQL.Devices.Common/IO/Channels/IChannel.cs
index fd55b10..14ecab2 100644
--- a/DeviceSQL/IO/Channels/IChannel.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/IChannel.cs
@@ -1,5 +1,6 @@
#region Imported Types
+using Newtonsoft.Json;
using System;
#endregion
@@ -8,6 +9,7 @@ namespace DeviceSQL.IO.Channels
{
public interface IChannel : IDisposable
{
+ [JsonIgnore]
object LockObject { get; }
string Name { get; set; }
bool TracingEnabled { get; set; }
diff --git a/DeviceSQL/IO/Channels/IMuxChannel.cs b/DeviceSQL.Devices.Common/IO/Channels/IMuxChannel.cs
similarity index 71%
rename from DeviceSQL/IO/Channels/IMuxChannel.cs
rename to DeviceSQL.Devices.Common/IO/Channels/IMuxChannel.cs
index c68b9b8..ff567ea 100644
--- a/DeviceSQL/IO/Channels/IMuxChannel.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/IMuxChannel.cs
@@ -2,8 +2,7 @@ namespace DeviceSQL.IO.Channels
{
public interface IMuxChannel : IChannel
{
- string SourceChannelName { get; set; }
- IChannel SourceChannel { get; }
+ IChannel SourceChannel { get; set; }
int RequestDelay { get; set; }
int ResponseDelay { get; set; }
int ResponseTimeout { get; set; }
diff --git a/DeviceSQL/IO/Channels/SerialPortChannel.cs b/DeviceSQL.Devices.Common/IO/Channels/SerialPortChannel.cs
similarity index 99%
rename from DeviceSQL/IO/Channels/SerialPortChannel.cs
rename to DeviceSQL.Devices.Common/IO/Channels/SerialPortChannel.cs
index 2a35c6b..d36279d 100644
--- a/DeviceSQL/IO/Channels/SerialPortChannel.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/SerialPortChannel.cs
@@ -57,6 +57,7 @@ public bool TracingEnabled
public SerialPort SerialPort
{
get { return serialPort; }
+ set { serialPort = value; }
}
public int ReadTimeout
diff --git a/DeviceSQL.Devices.Common/IO/Channels/SerialPortMuxChannel.cs b/DeviceSQL.Devices.Common/IO/Channels/SerialPortMuxChannel.cs
new file mode 100644
index 0000000..de31d78
--- /dev/null
+++ b/DeviceSQL.Devices.Common/IO/Channels/SerialPortMuxChannel.cs
@@ -0,0 +1,142 @@
+#region Imported Types
+
+using System;
+using System.Diagnostics;
+using System.IO.Ports;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.IO.Channels
+{
+ namespace EnerWorx.ChannelService.IO.Channels
+ {
+ public class SerialPortMuxChannel : SerialPortChannel, IMuxChannel
+ {
+
+ #region Fields
+
+ private IChannel sourceChannel = null;
+ private int requestDelay = 0;
+ private int responseDelay = 0;
+ private int responseTimeout = 3000;
+
+ #endregion
+
+ #region Properties
+
+ public IChannel SourceChannel
+ {
+ get
+ {
+ return sourceChannel;
+ }
+ set
+ {
+ if (!(value is IMuxChannel))
+ {
+ sourceChannel = value;
+ }
+ else
+ {
+ throw new Exception("Source channel must not be a MUX channel");
+ }
+ }
+ }
+
+ public int RequestDelay
+ {
+ get
+ {
+ return requestDelay;
+ }
+ set
+ {
+ requestDelay = value;
+ }
+ }
+
+ public int ResponseDelay
+ {
+ get
+ {
+ return responseDelay;
+ }
+ set
+ {
+ responseDelay = value;
+ }
+ }
+
+ public int ResponseTimeout
+ {
+ get
+ {
+ return responseTimeout;
+ }
+ set
+ {
+ responseTimeout = value;
+ }
+ }
+
+ #endregion
+
+ #region Mux Methods
+
+ public void Run()
+ {
+ SerialPort.DataReceived -= SerialPort_DataReceived;
+ SerialPort.DataReceived += SerialPort_DataReceived;
+ }
+
+ public void Stop()
+ {
+ SerialPort.DataReceived -= SerialPort_DataReceived;
+ }
+
+ #endregion
+
+ #region Serial Port Events
+
+ private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
+ {
+ var startTime = DateTime.Now;
+ var lockObject = SourceChannel.LockObject;
+ lock (lockObject)
+ {
+ var masterStopWatch = new Stopwatch();
+ var requestBytes = new byte[] { };
+
+ TimedThreadBlocker.Wait(requestDelay);
+
+ requestBytes = new byte[SerialPort.BytesToRead];
+
+ if (requestBytes.Length > 0)
+ {
+ Read(ref requestBytes, 0, requestBytes.Length, 0);
+ SourceChannel.Write(ref requestBytes, 0, requestBytes.Length);
+ TimedThreadBlocker.Wait(responseDelay);
+ masterStopWatch.Start();
+
+ var sequence = 0;
+ while (SourceChannel.NumberOfBytesAvailable > 0 && responseTimeout > masterStopWatch.ElapsedMilliseconds)
+ {
+ var responseBytes = new byte[SourceChannel.NumberOfBytesAvailable];
+
+ SourceChannel.Read(ref responseBytes, 0, responseBytes.Length, sequence++);
+ Write(ref responseBytes, 0, responseBytes.Length);
+ }
+
+ masterStopWatch.Stop();
+
+ }
+ }
+ }
+
+ #endregion
+
+ }
+ }
+}
+
diff --git a/DeviceSQL/IO/Channels/TcpChannel.cs b/DeviceSQL.Devices.Common/IO/Channels/TcpChannel.cs
similarity index 97%
rename from DeviceSQL/IO/Channels/TcpChannel.cs
rename to DeviceSQL.Devices.Common/IO/Channels/TcpChannel.cs
index 9b450db..5bf70fa 100644
--- a/DeviceSQL/IO/Channels/TcpChannel.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/TcpChannel.cs
@@ -1,5 +1,6 @@
#region Imported Types
+using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -63,13 +64,13 @@ public int ConnectionRetryDelay
set;
}
- internal int TcpClientReadTimeout
+ public int TcpClientReadTimeout
{
get;
set;
}
- internal int TcpClientWriteTimeout
+ public int TcpClientWriteTimeout
{
get;
set;
@@ -87,16 +88,17 @@ public bool TracingEnabled
}
}
-
+ [JsonIgnore]
public TcpClient TcpClient
{
get { return tcpClient; }
- internal set
+ set
{
tcpClient = value;
}
}
+ [JsonIgnore]
public int ReadTimeout
{
get { return TcpClient.GetStream().ReadTimeout; }
@@ -107,6 +109,7 @@ public int ReadTimeout
}
}
+ [JsonIgnore]
public int WriteTimeout
{
get { return TcpClient.GetStream().WriteTimeout; }
@@ -142,6 +145,7 @@ public string ConnectionString
}
}
+ [JsonIgnore]
public int NumberOfBytesAvailable
{
get
@@ -186,7 +190,7 @@ public void Write(ref byte[] buffer, int offset, int count)
{
throw exception;
}
- Connect:
+ Connect:
currentConnectAttempts++;
try
{
@@ -265,7 +269,7 @@ public int Read(ref byte[] buffer, int offset, int count, int sequence)
Thread.Sleep(0);
}
- Finish:
+ Finish:
timeoutStopWatch.Stop();
masterStopWatch.Stop();
@@ -302,7 +306,7 @@ public int Read(ref byte[] buffer, int offset, int count, int sequence)
{
throw exception;
}
- Connect:
+ Connect:
currentConnectAttempts++;
try
{
diff --git a/DeviceSQL/IO/Channels/TcpMuxChannel.cs b/DeviceSQL.Devices.Common/IO/Channels/TcpMuxChannel.cs
similarity index 89%
rename from DeviceSQL/IO/Channels/TcpMuxChannel.cs
rename to DeviceSQL.Devices.Common/IO/Channels/TcpMuxChannel.cs
index 43026f8..0923bc6 100644
--- a/DeviceSQL/IO/Channels/TcpMuxChannel.cs
+++ b/DeviceSQL.Devices.Common/IO/Channels/TcpMuxChannel.cs
@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
@@ -18,14 +19,15 @@ public class TcpMuxChannel : TcpChannel, IMuxChannel
#region Fields
private object lockObject = new object();
- private volatile int numberOfTcpClients = 0;
+
private volatile bool stopRequested;
private volatile bool hasStopped;
- private string sourceChannelName = "";
+ private IChannel sourceChannel = null;
private int requestDelay = 0;
private int responseDelay = 0;
private int responseTimeout = 3000;
private int maximumNumberOfTcpClients = 5;
+ private int port = 1000;
private TcpListener tcpListener;
private List tcpClients = new List();
@@ -37,21 +39,21 @@ public IChannel SourceChannel
{
get
{
- return DeviceSQL.Watchdog.Worker.Channels.FirstOrDefault();
- }
- }
-
- public string SourceChannelName
- {
- get
- {
- return sourceChannelName;
+ return sourceChannel;
}
set
{
- sourceChannelName = value;
+ if (!(value is IMuxChannel))
+ {
+ sourceChannel = value;
+ }
+ else
+ {
+ throw new Exception("Source channel must not be a MUX channel");
+ }
}
}
+
public int RequestDelay
{
get
@@ -100,6 +102,18 @@ public int MaximumNumberOfTcpClients
}
}
+ public int Port
+ {
+ get
+ {
+ return port;
+ }
+ set
+ {
+ port = value;
+ }
+ }
+
public IEnumerable TcpClients
{
get
@@ -118,7 +132,10 @@ await Task.Factory.StartNew(() =>
{
try
{
-
+ if (tcpListener == null)
+ {
+ tcpListener = new TcpListener(IPAddress.Any, 1001);
+ }
tcpListener.Start(MaximumNumberOfTcpClients);
stopRequested = false;
hasStopped = false;
@@ -126,13 +143,12 @@ await Task.Factory.StartNew(() =>
{
try
{
- if (MaximumNumberOfTcpClients > numberOfTcpClients)
+ if (MaximumNumberOfTcpClients > tcpClients.Count)
{
var tcpClient = tcpListener.AcceptTcpClient();
var networkStream = tcpClient.GetStream();
var readBuffer = new byte[1500];
- Interlocked.Increment(ref numberOfTcpClients);
tcpClient.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.KeepAlive, true);
tcpClients.Add(tcpClient);
networkStream.BeginRead(readBuffer, 0, 0, new AsyncCallback(TcpClientBeginReadCallback), tcpClient);
@@ -168,6 +184,7 @@ await Task.Factory.StartNew(() =>
private void TcpClientBeginReadCallback(IAsyncResult asyncResult)
{
+ var clientRemoved = false;
var tcpClient = asyncResult.AsyncState as TcpClient;
try
@@ -242,16 +259,19 @@ private void TcpClientBeginReadCallback(IAsyncResult asyncResult)
try
{
tcpClients.Remove(tcpClient);
+ clientRemoved = true;
}
catch (Exception ex)
{
Trace.TraceError($"Error removing TCP Client from list: {ex.Message}");
}
-
- Interlocked.Decrement(ref numberOfTcpClients);
}
catch (Exception ex)
{
+ if (!clientRemoved)
+ {
+ tcpClients.Remove(tcpClient);
+ }
Trace.TraceError($"Error disposing TCP Client: {ex.Message}");
}
}
diff --git a/DeviceSQL/IO/Channels/TimedThreadBlocker.cs b/DeviceSQL.Devices.Common/IO/Channels/TimedThreadBlocker.cs
similarity index 100%
rename from DeviceSQL/IO/Channels/TimedThreadBlocker.cs
rename to DeviceSQL.Devices.Common/IO/Channels/TimedThreadBlocker.cs
diff --git a/DeviceSQL/IO/Channels/Transport/ITransport.cs b/DeviceSQL.Devices.Common/IO/Channels/Transport/ITransport.cs
similarity index 100%
rename from DeviceSQL/IO/Channels/Transport/ITransport.cs
rename to DeviceSQL.Devices.Common/IO/Channels/Transport/ITransport.cs
diff --git a/DeviceSQL.Devices.Common/Properties/AssemblyInfo.cs b/DeviceSQL.Devices.Common/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..38c7b19
--- /dev/null
+++ b/DeviceSQL.Devices.Common/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DeviceSQL.Devices.Common")]
+[assembly: AssemblyDescription("DeviceSQL.Devices.Common")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5deadadf-be60-4774-80c6-97b3a83fa289")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL.Devices.Common/packages.config b/DeviceSQL.Devices.Common/packages.config
new file mode 100644
index 0000000..d5b882e
--- /dev/null
+++ b/DeviceSQL.Devices.Common/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL/Device/Modbus/Crc16.cs b/DeviceSQL.Devices.Modbus/Crc16.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Crc16.cs
rename to DeviceSQL.Devices.Modbus/Crc16.cs
diff --git a/DeviceSQL/Device/Modbus/Data/BooleanRegister.cs b/DeviceSQL.Devices.Modbus/Data/BooleanRegister.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/BooleanRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/BooleanRegister.cs
diff --git a/DeviceSQL/Device/Modbus/Data/CoilRegister.cs b/DeviceSQL.Devices.Modbus/Data/CoilRegister.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/CoilRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/CoilRegister.cs
diff --git a/DeviceSQL/Device/Modbus/Data/DiscreteInputRegister.cs b/DeviceSQL.Devices.Modbus/Data/DiscreteInputRegister.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/DiscreteInputRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/DiscreteInputRegister.cs
diff --git a/DeviceSQL/Device/Modbus/Data/EventArchiveRecord.cs b/DeviceSQL.Devices.Modbus/Data/EventArchiveRecord.cs
similarity index 98%
rename from DeviceSQL/Device/Modbus/Data/EventArchiveRecord.cs
rename to DeviceSQL.Devices.Modbus/Data/EventArchiveRecord.cs
index 5c8ba15..e06aeac 100644
--- a/DeviceSQL/Device/Modbus/Data/EventArchiveRecord.cs
+++ b/DeviceSQL.Devices.Modbus/Data/EventArchiveRecord.cs
@@ -28,7 +28,7 @@ public byte[] Data
#region Constructor(s)
- internal EventArchiveRecord(ushort index, byte[] data)
+ public EventArchiveRecord(ushort index, byte[] data)
{
this.Index = Index;
this.Data = data;
diff --git a/DeviceSQL/Device/Modbus/Data/FloatRegister.cs b/DeviceSQL.Devices.Modbus/Data/FloatRegister.cs
similarity index 98%
rename from DeviceSQL/Device/Modbus/Data/FloatRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/FloatRegister.cs
index a2c4484..0d586fa 100644
--- a/DeviceSQL/Device/Modbus/Data/FloatRegister.cs
+++ b/DeviceSQL.Devices.Modbus/Data/FloatRegister.cs
@@ -38,13 +38,13 @@ public FloatRegister(MODBUSAddress address, bool byteSwap, bool wordSwap)
public bool WordSwap
{
get;
- internal set;
+ set;
}
public bool ByteSwap
{
get;
- internal set;
+ set;
}
public override System.Single Value
diff --git a/DeviceSQL/Device/Modbus/Data/HistoryArchiveRecord.cs b/DeviceSQL.Devices.Modbus/Data/HistoryArchiveRecord.cs
similarity index 97%
rename from DeviceSQL/Device/Modbus/Data/HistoryArchiveRecord.cs
rename to DeviceSQL.Devices.Modbus/Data/HistoryArchiveRecord.cs
index 73df2e3..9fd5ba2 100644
--- a/DeviceSQL/Device/Modbus/Data/HistoryArchiveRecord.cs
+++ b/DeviceSQL.Devices.Modbus/Data/HistoryArchiveRecord.cs
@@ -28,7 +28,7 @@ public byte[] Data
#region Constructor(s)
- internal HistoryArchiveRecord(ushort index, byte[] data)
+ public HistoryArchiveRecord(ushort index, byte[] data)
{
this.Index = index;
this.Data = data;
diff --git a/DeviceSQL/Device/Modbus/Data/HoldingRegister.cs b/DeviceSQL.Devices.Modbus/Data/HoldingRegister.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/HoldingRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/HoldingRegister.cs
diff --git a/DeviceSQL/Device/Modbus/Data/IModbusRegisterData.cs b/DeviceSQL.Devices.Modbus/Data/IModbusRegisterData.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/IModbusRegisterData.cs
rename to DeviceSQL.Devices.Modbus/Data/IModbusRegisterData.cs
diff --git a/DeviceSQL/Device/Modbus/Data/InputRegister.cs b/DeviceSQL.Devices.Modbus/Data/InputRegister.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/InputRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/InputRegister.cs
diff --git a/DeviceSQL/Device/Modbus/Data/LongRegister.cs b/DeviceSQL.Devices.Modbus/Data/LongRegister.cs
similarity index 98%
rename from DeviceSQL/Device/Modbus/Data/LongRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/LongRegister.cs
index 7408fc4..ed76dc5 100644
--- a/DeviceSQL/Device/Modbus/Data/LongRegister.cs
+++ b/DeviceSQL.Devices.Modbus/Data/LongRegister.cs
@@ -38,13 +38,13 @@ public LongRegister(MODBUSAddress address, bool byteSwap, bool wordSwap)
public bool WordSwap
{
get;
- internal set;
+ set;
}
public bool ByteSwap
{
get;
- internal set;
+ set;
}
public override System.Int32 Value
diff --git a/DeviceSQL/Device/Modbus/Data/ModbusAddress.cs b/DeviceSQL.Devices.Modbus/Data/ModbusAddress.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Data/ModbusAddress.cs
rename to DeviceSQL.Devices.Modbus/Data/ModbusAddress.cs
diff --git a/DeviceSQL/Device/Modbus/Data/ModbusRegister.cs b/DeviceSQL.Devices.Modbus/Data/ModbusRegister.cs
similarity index 98%
rename from DeviceSQL/Device/Modbus/Data/ModbusRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/ModbusRegister.cs
index 2a1af99..c7d512c 100644
--- a/DeviceSQL/Device/Modbus/Data/ModbusRegister.cs
+++ b/DeviceSQL.Devices.Modbus/Data/ModbusRegister.cs
@@ -24,7 +24,7 @@ public MODBUSAddress Address
set { this.address = value; }
}
- protected internal byte[] Data
+ public byte[] Data
{
get
{
diff --git a/DeviceSQL/Device/Modbus/Data/ShortRegister.cs b/DeviceSQL.Devices.Modbus/Data/ShortRegister.cs
similarity index 98%
rename from DeviceSQL/Device/Modbus/Data/ShortRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/ShortRegister.cs
index 8f41300..b6a3d46 100644
--- a/DeviceSQL/Device/Modbus/Data/ShortRegister.cs
+++ b/DeviceSQL.Devices.Modbus/Data/ShortRegister.cs
@@ -37,7 +37,7 @@ public ShortRegister(MODBUSAddress address, bool byteSwap)
public bool ByteSwap
{
get;
- internal set;
+ set;
}
public override System.Int16 Value
diff --git a/DeviceSQL/Device/Modbus/Data/StringRegister.cs b/DeviceSQL.Devices.Modbus/Data/StringRegister.cs
similarity index 96%
rename from DeviceSQL/Device/Modbus/Data/StringRegister.cs
rename to DeviceSQL.Devices.Modbus/Data/StringRegister.cs
index 092a748..8885470 100644
--- a/DeviceSQL/Device/Modbus/Data/StringRegister.cs
+++ b/DeviceSQL.Devices.Modbus/Data/StringRegister.cs
@@ -46,13 +46,13 @@ public byte Length
public bool WordSwap
{
get;
- internal set;
+ set;
}
public bool ByteSwap
{
get;
- internal set;
+ set;
}
public override string Value
diff --git a/DeviceSQL/Device/Modbus/Device.cs b/DeviceSQL.Devices.Modbus/Device.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Device.cs
rename to DeviceSQL.Devices.Modbus/Device.cs
diff --git a/DeviceSQL.Devices.Modbus/DeviceSQL.Devices.Modbus.csproj b/DeviceSQL.Devices.Modbus/DeviceSQL.Devices.Modbus.csproj
new file mode 100644
index 0000000..e0df1f4
--- /dev/null
+++ b/DeviceSQL.Devices.Modbus/DeviceSQL.Devices.Modbus.csproj
@@ -0,0 +1,110 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}
+ Library
+ Properties
+ DeviceSQL.Devices.Modbus
+ DeviceSQL.Devices.Modbus
+ v4.8
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {5deadadf-be60-4774-80c6-97b3a83fa289}
+ DeviceSQL.Devices.Common
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL/Device/Modbus/IO/Transport/Transport.cs b/DeviceSQL.Devices.Modbus/IO/Transport/Transport.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/IO/Transport/Transport.cs
rename to DeviceSQL.Devices.Modbus/IO/Transport/Transport.cs
diff --git a/DeviceSQL/Device/Modbus/Message/IModbusMessage.cs b/DeviceSQL.Devices.Modbus/Message/IModbusMessage.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/IModbusMessage.cs
rename to DeviceSQL.Devices.Modbus/Message/IModbusMessage.cs
diff --git a/DeviceSQL/Device/Modbus/Message/IModbusRequestMessage.cs b/DeviceSQL.Devices.Modbus/Message/IModbusRequestMessage.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/IModbusRequestMessage.cs
rename to DeviceSQL.Devices.Modbus/Message/IModbusRequestMessage.cs
diff --git a/DeviceSQL/Device/Modbus/Message/IModbusResponseMessage.cs b/DeviceSQL.Devices.Modbus/Message/IModbusResponseMessage.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/IModbusResponseMessage.cs
rename to DeviceSQL.Devices.Modbus/Message/IModbusResponseMessage.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ModbusErrorResponse.cs b/DeviceSQL.Devices.Modbus/Message/ModbusErrorResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ModbusErrorResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ModbusErrorResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ModbusMessage.cs b/DeviceSQL.Devices.Modbus/Message/ModbusMessage.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ModbusMessage.cs
rename to DeviceSQL.Devices.Modbus/Message/ModbusMessage.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ModbusMessageFactory.cs b/DeviceSQL.Devices.Modbus/Message/ModbusMessageFactory.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ModbusMessageFactory.cs
rename to DeviceSQL.Devices.Modbus/Message/ModbusMessageFactory.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadCoilRegistersRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadCoilRegistersRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadCoilRegistersRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadCoilRegistersRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadCoilRegistersResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadCoilRegistersResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadCoilRegistersResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadCoilRegistersResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadDiscreteInputRegistersRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadDiscreteInputRegistersRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadDiscreteInputRegistersRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadDiscreteInputRegistersRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadDiscreteInputRegistersResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadDiscreteInputRegistersResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadDiscreteInputRegistersResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadDiscreteInputRegistersResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadEventArchiveRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadEventArchiveRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadEventArchiveRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadEventArchiveRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadEventArchiveResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadEventArchiveResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadEventArchiveResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadEventArchiveResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadFloatsRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadFloatsRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadFloatsRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadFloatsRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadFloatsResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadFloatsResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadFloatsResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadFloatsResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadHistoryArchiveRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadHistoryArchiveRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadHistoryArchiveRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadHistoryArchiveRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadHistoryArchiveResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadHistoryArchiveResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadHistoryArchiveResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadHistoryArchiveResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadHoldingRegistersRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadHoldingRegistersRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadHoldingRegistersRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadHoldingRegistersRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadHoldingRegistersResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadHoldingRegistersResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadHoldingRegistersResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadHoldingRegistersResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadInputRegistersRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadInputRegistersRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadInputRegistersRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadInputRegistersRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadInputRegistersResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadInputRegistersResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadInputRegistersResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadInputRegistersResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadLongsRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadLongsRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadLongsRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadLongsRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadLongsResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadLongsResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadLongsResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadLongsResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadShortsRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadShortsRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadShortsRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadShortsRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadShortsResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadShortsResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadShortsResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadShortsResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadStringRequest.cs b/DeviceSQL.Devices.Modbus/Message/ReadStringRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadStringRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadStringRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/ReadStringResponse.cs b/DeviceSQL.Devices.Modbus/Message/ReadStringResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/ReadStringResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/ReadStringResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/WriteBooleanRequest.cs b/DeviceSQL.Devices.Modbus/Message/WriteBooleanRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/WriteBooleanRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/WriteBooleanRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/WriteBooleanResponse.cs b/DeviceSQL.Devices.Modbus/Message/WriteBooleanResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/WriteBooleanResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/WriteBooleanResponse.cs
diff --git a/DeviceSQL/Device/Modbus/Message/WriteFloatsRequest.cs b/DeviceSQL.Devices.Modbus/Message/WriteFloatsRequest.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/WriteFloatsRequest.cs
rename to DeviceSQL.Devices.Modbus/Message/WriteFloatsRequest.cs
diff --git a/DeviceSQL/Device/Modbus/Message/WriteFloatsResponse.cs b/DeviceSQL.Devices.Modbus/Message/WriteFloatsResponse.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/Message/WriteFloatsResponse.cs
rename to DeviceSQL.Devices.Modbus/Message/WriteFloatsResponse.cs
diff --git a/DeviceSQL/Device/Modbus/ModbusConverter.cs b/DeviceSQL.Devices.Modbus/ModbusConverter.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/ModbusConverter.cs
rename to DeviceSQL.Devices.Modbus/ModbusConverter.cs
diff --git a/DeviceSQL/Device/Modbus/ModbusMaster.cs b/DeviceSQL.Devices.Modbus/ModbusMaster.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/ModbusMaster.cs
rename to DeviceSQL.Devices.Modbus/ModbusMaster.cs
diff --git a/DeviceSQL/Device/Modbus/ModbusSlaveException.cs b/DeviceSQL.Devices.Modbus/ModbusSlaveException.cs
similarity index 100%
rename from DeviceSQL/Device/Modbus/ModbusSlaveException.cs
rename to DeviceSQL.Devices.Modbus/ModbusSlaveException.cs
diff --git a/DeviceSQL.Devices.Modbus/Properties/AssemblyInfo.cs b/DeviceSQL.Devices.Modbus/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..bc9b2fb
--- /dev/null
+++ b/DeviceSQL.Devices.Modbus/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DeviceSQL.Devices.Modbus")]
+[assembly: AssemblyDescription("DeviceSQL.Devices.Modbus")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL.Devices.Modbus")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0869e7fe-4fac-4fc5-a2a8-313f410cf8cd")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL/Device/ROC/Data/Ac10Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac10Parameter.cs
similarity index 86%
rename from DeviceSQL/Device/ROC/Data/Ac10Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac10Parameter.cs
index 364a7c2..6a37fa4 100644
--- a/DeviceSQL/Device/ROC/Data/Ac10Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac10Parameter.cs
@@ -7,12 +7,16 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac10Parameter : Parameter
{
- #region Constructor(s)
+#region Constructor(s)
public Ac10Parameter()
: base()
@@ -26,9 +30,9 @@ public Ac10Parameter(Tlp tlp)
Value = "";
}
- #endregion
+#endregion
- #region Properties
+#region Properties
public override string Value
{
@@ -42,7 +46,7 @@ public override string Value
}
}
- #endregion
+#endregion
}
}
diff --git a/DeviceSQL/Device/ROC/Data/Ac12Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac12Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Ac12Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac12Parameter.cs
index d399890..1d3e8cb 100644
--- a/DeviceSQL/Device/ROC/Data/Ac12Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac12Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac12Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Ac20Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac20Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Ac20Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac20Parameter.cs
index 260b733..dc76911 100644
--- a/DeviceSQL/Device/ROC/Data/Ac20Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac20Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac20Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Ac30Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac30Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Ac30Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac30Parameter.cs
index 1cc4962..3d78747 100644
--- a/DeviceSQL/Device/ROC/Data/Ac30Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac30Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac30Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Ac3Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac3Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Ac3Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac3Parameter.cs
index 19083c7..fb7eeb6 100644
--- a/DeviceSQL/Device/ROC/Data/Ac3Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac3Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac3Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Ac40Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac40Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Ac40Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac40Parameter.cs
index 0b8d047..93969af 100644
--- a/DeviceSQL/Device/ROC/Data/Ac40Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac40Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac40Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Ac7Parameter.cs b/DeviceSQL.Devices.ROC/Data/Ac7Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Ac7Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Ac7Parameter.cs
index 2d5384b..85ba59d 100644
--- a/DeviceSQL/Device/ROC/Data/Ac7Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Ac7Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Ac7Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/AlarmRecord.cs b/DeviceSQL.Devices.ROC/Data/AlarmRecord.cs
similarity index 99%
rename from DeviceSQL/Device/ROC/Data/AlarmRecord.cs
rename to DeviceSQL.Devices.ROC/Data/AlarmRecord.cs
index 1fdabf7..c97d0f9 100644
--- a/DeviceSQL/Device/ROC/Data/AlarmRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/AlarmRecord.cs
@@ -8,7 +8,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
#region Enums
@@ -73,8 +77,8 @@ public class AlarmRecord
#region Fields
- internal byte[] data;
- internal ushort index;
+ public byte[] data;
+ public ushort index;
#endregion
diff --git a/DeviceSQL/Device/ROC/Data/ArchiveInfo.cs b/DeviceSQL.Devices.ROC/Data/ArchiveInfo.cs
similarity index 96%
rename from DeviceSQL/Device/ROC/Data/ArchiveInfo.cs
rename to DeviceSQL.Devices.ROC/Data/ArchiveInfo.cs
index 2651fd3..ed748fd 100644
--- a/DeviceSQL/Device/ROC/Data/ArchiveInfo.cs
+++ b/DeviceSQL.Devices.ROC/Data/ArchiveInfo.cs
@@ -8,14 +8,18 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class ArchiveInfo
{
#region Fields
- internal byte[] data;
+ public byte[] data;
#endregion
diff --git a/DeviceSQL/Device/ROC/Data/AuditLogRecord.cs b/DeviceSQL.Devices.ROC/Data/AuditLogRecord.cs
similarity index 91%
rename from DeviceSQL/Device/ROC/Data/AuditLogRecord.cs
rename to DeviceSQL.Devices.ROC/Data/AuditLogRecord.cs
index 8b8570e..1335f3a 100644
--- a/DeviceSQL/Device/ROC/Data/AuditLogRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/AuditLogRecord.cs
@@ -4,7 +4,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class AuditLogRecord : EventRecord
{
diff --git a/DeviceSQL/Device/ROC/Data/BinParameter.cs b/DeviceSQL.Devices.ROC/Data/BinParameter.cs
similarity index 92%
rename from DeviceSQL/Device/ROC/Data/BinParameter.cs
rename to DeviceSQL.Devices.ROC/Data/BinParameter.cs
index 4f13b0c..3fb5b36 100644
--- a/DeviceSQL/Device/ROC/Data/BinParameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/BinParameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class BinParameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/DoubleParameter.cs b/DeviceSQL.Devices.ROC/Data/DoubleParameter.cs
similarity index 96%
rename from DeviceSQL/Device/ROC/Data/DoubleParameter.cs
rename to DeviceSQL.Devices.ROC/Data/DoubleParameter.cs
index 5376602..28bb7ed 100644
--- a/DeviceSQL/Device/ROC/Data/DoubleParameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/DoubleParameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class DoubleParameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/EventRecord.cs b/DeviceSQL.Devices.ROC/Data/EventRecord.cs
similarity index 99%
rename from DeviceSQL/Device/ROC/Data/EventRecord.cs
rename to DeviceSQL.Devices.ROC/Data/EventRecord.cs
index cf13ac5..48cc03f 100644
--- a/DeviceSQL/Device/ROC/Data/EventRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/EventRecord.cs
@@ -8,7 +8,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
#region Enums
@@ -70,8 +74,8 @@ public class EventRecord
#region Fields
- internal byte[] data;
- internal ushort index;
+ public byte[] data;
+ public ushort index;
#endregion
diff --git a/DeviceSQL/Device/ROC/Data/FlpParameter.cs b/DeviceSQL.Devices.ROC/Data/FlpParameter.cs
similarity index 96%
rename from DeviceSQL/Device/ROC/Data/FlpParameter.cs
rename to DeviceSQL.Devices.ROC/Data/FlpParameter.cs
index 1a09076..7ae32fc 100644
--- a/DeviceSQL/Device/ROC/Data/FlpParameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/FlpParameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class FlpParameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/FstCodeChunk.cs b/DeviceSQL.Devices.ROC/Data/FstCodeChunk.cs
similarity index 91%
rename from DeviceSQL/Device/ROC/Data/FstCodeChunk.cs
rename to DeviceSQL.Devices.ROC/Data/FstCodeChunk.cs
index 651c5e6..d75c5cb 100644
--- a/DeviceSQL/Device/ROC/Data/FstCodeChunk.cs
+++ b/DeviceSQL.Devices.ROC/Data/FstCodeChunk.cs
@@ -4,7 +4,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class FstCodeChunk
{
diff --git a/DeviceSQL/Device/ROC/Data/FstHeaderInfo.cs b/DeviceSQL.Devices.ROC/Data/FstHeaderInfo.cs
similarity index 86%
rename from DeviceSQL/Device/ROC/Data/FstHeaderInfo.cs
rename to DeviceSQL.Devices.ROC/Data/FstHeaderInfo.cs
index eb9dba6..af5f252 100644
--- a/DeviceSQL/Device/ROC/Data/FstHeaderInfo.cs
+++ b/DeviceSQL.Devices.ROC/Data/FstHeaderInfo.cs
@@ -1,4 +1,8 @@
-namespace DeviceSQL.Device.ROC.Data
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class FstHeaderInfo
{
diff --git a/DeviceSQL/Device/ROC/Data/HistoryPointConfiguration.cs b/DeviceSQL.Devices.ROC/Data/HistoryPointConfiguration.cs
similarity index 88%
rename from DeviceSQL/Device/ROC/Data/HistoryPointConfiguration.cs
rename to DeviceSQL.Devices.ROC/Data/HistoryPointConfiguration.cs
index 6ff95f4..18248ce 100644
--- a/DeviceSQL/Device/ROC/Data/HistoryPointConfiguration.cs
+++ b/DeviceSQL.Devices.ROC/Data/HistoryPointConfiguration.cs
@@ -1,4 +1,8 @@
-namespace DeviceSQL.Device.ROC.Data
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class HistoryPointConfiguration
{
diff --git a/DeviceSQL/Device/ROC/Data/HistoryRecord.cs b/DeviceSQL.Devices.ROC/Data/HistoryRecord.cs
similarity index 96%
rename from DeviceSQL/Device/ROC/Data/HistoryRecord.cs
rename to DeviceSQL.Devices.ROC/Data/HistoryRecord.cs
index 10e9655..07dabca 100644
--- a/DeviceSQL/Device/ROC/Data/HistoryRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/HistoryRecord.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public struct HistoryRecord
{
diff --git a/DeviceSQL/Device/ROC/Data/IRocParameterData.cs b/DeviceSQL.Devices.ROC/Data/IRocParameterData.cs
similarity index 80%
rename from DeviceSQL/Device/ROC/Data/IRocParameterData.cs
rename to DeviceSQL.Devices.ROC/Data/IRocParameterData.cs
index 9e2491f..76c9dcd 100644
--- a/DeviceSQL/Device/ROC/Data/IRocParameterData.cs
+++ b/DeviceSQL.Devices.ROC/Data/IRocParameterData.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public interface IROCParameterData
{
diff --git a/DeviceSQL/Device/ROC/Data/Int16Parameter.cs b/DeviceSQL.Devices.ROC/Data/Int16Parameter.cs
similarity index 92%
rename from DeviceSQL/Device/ROC/Data/Int16Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Int16Parameter.cs
index bd62f93..d016264 100644
--- a/DeviceSQL/Device/ROC/Data/Int16Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Int16Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Int16Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Int32Parameter.cs b/DeviceSQL.Devices.ROC/Data/Int32Parameter.cs
similarity index 92%
rename from DeviceSQL/Device/ROC/Data/Int32Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Int32Parameter.cs
index 4464417..a0b80b6 100644
--- a/DeviceSQL/Device/ROC/Data/Int32Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Int32Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Int32Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Int8Parameter.cs b/DeviceSQL.Devices.ROC/Data/Int8Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/Int8Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Int8Parameter.cs
index 70e95d0..d48fd9e 100644
--- a/DeviceSQL/Device/ROC/Data/Int8Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Int8Parameter.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Int8Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Parameter.cs b/DeviceSQL.Devices.ROC/Data/Parameter.cs
similarity index 83%
rename from DeviceSQL/Device/ROC/Data/Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/Parameter.cs
index 9834418..4c8a1a2 100644
--- a/DeviceSQL/Device/ROC/Data/Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/Parameter.cs
@@ -7,35 +7,13 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
- #region Enumerations
-
- public enum ParameterType : byte
- {
- BIN = 0,
- INT8 = 1,
- INT16 = 2,
- INT32 = 3,
- UINT8 = 4,
- UINT16 = 5,
- UINT32 = 6,
- FL = 7,
- TLP = 8,
- AC3 = 9,
- AC7 = 10,
- AC10 = 11,
- AC12 = 12,
- AC20 = 13,
- AC30 = 14,
- AC40 = 15,
- DOUBLE = 16,
- TIME = 17
- }
-
- #endregion
-
public abstract class Parameter : IROCParameterData
{
diff --git a/DeviceSQL.Devices.ROC/Data/ParameterType.cs b/DeviceSQL.Devices.ROC/Data/ParameterType.cs
new file mode 100644
index 0000000..d6aa0d6
--- /dev/null
+++ b/DeviceSQL.Devices.ROC/Data/ParameterType.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
+{
+ public enum ParameterType : byte
+ {
+ BIN = 0,
+ INT8 = 1,
+ INT16 = 2,
+ INT32 = 3,
+ UINT8 = 4,
+ UINT16 = 5,
+ UINT32 = 6,
+ FL = 7,
+ TLP = 8,
+ AC3 = 9,
+ AC7 = 10,
+ AC10 = 11,
+ AC12 = 12,
+ AC20 = 13,
+ AC30 = 14,
+ AC40 = 15,
+ DOUBLE = 16,
+ TIME = 17
+ }
+}
diff --git a/DeviceSQL/Device/ROC/Data/RocPlusAlarmRecord.cs b/DeviceSQL.Devices.ROC/Data/RocPlusAlarmRecord.cs
similarity index 98%
rename from DeviceSQL/Device/ROC/Data/RocPlusAlarmRecord.cs
rename to DeviceSQL.Devices.ROC/Data/RocPlusAlarmRecord.cs
index bd0c820..cbed84a 100644
--- a/DeviceSQL/Device/ROC/Data/RocPlusAlarmRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/RocPlusAlarmRecord.cs
@@ -7,7 +7,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
#region Enums
diff --git a/DeviceSQL/Device/ROC/Data/RocPlusEventRecord.cs b/DeviceSQL.Devices.ROC/Data/RocPlusEventRecord.cs
similarity index 99%
rename from DeviceSQL/Device/ROC/Data/RocPlusEventRecord.cs
rename to DeviceSQL.Devices.ROC/Data/RocPlusEventRecord.cs
index 2cf3b34..5c7258a 100644
--- a/DeviceSQL/Device/ROC/Data/RocPlusEventRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/RocPlusEventRecord.cs
@@ -1,5 +1,6 @@
#region Imported Types
+
using System;
using System.Collections.Generic;
using System.Linq;
@@ -7,7 +8,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
#region Enums
diff --git a/DeviceSQL/Device/ROC/Data/RocPlusHistoryRecord.cs b/DeviceSQL.Devices.ROC/Data/RocPlusHistoryRecord.cs
similarity index 95%
rename from DeviceSQL/Device/ROC/Data/RocPlusHistoryRecord.cs
rename to DeviceSQL.Devices.ROC/Data/RocPlusHistoryRecord.cs
index 1d1848c..11b1a36 100644
--- a/DeviceSQL/Device/ROC/Data/RocPlusHistoryRecord.cs
+++ b/DeviceSQL.Devices.ROC/Data/RocPlusHistoryRecord.cs
@@ -4,7 +4,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public struct ROCPlusHistoryRecord
{
diff --git a/DeviceSQL/Device/ROC/Data/TimeParameter.cs b/DeviceSQL.Devices.ROC/Data/TimeParameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/TimeParameter.cs
rename to DeviceSQL.Devices.ROC/Data/TimeParameter.cs
index 76d6bb2..945364e 100644
--- a/DeviceSQL/Device/ROC/Data/TimeParameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/TimeParameter.cs
@@ -4,7 +4,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class TimeParameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/Tlp.cs b/DeviceSQL.Devices.ROC/Data/Tlp.cs
similarity index 95%
rename from DeviceSQL/Device/ROC/Data/Tlp.cs
rename to DeviceSQL.Devices.ROC/Data/Tlp.cs
index 69535f7..c5592f0 100644
--- a/DeviceSQL/Device/ROC/Data/Tlp.cs
+++ b/DeviceSQL.Devices.ROC/Data/Tlp.cs
@@ -1,4 +1,8 @@
-namespace DeviceSQL.Device.ROC.Data
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class Tlp
{
diff --git a/DeviceSQL/Device/ROC/Data/TlpParameter.cs b/DeviceSQL.Devices.ROC/Data/TlpParameter.cs
similarity index 87%
rename from DeviceSQL/Device/ROC/Data/TlpParameter.cs
rename to DeviceSQL.Devices.ROC/Data/TlpParameter.cs
index 570e879..28458db 100644
--- a/DeviceSQL/Device/ROC/Data/TlpParameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/TlpParameter.cs
@@ -1,4 +1,8 @@
-namespace DeviceSQL.Device.ROC.Data
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class TlpParameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/UInt16Parameter.cs b/DeviceSQL.Devices.ROC/Data/UInt16Parameter.cs
similarity index 92%
rename from DeviceSQL/Device/ROC/Data/UInt16Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/UInt16Parameter.cs
index 3aa46dd..af55c2c 100644
--- a/DeviceSQL/Device/ROC/Data/UInt16Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/UInt16Parameter.cs
@@ -4,7 +4,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class UInt16Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/UInt32Parameter.cs b/DeviceSQL.Devices.ROC/Data/UInt32Parameter.cs
similarity index 93%
rename from DeviceSQL/Device/ROC/Data/UInt32Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/UInt32Parameter.cs
index 545b104..c296937 100644
--- a/DeviceSQL/Device/ROC/Data/UInt32Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/UInt32Parameter.cs
@@ -4,7 +4,11 @@
#endregion
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class UInt32Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Data/UInt8Parameter.cs b/DeviceSQL.Devices.ROC/Data/UInt8Parameter.cs
similarity index 85%
rename from DeviceSQL/Device/ROC/Data/UInt8Parameter.cs
rename to DeviceSQL.Devices.ROC/Data/UInt8Parameter.cs
index a3d43c1..73f5d91 100644
--- a/DeviceSQL/Device/ROC/Data/UInt8Parameter.cs
+++ b/DeviceSQL.Devices.ROC/Data/UInt8Parameter.cs
@@ -1,4 +1,8 @@
-namespace DeviceSQL.Device.ROC.Data
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
{
public class UInt8Parameter : Parameter
{
diff --git a/DeviceSQL/Device/ROC/Device.cs b/DeviceSQL.Devices.ROC/Device.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Device.cs
rename to DeviceSQL.Devices.ROC/Device.cs
diff --git a/DeviceSQL.Devices.ROC/DeviceSQL.Devices.ROC.csproj b/DeviceSQL.Devices.ROC/DeviceSQL.Devices.ROC.csproj
new file mode 100644
index 0000000..9a7c817
--- /dev/null
+++ b/DeviceSQL.Devices.ROC/DeviceSQL.Devices.ROC.csproj
@@ -0,0 +1,156 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}
+ Library
+ Properties
+ DeviceSQL.Devices.ROC
+ DeviceSQL.Devices.ROC
+ v4.8
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {5deadadf-be60-4774-80c6-97b3a83fa289}
+ DeviceSQL.Devices.Common
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL/Device/ROC/FST/Arguments/ArgumentBase.cs b/DeviceSQL.Devices.ROC/FST/Arguments/ArgumentBase.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Arguments/ArgumentBase.cs
rename to DeviceSQL.Devices.ROC/FST/Arguments/ArgumentBase.cs
diff --git a/DeviceSQL/Device/ROC/FST/Arguments/ArgumentDataType.cs b/DeviceSQL.Devices.ROC/FST/Arguments/ArgumentDataType.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Arguments/ArgumentDataType.cs
rename to DeviceSQL.Devices.ROC/FST/Arguments/ArgumentDataType.cs
diff --git a/DeviceSQL/Device/ROC/FST/Arguments/ArgumentType.cs b/DeviceSQL.Devices.ROC/FST/Arguments/ArgumentType.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Arguments/ArgumentType.cs
rename to DeviceSQL.Devices.ROC/FST/Arguments/ArgumentType.cs
diff --git a/DeviceSQL/Device/ROC/FST/Arguments/DatabasePoint.cs b/DeviceSQL.Devices.ROC/FST/Arguments/DatabasePoint.cs
similarity index 91%
rename from DeviceSQL/Device/ROC/FST/Arguments/DatabasePoint.cs
rename to DeviceSQL.Devices.ROC/FST/Arguments/DatabasePoint.cs
index 9354610..196c287 100644
--- a/DeviceSQL/Device/ROC/FST/Arguments/DatabasePoint.cs
+++ b/DeviceSQL.Devices.ROC/FST/Arguments/DatabasePoint.cs
@@ -1,4 +1,5 @@
-namespace DeviceSQL.Device.ROC.Data.FST.Arguments
+
+namespace DeviceSQL.Device.ROC.Data.FST.Arguments
{
public class DatabasePoint
{
diff --git a/DeviceSQL/Device/ROC/FST/Arguments/DatabasePointOrConstantValueArgument.cs b/DeviceSQL.Devices.ROC/FST/Arguments/DatabasePointOrConstantValueArgument.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Arguments/DatabasePointOrConstantValueArgument.cs
rename to DeviceSQL.Devices.ROC/FST/Arguments/DatabasePointOrConstantValueArgument.cs
diff --git a/DeviceSQL/Device/ROC/FST/Arguments/NullArgument.cs b/DeviceSQL.Devices.ROC/FST/Arguments/NullArgument.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Arguments/NullArgument.cs
rename to DeviceSQL.Devices.ROC/FST/Arguments/NullArgument.cs
diff --git a/DeviceSQL/Device/ROC/FST/Instructions/AddInstruction.cs b/DeviceSQL.Devices.ROC/FST/Instructions/AddInstruction.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Instructions/AddInstruction.cs
rename to DeviceSQL.Devices.ROC/FST/Instructions/AddInstruction.cs
diff --git a/DeviceSQL/Device/ROC/FST/Instructions/InstructionBase.cs b/DeviceSQL.Devices.ROC/FST/Instructions/InstructionBase.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Instructions/InstructionBase.cs
rename to DeviceSQL.Devices.ROC/FST/Instructions/InstructionBase.cs
diff --git a/DeviceSQL/Device/ROC/FST/Instructions/InstructionCategory.cs b/DeviceSQL.Devices.ROC/FST/Instructions/InstructionCategory.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Instructions/InstructionCategory.cs
rename to DeviceSQL.Devices.ROC/FST/Instructions/InstructionCategory.cs
diff --git a/DeviceSQL/Device/ROC/FST/Instructions/InstructionType.cs b/DeviceSQL.Devices.ROC/FST/Instructions/InstructionType.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/FST/Instructions/InstructionType.cs
rename to DeviceSQL.Devices.ROC/FST/Instructions/InstructionType.cs
diff --git a/DeviceSQL/Device/ROC/IO/Transport/Transport.cs b/DeviceSQL.Devices.ROC/IO/Transport/Transport.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/IO/Transport/Transport.cs
rename to DeviceSQL.Devices.ROC/IO/Transport/Transport.cs
diff --git a/DeviceSQL/Device/ROC/Message/IRocMessage.cs b/DeviceSQL.Devices.ROC/Message/IRocMessage.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/IRocMessage.cs
rename to DeviceSQL.Devices.ROC/Message/IRocMessage.cs
diff --git a/DeviceSQL/Device/ROC/Message/IRocRequestMessage.cs b/DeviceSQL.Devices.ROC/Message/IRocRequestMessage.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/IRocRequestMessage.cs
rename to DeviceSQL.Devices.ROC/Message/IRocRequestMessage.cs
diff --git a/DeviceSQL/Device/ROC/Message/IRocResponseMessage.cs b/DeviceSQL.Devices.ROC/Message/IRocResponseMessage.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/IRocResponseMessage.cs
rename to DeviceSQL.Devices.ROC/Message/IRocResponseMessage.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode007Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode007Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode007Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode007Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode007Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode007Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode007Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode007Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode008Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode008Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode008Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode008Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode008Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode008Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode008Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode008Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode017Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode017Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode017Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode017Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode017Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode017Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode017Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode017Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode080Function.cs b/DeviceSQL.Devices.ROC/Message/OpCode080Function.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode080Function.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode080Function.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode080Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode080Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode080Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode080Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode080Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode080Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode080Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode080Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode118Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode118Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode118Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode118Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode118Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode118Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode118Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode118Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode119Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode119Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode119Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode119Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode119Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode119Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode119Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode119Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode120Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode120Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode120Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode120Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode120Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode120Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode120Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode120Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode121Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode121Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode121Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode121Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode121Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode121Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode121Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode121Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode122Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode122Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode122Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode122Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode122Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode122Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode122Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode122Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode126Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode126Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode126Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode126Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode126Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode126Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode126Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode126Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode130Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode130Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode130Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode130Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode130Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode130Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode130Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode130Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode131Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode131Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode131Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode131Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode131Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode131Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode131Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode131Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode132Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode132Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode132Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode132Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode132Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode132Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode132Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode132Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode136Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode136Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode136Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode136Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode136Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode136Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode136Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode136Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode139Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode139Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode139Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode139Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode139Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode139Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode139Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode139Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode165Request .cs b/DeviceSQL.Devices.ROC/Message/OpCode165Request .cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode165Request .cs
rename to DeviceSQL.Devices.ROC/Message/OpCode165Request .cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode165Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode165Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode165Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode165Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode166Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode166Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode166Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode166Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode166Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode166Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode166Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode166Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode167Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode167Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode167Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode167Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode167Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode167Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode167Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode167Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode180Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode180Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode180Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode180Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode180Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode180Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode180Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode180Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode181Request.cs b/DeviceSQL.Devices.ROC/Message/OpCode181Request.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode181Request.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode181Request.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode181Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode181Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode181Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode181Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/OpCode255Response.cs b/DeviceSQL.Devices.ROC/Message/OpCode255Response.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/OpCode255Response.cs
rename to DeviceSQL.Devices.ROC/Message/OpCode255Response.cs
diff --git a/DeviceSQL/Device/ROC/Message/ParameterDatabase.cs b/DeviceSQL.Devices.ROC/Message/ParameterDatabase.cs
similarity index 99%
rename from DeviceSQL/Device/ROC/Message/ParameterDatabase.cs
rename to DeviceSQL.Devices.ROC/Message/ParameterDatabase.cs
index 8ec0236..f4e5ced 100644
--- a/DeviceSQL/Device/ROC/Message/ParameterDatabase.cs
+++ b/DeviceSQL.Devices.ROC/Message/ParameterDatabase.cs
@@ -4,7 +4,11 @@
#endregion
-namespace DeviceSQL.Device.ROC.Message
+#if SQLTYPES
+namespace DeviceSQL.SQLTypes.ROC.Data
+#else
+namespace DeviceSQL.Device.ROC.Data
+#endif
{
public static class ParameterDatabase
{
diff --git a/DeviceSQL/Device/ROC/Message/RocMessage.cs b/DeviceSQL.Devices.ROC/Message/RocMessage.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/RocMessage.cs
rename to DeviceSQL.Devices.ROC/Message/RocMessage.cs
diff --git a/DeviceSQL/Device/ROC/Message/RocMessageFactory.cs b/DeviceSQL.Devices.ROC/Message/RocMessageFactory.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Message/RocMessageFactory.cs
rename to DeviceSQL.Devices.ROC/Message/RocMessageFactory.cs
diff --git a/DeviceSQL/Device/ROC/OpCode255Exception.cs b/DeviceSQL.Devices.ROC/OpCode255Exception.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/OpCode255Exception.cs
rename to DeviceSQL.Devices.ROC/OpCode255Exception.cs
diff --git a/DeviceSQL.Devices.ROC/Properties/AssemblyInfo.cs b/DeviceSQL.Devices.ROC/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..40f2a06
--- /dev/null
+++ b/DeviceSQL.Devices.ROC/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DeviceSQL.Devices.ROC")]
+[assembly: AssemblyDescription("DeviceSQL.Devices.ROC")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("af0e4b64-f2c2-4459-a518-9aa905ff6f0f")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL/Device/ROC/ROCMaster.cs b/DeviceSQL.Devices.ROC/ROCMaster.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/ROCMaster.cs
rename to DeviceSQL.Devices.ROC/ROCMaster.cs
diff --git a/DeviceSQL/Device/ROC/Utility/Crc16.cs b/DeviceSQL.Devices.ROC/Utility/Crc16.cs
similarity index 100%
rename from DeviceSQL/Device/ROC/Utility/Crc16.cs
rename to DeviceSQL.Devices.ROC/Utility/Crc16.cs
diff --git a/DeviceSQL.ModbusMaster/DeviceSQL.ModbusMaster.sqlproj b/DeviceSQL.ModbusMaster/DeviceSQL.ModbusMaster.sqlproj
new file mode 100644
index 0000000..3b76adc
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/DeviceSQL.ModbusMaster.sqlproj
@@ -0,0 +1,100 @@
+
+
+
+
+ Debug
+ AnyCPU
+ DeviceSQL.ModbusMaster
+ 2.0
+ 4.1
+ {bf99e0a7-f591-4629-8dd2-dda18b05e5f2}
+ Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
+ Database
+
+
+ DeviceSQL.ModbusMaster
+ DeviceSQL.ModbusMaster
+ 1033, CI
+ BySchemaAndSchemaType
+ True
+ v4.8
+ CS
+ Properties
+ False
+ True
+ True
+ ModbusMaster
+
+ UNSAFE
+ False
+ ..\DeviceSQL-Key.snk
+
+
+ bin\Release\
+ $(MSBuildProjectName).sql
+ False
+ pdbonly
+ true
+ false
+ true
+ prompt
+ 4
+
+
+ bin\Debug\
+ $(MSBuildProjectName).sql
+ false
+ true
+ full
+ false
+ true
+ true
+ prompt
+ 4
+
+
+ 11.0
+
+ True
+ 11.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceSQL.SQLTypes.Modbus
+ {cd45d76e-d2ed-4587-9873-f35ad24e42a5}
+ True
+ True
+ True
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadCoils.cs b/DeviceSQL.ModbusMaster/Functions/ReadCoils.cs
new file mode 100644
index 0000000..d9cb1a9
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadCoils.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static CoilRegisterArray ReadCoils(SqlString deviceName, CoilRegisterArray coilRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var coilRegisters = new List(coilRegisterArray.coilRegisters.Select(coilRegister => new Device.MODBUS.Data.CoilRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(coilRegister.Address.RelativeAddress.Value), coilRegister.Address.IsZeroBased.Value))));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadCoilRegisters(null, ref coilRegisters, null);
+ return CoilRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_CoilRegisterArray() { coilRegisters = coilRegisters.Select(coilRegister => new Types.MODBUSMaster.MODBUSMaster_CoilRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = coilRegister.Address.RelativeAddress, IsZeroBased = coilRegister.Address.IsZeroBased }, Data = coilRegister.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadDiscreteInputs.cs b/DeviceSQL.ModbusMaster/Functions/ReadDiscreteInputs.cs
new file mode 100644
index 0000000..b62b685
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadDiscreteInputs.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static DiscreteInputRegisterArray ReadDiscreteInputs(SqlString deviceName, DiscreteInputRegisterArray discreteInputRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var discreteInputRegisters = new List(discreteInputRegisterArray.discreteInputRegisters.Select(discreteInputRegister => new Device.MODBUS.Data.DiscreteInputRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(discreteInputRegister.Address.RelativeAddress.Value), discreteInputRegister.Address.IsZeroBased.Value))));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadDiscreteInputRegisters(null, ref discreteInputRegisters, null);
+ return DiscreteInputRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_DiscreteInputRegisterArray() { discreteInputRegisters = discreteInputRegisters.Select(discreteInputRegister => new Types.MODBUSMaster.MODBUSMaster_DiscreteInputRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = discreteInputRegister.Address.RelativeAddress, IsZeroBased = discreteInputRegister.Address.IsZeroBased }, Data = discreteInputRegister.Data }).ToList() };
+ }
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadEventArchiveRecords.cs b/DeviceSQL.ModbusMaster/Functions/ReadEventArchiveRecords.cs
new file mode 100644
index 0000000..460bee2
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadEventArchiveRecords.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static EventArchiveRecordArray ReadEventArchiveRecords(SqlString deviceName, ModbusAddress eventArchiveAddress, SqlInt32 index)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var eventArchiveRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadEventArchiveRecord(null, new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(eventArchiveAddress.RelativeAddress.Value), eventArchiveAddress.IsZeroBased.Value), Convert.ToUInt16(index.Value), null);
+ return EventArchiveRecordArray.Null; // new Types.MODBUSMaster.MODBUSMaster_EventArchiveRecordArray() { eventArchiveRecords = eventArchiveRecords.Select(ear => new Types.MODBUSMaster.MODBUSMaster_EventArchiveRecord() { Index = ear.Index, Data = ear.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadFloats.cs b/DeviceSQL.ModbusMaster/Functions/ReadFloats.cs
new file mode 100644
index 0000000..451f140
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadFloats.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static FloatRegisterArray ReadFloats(SqlString deviceName, FloatRegisterArray floatRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var floatRegisters = new List(floatRegisterArray.floatRegisters.Select(floatRegister => new Device.MODBUS.Data.FloatRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(floatRegister.Address.RelativeAddress.Value), floatRegister.Address.IsZeroBased.Value), floatRegister.ByteSwap.Value, floatRegister.WordSwap.Value)));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadFloatRegisters(null, ref floatRegisters, null);
+ return FloatRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_FloatRegisterArray() { floatRegisters = floatRegisters.Select(floatRegister => new Types.MODBUSMaster.MODBUSMaster_FloatRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = floatRegister.Address.RelativeAddress, IsZeroBased = floatRegister.Address.IsZeroBased }, Data = floatRegister.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadHistoryArchiveRecord.cs b/DeviceSQL.ModbusMaster/Functions/ReadHistoryArchiveRecord.cs
new file mode 100644
index 0000000..7ff040b
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadHistoryArchiveRecord.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static HistoryArchiveRecord ReadHistoryArchiveRecord(SqlString deviceName, ModbusAddress historyArchiveAddress, SqlInt32 index, SqlByte recordSize)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var historyArchiveRecord = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadHistoryArchiveRecord(null, new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(historyArchiveAddress.RelativeAddress.Value), historyArchiveAddress.IsZeroBased.Value), Convert.ToUInt16(index.Value), recordSize.Value, null);
+ return HistoryArchiveRecord.Null; // new Types.MODBUSMaster.MODBUSMaster_HistoryArchiveRecord() { Index = historyArchiveRecord.Index, Data = historyArchiveRecord.Data };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadHoldings.cs b/DeviceSQL.ModbusMaster/Functions/ReadHoldings.cs
new file mode 100644
index 0000000..2682cba
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadHoldings.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static HoldingRegisterArray ReadHoldings(SqlString deviceName, HoldingRegisterArray holdingRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var holdingRegisters = new List(holdingRegisterArray.holdingRegisters.Select(holdingRegister => new Device.MODBUS.Data.HoldingRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(holdingRegister.Address.RelativeAddress.Value), holdingRegister.Address.IsZeroBased.Value), holdingRegister.ByteSwap.Value)));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadHoldingRegisters(null, ref holdingRegisters, null);
+ return HoldingRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_HoldingRegisterArray() { holdingRegisters = holdingRegisters.Select(holdingRegister => new Types.MODBUSMaster.MODBUSMaster_HoldingRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = holdingRegister.Address.RelativeAddress, IsZeroBased = holdingRegister.Address.IsZeroBased }, ByteSwap = holdingRegister.ByteSwap, Data = holdingRegister.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadInputs.cs b/DeviceSQL.ModbusMaster/Functions/ReadInputs.cs
new file mode 100644
index 0000000..80441c9
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadInputs.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static InputRegisterArray ReadInputs(SqlString deviceName, InputRegisterArray inputRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ // var inputRegisters = new List(inputRegisterArray.inputRegisters.Select(inputRegister => new Device.MODBUS.Data.InputRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(inputRegister.Address.RelativeAddress.Value), inputRegister.Address.IsZeroBased.Value), inputRegister.ByteSwap.Value)));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadInputRegisters(null, ref inputRegisters, null);
+ return InputRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_InputRegisterArray() { inputRegisters = inputRegisters.Select(inputRegister => new Types.MODBUSMaster.MODBUSMaster_InputRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = inputRegister.Address.RelativeAddress, IsZeroBased = inputRegister.Address.IsZeroBased }, ByteSwap = inputRegister.ByteSwap, Data = inputRegister.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadLongs.cs b/DeviceSQL.ModbusMaster/Functions/ReadLongs.cs
new file mode 100644
index 0000000..307c8f7
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadLongs.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static LongRegisterArray ReadLongs(SqlString deviceName, LongRegisterArray longRegisterArray)
+ {
+ // var deviceNameValue = deviceName.Value;
+ //var longRegisters = new List(longRegisterArray.longRegisters.Select(longRegister => new Device.MODBUS.Data.LongRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(longRegister.Address.RelativeAddress.Value), longRegister.Address.IsZeroBased.Value), longRegister.ByteSwap.Value, longRegister.WordSwap.Value)));
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadLongRegisters(null, ref longRegisters, null);
+ return LongRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_LongRegisterArray() { longRegisters = longRegisters.Select(floatRegister => new Types.MODBUSMaster.MODBUSMaster_LongRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = floatRegister.Address.RelativeAddress, IsZeroBased = floatRegister.Address.IsZeroBased }, Data = floatRegister.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadShorts.cs b/DeviceSQL.ModbusMaster/Functions/ReadShorts.cs
new file mode 100644
index 0000000..15d8192
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadShorts.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static ShortRegisterArray ReadShorts(SqlString deviceName, ShortRegisterArray shortRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var shortRegisters = new List(shortRegisterArray.shortRegisters.Select(longRegister => new Device.MODBUS.Data.ShortRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(longRegister.Address.RelativeAddress.Value), longRegister.Address.IsZeroBased.Value), longRegister.ByteSwap.Value)));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadShortRegisters(null, ref shortRegisters, null);
+ return ShortRegisterArray.Null; // new Types.MODBUSMaster.MODBUSMaster_ShortRegisterArray() { shortRegisters = shortRegisters.Select(shortRegister => new Types.MODBUSMaster.MODBUSMaster_ShortRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = shortRegister.Address.RelativeAddress, IsZeroBased = shortRegister.Address.IsZeroBased }, Data = shortRegister.Data }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/ReadString.cs b/DeviceSQL.ModbusMaster/Functions/ReadString.cs
new file mode 100644
index 0000000..43c6ac9
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/ReadString.cs
@@ -0,0 +1,23 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static StringRegister ReadString(SqlString deviceName, StringRegister stringRegister)
+ {
+ //var deviceNameValue = deviceName.Value;
+ // var stringRegisterValue = new Device.MODBUS.Data.StringRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(stringRegister.Address.RelativeAddress.Value), stringRegister.Address.IsZeroBased.Value), stringRegister.Length.Value);
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadStringRegister(null, null, ref stringRegisterValue);
+ //stringRegister.Data = stringRegisterValue.Data;
+ return StringRegister.Null; // stringRegister;
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/WriteBoolean.cs b/DeviceSQL.ModbusMaster/Functions/WriteBoolean.cs
new file mode 100644
index 0000000..f61bd0e
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/WriteBoolean.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean WriteBoolean(SqlString deviceName, BooleanRegister booleanRegister)
+ {
+ ///var deviceNameValue = deviceName.Value;
+ //var booleanRegisterRaw = new Device.MODBUS.Data.BooleanRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(booleanRegister.Address.RelativeAddress.Value), booleanRegister.Address.IsZeroBased.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).WriteBooleanRegister(null, booleanRegisterRaw, null);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Functions/WriteFloats.cs b/DeviceSQL.ModbusMaster/Functions/WriteFloats.cs
new file mode 100644
index 0000000..a5537a5
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Functions/WriteFloats.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.Modbus;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class MODBUSMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean WriteFloats(SqlString deviceName, FloatRegisterArray floatRegisterArray)
+ {
+ //var deviceNameValue = deviceName.Value;
+ // var floatRegisters = new List(floatRegisterArray.floatRegisters.Select(floatRegister => new Device.MODBUS.Data.FloatRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(floatRegister.Address.RelativeAddress.Value), floatRegister.Address.IsZeroBased.Value), floatRegister.ByteSwap.Value, floatRegister.WordSwap.Value)));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).WriteFloatRegisters(null, floatRegisters, null);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ModbusMaster/Properties/AssemblyInfo.cs b/DeviceSQL.ModbusMaster/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..aa93103
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Properties/AssemblyInfo.cs
@@ -0,0 +1,24 @@
+using System.Reflection;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with the SQLCLR assembly.
+[assembly: AssemblyTitle("DeviceSQL.ModbusMaster")]
+[assembly: AssemblyDescription("DeviceSQL.ModbusMaster")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL.ModbusMaster/Schemas/ModbusMaster.sql b/DeviceSQL.ModbusMaster/Schemas/ModbusMaster.sql
new file mode 100644
index 0000000..8169108
--- /dev/null
+++ b/DeviceSQL.ModbusMaster/Schemas/ModbusMaster.sql
@@ -0,0 +1 @@
+CREATE SCHEMA [ModbusMaster]
diff --git a/DeviceSQL.ROCMaster/DeviceSQL.ROCMaster.sqlproj b/DeviceSQL.ROCMaster/DeviceSQL.ROCMaster.sqlproj
new file mode 100644
index 0000000..929c152
--- /dev/null
+++ b/DeviceSQL.ROCMaster/DeviceSQL.ROCMaster.sqlproj
@@ -0,0 +1,131 @@
+
+
+
+
+ Debug
+ AnyCPU
+ DeviceSQL.ROCMaster
+ 2.0
+ 4.1
+ {c5358adc-eca3-464d-aeb9-ce99048d4be3}
+ Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
+ Database
+
+
+ DeviceSQL.ROCMaster
+ DeviceSQL.ROCMaster
+ 1033, CI
+ BySchemaAndSchemaType
+ True
+ v4.8
+ CS
+ Properties
+ False
+ True
+ True
+ ROCMaster
+
+ UNSAFE
+ False
+ ..\DeviceSQL-Key.snk
+
+
+ bin\Release\
+ $(MSBuildProjectName).sql
+ False
+ pdbonly
+ true
+ false
+ true
+ prompt
+ 4
+
+
+ bin\Debug\
+ $(MSBuildProjectName).sql
+ false
+ true
+ full
+ false
+ true
+ true
+ prompt
+ 4
+
+
+ 11.0
+
+ True
+ 11.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceSQL.SQLTypes.ROC
+ {256ca566-5436-4543-bc13-d2480bee70c2}
+ True
+ True
+ True
+ UNSAFE
+ True
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.ROCMaster/Functions/ClearAuditLogEventFlags.cs b/DeviceSQL.ROCMaster/Functions/ClearAuditLogEventFlags.cs
new file mode 100644
index 0000000..b9c719a
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/ClearAuditLogEventFlags.cs
@@ -0,0 +1,19 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static int ClearAuditLogEventFlags(SqlString deviceName, byte numberOfAuditLogRecordsToClear, int startingAuditLogPointer)
+ {
+ //var deviceNameValue = deviceName.Value;
+ return 0; // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ClearAuditLogEventFlags(null, null, null, null, numberOfAuditLogRecordsToClear, Convert.ToUInt16(startingAuditLogPointer));
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetAlarms.cs b/DeviceSQL.ROCMaster/Functions/GetAlarms.cs
new file mode 100644
index 0000000..8029dbe
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetAlarms.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static AlarmRecordArray GetAlarms(SqlString deviceName, byte count, int startIndex)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var alarmsRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetAlarms(null, null, null, null, count, Convert.ToUInt16(startIndex));
+ return AlarmRecordArray.Null; // new Types.ROCMaster.ROCMaster_AlarmRecordArray() { alarmRecords = alarmsRecords.Select(a => new Types.ROCMaster.ROCMaster_AlarmRecord() { data = a.data, Index = a.Index }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetArchiveInfo.cs b/DeviceSQL.ROCMaster/Functions/GetArchiveInfo.cs
new file mode 100644
index 0000000..327a6c6
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetArchiveInfo.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ArchiveInformation GetArchiveInfo(SqlString deviceName)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var archiveInfo = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetArchiveInfo(null, null, null, null);
+ return ArchiveInformation.Null; // new Types.ROCMaster.ROCMaster_ArchiveInformation() { Data = archiveInfo.data };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetAuditLogRecords.cs b/DeviceSQL.ROCMaster/Functions/GetAuditLogRecords.cs
new file mode 100644
index 0000000..cee093e
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetAuditLogRecords.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static AuditLogRecordArray GetAuditLogRecords(SqlString deviceName, byte count, int startIndex)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var auditLogRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetAuditLogRecords(null, null, null, null, count, Convert.ToUInt16(startIndex));
+ return AuditLogRecordArray.Null; // new Types.ROCMaster.ROCMaster_AuditLogRecordArray() { auditLogRecords = auditLogRecords.Select(e => new Types.ROCMaster.ROCMaster_AuditLogRecord() { Data = e.data, Index = e.Index }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusAlarmIndex.cs b/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusAlarmIndex.cs
new file mode 100644
index 0000000..eb90159
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusAlarmIndex.cs
@@ -0,0 +1,19 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static int GetCurrentROCPlusAlarmIndex(SqlString deviceName)
+ {
+ //var deviceNameValue = deviceName.Value;
+ return 0; // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetCurrentROCPlusAlarmIndex(null, null, null, null);
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusEventIndex.cs b/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusEventIndex.cs
new file mode 100644
index 0000000..be7cbed
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusEventIndex.cs
@@ -0,0 +1,19 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static int GetCurrentROCPlusEventIndex(SqlString deviceName)
+ {
+ //var deviceNameValue = deviceName.Value;
+ return 0;// (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetCurrentROCPlusEventIndex(null, null, null, null);
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusHistorySegmentIndex.cs b/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusHistorySegmentIndex.cs
new file mode 100644
index 0000000..9372170
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetCurrentROCPlusHistorySegmentIndex.cs
@@ -0,0 +1,19 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static int GetCurrentROCPlusHistorySegmentIndex(SqlString deviceName, byte historySegment, byte historyType)
+ {
+ //var deviceNameValue = deviceName.Value;
+ return 0;// (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetCurrentROCPlusHistorySegmentIndex(null, null, null, null, historySegment, historyType);
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetDoubleValue.cs b/DeviceSQL.ROCMaster/Functions/GetDoubleValue.cs
new file mode 100644
index 0000000..d61d3c1
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetDoubleValue.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlDouble GetDoubleValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var DoubleParameter = new DoubleParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref DoubleParameter);
+ return 0;// DoubleParameter.NullableValue.HasValue ? DoubleParameter.Value : SqlDouble.Null;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetEvents.cs b/DeviceSQL.ROCMaster/Functions/GetEvents.cs
new file mode 100644
index 0000000..885ff96
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetEvents.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static EventRecordArray GetEvents(SqlString deviceName, byte count, int startIndex)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var eventRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetEvents(null, null, null, null, count, Convert.ToUInt16(startIndex));
+ return EventRecordArray.Null; // new Types.ROCMaster.ROCMaster_EventRecordArray() { eventRecords = eventRecords.Select(e => new Types.ROCMaster.ROCMaster_EventRecord() { Data = e.data, Index = e.Index }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetFloatValue.cs b/DeviceSQL.ROCMaster/Functions/GetFloatValue.cs
new file mode 100644
index 0000000..5f3632c
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetFloatValue.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlSingle GetFloatValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var flpParameter = new FlpParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref flpParameter);
+ return 0;// flpParameter.NullableValue.HasValue ? flpParameter.Value : SqlSingle.Null;
+ }
+
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetFstInformation.cs b/DeviceSQL.ROCMaster/Functions/GetFstInformation.cs
new file mode 100644
index 0000000..b9eedbe
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetFstInformation.cs
@@ -0,0 +1,44 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static FSTInformation GetFstInformation(SqlString deviceName, SqlByte fstNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var rocMaster = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster);
+
+ //var fstHeaderInfo = rocMaster.GetFstHeaderInfo(null, null, null, null, fstNumber.Value);
+ //var fstSizeParameter = new UInt16Parameter(new Tlp(16, fstNumber.Value, 25));
+
+ //rocMaster.ReadParameter(null, null, null, null, ref fstSizeParameter);
+
+ //var fstSize = fstSizeParameter.Value;
+ //var codeBytes = new List();
+
+ //while (fstSize > codeBytes.Count)
+ //{
+ // codeBytes.AddRange(rocMaster.GetFstCodeChunk(null, null, null, null, 0, (byte)codeBytes.Count, (fstSize - codeBytes.Count) > 240 ? (byte)240 : (byte)(fstSize - codeBytes.Count)).CodeBytes);
+ //}
+
+ //return new Types.ROCMaster.ROCMaster_FSTInformation()
+ //{
+ // FSTNumber = fstNumber.Value,
+ // Version = fstHeaderInfo.Version,
+ // Description = fstHeaderInfo.Description,
+ // FSTCode = codeBytes.ToArray()
+ //};
+
+ return FSTInformation.Null;
+ }
+
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetHistory.cs b/DeviceSQL.ROCMaster/Functions/GetHistory.cs
new file mode 100644
index 0000000..92804dd
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetHistory.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static HistoryRecordArray GetHistory(SqlString deviceName, byte historicalRamArea, byte historyPointNumber, byte count, int startIndex)
+ {
+ //var deviceNameValue = deviceName.Value;
+ // var historyRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetHistory(null, null, null, null, historicalRamArea, historyPointNumber, count, Convert.ToUInt16(startIndex));
+ return HistoryRecordArray.Null; // new Types.ROCMaster.ROCMaster_HistoryRecordArray() { historyRecords = historyRecords.Select(h => new Types.ROCMaster.ROCMaster_HistoryRecord() { HistorySegment = h.HistorySegment, HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetInt16Value.cs b/DeviceSQL.ROCMaster/Functions/GetInt16Value.cs
new file mode 100644
index 0000000..f8bd14f
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetInt16Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlInt16 GetInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var int16Parameter = new Int16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref int16Parameter);
+ return 0; // int16Parameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetInt32Value.cs b/DeviceSQL.ROCMaster/Functions/GetInt32Value.cs
new file mode 100644
index 0000000..e10720b
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetInt32Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlInt32 GetInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var int32Parameter = new Int32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref int32Parameter);
+ return 0;// int32Parameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetInt8Value.cs b/DeviceSQL.ROCMaster/Functions/GetInt8Value.cs
new file mode 100644
index 0000000..2917e53
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetInt8Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlInt16 GetInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var int8Parameter = new Int8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref int8Parameter);
+ return 0; // int8Parameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetMinutelyHistory.cs b/DeviceSQL.ROCMaster/Functions/GetMinutelyHistory.cs
new file mode 100644
index 0000000..c8098e9
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetMinutelyHistory.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static HistoryRecordArray GetMinutelyHistory(SqlString deviceName, byte historyPointNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var historyRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetMinutelyHistory(null, null, null, null, historyPointNumber);
+ return HistoryRecordArray.Null; // new Types.ROCMaster.ROCMaster_HistoryRecordArray() { historyRecords = historyRecords.Select(h => new Types.ROCMaster.ROCMaster_HistoryRecord() { HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetROCPlusAlarms.cs b/DeviceSQL.ROCMaster/Functions/GetROCPlusAlarms.cs
new file mode 100644
index 0000000..42c13ab
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetROCPlusAlarms.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ROCPlusAlarmRecordArray GetROCPlusAlarms(SqlString deviceName, byte count, int startIndex)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var rocPlusAlarmRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusAlarms(null, null, null, null, count, Convert.ToUInt16(startIndex));
+ return ROCPlusAlarmRecordArray.Null; // new Types.ROCMaster.ROCMaster_ROCPlusAlarmRecordArray() { rocPlusAlarmRecords = rocPlusAlarmRecords.Select(a => new Types.ROCMaster.ROCMaster_ROCPlusAlarmRecord() { Data = a.data, Index = a.Index }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetROCPlusConfiguredHistoryPoints.cs b/DeviceSQL.ROCMaster/Functions/GetROCPlusConfiguredHistoryPoints.cs
new file mode 100644
index 0000000..62f170a
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetROCPlusConfiguredHistoryPoints.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ROCPlusHistoryPointArray GetROCPlusConfiguredHistoryPoints(SqlString deviceName, byte historySegment)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var configuredHistoryPoints = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusConfiguredHistoryPoints(null, null, null, null, historySegment);
+ return ROCPlusHistoryPointArray.Null; // new Types.ROCMaster.ROCMaster_ROCPlusHistoryPointArray() { historyPoints = configuredHistoryPoints };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetROCPlusEvents.cs b/DeviceSQL.ROCMaster/Functions/GetROCPlusEvents.cs
new file mode 100644
index 0000000..fdd0cec
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetROCPlusEvents.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ROCPlusEventRecordArray GetROCPlusEvents(SqlString deviceName, byte count, int startIndex)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var rocPlusEventRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusEvents(null, null, null, null, count, Convert.ToUInt16(startIndex));
+ return ROCPlusEventRecordArray.Null; // new Types.ROCMaster.ROCMaster_ROCPlusEventRecordArray() { rocPlusEventRecords = rocPlusEventRecords.Select(e => new Types.ROCMaster.ROCMaster_ROCPlusEventRecord() { Data = e.data, Index = e.Index }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetROCPlusHistory.cs b/DeviceSQL.ROCMaster/Functions/GetROCPlusHistory.cs
new file mode 100644
index 0000000..5b48a19
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetROCPlusHistory.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ROCPlusHistoryRecordArray GetROCPlusHistory(SqlString deviceName, byte historySegment, int historyIndex, byte historyType, byte startingHistoryPoint, byte numberOfHistoryPoints, byte numberOfTimePeriods)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var rocPlusHistoryRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusHistory(null, null, null, null, historySegment, Convert.ToUInt16(historyIndex), historyType, startingHistoryPoint, numberOfHistoryPoints, numberOfTimePeriods);
+ return ROCPlusHistoryRecordArray.Null; // new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecordArray() { rocPlusHistoryRecords = rocPlusHistoryRecords.Select(h => new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecord() { HistorySegment = h.HistorySegment, HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetROCPlusHistoryByHistoryPointArray.cs b/DeviceSQL.ROCMaster/Functions/GetROCPlusHistoryByHistoryPointArray.cs
new file mode 100644
index 0000000..985443b
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetROCPlusHistoryByHistoryPointArray.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ROCPlusHistoryRecordArray GetROCPlusHistoryByHistoryPointArray(SqlString deviceName, byte historySegment, int historyIndex, byte historyType, byte startingHistoryPoint, bool requestTimeStamps, byte numberOfHistoryPoints, ROCPlusHistoryPointArray requestedHistoryPoints, byte numberOfTimePeriods)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var rocPlusHistoryRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusHistory(null, null, null, null, historySegment, Convert.ToUInt16(historyIndex), historyType, requestTimeStamps, requestedHistoryPoints.historyPoints, numberOfTimePeriods);
+ return ROCPlusHistoryRecordArray.Null; // new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecordArray() { rocPlusHistoryRecords = rocPlusHistoryRecords.Select(h => new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecord() { HistorySegment = h.HistorySegment, HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetRealTimeClockValue.cs b/DeviceSQL.ROCMaster/Functions/GetRealTimeClockValue.cs
new file mode 100644
index 0000000..b8200e5
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetRealTimeClockValue.cs
@@ -0,0 +1,19 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlDateTime GetRealTimeClockValue(SqlString deviceName)
+ {
+ //var deviceNameValue = deviceName.Value;
+ return SqlDateTime.Null; // new SqlDateTime((DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetRealTimeClockValue(null, null, null, null));
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetRealTimeClockValueWithCentury.cs b/DeviceSQL.ROCMaster/Functions/GetRealTimeClockValueWithCentury.cs
new file mode 100644
index 0000000..5cef04a
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetRealTimeClockValueWithCentury.cs
@@ -0,0 +1,19 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlDateTime GetRealTimeClockValueWithCentury(SqlString deviceName, SqlInt32 century)
+ {
+ //var deviceNameValue = deviceName.Value;
+ return SqlDateTime.Null; // new SqlDateTime((DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetRealTimeClockValue(null, null, null, null, Convert.ToUInt16(century.Value)));
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetStringValue.cs b/DeviceSQL.ROCMaster/Functions/GetStringValue.cs
new file mode 100644
index 0000000..d713c19
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetStringValue.cs
@@ -0,0 +1,46 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlString GetStringValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlByte stringLength)
+ {
+ //var deviceNameValue = deviceName.Value;
+
+ //if (10 >= stringLength)
+ //{
+ // var ac10Parameter = new Ac10Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac10Parameter);
+ // return ac10Parameter.Value;
+ //}
+ //else if (12 >= stringLength)
+ //{
+ // var ac12Parameter = new Ac12Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac12Parameter);
+ // return ac12Parameter.Value;
+ //}
+ //else if (20 >= stringLength)
+ //{
+ // var ac20Parameter = new Ac20Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac20Parameter);
+ // return ac20Parameter.Value;
+ //}
+ //else
+ //{
+ // var ac30Parameter = new Ac30Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac30Parameter);
+ // return ac30Parameter.Value;
+ //}
+
+ return "";
+
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetTimeValue.cs b/DeviceSQL.ROCMaster/Functions/GetTimeValue.cs
new file mode 100644
index 0000000..3afb752
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetTimeValue.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlDateTime GetTimeValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var timeParameter = new Device.ROC.Data.TimeParameter(new Device.ROC.Data.Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref timeParameter);
+ return SqlDateTime.Null; // timeParameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetUInt16Value.cs b/DeviceSQL.ROCMaster/Functions/GetUInt16Value.cs
new file mode 100644
index 0000000..703c78f
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetUInt16Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlInt32 GetUInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var uInt16Parameter = new UInt16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt16Parameter);
+ return 0; // uInt16Parameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetUInt32Value.cs b/DeviceSQL.ROCMaster/Functions/GetUInt32Value.cs
new file mode 100644
index 0000000..e4ea24d
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetUInt32Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlInt64 GetUInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var uInt32Parameter = new UInt32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt32Parameter);
+ return 0; // uInt32Parameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/GetUInt8Value.cs b/DeviceSQL.ROCMaster/Functions/GetUInt8Value.cs
new file mode 100644
index 0000000..3ebbff7
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/GetUInt8Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlByte GetUInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
+ {
+ //var deviceNameValue = deviceName.Value;
+ // var uInt8Parameter = new UInt8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt8Parameter);
+ return 0; // uInt8Parameter.Value;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/ReadParameters.cs b/DeviceSQL.ROCMaster/Functions/ReadParameters.cs
new file mode 100644
index 0000000..326aba6
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/ReadParameters.cs
@@ -0,0 +1,101 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static ParameterArray ReadParameters(SqlString deviceName, ParameterArray parameterArray)
+ {
+ // var deviceNameValue = deviceName.Value;
+ // var parameters = new List();
+ // var length = parameterArray.Length;
+
+ // for (var parameterIndex = 0; length > parameterIndex; parameterIndex++)
+ // {
+ // var parameter = parameterArray.GetParameter(parameterIndex);
+
+ // switch (parameter.RawType)
+ // {
+ // case ParameterType.AC3:
+ // parameters.Add(new Ac3Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC7:
+ // parameters.Add(new Ac7Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC10:
+ // parameters.Add(new Ac10Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC12:
+ // parameters.Add(new Ac12Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC20:
+ // parameters.Add(new Ac20Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC30:
+ // parameters.Add(new Ac30Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC40:
+ // parameters.Add(new Ac40Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.BIN:
+ // parameters.Add(new BinParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.FL:
+ // parameters.Add(new FlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.DOUBLE:
+ // parameters.Add(new DoubleParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.INT16:
+ // parameters.Add(new Int16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.INT32:
+ // parameters.Add(new Int32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.INT8:
+ // parameters.Add(new Int8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.TLP:
+ // parameters.Add(new TlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.UINT16:
+ // parameters.Add(new UInt16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.UINT32:
+ // parameters.Add(new UInt32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.TIME:
+ // parameters.Add(new TimeParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.UINT8:
+ // parameters.Add(new UInt8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // }
+
+ // }
+
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameters(null, null, null, null, ref parameters);
+
+
+ // for (var parameterIndex = 0; length > parameterIndex; parameterIndex++)
+ // {
+ // var parameter = parameterArray[parameterIndex];
+ // parameter.RawValue = parameters[parameterIndex].Data;
+ // parameterArray[parameterIndex] = parameter;
+ // }
+
+ // return parameterArray;
+
+ return ParameterArray.Null;
+
+ }
+
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetFloatValue.cs b/DeviceSQL.ROCMaster/Functions/SetFloatValue.cs
new file mode 100644
index 0000000..25b3e7e
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetFloatValue.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetFloatValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlSingle value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var flpParameter = new FlpParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, flpParameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetInt16Value.cs b/DeviceSQL.ROCMaster/Functions/SetInt16Value.cs
new file mode 100644
index 0000000..fd7cbd5
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetInt16Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt16 value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var int16Parameter = new Int16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, int16Parameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetInt32Value.cs b/DeviceSQL.ROCMaster/Functions/SetInt32Value.cs
new file mode 100644
index 0000000..430d247
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetInt32Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt32 value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var int32Parameter = new Int32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, int32Parameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetInt8Value.cs b/DeviceSQL.ROCMaster/Functions/SetInt8Value.cs
new file mode 100644
index 0000000..8acd86b
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetInt8Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt16 value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var int8Parameter = new Int8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = Convert.ToSByte(value.Value) };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as DeviceSQL.Device.ROC.ROCMaster).WriteParameter(null, null, null, null, int8Parameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetOperatorIdentification.cs b/DeviceSQL.ROCMaster/Functions/SetOperatorIdentification.cs
new file mode 100644
index 0000000..4cb3286
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetOperatorIdentification.cs
@@ -0,0 +1,22 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetOperatorIdentification(SqlString deviceName, SqlString operatorId, SqlInt32 password)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).SetOperatorIdentification(null, null, null, null, operatorId.IsNull ? "LOI" : operatorId.Value, Convert.ToUInt16(password.IsNull ? 1000 : password.Value));
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetRealTimeClock.cs b/DeviceSQL.ROCMaster/Functions/SetRealTimeClock.cs
new file mode 100644
index 0000000..3e9db2c
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetRealTimeClock.cs
@@ -0,0 +1,20 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetRealTimeClock(SqlString deviceName, SqlDateTime dateTime)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).SetRealTimeClock(null, null, null, null, dateTime.Value);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetStringValue.cs b/DeviceSQL.ROCMaster/Functions/SetStringValue.cs
new file mode 100644
index 0000000..5b4f5d0
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetStringValue.cs
@@ -0,0 +1,48 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetStringValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlByte stringLength, SqlString value)
+ {
+ //var deviceNameValue = deviceName.Value;
+
+ //if (10 >= stringLength)
+ //{
+ // var ac10Parameter = new Ac10Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac10Parameter);
+ // return true;
+ //}
+ //else if (12 >= stringLength)
+ //{
+ // var ac12Parameter = new Ac12Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac12Parameter);
+ // return true;
+ //}
+ //else if (20 >= stringLength)
+ //{
+ // var ac20Parameter = new Ac20Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac20Parameter);
+ // return true;
+ //}
+ //else
+ //{
+ // var ac30Parameter = new Ac30Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ // (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac30Parameter);
+ // return true;
+ //}
+
+ return true;
+
+ }
+
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetTimeValue.cs b/DeviceSQL.ROCMaster/Functions/SetTimeValue.cs
new file mode 100644
index 0000000..df7f04d
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetTimeValue.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetTimeValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlDateTime value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var timeParameter = new TimeParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, timeParameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetUInt16Value.cs b/DeviceSQL.ROCMaster/Functions/SetUInt16Value.cs
new file mode 100644
index 0000000..9ad2461
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetUInt16Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetUInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt32 value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var uInt16Parameter = new UInt16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = Convert.ToUInt16(value.Value) };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt16Parameter);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.ROCMaster/Functions/SetUInt32Value.cs b/DeviceSQL.ROCMaster/Functions/SetUInt32Value.cs
new file mode 100644
index 0000000..3925a3a
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetUInt32Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetUInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt64 value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var uInt32Parameter = new UInt32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = Convert.ToUInt32(value.Value) };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, uInt32Parameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/SetUInt8Value.cs b/DeviceSQL.ROCMaster/Functions/SetUInt8Value.cs
new file mode 100644
index 0000000..b2b796e
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/SetUInt8Value.cs
@@ -0,0 +1,21 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System.Data.SqlTypes;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean SetUInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlByte value)
+ {
+ //var deviceNameValue = deviceName.Value;
+ //var uInt8Parameter = new UInt8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, uInt8Parameter);
+ return true;
+ }
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Functions/WriteParameters.cs b/DeviceSQL.ROCMaster/Functions/WriteParameters.cs
new file mode 100644
index 0000000..b05a8dc
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Functions/WriteParameters.cs
@@ -0,0 +1,93 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC;
+using Microsoft.SqlServer.Server;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.Functions
+{
+ public partial class ROCMaster
+ {
+ [SqlFunction]
+ public static SqlBoolean WriteParameters(SqlString deviceName, ParameterArray parameterArray)
+ {
+ // var deviceNameValue = deviceName.Value;
+ // var parameters = new List();
+ // var length = parameterArray.Length;
+
+ // for (var parameterIndex = 0; length > parameterIndex; parameterIndex++)
+ // {
+ // var parameter = parameterArray.GetParameter(parameterIndex);
+
+ // switch (parameter.RawType)
+ // {
+ // case ParameterType.AC3:
+ // parameters.Add(new Ac3Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC7:
+ // parameters.Add(new Ac7Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC10:
+ // parameters.Add(new Ac10Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC12:
+ // parameters.Add(new Ac12Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC20:
+ // parameters.Add(new Ac20Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC30:
+ // parameters.Add(new Ac30Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.AC40:
+ // parameters.Add(new Ac40Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.BIN:
+ // parameters.Add(new BinParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.FL:
+ // parameters.Add(new FlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.DOUBLE:
+ // parameters.Add(new DoubleParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.INT16:
+ // parameters.Add(new Int16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.INT32:
+ // parameters.Add(new Int32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.INT8:
+ // parameters.Add(new Int8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.TLP:
+ // parameters.Add(new TlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.UINT16:
+ // parameters.Add(new UInt16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.UINT32:
+ // parameters.Add(new UInt32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.TIME:
+ // parameters.Add(new TimeParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // case ParameterType.UINT8:
+ // parameters.Add(new UInt8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
+ // break;
+ // }
+
+ // }
+
+ //(DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameters(null, null, null, null, parameters);
+
+ return true;
+
+ }
+
+ }
+}
diff --git a/DeviceSQL.ROCMaster/Properties/AssemblyInfo.cs b/DeviceSQL.ROCMaster/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..d624602
--- /dev/null
+++ b/DeviceSQL.ROCMaster/Properties/AssemblyInfo.cs
@@ -0,0 +1,24 @@
+using System.Reflection;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with the SQLCLR assembly.
+[assembly: AssemblyTitle("DeviceSQL.ROCMaster")]
+[assembly: AssemblyDescription("DeviceSQL.ROCMaster")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL/Schemas/ROCMaster.sql b/DeviceSQL.ROCMaster/Schemas/ROCMaster.sql
similarity index 100%
rename from DeviceSQL/Schemas/ROCMaster.sql
rename to DeviceSQL.ROCMaster/Schemas/ROCMaster.sql
diff --git a/DeviceSQL.SQLTypes.Modbus/BooleanRegister.cs b/DeviceSQL.SQLTypes.Modbus/BooleanRegister.cs
new file mode 100644
index 0000000..e00f631
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/BooleanRegister.cs
@@ -0,0 +1,131 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 8)]
+ public struct BooleanRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[1];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlBoolean Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.BooleanRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value)).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.BooleanRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value)) { Value = value.Value }.Data;
+ }
+ }
+
+ public static BooleanRegister Null
+ {
+ get
+ {
+ return (new BooleanRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Value={1};", Address.ToString(), Value.Value);
+ }
+ }
+
+ public static BooleanRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedBooleanRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedBooleanRegister = new BooleanRegister() { Address = ModbusAddress.Parse(parsedBooleanRegisterData[0]), Value = bool.Parse(parsedBooleanRegisterData[1]) };
+ return parsedBooleanRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ Data = binaryReader.ReadBytes(1);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(Data.Value, 0, 1);
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/BooleanRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/BooleanRegisterArray.cs
new file mode 100644
index 0000000..5ba1379
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/BooleanRegisterArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct BooleanRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private List booleanRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal BooleanRegister this[int index]
+ {
+ get
+ {
+ return BooleanRegisters[index];
+ }
+ set
+ {
+ BooleanRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return BooleanRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List BooleanRegisters
+ {
+ get
+ {
+ if (booleanRegisters == null)
+ {
+ booleanRegisters = new List();
+ }
+ return booleanRegisters;
+ }
+ }
+
+ public static BooleanRegisterArray Null
+ {
+ get
+ {
+ return (new BooleanRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", BooleanRegisters.Select(booleanRegister => booleanRegister.ToString()));
+ }
+
+ public BooleanRegisterArray AddBooleanRegister(BooleanRegister booleanRegister)
+ {
+ BooleanRegisters.Add(booleanRegister);
+ return this;
+ }
+
+ public static BooleanRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedBooleanRegisterArray = new BooleanRegisterArray()
+ {
+ booleanRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedBooleanRegisterArray.BooleanRegisters.Add(BooleanRegister.Parse(parsedString[i]));
+ }
+
+ return parsedBooleanRegisterArray;
+ }
+
+ public BooleanRegister GetBooleanRegister(SqlInt32 index)
+ {
+ return BooleanRegisters[index.Value];
+ }
+
+ public static BooleanRegisterArray Empty()
+ {
+ var booleanRegisterArray = new BooleanRegisterArray() { booleanRegisters = new List() };
+ return booleanRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ BooleanRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var booleanRegister = new BooleanRegister();
+ booleanRegister.Read(binaryReader);
+ BooleanRegisters.Add(booleanRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; BooleanRegisters.Count > i; i++)
+ {
+ BooleanRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/CoilRegister.cs b/DeviceSQL.SQLTypes.Modbus/CoilRegister.cs
new file mode 100644
index 0000000..d7e5218
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/CoilRegister.cs
@@ -0,0 +1,131 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 8)]
+ public struct CoilRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[1];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlBoolean Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.CoilRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value)).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.CoilRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value)) { Value = value.Value }.Data;
+ }
+ }
+
+ public static CoilRegister Null
+ {
+ get
+ {
+ return (new CoilRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Value={1};", Address.ToString(), Value.Value);
+ }
+ }
+
+ public static CoilRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedCoilRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedCoilRegister = new CoilRegister() { Address = ModbusAddress.Parse(parsedCoilRegisterData[0]), Value = bool.Parse(parsedCoilRegisterData[1]) };
+ return parsedCoilRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ Data = binaryReader.ReadBytes(1);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(Data.Value, 0, 1);
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/CoilRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/CoilRegisterArray.cs
new file mode 100644
index 0000000..baad80a
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/CoilRegisterArray.cs
@@ -0,0 +1,164 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct CoilRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List coilRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal CoilRegister this[int index]
+ {
+ get
+ {
+ return CoilRegisters[index];
+ }
+ set
+ {
+ CoilRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return CoilRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List CoilRegisters
+ {
+ get
+ {
+ if (coilRegisters == null)
+ {
+ coilRegisters = new List();
+ }
+ return coilRegisters;
+ }
+ }
+
+ public static CoilRegisterArray Null
+ {
+ get
+ {
+ return (new CoilRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", CoilRegisters.Select(coilRegister => coilRegister.ToString()));
+ }
+
+ public CoilRegisterArray AddCoilRegister(CoilRegister coilRegister)
+ {
+ CoilRegisters.Add(coilRegister);
+ return this;
+ }
+
+ public static CoilRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedCoilRegisterArray = new CoilRegisterArray()
+ {
+ coilRegisters = new List()
+ };
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedCoilRegisterArray.CoilRegisters.Add(CoilRegister.Parse(parsedString[i]));
+ }
+
+ return parsedCoilRegisterArray;
+ }
+
+ public CoilRegister GetCoilRegister(SqlInt32 index)
+ {
+ return CoilRegisters[index.Value];
+ }
+
+ public static CoilRegisterArray Empty()
+ {
+ var coilRegisterArray = new CoilRegisterArray() { coilRegisters = new List() };
+ return coilRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ CoilRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var coilRegister = new CoilRegister();
+ coilRegister.Read(binaryReader);
+ CoilRegisters.Add(coilRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; CoilRegisters.Count > i; i++)
+ {
+ CoilRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/DeviceSQL.SQLTypes.Modbus.csproj b/DeviceSQL.SQLTypes.Modbus/DeviceSQL.SQLTypes.Modbus.csproj
new file mode 100644
index 0000000..e974366
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/DeviceSQL.SQLTypes.Modbus.csproj
@@ -0,0 +1,122 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}
+ Library
+ Properties
+ DeviceSQL.SQLTypes.Modbus
+ DeviceSQL.SQLTypes.Modbus
+ v4.8
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Devices\BooleanRegister.cs
+
+
+ Devices\CoilRegister.cs
+
+
+ Devices\DiscreteInputRegister.cs
+
+
+ Devices\EventArchiveRecord.cs
+
+
+ Devices\FloatRegister.cs
+
+
+ Devices\HistoryArchiveRecord.cs
+
+
+ Devices\HoldingRegister.cs
+
+
+ Devices\IModbusRegisterData.cs
+
+
+ Devices\InputRegister.cs
+
+
+ Devices\LongRegister.cs
+
+
+ Devices\ModbusAddress.cs
+
+
+ Devices\ModbusRegister.cs
+
+
+ Devices\ShortRegister.cs
+
+
+ Devices\StringRegister.cs
+
+
+ Devices\ModbusConverter.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/DiscreteInputRegister.cs b/DeviceSQL.SQLTypes.Modbus/DiscreteInputRegister.cs
new file mode 100644
index 0000000..d1ed073
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/DiscreteInputRegister.cs
@@ -0,0 +1,131 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 8)]
+ public struct DiscreteInputRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[1];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlBoolean Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.DiscreteInputRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value)).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.DiscreteInputRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value)) { Value = value.Value }.Data;
+ }
+ }
+
+ public static DiscreteInputRegister Null
+ {
+ get
+ {
+ return (new DiscreteInputRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Value={1};", Address.ToString(), Value.Value);
+ }
+ }
+
+ public static DiscreteInputRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedDiscreteInputRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedDiscreteInputRegister = new DiscreteInputRegister() { Address = ModbusAddress.Parse(parsedDiscreteInputRegisterData[0]), Value = bool.Parse(parsedDiscreteInputRegisterData[1]) };
+ return parsedDiscreteInputRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ Data = binaryReader.ReadBytes(1);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(Data.Value, 0, 1);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/DiscreteInputRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/DiscreteInputRegisterArray.cs
new file mode 100644
index 0000000..406c48b
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/DiscreteInputRegisterArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct DiscreteInputRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List discreteInputRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal DiscreteInputRegister this[int index]
+ {
+ get
+ {
+ return DiscreteInputRegisters[index];
+ }
+ set
+ {
+ DiscreteInputRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return DiscreteInputRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List DiscreteInputRegisters
+ {
+ get
+ {
+ if (discreteInputRegisters == null)
+ {
+ discreteInputRegisters = new List();
+ }
+ return discreteInputRegisters;
+ }
+ }
+
+ public static DiscreteInputRegisterArray Null
+ {
+ get
+ {
+ return (new DiscreteInputRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", DiscreteInputRegisters.Select(discreteInputRegister => discreteInputRegister.ToString()));
+ }
+
+ public DiscreteInputRegisterArray AddDiscreteInputRegister(DiscreteInputRegister discreteInputRegister)
+ {
+ DiscreteInputRegisters.Add(discreteInputRegister);
+ return this;
+ }
+
+ public static DiscreteInputRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedDiscreteInputRegisterArray = new DiscreteInputRegisterArray()
+ {
+ discreteInputRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedDiscreteInputRegisterArray.DiscreteInputRegisters.Add(DiscreteInputRegister.Parse(parsedString[i]));
+ }
+
+ return parsedDiscreteInputRegisterArray;
+ }
+
+ public DiscreteInputRegister GetDiscreteInputRegister(SqlInt32 index)
+ {
+ return DiscreteInputRegisters[index.Value];
+ }
+
+ public static DiscreteInputRegisterArray Empty()
+ {
+ var discreteInputRegisterArray = new DiscreteInputRegisterArray() { discreteInputRegisters = new List() };
+ return discreteInputRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ DiscreteInputRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var discreteInputRegister = new DiscreteInputRegister();
+ discreteInputRegister.Read(binaryReader);
+ DiscreteInputRegisters.Add(discreteInputRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; DiscreteInputRegisters.Count > i; i++)
+ {
+ DiscreteInputRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/EventArchiveRecord.cs b/DeviceSQL.SQLTypes.Modbus/EventArchiveRecord.cs
new file mode 100644
index 0000000..534ce0a
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/EventArchiveRecord.cs
@@ -0,0 +1,145 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 264)]
+ public struct EventArchiveRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[Length.Value];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ Length = data.Length;
+ }
+ }
+
+ public SqlInt32 Index
+ {
+ get;
+ set;
+ }
+
+ public SqlInt32 Length
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlInt16 GetShortValue(SqlByte index, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ return new DeviceSQL.Device.MODBUS.Data.EventArchiveRecord(Convert.ToUInt16(Index), Data.Value).GetShortValue(index.Value, byteSwap.Value);
+ }
+
+ public static SqlDateTime GetDateTimeValue(SqlSingle dateValue, SqlSingle timeValue, SqlInt32 baseYear)
+ {
+ var dateTime = DeviceSQL.Device.MODBUS.Data.EventArchiveRecord.ParseNullableDateTimeValue(dateValue.Value, timeValue.Value, baseYear.Value);
+ return dateTime ?? SqlDateTime.Null;
+ }
+
+ public SqlSingle GetFloatValue(SqlByte index, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ var floatValue = new DeviceSQL.Device.MODBUS.Data.EventArchiveRecord(Convert.ToUInt16(Index), Data.Value).GetNullableFloatValue(index.Value, byteSwap.Value, wordSwap.Value);
+ return floatValue ?? SqlSingle.Null;
+ }
+
+ public static EventArchiveRecord Null
+ {
+ get
+ {
+ return (new EventArchiveRecord() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Index={0};Length={1};Value={2};", Index, Length, Convert.ToBase64String(Data.Value));
+ }
+ }
+
+ public static EventArchiveRecord Parse(SqlString eventArchiveToParse)
+ {
+ if (eventArchiveToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedEventArchiveRecordData = eventArchiveToParse.Value.Split(",".ToCharArray());
+ var parsedEventArchiveRecord = new EventArchiveRecord() { Index = Int32.Parse(parsedEventArchiveRecordData[0]), Length = Int32.Parse(parsedEventArchiveRecordData[1]), Data = Convert.FromBase64String(parsedEventArchiveRecordData[2]) };
+ return parsedEventArchiveRecord;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Index = binaryReader.ReadInt32();
+ Length = binaryReader.ReadByte();
+ Data = binaryReader.ReadBytes(Length.Value);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ binaryWriter.Write(Index.Value);
+ binaryWriter.Write(Length.Value);
+ binaryWriter.Write(Data.Value, 0, Length.Value);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/EventArchiveRecordArray.cs b/DeviceSQL.SQLTypes.Modbus/EventArchiveRecordArray.cs
new file mode 100644
index 0000000..7e7d466
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/EventArchiveRecordArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct EventArchiveRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List eventArchiveRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal EventArchiveRecord this[int index]
+ {
+ get
+ {
+ return EventArchiveRecords[index];
+ }
+ set
+ {
+ EventArchiveRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return EventArchiveRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List EventArchiveRecords
+ {
+ get
+ {
+ if (eventArchiveRecords == null)
+ {
+ eventArchiveRecords = new List();
+ }
+ return eventArchiveRecords;
+ }
+ }
+
+ public static EventArchiveRecordArray Null
+ {
+ get
+ {
+ return (new EventArchiveRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", EventArchiveRecords.Select(eventArchiveRecord => eventArchiveRecord.ToString()));
+ }
+
+ public EventArchiveRecordArray AddEventArchiveRecord(EventArchiveRecord eventArchiveRecord)
+ {
+ EventArchiveRecords.Add(eventArchiveRecord);
+ return this;
+ }
+
+ public static EventArchiveRecordArray Parse(SqlString eventArchiveToParse)
+ {
+ if (eventArchiveToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedEventArchiveRecordArray = new EventArchiveRecordArray()
+ {
+ eventArchiveRecords = new List()
+ };
+
+ var parsedEventArchive = eventArchiveToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedEventArchive.Length > i; i++)
+ {
+ parsedEventArchiveRecordArray.EventArchiveRecords.Add(EventArchiveRecord.Parse(parsedEventArchive[i]));
+ }
+
+ return parsedEventArchiveRecordArray;
+ }
+
+ public EventArchiveRecord GetEventArchiveRecord(SqlInt32 index)
+ {
+ return EventArchiveRecords[index.Value];
+ }
+
+ public static EventArchiveRecordArray Empty()
+ {
+ var eventArchiveRecordArray = new EventArchiveRecordArray() { eventArchiveRecords = new List() };
+ return eventArchiveRecordArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ EventArchiveRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var eventArchiveRecord = new EventArchiveRecord();
+ eventArchiveRecord.Read(binaryReader);
+ EventArchiveRecords.Add(eventArchiveRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; EventArchiveRecords.Count > i; i++)
+ {
+ EventArchiveRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/FloatRegister.cs b/DeviceSQL.SQLTypes.Modbus/FloatRegister.cs
new file mode 100644
index 0000000..302e3e8
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/FloatRegister.cs
@@ -0,0 +1,147 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 13)]
+ public struct FloatRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[4];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean ByteSwap
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean WordSwap
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlSingle Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.FloatRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value, WordSwap.Value).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.FloatRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value, WordSwap.Value) { Value = Convert.ToUInt16(value) }.Data;
+ }
+ }
+
+ public static FloatRegister Null
+ {
+ get
+ {
+ return (new FloatRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Byte Swap={1};Word Swap={2};Value={3};", Address.ToString(), ByteSwap.Value, Value.Value);
+ }
+ }
+
+ public static FloatRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedFloatRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedFloatRegister = new FloatRegister() { Address = ModbusAddress.Parse(parsedFloatRegisterData[0]), ByteSwap = bool.Parse(parsedFloatRegisterData[1]), WordSwap = bool.Parse(parsedFloatRegisterData[2]), Value = Int32.Parse(parsedFloatRegisterData[3]) };
+ return parsedFloatRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ ByteSwap = binaryReader.ReadBoolean();
+ WordSwap = binaryReader.ReadBoolean();
+ Data = binaryReader.ReadBytes(4);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(ByteSwap.Value);
+ binaryWriter.Write(WordSwap.Value);
+ binaryWriter.Write(Data.Value, 0, 4);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/FloatRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/FloatRegisterArray.cs
new file mode 100644
index 0000000..d079736
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/FloatRegisterArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct FloatRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List floatRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal FloatRegister this[int index]
+ {
+ get
+ {
+ return FloatRegisters[index];
+ }
+ set
+ {
+ FloatRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return FloatRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List FloatRegisters
+ {
+ get
+ {
+ if (floatRegisters == null)
+ {
+ floatRegisters = new List();
+ }
+ return floatRegisters;
+ }
+ }
+
+ public static FloatRegisterArray Null
+ {
+ get
+ {
+ return (new FloatRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", FloatRegisters.Select(floatRegister => floatRegister.ToString()));
+ }
+
+ public FloatRegisterArray AddFloatRegister(FloatRegister floatRegister)
+ {
+ FloatRegisters.Add(floatRegister);
+ return this;
+ }
+
+ public static FloatRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedFloatRegisterArray = new FloatRegisterArray()
+ {
+ floatRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedFloatRegisterArray.FloatRegisters.Add(FloatRegister.Parse(parsedString[i]));
+ }
+
+ return parsedFloatRegisterArray;
+ }
+
+ public FloatRegister GetFloatRegister(SqlInt32 index)
+ {
+ return FloatRegisters[index.Value];
+ }
+
+ public static FloatRegisterArray Empty()
+ {
+ var floatRegisterArray = new FloatRegisterArray() { floatRegisters = new List() };
+ return floatRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ FloatRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var floatRegister = new FloatRegister();
+ floatRegister.Read(binaryReader);
+ FloatRegisters.Add(floatRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; FloatRegisters.Count > i; i++)
+ {
+ FloatRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/HistoryArchiveRecord.cs b/DeviceSQL.SQLTypes.Modbus/HistoryArchiveRecord.cs
new file mode 100644
index 0000000..24e3710
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/HistoryArchiveRecord.cs
@@ -0,0 +1,140 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 264)]
+ public struct HistoryArchiveRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[Length.Value];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ Length = data.Length;
+ }
+ }
+
+ public SqlInt32 Index
+ {
+ get;
+ set;
+ }
+
+ public SqlInt32 Length
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public static HistoryArchiveRecord Null
+ {
+ get
+ {
+ return (new HistoryArchiveRecord() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public SqlSingle GetFloatValue(SqlByte index, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ var floatValue = new DeviceSQL.Device.MODBUS.Data.HistoryArchiveRecord(Convert.ToUInt16(Index), Data.Value).GetNullableFloatValue(index.Value, byteSwap.Value, wordSwap.Value);
+ return floatValue ?? SqlSingle.Null;
+ }
+
+ public static SqlDateTime GetDateTimeValue(SqlSingle dateValue, SqlSingle timeValue, SqlInt32 baseYear)
+ {
+ var dateTime = DeviceSQL.Device.MODBUS.Data.HistoryArchiveRecord.ParseNullableDateTimeValue(dateValue.Value, timeValue.Value, baseYear.Value);
+ return dateTime ?? SqlDateTime.Null;
+ }
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Index={0};Length={1};Value={2};", Index, Length, Convert.ToBase64String(Data.Value));
+ }
+ }
+
+ public static HistoryArchiveRecord Parse(SqlString historyArchiveToParse)
+ {
+ if (historyArchiveToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedHistoryArchiveRecordData = historyArchiveToParse.Value.Split(",".ToCharArray());
+ var parsedHistoryArchiveRecord = new HistoryArchiveRecord() { Index = Int32.Parse(parsedHistoryArchiveRecordData[0]), Length = Int32.Parse(parsedHistoryArchiveRecordData[1]), Data = Convert.FromBase64String(parsedHistoryArchiveRecordData[2]) };
+ return parsedHistoryArchiveRecord;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Index = binaryReader.ReadInt32();
+ Length = binaryReader.ReadByte();
+ Data = binaryReader.ReadBytes(Length.Value);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ binaryWriter.Write(Index.Value);
+ binaryWriter.Write(Length.Value);
+ binaryWriter.Write(Data.Value, 0, Length.Value);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/HistoryArchiveRecordArray.cs b/DeviceSQL.SQLTypes.Modbus/HistoryArchiveRecordArray.cs
new file mode 100644
index 0000000..e187bd4
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/HistoryArchiveRecordArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct HistoryArchiveRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List historyArchiveRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal HistoryArchiveRecord this[int index]
+ {
+ get
+ {
+ return HistoryArchiveRecords[index];
+ }
+ set
+ {
+ HistoryArchiveRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return HistoryArchiveRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List HistoryArchiveRecords
+ {
+ get
+ {
+ if (historyArchiveRecords == null)
+ {
+ historyArchiveRecords = new List();
+ }
+ return historyArchiveRecords;
+ }
+ }
+
+ public static HistoryArchiveRecordArray Null
+ {
+ get
+ {
+ return (new HistoryArchiveRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", HistoryArchiveRecords.Select(historyArchiveRecord => historyArchiveRecord.ToString()));
+ }
+
+ public HistoryArchiveRecordArray AddHistoryArchiveRecord(HistoryArchiveRecord historyArchiveRecord)
+ {
+ HistoryArchiveRecords.Add(historyArchiveRecord);
+ return this;
+ }
+
+ public static HistoryArchiveRecordArray Parse(SqlString historyArchiveToParse)
+ {
+ if (historyArchiveToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedHistoryArchiveRecordArray = new HistoryArchiveRecordArray()
+ {
+ historyArchiveRecords = new List()
+ };
+
+ var parsedHistoryArchive = historyArchiveToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedHistoryArchive.Length > i; i++)
+ {
+ parsedHistoryArchiveRecordArray.HistoryArchiveRecords.Add(HistoryArchiveRecord.Parse(parsedHistoryArchive[i]));
+ }
+
+ return parsedHistoryArchiveRecordArray;
+ }
+
+ public HistoryArchiveRecord GetHistoryArchiveRecord(SqlInt32 index)
+ {
+ return HistoryArchiveRecords[index.Value];
+ }
+
+ public static HistoryArchiveRecordArray Empty()
+ {
+ var historyArchiveRecordArray = new HistoryArchiveRecordArray() { historyArchiveRecords = new List() };
+ return historyArchiveRecordArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ HistoryArchiveRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var historyArchiveRecord = new HistoryArchiveRecord();
+ historyArchiveRecord.Read(binaryReader);
+ HistoryArchiveRecords.Add(historyArchiveRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; HistoryArchiveRecords.Count > i; i++)
+ {
+ HistoryArchiveRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/HoldingRegister.cs b/DeviceSQL.SQLTypes.Modbus/HoldingRegister.cs
new file mode 100644
index 0000000..d351384
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/HoldingRegister.cs
@@ -0,0 +1,139 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 10)]
+ public struct HoldingRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[2];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean ByteSwap
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlInt32 Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.HoldingRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.HoldingRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value) { Value = Convert.ToUInt16((int)value) }.Data;
+ }
+ }
+
+ public static HoldingRegister Null
+ {
+ get
+ {
+ return (new HoldingRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Byte Swap={1};Value={2};", Address.ToString(), ByteSwap.Value, Value.Value);
+ }
+ }
+
+ public static HoldingRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedHoldingRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedHoldingRegister = new HoldingRegister() { Address = ModbusAddress.Parse(parsedHoldingRegisterData[0]), ByteSwap = bool.Parse(parsedHoldingRegisterData[1]), Value = UInt16.Parse(parsedHoldingRegisterData[2]) };
+ return parsedHoldingRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ ByteSwap = binaryReader.ReadBoolean();
+ Data = binaryReader.ReadBytes(2);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(ByteSwap.Value);
+ binaryWriter.Write(Data.Value, 0, 2);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/HoldingRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/HoldingRegisterArray.cs
new file mode 100644
index 0000000..063d337
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/HoldingRegisterArray.cs
@@ -0,0 +1,208 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct HoldingRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List holdingRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal HoldingRegister this[int index]
+ {
+ get
+ {
+ return HoldingRegisters[index];
+ }
+ set
+ {
+ HoldingRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return HoldingRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public SqlByte GetByte(SqlByte registerIndex, SqlInt32 offset)
+ {
+ return HoldingRegisters[registerIndex.Value].data[offset.Value];
+ }
+
+ public SqlBinary GetBytes(SqlByte registerIndex, SqlInt32 registerCount)
+ {
+ var bytes = new List();
+
+ for (var i = 0; registerCount.Value > i; i++)
+ {
+ bytes.AddRange(HoldingRegisters[i].Data.Value);
+ }
+
+ return bytes.ToArray();
+
+ }
+
+ public SqlInt16 GetShort(SqlByte registerIndex, SqlBoolean byteSwap)
+ {
+ var address = HoldingRegisters[registerIndex.Value].Address;
+ return new DeviceSQL.Device.MODBUS.Data.ShortRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value)) { ByteSwap = byteSwap.Value, Data = holdingRegisters[Convert.ToByte(registerIndex.Value)].data }.Value;
+ }
+
+ public SqlSingle GetFloat(SqlByte registerIndex, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ var address = HoldingRegisters[registerIndex.Value].Address;
+ var floatRegisterValue = new DeviceSQL.Device.MODBUS.Data.FloatRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value)) { ByteSwap = byteSwap.Value, WordSwap = wordSwap.Value, Data = holdingRegisters[Convert.ToByte(registerIndex.Value)].data.Concat(holdingRegisters[Convert.ToByte(registerIndex.Value + 1)].data).ToArray(), }.NullableValue;
+ return floatRegisterValue ?? SqlSingle.Null;
+ }
+
+ public SqlInt32 GetLong(SqlByte registerIndex, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ var address = HoldingRegisters[registerIndex.Value].Address;
+ return new DeviceSQL.Device.MODBUS.Data.LongRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value)) { ByteSwap = byteSwap.Value, WordSwap = wordSwap.Value, Data = holdingRegisters[Convert.ToByte(registerIndex.Value)].data.Concat(holdingRegisters[Convert.ToByte(registerIndex.Value + 1)].data).ToArray(), }.Value;
+ }
+
+ public SqlString GetString(SqlByte registerIndex, SqlBoolean byteSwap, SqlBoolean wordSwap, SqlByte length)
+ {
+ var address = HoldingRegisters[registerIndex.Value].Address;
+ return new DeviceSQL.Device.MODBUS.Data.StringRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value), length.Value) { ByteSwap = byteSwap.Value, WordSwap = wordSwap.Value, Data = holdingRegisters[Convert.ToByte(registerIndex.Value)].data.Concat(holdingRegisters[Convert.ToByte(registerIndex.Value + 1)].data).ToArray(), }.Value;
+ }
+
+ private List HoldingRegisters
+ {
+ get
+ {
+ if (holdingRegisters == null)
+ {
+ holdingRegisters = new List();
+ }
+ return holdingRegisters;
+ }
+ }
+
+ public static HoldingRegisterArray Null
+ {
+ get
+ {
+ return (new HoldingRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", HoldingRegisters.Select(holdingRegister => holdingRegister.ToString()));
+ }
+
+ public HoldingRegisterArray AddHoldingRegister(HoldingRegister holdingRegister)
+ {
+ HoldingRegisters.Add(holdingRegister);
+ return this;
+ }
+
+ public static HoldingRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedHoldingRegisterArray = new HoldingRegisterArray()
+ {
+ holdingRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedHoldingRegisterArray.HoldingRegisters.Add(HoldingRegister.Parse(parsedString[i]));
+ }
+
+ return parsedHoldingRegisterArray;
+ }
+
+ public HoldingRegister GetHoldingRegister(SqlInt32 index)
+ {
+ return HoldingRegisters[index.Value];
+ }
+
+ public static HoldingRegisterArray Empty()
+ {
+ var holdingRegisterArray = new HoldingRegisterArray() { holdingRegisters = new List() };
+ return holdingRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ HoldingRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var holdingRegister = new HoldingRegister();
+ holdingRegister.Read(binaryReader);
+ HoldingRegisters.Add(holdingRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; HoldingRegisters.Count > i; i++)
+ {
+ HoldingRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/InputRegister.cs b/DeviceSQL.SQLTypes.Modbus/InputRegister.cs
new file mode 100644
index 0000000..b688321
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/InputRegister.cs
@@ -0,0 +1,139 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 10)]
+ public struct InputRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[2];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean ByteSwap
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlInt32 Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.InputRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.InputRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value) { Value = Convert.ToUInt16((int)value) }.Data;
+ }
+ }
+
+ public static InputRegister Null
+ {
+ get
+ {
+ return (new InputRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Byte Swap={1};Value={2};", Address.ToString(), ByteSwap.Value, Value.Value);
+ }
+ }
+
+ public static InputRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedInputRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedInputRegister = new InputRegister() { Address = ModbusAddress.Parse(parsedInputRegisterData[0]), ByteSwap = bool.Parse(parsedInputRegisterData[1]), Value = UInt16.Parse(parsedInputRegisterData[2]) };
+ return parsedInputRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ ByteSwap = binaryReader.ReadBoolean();
+ Data = binaryReader.ReadBytes(2);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(ByteSwap.Value);
+ binaryWriter.Write(Data.Value, 0, 2);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/InputRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/InputRegisterArray.cs
new file mode 100644
index 0000000..0930359
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/InputRegisterArray.cs
@@ -0,0 +1,208 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct InputRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List inputRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal InputRegister this[int index]
+ {
+ get
+ {
+ return InputRegisters[index];
+ }
+ set
+ {
+ InputRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return InputRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public SqlByte GetByte(SqlByte registerIndex, SqlInt32 offset)
+ {
+ return InputRegisters[registerIndex.Value].data[offset.Value];
+ }
+
+ public SqlBinary GetBytes(SqlByte registerIndex, SqlInt32 registerCount)
+ {
+ var bytes = new List();
+
+ for (var i = 0; registerCount.Value > i; i++)
+ {
+ bytes.AddRange(InputRegisters[i].Data.Value);
+ }
+
+ return bytes.ToArray();
+
+ }
+
+ public SqlInt16 GetShort(SqlByte registerIndex, SqlBoolean byteSwap)
+ {
+ var address = InputRegisters[registerIndex.Value].Address;
+ return new DeviceSQL.Device.MODBUS.Data.ShortRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value)) { ByteSwap = byteSwap.Value, Data = inputRegisters[Convert.ToByte(registerIndex.Value)].data }.Value;
+ }
+
+ public SqlSingle GetFloat(SqlByte registerIndex, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ var address = InputRegisters[registerIndex.Value].Address;
+ var floatRegisterValue = new DeviceSQL.Device.MODBUS.Data.FloatRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value)) { ByteSwap = byteSwap.Value, WordSwap = wordSwap.Value, Data = inputRegisters[Convert.ToByte(registerIndex.Value)].data.Concat(inputRegisters[Convert.ToByte(registerIndex.Value + 1)].data).ToArray(), }.NullableValue;
+ return floatRegisterValue ?? SqlSingle.Null;
+ }
+
+ public SqlInt32 GetLong(SqlByte registerIndex, SqlBoolean byteSwap, SqlBoolean wordSwap)
+ {
+ var address = InputRegisters[registerIndex.Value].Address;
+ return new DeviceSQL.Device.MODBUS.Data.LongRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value)) { ByteSwap = byteSwap.Value, WordSwap = wordSwap.Value, Data = inputRegisters[Convert.ToByte(registerIndex.Value)].data.Concat(inputRegisters[Convert.ToByte(registerIndex.Value + 1)].data).ToArray(), }.Value;
+ }
+
+ public SqlString GetString(SqlByte registerIndex, SqlBoolean byteSwap, SqlBoolean wordSwap, SqlByte length)
+ {
+ var address = InputRegisters[registerIndex.Value].Address;
+ return new DeviceSQL.Device.MODBUS.Data.StringRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(address.RelativeAddress.Value), address.IsZeroBased.Value), length.Value) { ByteSwap = byteSwap.Value, WordSwap = wordSwap.Value, Data = inputRegisters[Convert.ToByte(registerIndex.Value)].data.Concat(inputRegisters[Convert.ToByte(registerIndex.Value + 1)].data).ToArray(), }.Value;
+ }
+
+ private List InputRegisters
+ {
+ get
+ {
+ if (inputRegisters == null)
+ {
+ inputRegisters = new List();
+ }
+ return inputRegisters;
+ }
+ }
+
+ public static InputRegisterArray Null
+ {
+ get
+ {
+ return (new InputRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", InputRegisters.Select(inputRegister => inputRegister.ToString()));
+ }
+
+ public InputRegisterArray AddInputRegister(InputRegister inputRegister)
+ {
+ InputRegisters.Add(inputRegister);
+ return this;
+ }
+
+ public static InputRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedInputRegisterArray = new InputRegisterArray()
+ {
+ inputRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedInputRegisterArray.InputRegisters.Add(InputRegister.Parse(parsedString[i]));
+ }
+
+ return parsedInputRegisterArray;
+ }
+
+ public InputRegister GetInputRegister(SqlInt32 index)
+ {
+ return InputRegisters[index.Value];
+ }
+
+ public static InputRegisterArray Empty()
+ {
+ var inputRegisterArray = new InputRegisterArray() { inputRegisters = new List() };
+ return inputRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ InputRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var inputRegister = new InputRegister();
+ inputRegister.Read(binaryReader);
+ InputRegisters.Add(inputRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; InputRegisters.Count > i; i++)
+ {
+ InputRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/LongRegister.cs b/DeviceSQL.SQLTypes.Modbus/LongRegister.cs
new file mode 100644
index 0000000..e28fa93
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/LongRegister.cs
@@ -0,0 +1,147 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 13)]
+ public struct LongRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[4];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean ByteSwap
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean WordSwap
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlInt32 Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.LongRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value, WordSwap.Value).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.LongRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value, WordSwap.Value) { Value = Convert.ToUInt16(value) }.Data;
+ }
+ }
+
+ public static LongRegister Null
+ {
+ get
+ {
+ return (new LongRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Byte Swap={1};Word Swap={2};Value={3};", Address.ToString(), ByteSwap.Value, WordSwap.Value, Value.Value);
+ }
+ }
+
+ public static LongRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedLongRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedLongRegister = new LongRegister() { Address = ModbusAddress.Parse(parsedLongRegisterData[0]), ByteSwap = bool.Parse(parsedLongRegisterData[1]), WordSwap = bool.Parse(parsedLongRegisterData[2]), Value = Int32.Parse(parsedLongRegisterData[3]) };
+ return parsedLongRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ ByteSwap = binaryReader.ReadBoolean();
+ WordSwap = binaryReader.ReadBoolean();
+ Data = binaryReader.ReadBytes(4);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(ByteSwap.Value);
+ binaryWriter.Write(WordSwap.Value);
+ binaryWriter.Write(Data.Value, 0, 4);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.Modbus/LongRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/LongRegisterArray.cs
new file mode 100644
index 0000000..83eb1fc
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/LongRegisterArray.cs
@@ -0,0 +1,166 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct LongRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List longRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal LongRegister this[int index]
+ {
+ get
+ {
+ return LongRegisters[index];
+ }
+ set
+ {
+ LongRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return LongRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List LongRegisters
+ {
+ get
+ {
+ if (longRegisters == null)
+ {
+ longRegisters = new List();
+ }
+ return longRegisters;
+ }
+ }
+
+ public static LongRegisterArray Null
+ {
+ get
+ {
+ return (new LongRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", LongRegisters.Select(longRegister => longRegister.ToString()));
+ }
+
+ public LongRegisterArray AddLongRegister(LongRegister longRegister)
+ {
+ LongRegisters.Add(longRegister);
+ return this;
+ }
+
+ public static LongRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedLongRegisterArray = new LongRegisterArray()
+ {
+ longRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedLongRegisterArray.LongRegisters.Add(LongRegister.Parse(parsedString[i]));
+ }
+
+ return parsedLongRegisterArray;
+ }
+
+ public LongRegister GetLongRegister(SqlInt32 index)
+ {
+ return LongRegisters[index.Value];
+ }
+
+ public static LongRegisterArray Empty()
+ {
+ var longRegisterArray = new LongRegisterArray() { longRegisters = new List() };
+ return longRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ LongRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var longRegister = new LongRegister();
+ longRegister.Read(binaryReader);
+ LongRegisters.Add(longRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; LongRegisters.Count > i; i++)
+ {
+ LongRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
+
diff --git a/DeviceSQL.SQLTypes.Modbus/ModbusAddress.cs b/DeviceSQL.SQLTypes.Modbus/ModbusAddress.cs
new file mode 100644
index 0000000..a244eb6
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/ModbusAddress.cs
@@ -0,0 +1,118 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 6)]
+ public struct ModbusAddress : INullable, IBinarySerialize
+ {
+
+ #region Properties
+
+ public SqlInt32 AbsoluteAddress
+ {
+ get
+ {
+ if (this.IsZeroBased)
+ {
+ return (ushort)(this.RelativeAddress - 1);
+ }
+ else
+ {
+ return (ushort)(this.RelativeAddress);
+ }
+ }
+ }
+
+ public SqlInt32 RelativeAddress
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean IsZeroBased
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public static ModbusAddress Null
+ {
+ get
+ {
+ return (new ModbusAddress() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Is Zero Based={0};Relative Address={1};Absolute Address={2}", IsZeroBased, RelativeAddress, AbsoluteAddress);
+ }
+ }
+
+ public static ModbusAddress Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedMODBUSAddressData = stringToParse.Value.Split(";".ToCharArray());
+ var parsedMODBUSAddress = new ModbusAddress() { IsZeroBased = bool.Parse(parsedMODBUSAddressData[0]), RelativeAddress = int.Parse(parsedMODBUSAddressData[1]) };
+ return parsedMODBUSAddress;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ IsZeroBased = binaryReader.ReadBoolean();
+ RelativeAddress = binaryReader.ReadInt32();
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ binaryWriter.Write(IsZeroBased.Value);
+ binaryWriter.Write(RelativeAddress.Value);
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/Properties/AssemblyInfo.cs b/DeviceSQL.SQLTypes.Modbus/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..2569f66
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DeviceSQL.SQLTypes.Modbus")]
+[assembly: AssemblyDescription("DeviceSQL.SQLTypes.Modbus")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("cd45d76e-d2ed-4587-9873-f35ad24e42a5")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL.SQLTypes.Modbus/ShortRegister.cs b/DeviceSQL.SQLTypes.Modbus/ShortRegister.cs
new file mode 100644
index 0000000..b940a50
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/ShortRegister.cs
@@ -0,0 +1,139 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 10)]
+ public struct ShortRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[2];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ }
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public SqlBoolean ByteSwap
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlInt32 Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.ShortRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.ShortRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), ByteSwap.Value) { Value = Convert.ToInt16((int)value.Value) }.Data;
+ }
+ }
+
+ public static ShortRegister Null
+ {
+ get
+ {
+ return (new ShortRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Byte Swap={1};Value={2};", Address.ToString(), ByteSwap.Value, Value.Value);
+ }
+ }
+
+ public static ShortRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedShortRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedShortRegister = new ShortRegister() { Address = ModbusAddress.Parse(parsedShortRegisterData[0]), ByteSwap = bool.Parse(parsedShortRegisterData[1]), Value = UInt16.Parse(parsedShortRegisterData[2]) };
+ return parsedShortRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ ByteSwap = binaryReader.ReadBoolean();
+ Data = binaryReader.ReadBytes(2);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(ByteSwap.Value);
+ binaryWriter.Write(Data.Value, 0, 2);
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/ShortRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/ShortRegisterArray.cs
new file mode 100644
index 0000000..82d19ad
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/ShortRegisterArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct ShortRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List shortRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal ShortRegister this[int index]
+ {
+ get
+ {
+ return ShortRegisters[index];
+ }
+ set
+ {
+ ShortRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return ShortRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List ShortRegisters
+ {
+ get
+ {
+ if (shortRegisters == null)
+ {
+ shortRegisters = new List();
+ }
+ return shortRegisters;
+ }
+ }
+
+ public static ShortRegisterArray Null
+ {
+ get
+ {
+ return (new ShortRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", ShortRegisters.Select(shortRegister => shortRegister.ToString()));
+ }
+
+ public ShortRegisterArray AddShortRegister(ShortRegister shortRegister)
+ {
+ ShortRegisters.Add(shortRegister);
+ return this;
+ }
+
+ public static ShortRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedShortRegisterArray = new ShortRegisterArray()
+ {
+ shortRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedShortRegisterArray.ShortRegisters.Add(ShortRegister.Parse(parsedString[i]));
+ }
+
+ return parsedShortRegisterArray;
+ }
+
+ public ShortRegister GetShortRegister(SqlInt32 index)
+ {
+ return ShortRegisters[index.Value];
+ }
+
+ public static ShortRegisterArray Empty()
+ {
+ var shortRegisterArray = new ShortRegisterArray() { shortRegisters = new List() };
+ return shortRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ ShortRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var shortRegister = new ShortRegister();
+ shortRegister.Read(binaryReader);
+ ShortRegisters.Add(shortRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; ShortRegisters.Count > i; i++)
+ {
+ ShortRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.Modbus/StringRegister.cs b/DeviceSQL.SQLTypes.Modbus/StringRegister.cs
new file mode 100644
index 0000000..2294bba
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/StringRegister.cs
@@ -0,0 +1,141 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 264)]
+ public struct StringRegister : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public SqlBinary Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[Length.Value];
+ }
+ return data;
+ }
+ set
+ {
+ data = value.Value;
+ Length = Convert.ToByte(data.Length);
+ }
+ }
+
+ public SqlByte Length
+ {
+ get;
+ set;
+ }
+
+ public ModbusAddress Address
+ {
+ get;
+ set;
+ }
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public SqlString Value
+ {
+ get
+ {
+ return new DeviceSQL.Device.MODBUS.Data.StringRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), Length.Value).Value;
+ }
+ set
+ {
+ Data = new DeviceSQL.Device.MODBUS.Data.StringRegister(new DeviceSQL.Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(Address.RelativeAddress), Address.IsZeroBased.Value), Length.Value) { Value = value.Value }.Data;
+ }
+ }
+
+ public static StringRegister Null
+ {
+ get
+ {
+ return (new StringRegister() { IsNull = true });
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ return string.Format("Address=[{0}];Length={1};Value={2};", Address.ToString(), Length.Value, Value.Value);
+ }
+ }
+
+ public static StringRegister Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedStringRegisterData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedStringRegister = new StringRegister() { Address = ModbusAddress.Parse(parsedStringRegisterData[0]), Length = byte.Parse(parsedStringRegisterData[1]), Value = parsedStringRegisterData[2] };
+ return parsedStringRegister;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ Address.Read(binaryReader);
+ Length = binaryReader.ReadByte();
+ Data = binaryReader.ReadBytes(Length.Value);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ Address.Write(binaryWriter);
+ binaryWriter.Write(Length.Value);
+ binaryWriter.Write(Data.Value, 0, Length.Value);
+ }
+ }
+
+ #endregion
+
+ }
+}
+
diff --git a/DeviceSQL.SQLTypes.Modbus/StringRegisterArray.cs b/DeviceSQL.SQLTypes.Modbus/StringRegisterArray.cs
new file mode 100644
index 0000000..42b07db
--- /dev/null
+++ b/DeviceSQL.SQLTypes.Modbus/StringRegisterArray.cs
@@ -0,0 +1,165 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.Modbus
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct StringRegisterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List stringRegisters;
+
+ #endregion
+
+ #region Properties
+
+ internal StringRegister this[int index]
+ {
+ get
+ {
+ return StringRegisters[index];
+ }
+ set
+ {
+ StringRegisters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return StringRegisters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List StringRegisters
+ {
+ get
+ {
+ if (stringRegisters == null)
+ {
+ stringRegisters = new List();
+ }
+ return stringRegisters;
+ }
+ }
+
+ public static StringRegisterArray Null
+ {
+ get
+ {
+ return (new StringRegisterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", StringRegisters.Select(stringRegister => stringRegister.ToString()));
+ }
+
+ public StringRegisterArray AddStringRegister(StringRegister stringRegister)
+ {
+ StringRegisters.Add(stringRegister);
+ return this;
+ }
+
+ public static StringRegisterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedStringRegisterArray = new StringRegisterArray()
+ {
+ stringRegisters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedStringRegisterArray.StringRegisters.Add(StringRegister.Parse(parsedString[i]));
+ }
+
+ return parsedStringRegisterArray;
+ }
+
+ public StringRegister GetStringRegister(SqlInt32 index)
+ {
+ return StringRegisters[index.Value];
+ }
+
+ public static StringRegisterArray Empty()
+ {
+ var stringRegisterArray = new StringRegisterArray() { stringRegisters = new List() };
+ return stringRegisterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ StringRegisters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var stringRegister = new StringRegister();
+ stringRegister.Read(binaryReader);
+ StringRegisters.Add(stringRegister);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; StringRegisters.Count > i; i++)
+ {
+ StringRegisters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.ROC/AlarmRecord.cs b/DeviceSQL.SQLTypes.ROC/AlarmRecord.cs
new file mode 100644
index 0000000..7ee1c6a
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/AlarmRecord.cs
@@ -0,0 +1,163 @@
+#region Imported Types
+
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
+ public struct AlarmRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ public byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static AlarmRecord Null
+ {
+ get
+ {
+ return new AlarmRecord() { IsNull = true };
+ }
+ }
+
+ public SqlDateTime DateTimeStamp
+ {
+ get
+ {
+ var alarmRecord = new Data.AlarmRecord(Convert.ToUInt16(Index), Data);
+ return alarmRecord.DateTimeStamp.HasValue ? alarmRecord.DateTimeStamp.Value : SqlDateTime.Null;
+ }
+ }
+
+ public int Index
+ {
+ get;
+ set;
+ }
+
+ public string AlarmCode
+ {
+ get
+ {
+ return new Data.AlarmRecord(Convert.ToUInt16(Index), Data).AlarmCode.ToString();
+ }
+ }
+
+ public string AlarmClass
+ {
+ get
+ {
+ return new Data.AlarmRecord(Convert.ToUInt16(Index), Data).AlarmClass.ToString();
+ }
+ }
+
+ public string AlarmState
+ {
+ get
+ {
+ return new Data.AlarmRecord(Convert.ToUInt16(Index), Data).AlarmState.ToString();
+ }
+ }
+
+ public string Tag
+ {
+ get
+ {
+ return new Data.AlarmRecord(Convert.ToUInt16(Index), Data).Tag;
+ }
+ }
+
+ public SqlSingle Value
+ {
+ get
+ {
+ var alarmRecord = new Data.AlarmRecord(Convert.ToUInt16(Index), Data);
+ return alarmRecord.NullableValue.HasValue ? alarmRecord.Value : SqlSingle.Null;
+ }
+ }
+
+ public byte[] Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[22];
+ }
+ return data;
+ }
+
+ internal set
+ {
+ data = value;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static AlarmRecord Parse(SqlString stringToParse)
+ {
+ var parsedEventRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedEventRecord[1]);
+ if (base64Bytes.Length == 22)
+ {
+ return new AlarmRecord() { Index = ushort.Parse(parsedEventRecord[0]), Data = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 22 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1}", Index, Convert.ToBase64String(Data));
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ Index = binaryReader.ReadInt32();
+ if (!IsNull)
+ {
+ Data = binaryReader.ReadBytes(22);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Index);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Data, 0, 22);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/AlarmRecordArray.cs b/DeviceSQL.SQLTypes.ROC/AlarmRecordArray.cs
new file mode 100644
index 0000000..35bb11a
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/AlarmRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct AlarmRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ public List alarmRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal AlarmRecord this[int index]
+ {
+ get
+ {
+ return AlarmRecords[index];
+ }
+ set
+ {
+ AlarmRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return AlarmRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List AlarmRecords
+ {
+ get
+ {
+ if (alarmRecords == null)
+ {
+ alarmRecords = new List();
+ }
+ return alarmRecords;
+ }
+ }
+
+ public static AlarmRecordArray Null
+ {
+ get
+ {
+ return (new AlarmRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", AlarmRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public AlarmRecordArray AddAlarmRecord(AlarmRecord alarmRecord)
+ {
+ AlarmRecords.Add(alarmRecord);
+ return this;
+ }
+
+ public static AlarmRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCAlarmRecords = new AlarmRecordArray();
+ parsedROCAlarmRecords.alarmRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCAlarmRecords.alarmRecords.Add(AlarmRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCAlarmRecords;
+ }
+
+ public AlarmRecord GetAlarmRecord(SqlInt32 index)
+ {
+ return AlarmRecords[index.Value];
+ }
+
+ public static AlarmRecordArray Empty()
+ {
+ var alarmRecordArray = new AlarmRecordArray { alarmRecords = new List() };
+ return alarmRecordArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ AlarmRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var alarmRecord = new AlarmRecord();
+ alarmRecord.Read(binaryReader);
+ AlarmRecords.Add(alarmRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; AlarmRecords.Count > i; i++)
+ {
+ AlarmRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ArchiveInformation.cs b/DeviceSQL.SQLTypes.ROC/ArchiveInformation.cs
new file mode 100644
index 0000000..44d9bd9
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ArchiveInformation.cs
@@ -0,0 +1,224 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
+ public struct ArchiveInformation : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static ArchiveInformation Null
+ {
+ get
+ {
+ return new ArchiveInformation() { IsNull = true };
+ }
+ }
+
+ public byte[] Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[26];
+ }
+ return data;
+ }
+ set
+ {
+ data = value;
+ }
+ }
+
+ public int AlarmLogPointer
+ {
+ get
+ {
+ return new ArchiveInfo(Data).AlarmLogPointer;
+ }
+ }
+
+ public int EventLogPointer
+ {
+ get
+ {
+ return new ArchiveInfo(Data).EventLogPointer;
+ }
+ }
+
+ public int BaseRamCurrentHistoricalHour
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRamCurrentHistoricalHour;
+ }
+ }
+
+ public int BaseRam1CurrentHistoricalHour
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRam1CurrentHistoricalHour;
+ }
+ }
+
+ public int BaseRam2CurrentHistoricalHour
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRam2CurrentHistoricalHour;
+ }
+ }
+
+ public byte BaseRamCurrentHistoricalDay
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRamCurrentHistoricalDay;
+ }
+ }
+
+ public byte Base1RamCurrentHistoricalDay
+ {
+ get
+ {
+ return new ArchiveInfo(Data).Base1RamCurrentHistoricalDay;
+ }
+ }
+
+ public byte BaseRam2CurrentHistoricalDay
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRam2CurrentHistoricalDay;
+ }
+ }
+
+ public int MaximumNumberOfAlarms
+ {
+ get
+ {
+ return new ArchiveInfo(Data).MaximumNumberOfAlarms;
+ }
+ }
+
+ public int MaximumNumberOfEvents
+ {
+ get
+ {
+ return new ArchiveInfo(Data).MaximumNumberOfEvents;
+ }
+ }
+
+ public byte BaseRamNumberOfDays
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRamNumberOfDays;
+ }
+ }
+
+ public byte BaseRam1NumberOfDays
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRam1NumberOfDays;
+ }
+ }
+
+ public byte BaseRam2NumberOfDays
+ {
+ get
+ {
+ return new ArchiveInfo(Data).BaseRam2NumberOfDays;
+ }
+ }
+
+ public int CurrentAuditLogPointer
+ {
+ get
+ {
+ return new ArchiveInfo(Data).CurrentAuditLogPointer;
+ }
+ }
+
+ public byte MinutesPerHistoricalPeriod
+ {
+ get
+ {
+ return new ArchiveInfo(Data).MinutesPerHistoricalPeriod;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static ArchiveInformation Parse(SqlString stringToParse)
+ {
+ var base64Bytes = Convert.FromBase64String(stringToParse.Value);
+ if (base64Bytes.Length == 24)
+ {
+ return new ArchiveInformation() { Data = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 24 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return Convert.ToBase64String(Data);
+ }
+
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ if (!IsNull)
+ {
+ Data = binaryReader.ReadBytes(26);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Data, 0, 26);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/AuditLogRecord.cs b/DeviceSQL.SQLTypes.ROC/AuditLogRecord.cs
new file mode 100644
index 0000000..72adfee
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/AuditLogRecord.cs
@@ -0,0 +1,384 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 29)]
+ public struct AuditLogRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static AuditLogRecord Null
+ {
+ get
+ {
+ return new AuditLogRecord() { IsNull = true };
+ }
+ }
+
+ public byte[] Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[24];
+ }
+ return data;
+ }
+
+ set
+ {
+ data = value;
+ }
+ }
+
+ public SqlDateTime DateTimeStamp
+ {
+ get
+ {
+ var dateTimeStamp = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).DateTimeStamp;
+ return dateTimeStamp.HasValue ? dateTimeStamp.Value : SqlDateTime.Null;
+ }
+ }
+
+ public int Index
+ {
+ get;
+ set;
+ }
+
+ public SqlByte FstNumber
+ {
+ get
+ {
+ var fstNumber = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).FstNumber;
+ return fstNumber.HasValue ? fstNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlByte PointType
+ {
+ get
+ {
+ var pointType = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).PointType;
+ return pointType.HasValue ? pointType.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlByte LogicalNumber
+ {
+ get
+ {
+ var logicalNumber = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).LogicalNumber;
+ return logicalNumber.HasValue ? logicalNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlByte ParameterNumber
+ {
+ get
+ {
+ var parameterNumber = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).ParameterNumber;
+ return parameterNumber.HasValue ? parameterNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlInt32 Tag
+ {
+ get
+ {
+ var tag = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).Tag;
+ return tag.HasValue ? tag.Value : SqlInt32.Null;
+ }
+ }
+
+ public SqlDateTime PowerRemovedDateTime
+ {
+ get
+ {
+ var powerRemovedDateTime = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).PowerRemovedDateTime;
+ return powerRemovedDateTime.HasValue ? powerRemovedDateTime.Value : SqlDateTime.Null;
+ }
+ }
+
+ public SqlString CalibrationPointType
+ {
+ get
+ {
+ var calibrationPointType = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).CalibrationPointType;
+ return calibrationPointType.HasValue ? calibrationPointType.Value.ToString() : SqlString.Null;
+ }
+
+ }
+
+ public SqlString CalibrationMultivariableSensorInput
+ {
+ get
+ {
+ var calibrationMultivariableSensorInput = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).CalibrationMultivariableSensorInput;
+ return calibrationMultivariableSensorInput.HasValue ? calibrationMultivariableSensorInput.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public SqlString CalibrationType
+ {
+ get
+ {
+ var calibrationType = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).CalibrationType;
+ return calibrationType.HasValue ? calibrationType.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public SqlString EventCode
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).EventCode.ToString();
+ }
+ }
+
+ public SqlString OperatorId
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).OperatorId;
+ }
+ }
+
+ public SqlString EventText
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).EventText;
+ }
+ }
+
+ public SqlBinary OldValue
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).OldValue;
+ }
+ }
+
+ public SqlSingle FstFloatValue
+ {
+ get
+ {
+ var fstFloatValue = new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).FstFloatValue;
+ return fstFloatValue.HasValue ? fstFloatValue.Value : SqlSingle.Null;
+ }
+ }
+
+ public SqlBinary NewValue
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).NewValue;
+ }
+ }
+
+ public Parameter OldParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !ParameterNumber.IsNull)
+ {
+ var pointType = PointType.Value;
+ var parameterNumber = ParameterNumber.Value;
+ var parameterDefinition = ParameterDatabase.ParameterDefinitions.Where(pd => pd.PointType == pointType && pd.Parameter == parameterNumber).FirstOrDefault();
+ switch (parameterDefinition.DataType)
+ {
+ case "AC":
+ switch (parameterDefinition.Length)
+ {
+ case 3:
+ return new Parameter() { RawType = ParameterType.AC3, RawValue = OldValue.Value.Take(3).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+ case "BIN":
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = OldValue.Value.Take(1).ToArray() };
+ case "FL":
+ return new Parameter() { RawType = ParameterType.FL, RawValue = OldValue.Value };
+ case "INT16":
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = OldValue.Value.Take(2).ToArray() };
+ case "INT32":
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = OldValue.Value };
+ case "INT8":
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = OldValue.Value.Take(1).ToArray() };
+ case "TLP":
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = OldValue.Value.Take(3).ToArray() };
+ case "UINT16":
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = OldValue.Value.Take(2).ToArray() };
+ case "UINT32":
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = OldValue.Value };
+ case "TIME":
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = OldValue.Value };
+ case "UINT8":
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = OldValue.Value.Take(1).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+
+ }
+ else
+ {
+ return Parameter.Null;
+ }
+ }
+ }
+
+ public Parameter NewParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !ParameterNumber.IsNull)
+ {
+ var pointType = PointType.Value;
+ var parameterNumber = ParameterNumber.Value;
+ var parameterDefinition = ParameterDatabase.ParameterDefinitions.Where(pd => pd.PointType == pointType && pd.Parameter == parameterNumber).FirstOrDefault();
+ switch (parameterDefinition.DataType)
+ {
+ case "AC":
+ switch (parameterDefinition.Length)
+ {
+ case 3:
+ return new Parameter() { RawType = ParameterType.AC3, RawValue = NewValue.Value.Take(3).ToArray() };
+ case 7:
+ return new Parameter() { RawType = ParameterType.AC7, RawValue = NewValue.Value.Union(new byte[3]).ToArray() };
+ case 10:
+ return new Parameter() { RawType = ParameterType.AC10, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).ToArray() };
+ case 12:
+ return new Parameter() { RawType = ParameterType.AC12, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[2]).ToArray() };
+ case 20:
+ return new Parameter() { RawType = ParameterType.AC20, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[10]).ToArray() };
+ case 30:
+ return new Parameter() { RawType = ParameterType.AC30, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[20]).ToArray() };
+ case 40:
+ return new Parameter() { RawType = ParameterType.AC40, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[30]).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+ case "BIN":
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = NewValue.Value.Take(1).ToArray() };
+ case "FL":
+ return new Parameter() { RawType = ParameterType.FL, RawValue = NewValue.Value };
+ case "INT16":
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = NewValue.Value.Take(2).ToArray() };
+ case "INT32":
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = NewValue.Value };
+ case "INT8":
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = NewValue.Value.Take(1).ToArray() };
+ case "TLP":
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = NewValue.Value.Take(3).ToArray() };
+ case "UINT16":
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = NewValue.Value.Take(2).ToArray() };
+ case "UINT32":
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = NewValue.Value };
+ case "TIME":
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = NewValue.Value };
+ case "UINT8":
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = NewValue.Value.Take(1).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+
+ }
+ else
+ {
+ return Parameter.Null;
+ }
+ }
+ }
+
+ public SqlInt32 SequenceNumber
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).SequenceNumber;
+ }
+ }
+
+ public SqlBoolean EventNotSaved
+ {
+ get
+ {
+ return new Data.AuditLogRecord(Convert.ToUInt16(Index), Data).EventNotSaved;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static AuditLogRecord Parse(SqlString stringToParse)
+ {
+ var parsedAuditLogRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedAuditLogRecord[1]);
+ if (base64Bytes.Length == 24)
+ {
+ return new AuditLogRecord() { Index = ushort.Parse(parsedAuditLogRecord[0]), Data = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 24 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1}", Index, Convert.ToBase64String(Data));
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ Index = binaryReader.ReadInt32();
+ if (!IsNull)
+ {
+ Data = binaryReader.ReadBytes(24);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Index);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Data, 0, 24);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/AuditLogRecordArray.cs b/DeviceSQL.SQLTypes.ROC/AuditLogRecordArray.cs
new file mode 100644
index 0000000..c927301
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/AuditLogRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct AuditLogRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ public List auditLogRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal AuditLogRecord this[int index]
+ {
+ get
+ {
+ return AuditLogRecords[index];
+ }
+ set
+ {
+ AuditLogRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return AuditLogRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List AuditLogRecords
+ {
+ get
+ {
+ if (auditLogRecords == null)
+ {
+ auditLogRecords = new List();
+ }
+ return auditLogRecords;
+ }
+ }
+
+ public static AuditLogRecordArray Null
+ {
+ get
+ {
+ return (new AuditLogRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", AuditLogRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public AuditLogRecordArray AddAuditLogRecord(AuditLogRecord auditLogRecord)
+ {
+ AuditLogRecords.Add(auditLogRecord);
+ return this;
+ }
+
+ public static AuditLogRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCAuditLogRecords = new AuditLogRecordArray();
+ parsedROCAuditLogRecords.auditLogRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCAuditLogRecords.auditLogRecords.Add(AuditLogRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCAuditLogRecords;
+ }
+
+ public AuditLogRecord GetAuditLogRecord(SqlInt32 index)
+ {
+ return AuditLogRecords[index.Value];
+ }
+
+ public static AuditLogRecordArray Empty()
+ {
+ var auditLogRecordArray = new AuditLogRecordArray { auditLogRecords = new List() };
+ return auditLogRecordArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ AuditLogRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var auditLogRecord = new AuditLogRecord();
+ auditLogRecord.Read(binaryReader);
+ AuditLogRecords.Add(auditLogRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; AuditLogRecords.Count > i; i++)
+ {
+ AuditLogRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/DeviceSQL-Key.snk b/DeviceSQL.SQLTypes.ROC/DeviceSQL-Key.snk
new file mode 100644
index 0000000..ca3f567
Binary files /dev/null and b/DeviceSQL.SQLTypes.ROC/DeviceSQL-Key.snk differ
diff --git a/DeviceSQL.SQLTypes.ROC/DeviceSQL.SQLTypes.ROC.csproj b/DeviceSQL.SQLTypes.ROC/DeviceSQL.SQLTypes.ROC.csproj
new file mode 100644
index 0000000..7462f17
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/DeviceSQL.SQLTypes.ROC.csproj
@@ -0,0 +1,180 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}
+ Library
+ Properties
+ DeviceSQL.SQLTypes.ROC
+ DeviceSQL.SQLTypes.ROC
+ v4.8
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ TRACE;DEBUG;SQLTYPES
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ false
+
+
+ DeviceSQL-Key.snk
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Common\HexConverter.cs
+
+
+ Devices\Ac10Parameter.cs
+
+
+ Devices\Ac12Parameter.cs
+
+
+ Devices\Ac20Parameter.cs
+
+
+ Devices\Ac30Parameter.cs
+
+
+ Devices\Ac3Parameter.cs
+
+
+ Devices\Ac40Parameter.cs
+
+
+ Devices\Ac7Parameter.cs
+
+
+ Devices\AlarmRecord.cs
+
+
+ Devices\ArchiveInfo.cs
+
+
+ Devices\AuditLogRecord.cs
+
+
+ Devices\BinParameter.cs
+
+
+ Devices\DoubleParameter.cs
+
+
+ Devices\EventRecord.cs
+
+
+ Devices\FlpParameter.cs
+
+
+ Devices\FstCodeChunk.cs
+
+
+ Devices\FstHeaderInfo.cs
+
+
+ Devices\HistoryPointConfiguration.cs
+
+
+ Devices\HistoryRecord.cs
+
+
+ Devices\Int16Parameter.cs
+
+
+ Devices\Int32Parameter.cs
+
+
+ Devices\Int8Parameter.cs
+
+
+ Devices\IRocParameterData.cs
+
+
+ Devices\Parameter.cs
+
+
+ Devices\ParameterType.cs
+
+
+ Devices\RocPlusAlarmRecord.cs
+
+
+ Devices\RocPlusEventRecord.cs
+
+
+ Devices\RocPlusHistoryRecord.cs
+
+
+ Devices\TimeParameter.cs
+
+
+ Devices\Tlp.cs
+
+
+ Devices\TlpParameter.cs
+
+
+ Devices\UInt16Parameter.cs
+
+
+ Devices\UInt32Parameter.cs
+
+
+ Devices\UInt8Parameter.cs
+
+
+ Devices\ParameterDatabase.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.SQLTypes.ROC/EventRecord.cs b/DeviceSQL.SQLTypes.ROC/EventRecord.cs
new file mode 100644
index 0000000..3d12b6e
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/EventRecord.cs
@@ -0,0 +1,370 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
+ public struct EventRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static EventRecord Null
+ {
+ get
+ {
+ return new EventRecord() { IsNull = true };
+ }
+ }
+
+ public byte[] Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[22];
+ }
+ return data;
+ }
+
+ internal set
+ {
+ data = value;
+ }
+ }
+
+ public SqlDateTime DateTimeStamp
+ {
+ get
+ {
+ var dateTimeStamp = new Data.EventRecord(Convert.ToUInt16(Index), Data).DateTimeStamp;
+ return dateTimeStamp.HasValue ? dateTimeStamp.Value : SqlDateTime.Null;
+ }
+ }
+
+ public int Index
+ {
+ get;
+ internal set;
+ }
+
+ public SqlByte FstNumber
+ {
+ get
+ {
+ var fstNumber = new Data.EventRecord(Convert.ToUInt16(Index), Data).FstNumber;
+ return fstNumber.HasValue ? fstNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlByte PointType
+ {
+ get
+ {
+ var pointType = new Data.EventRecord(Convert.ToUInt16(Index), Data).PointType;
+ return pointType.HasValue ? pointType.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlByte LogicalNumber
+ {
+ get
+ {
+ var logicalNumber = new Data.EventRecord(Convert.ToUInt16(Index), Data).LogicalNumber;
+ return logicalNumber.HasValue ? logicalNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlByte ParameterNumber
+ {
+ get
+ {
+ var parameterNumber = new Data.EventRecord(Convert.ToUInt16(Index), Data).ParameterNumber;
+ return parameterNumber.HasValue ? parameterNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlInt32 Tag
+ {
+ get
+ {
+ var tag = new Data.EventRecord(Convert.ToUInt16(Index), Data).Tag;
+ return tag.HasValue ? tag.Value : SqlInt32.Null;
+ }
+ }
+
+ public SqlDateTime PowerRemovedDateTime
+ {
+ get
+ {
+ var powerRemovedDateTime = new Data.EventRecord(Convert.ToUInt16(Index), Data).PowerRemovedDateTime;
+ return powerRemovedDateTime.HasValue ? powerRemovedDateTime.Value : SqlDateTime.Null;
+ }
+ }
+
+ public SqlString CalibrationPointType
+ {
+ get
+ {
+ var calibrationPointType = new Data.EventRecord(Convert.ToUInt16(Index), Data).CalibrationPointType;
+ return calibrationPointType.HasValue ? calibrationPointType.Value.ToString() : SqlString.Null;
+ }
+
+ }
+
+ public SqlString CalibrationMultivariableSensorInput
+ {
+ get
+ {
+ var calibrationMultivariableSensorInput = new Data.EventRecord(Convert.ToUInt16(Index), Data).CalibrationMultivariableSensorInput;
+ return calibrationMultivariableSensorInput.HasValue ? calibrationMultivariableSensorInput.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public SqlString CalibrationType
+ {
+ get
+ {
+ var calibrationType = new Data.EventRecord(Convert.ToUInt16(Index), Data).CalibrationType;
+ return calibrationType.HasValue ? calibrationType.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public SqlString EventCode
+ {
+ get
+ {
+ return new Data.EventRecord(Convert.ToUInt16(Index), Data).EventCode.ToString();
+ }
+ }
+
+ public SqlString OperatorId
+ {
+ get
+ {
+ return new Data.EventRecord(Convert.ToUInt16(Index), Data).OperatorId;
+ }
+ }
+
+ public SqlString EventText
+ {
+ get
+ {
+ return new Data.EventRecord(Convert.ToUInt16(Index), Data).EventText;
+ }
+ }
+
+ public SqlBinary OldValue
+ {
+ get
+ {
+ return new Data.EventRecord(Convert.ToUInt16(Index), Data).OldValue;
+ }
+ }
+
+ public SqlSingle FstFloatValue
+ {
+ get
+ {
+ var fstFloatValue = new Data.EventRecord(Convert.ToUInt16(Index), Data).FstFloatValue;
+ return fstFloatValue.HasValue ? fstFloatValue.Value : SqlSingle.Null;
+ }
+ }
+
+ public SqlBinary NewValue
+ {
+ get
+ {
+ return new Data.EventRecord(Convert.ToUInt16(Index), Data).NewValue;
+ }
+ }
+
+ public Parameter OldParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !ParameterNumber.IsNull)
+ {
+ var pointType = PointType.Value;
+ var parameterNumber = ParameterNumber.Value;
+ var parameterDefinition = ParameterDatabase.ParameterDefinitions.Where(pd => pd.PointType == pointType && pd.Parameter == parameterNumber).FirstOrDefault();
+ switch (parameterDefinition.DataType)
+ {
+ case "AC":
+ switch (parameterDefinition.Length)
+ {
+ case 3:
+ return new Parameter() { RawType = ParameterType.AC3, RawValue = OldValue.Value.Take(3).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+ case "BIN":
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = OldValue.Value.Take(1).ToArray() };
+ case "FL":
+ return new Parameter() { RawType = ParameterType.FL, RawValue = OldValue.Value };
+ case "INT16":
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = OldValue.Value.Take(2).ToArray() };
+ case "INT32":
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = OldValue.Value };
+ case "INT8":
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = OldValue.Value.Take(1).ToArray() };
+ case "TLP":
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = OldValue.Value.Take(3).ToArray() };
+ case "UINT16":
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = OldValue.Value.Take(2).ToArray() };
+ case "UINT32":
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = OldValue.Value };
+ case "TIME":
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = OldValue.Value };
+ case "UINT8":
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = OldValue.Value.Take(1).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+
+ }
+ else
+ {
+ return Parameter.Null;
+ }
+ }
+ }
+
+ public Parameter NewParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !ParameterNumber.IsNull)
+ {
+ var pointType = PointType.Value;
+ var parameterNumber = ParameterNumber.Value;
+ var parameterDefinition = ParameterDatabase.ParameterDefinitions.Where(pd => pd.PointType == pointType && pd.Parameter == parameterNumber).FirstOrDefault();
+ switch (parameterDefinition.DataType)
+ {
+ case "AC":
+ switch (parameterDefinition.Length)
+ {
+ case 3:
+ return new Parameter() { RawType = ParameterType.AC3, RawValue = NewValue.Value.Take(3).ToArray() };
+ case 7:
+ return new Parameter() { RawType = ParameterType.AC7, RawValue = NewValue.Value.Union(new byte[3]).ToArray() };
+ case 10:
+ return new Parameter() { RawType = ParameterType.AC10, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).ToArray() };
+ case 12:
+ return new Parameter() { RawType = ParameterType.AC12, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[2]).ToArray() };
+ case 20:
+ return new Parameter() { RawType = ParameterType.AC20, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[10]).ToArray() };
+ case 30:
+ return new Parameter() { RawType = ParameterType.AC30, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[20]).ToArray() };
+ case 40:
+ return new Parameter() { RawType = ParameterType.AC40, RawValue = OldValue.Value.Union(NewValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Tag.Value))).Union(new byte[30]).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+ case "BIN":
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = NewValue.Value.Take(1).ToArray() };
+ case "FL":
+ return new Parameter() { RawType = ParameterType.FL, RawValue = NewValue.Value };
+ case "INT16":
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = NewValue.Value.Take(2).ToArray() };
+ case "INT32":
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = NewValue.Value };
+ case "INT8":
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = NewValue.Value.Take(1).ToArray() };
+ case "TLP":
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = NewValue.Value.Take(3).ToArray() };
+ case "UINT16":
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = NewValue.Value.Take(2).ToArray() };
+ case "UINT32":
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = NewValue.Value };
+ case "TIME":
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = NewValue.Value };
+ case "UINT8":
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = NewValue.Value.Take(1).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+
+ }
+ else
+ {
+ return Parameter.Null;
+ }
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static EventRecord Parse(SqlString stringToParse)
+ {
+ var parsedEventRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedEventRecord[1]);
+ if (base64Bytes.Length == 22)
+ {
+ return new EventRecord() { Index = ushort.Parse(parsedEventRecord[0]), Data = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 22 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1}", Index, Convert.ToBase64String(Data));
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ Index = binaryReader.ReadInt32();
+ if (!IsNull)
+ {
+ Data = binaryReader.ReadBytes(22);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Index);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Data, 0, 22);
+ }
+ }
+
+ #endregion
+
+ }
+
+}
diff --git a/DeviceSQL.SQLTypes.ROC/EventRecordArray.cs b/DeviceSQL.SQLTypes.ROC/EventRecordArray.cs
new file mode 100644
index 0000000..fce59aa
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/EventRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct EventRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List eventRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal EventRecord this[int index]
+ {
+ get
+ {
+ return EventRecords[index];
+ }
+ set
+ {
+ EventRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return EventRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List EventRecords
+ {
+ get
+ {
+ if (eventRecords == null)
+ {
+ eventRecords = new List();
+ }
+ return eventRecords;
+ }
+ }
+
+ public static EventRecordArray Null
+ {
+ get
+ {
+ return (new EventRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", EventRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public EventRecordArray AddEventRecord(EventRecord eventRecord)
+ {
+ EventRecords.Add(eventRecord);
+ return this;
+ }
+
+ public static EventRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCEventRecords = new EventRecordArray();
+ parsedROCEventRecords.eventRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCEventRecords.eventRecords.Add(EventRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCEventRecords;
+ }
+
+ public EventRecord GetEventRecord(SqlInt32 index)
+ {
+ return EventRecords[index.Value];
+ }
+
+ public static EventRecordArray Empty()
+ {
+ var eventRecordArray = new EventRecordArray { eventRecords = new List() };
+ return eventRecordArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ EventRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var eventRecord = new EventRecord();
+ eventRecord.Read(binaryReader);
+ EventRecords.Add(eventRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; EventRecords.Count > i; i++)
+ {
+ EventRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/FSTInformation.cs b/DeviceSQL.SQLTypes.ROC/FSTInformation.cs
new file mode 100644
index 0000000..28ed7bf
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/FSTInformation.cs
@@ -0,0 +1,163 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct FSTInformation : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte fstNumber;
+ private string version;
+ private string description;
+ private byte[] fstCode;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static FSTInformation Null
+ {
+ get
+ {
+ return new FSTInformation() { IsNull = true };
+ }
+ }
+
+ public byte FSTNumber
+ {
+ get
+ {
+ return fstNumber;
+ }
+ set
+ {
+ fstNumber = value;
+ }
+ }
+
+ public string Version
+ {
+ get
+ {
+ return version;
+ }
+ set
+ {
+ version = value;
+ }
+ }
+
+ public string Description
+ {
+ get
+ {
+ return description;
+ }
+ set
+ {
+ description = value;
+ }
+ }
+
+ public byte[] FSTCode
+ {
+ get
+ {
+ if (fstCode == null)
+ {
+ fstCode = new byte[0];
+ }
+ return fstCode;
+ }
+ set
+ {
+ fstCode = value;
+ }
+ }
+
+ public int Length
+ {
+ get
+ {
+ return fstCode.Length;
+ }
+ }
+
+ public string SHA256Hash
+ {
+ get
+ {
+ return IO.Channels.HexConverter.ToHexString(System.Security.Cryptography.SHA256.Create().ComputeHash(fstCode));
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static FSTInformation Parse(SqlString stringToParse)
+ {
+ var parsedString = stringToParse.Value.Split(",".ToCharArray());
+ var fstNumber = byte.Parse(parsedString[0]);
+ var version = parsedString[1];
+ var description = parsedString[2];
+ var fstCode = Convert.FromBase64String(parsedString[3]);
+ return new FSTInformation() { fstNumber = fstNumber, version = version, description = description, fstCode = fstCode };
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1},{2},{3}", FSTNumber, Version, Description, Convert.ToBase64String(FSTCode));
+ }
+
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ if (!IsNull)
+ {
+ fstNumber = binaryReader.ReadByte();
+ version = binaryReader.ReadString();
+ description = binaryReader.ReadString();
+ var fstCodeLength = binaryReader.ReadUInt16();
+ fstCode = binaryReader.ReadBytes(fstCodeLength);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ if (!IsNull)
+ {
+ binaryWriter.Write(fstNumber);
+ binaryWriter.Write(version);
+ binaryWriter.Write(description);
+ binaryWriter.Write(Convert.ToUInt16(fstCode.Length));
+ binaryWriter.Write(fstCode);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/HistoryRecord.cs b/DeviceSQL.SQLTypes.ROC/HistoryRecord.cs
new file mode 100644
index 0000000..d5a70ef
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/HistoryRecord.cs
@@ -0,0 +1,145 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 11)]
+ public struct HistoryRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ public byte[] value;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static HistoryRecord Null
+ {
+ get
+ {
+ return new HistoryRecord() { IsNull = true };
+ }
+ }
+
+ public byte HistorySegment
+ {
+ get;
+ internal set;
+ }
+
+ public byte HistoryPointNumber
+ {
+ get;
+ internal set;
+ }
+
+ public int Index
+ {
+ get;
+ internal set;
+ }
+
+ public byte[] Value
+ {
+ get
+ {
+ if (value == null)
+ {
+ value = new byte[4];
+ }
+ return value;
+ }
+ internal set
+ {
+ this.value = value;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static HistoryRecord Parse(SqlString stringToParse)
+ {
+ var parsedHistoryRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedHistoryRecord[3]);
+ if (base64Bytes.Length == 4)
+ {
+ return new HistoryRecord() { Index = ushort.Parse(parsedHistoryRecord[0]), HistorySegment = byte.Parse(parsedHistoryRecord[1]), HistoryPointNumber = byte.Parse(parsedHistoryRecord[2]), value = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 4 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1},{2},{3}", Index, HistorySegment, HistoryPointNumber, Convert.ToBase64String(Value));
+ }
+
+ public SqlDateTime ToDateTimeStamp(DateTime deviceDateTime)
+ {
+ var dateTimeStamp = new Data.HistoryRecord() { HistoryPointNumber = this.HistoryPointNumber, HistorySegment = this.HistorySegment, Index = this.Index, Value = this.Value }.ToDateTimeStamp(deviceDateTime);
+ return dateTimeStamp.HasValue ? dateTimeStamp.Value : SqlDateTime.Null;
+ }
+
+ public DateTime ToExtendedTimeStamp()
+ {
+ return new HistoryRecord() { HistoryPointNumber = this.HistoryPointNumber, HistorySegment = this.HistorySegment, Index = this.Index, Value = this.Value }.ToExtendedTimeStamp();
+ }
+
+ public SqlSingle ToFloat()
+ {
+ var floatValue = new Data.HistoryRecord() { HistoryPointNumber = this.HistoryPointNumber, HistorySegment = this.HistorySegment, Index = this.Index, Value = this.Value }.ToNullableFloat();
+ return floatValue.HasValue ? floatValue.Value : SqlSingle.Null;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ if (!IsNull)
+ {
+ Index = binaryReader.ReadInt32();
+ HistorySegment = binaryReader.ReadByte();
+ HistoryPointNumber = binaryReader.ReadByte();
+ Value = binaryReader.ReadBytes(4);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Index);
+ binaryWriter.Write(HistorySegment);
+ binaryWriter.Write(HistoryPointNumber);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Value, 0, 4);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/HistoryRecordArray.cs b/DeviceSQL.SQLTypes.ROC/HistoryRecordArray.cs
new file mode 100644
index 0000000..958a0fe
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/HistoryRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct HistoryRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List historyRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal HistoryRecord this[int index]
+ {
+ get
+ {
+ return HistoryRecords[index];
+ }
+ set
+ {
+ HistoryRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return HistoryRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List HistoryRecords
+ {
+ get
+ {
+ if (historyRecords == null)
+ {
+ historyRecords = new List();
+ }
+ return historyRecords;
+ }
+ }
+
+ public static HistoryRecordArray Null
+ {
+ get
+ {
+ return (new HistoryRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", HistoryRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public HistoryRecordArray AddHistoryRecord(HistoryRecord historyRecord)
+ {
+ HistoryRecords.Add(historyRecord);
+ return this;
+ }
+
+ public static HistoryRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCHistoryRecords = new HistoryRecordArray();
+ parsedROCHistoryRecords.historyRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCHistoryRecords.historyRecords.Add(HistoryRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCHistoryRecords;
+ }
+
+ public HistoryRecord GetHistoryRecord(SqlInt32 index)
+ {
+ return HistoryRecords[index.Value];
+ }
+
+ public static HistoryRecordArray Empty()
+ {
+ var historyRecord = new HistoryRecordArray { historyRecords = new List() };
+ return historyRecord;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ HistoryRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var historyRecord = new HistoryRecord();
+ historyRecord.Read(binaryReader);
+ HistoryRecords.Add(historyRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; HistoryRecords.Count > i; i++)
+ {
+ HistoryRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/Parameter.cs b/DeviceSQL.SQLTypes.ROC/Parameter.cs
new file mode 100644
index 0000000..d4c1492
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/Parameter.cs
@@ -0,0 +1,464 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 61)]
+ public struct Parameter : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte parameterType;
+ private byte[] rawValue;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ private set;
+ }
+
+ public static Parameter Null
+ {
+ get
+ {
+ return (new Parameter() { IsNull = true });
+ }
+ }
+
+ public byte PointType
+ {
+ get; set;
+ }
+
+ public byte LogicalNumber
+ {
+ get; set;
+ }
+
+ public byte ParameterNumber
+ {
+ get; set;
+ }
+
+ public string Type
+ {
+ get
+ {
+ return RawType.ToString();
+ }
+ }
+
+ internal ParameterType RawType
+ {
+ get
+ {
+ return (ParameterType)parameterType;
+ }
+ set
+ {
+ parameterType = (byte)value;
+ }
+ }
+
+ internal byte[] RawValue
+ {
+ get
+ {
+ if (rawValue == null)
+ {
+ switch ((ParameterType)parameterType)
+ {
+ case ParameterType.AC3:
+ rawValue = new byte[3];
+ break;
+ case ParameterType.AC7:
+ rawValue = new byte[3];
+ break;
+ case ParameterType.AC10:
+ rawValue = new byte[10];
+ break;
+ case ParameterType.AC12:
+ rawValue = new byte[12];
+ break;
+ case ParameterType.AC20:
+ rawValue = new byte[20];
+ break;
+ case ParameterType.AC30:
+ rawValue = new byte[30];
+ break;
+ case ParameterType.AC40:
+ rawValue = new byte[40];
+ break;
+ case ParameterType.BIN:
+ rawValue = new byte[1];
+ break;
+ case ParameterType.FL:
+ rawValue = new byte[4];
+ break;
+ case ParameterType.DOUBLE:
+ rawValue = new byte[8];
+ break;
+ case ParameterType.INT16:
+ rawValue = new byte[2];
+ break;
+ case ParameterType.INT32:
+ rawValue = new byte[4];
+ break;
+ case ParameterType.INT8:
+ rawValue = new byte[1];
+ break;
+ case ParameterType.TLP:
+ rawValue = new byte[3];
+ break;
+ case ParameterType.UINT16:
+ rawValue = new byte[2];
+ break;
+ case ParameterType.UINT32:
+ rawValue = new byte[4];
+ break;
+ case ParameterType.TIME:
+ rawValue = new byte[4];
+ break;
+ case ParameterType.UINT8:
+ rawValue = new byte[10];
+ break;
+ }
+ }
+
+ return rawValue;
+ }
+ set
+ {
+ rawValue = value;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public override string ToString()
+ {
+ if (this.IsNull)
+ {
+ return "NULL";
+ }
+ else
+ {
+ switch ((ParameterType)parameterType)
+ {
+ case ParameterType.AC3:
+ return (new Ac3Parameter() { Data = RawValue }).Value;
+ case ParameterType.AC7:
+ return (new Ac7Parameter() { Data = RawValue }).Value;
+ case ParameterType.AC10:
+ return (new Ac10Parameter() { Data = RawValue }).Value;
+ case ParameterType.AC12:
+ return (new Ac12Parameter() { Data = RawValue }).Value;
+ case ParameterType.AC20:
+ return (new Ac20Parameter() { Data = RawValue }).Value;
+ case ParameterType.AC30:
+ return (new Ac30Parameter() { Data = RawValue }).Value;
+ case ParameterType.AC40:
+ return (new Ac40Parameter() { Data = RawValue }).Value;
+ case ParameterType.BIN:
+ return (new BinParameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.FL:
+ return (new FlpParameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.DOUBLE:
+ return (new DoubleParameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.INT16:
+ return (new Int16Parameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.INT32:
+ return (new Int32Parameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.INT8:
+ return (new Int8Parameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.TLP:
+ {
+ var tlpParameter = new TlpParameter() { Data = RawValue };
+ return string.Format("{0}.{1}.{2}", tlpParameter.Value.PointType.ToString(), tlpParameter.Value.LogicalNumber.ToString(), tlpParameter.Value.Parameter.ToString());
+ }
+ case ParameterType.UINT16:
+ return (new UInt16Parameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.UINT32:
+ return (new Int32Parameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.TIME:
+ return (new TimeParameter() { Data = RawValue }).Value.ToString();
+ case ParameterType.UINT8:
+ return (new UInt8Parameter() { Data = RawValue }).Value.ToString();
+ default:
+ return "NULL";
+ }
+ }
+ }
+
+ public SqlByte ToBin()
+ {
+ return (new BinParameter() { Data = RawValue }).Value;
+ }
+
+ public SqlByte ToUInt8()
+ {
+ return (new UInt8Parameter() { Data = RawValue }).Value;
+ }
+
+ public SqlInt16 ToInt8()
+ {
+ return (new Int8Parameter() { Data = RawValue }).Value;
+ }
+
+ public SqlInt16 ToInt16()
+ {
+ return (new Int16Parameter() { Data = RawValue }).Value;
+ }
+ public SqlInt32 ToUInt16()
+ {
+ return (new UInt16Parameter() { Data = RawValue }).Value;
+ }
+
+ public SqlInt32 ToInt32()
+ {
+ return (new Int32Parameter() { Data = RawValue }).Value;
+ }
+
+ public SqlInt64 ToUInt32()
+ {
+ return (new UInt32Parameter() { Data = RawValue }).Value;
+ }
+
+ public SqlDateTime ToTime()
+ {
+ return (new TimeParameter() { Data = RawValue }).Value;
+ }
+
+ public SqlSingle ToFl()
+ {
+ var flpValue = new FlpParameter() { Data = RawValue }.NullableValue;
+ return flpValue.HasValue ? flpValue.Value : SqlSingle.Null;
+ }
+
+ public SqlDouble ToDouble()
+ {
+ var doubleValue = new DoubleParameter() { Data = RawValue }.NullableValue;
+ return doubleValue.HasValue ? doubleValue.Value : SqlDouble.Null;
+ }
+
+ public static Parameter Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCPointData = stringToParse.Value.Split(",".ToCharArray());
+ var parsedROCParameter = new Parameter() { PointType = byte.Parse(parsedROCPointData[0]), LogicalNumber = byte.Parse(parsedROCPointData[1]), ParameterNumber = byte.Parse(parsedROCPointData[2]) };
+
+ parsedROCParameter.parameterType = (byte)((ParameterType)Enum.Parse(typeof(ParameterType), parsedROCPointData[3]));
+
+ switch (parsedROCPointData[3])
+ {
+ case "AC3":
+ parsedROCParameter.rawValue = (new Ac3Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "AC7":
+ parsedROCParameter.rawValue = (new Ac7Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "AC10":
+ parsedROCParameter.rawValue = (new Ac10Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "AC12":
+ parsedROCParameter.rawValue = (new Ac12Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "AC20":
+ parsedROCParameter.rawValue = (new Ac20Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "AC30":
+ parsedROCParameter.rawValue = (new Ac30Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "AC40":
+ parsedROCParameter.rawValue = (new Ac40Parameter() { Value = parsedROCPointData[4] }).Data;
+ break;
+ case "BIN":
+ parsedROCParameter.rawValue = (new BinParameter() { Value = byte.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "FL":
+ parsedROCParameter.rawValue = (new FlpParameter() { Value = float.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "DOUBLE":
+ parsedROCParameter.rawValue = (new DoubleParameter() { Value = double.Parse(parsedROCPointData[8]) }).Data;
+ break;
+ case "INT16":
+ parsedROCParameter.rawValue = (new Int16Parameter() { Value = short.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "INT32":
+ parsedROCParameter.rawValue = (new Int32Parameter() { Value = int.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "Int8":
+ parsedROCParameter.rawValue = (new Int8Parameter() { Value = SByte.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "TLP":
+ {
+ var parsedTlp = parsedROCPointData[4].Split(".".ToCharArray());
+ parsedROCParameter.rawValue = (new TlpParameter() { Value = new Tlp(byte.Parse(parsedTlp[0]), byte.Parse(parsedTlp[1]), byte.Parse(parsedTlp[2])) }).Data;
+ }
+ break;
+ case "UINT16":
+ parsedROCParameter.rawValue = (new UInt16Parameter() { Value = ushort.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "UINT32":
+ parsedROCParameter.rawValue = (new UInt32Parameter() { Value = uint.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ case "TIME":
+ parsedROCParameter.rawValue = (new TimeParameter() { Value = (new DateTime(1970, 01, 01).AddSeconds(uint.Parse(parsedROCPointData[4]))) }).Data;
+ break;
+ case "UINT8":
+ parsedROCParameter.rawValue = (new UInt8Parameter() { Value = byte.Parse(parsedROCPointData[4]) }).Data;
+ break;
+ }
+ return parsedROCParameter;
+ }
+
+ public static Parameter ParseTlp(byte pointType, byte logicalNumber, byte parameter, byte pointTypeValue, byte logicalNumberValue, byte parameterValue)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.TLP, rawValue = (new TlpParameter() { Value = new Tlp(pointTypeValue, logicalNumberValue, parameterValue) }).Data };
+ }
+
+ public static Parameter ParseAc3(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC3, rawValue = (new Ac3Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseAc7(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC7, rawValue = (new Ac3Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseAc10(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC10, rawValue = (new Ac10Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseAc12(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC12, rawValue = (new Ac12Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseAc20(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC20, rawValue = (new Ac20Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseAc30(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC30, rawValue = (new Ac30Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseAc40(byte pointType, byte logicalNumber, byte parameter, string value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.AC40, rawValue = (new Ac40Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseBin(byte pointType, byte logicalNumber, byte parameter, byte value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.BIN, rawValue = (new BinParameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseInt8(byte pointType, byte logicalNumber, byte parameter, short value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.INT8, rawValue = (new Int8Parameter() { Value = Convert.ToSByte(value) }).Data };
+ }
+
+ public static Parameter ParseUInt8(byte pointType, byte logicalNumber, byte parameter, byte value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.UINT8, rawValue = (new UInt8Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseInt16(byte pointType, byte logicalNumber, byte parameter, short value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.INT16, rawValue = (new Int16Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseUInt16(byte pointType, byte logicalNumber, byte parameter, int value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.UINT16, rawValue = (new UInt16Parameter() { Value = Convert.ToUInt16(value) }).Data };
+ }
+
+ public static Parameter ParseInt32(byte pointType, byte logicalNumber, byte parameter, int value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.INT32, rawValue = (new Int32Parameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseUInt32(byte pointType, byte logicalNumber, byte parameter, long value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.UINT32, rawValue = (new UInt32Parameter() { Value = Convert.ToUInt32(value) }).Data };
+ }
+
+ public static Parameter ParseTime(byte pointType, byte logicalNumber, byte parameter, DateTime value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.TIME, rawValue = (new TimeParameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseFl(byte pointType, byte logicalNumber, byte parameter, float value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.FL, rawValue = (new FlpParameter() { Value = value }).Data };
+ }
+
+ public static Parameter ParseDouble(byte pointType, byte logicalNumber, byte parameter, double value)
+ {
+ return new Parameter() { PointType = pointType, LogicalNumber = logicalNumber, ParameterNumber = parameter, parameterType = (byte)ParameterType.DOUBLE, rawValue = (new DoubleParameter() { Value = value }).Data };
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+
+ if (!IsNull)
+ {
+ PointType = binaryReader.ReadByte();
+ LogicalNumber = binaryReader.ReadByte();
+ ParameterNumber = binaryReader.ReadByte();
+ parameterType = binaryReader.ReadByte();
+ rawValue = new byte[binaryReader.ReadInt32()];
+ binaryReader.Read(rawValue, 0, rawValue.Length);
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+
+ if (!IsNull)
+ {
+ binaryWriter.Write(PointType);
+ binaryWriter.Write(LogicalNumber);
+ binaryWriter.Write(ParameterNumber);
+ binaryWriter.Write(parameterType);
+ binaryWriter.Write(RawValue.Length);
+ binaryWriter.Write(RawValue);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ParameterArray.cs b/DeviceSQL.SQLTypes.ROC/ParameterArray.cs
new file mode 100644
index 0000000..104eec0
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ParameterArray.cs
@@ -0,0 +1,166 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct ParameterArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private List parameters;
+
+ #endregion
+
+ #region Properties
+
+ internal Parameter this[int index]
+ {
+ get
+ {
+ return Parameters[index];
+ }
+ set
+ {
+ Parameters[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return Parameters.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List Parameters
+ {
+ get
+ {
+ if (parameters == null)
+ {
+ parameters = new List();
+ }
+ return parameters;
+ }
+ }
+
+ public static ParameterArray Null
+ {
+ get
+ {
+ return (new ParameterArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", Parameters.Select(parameter => parameter.ToString()));
+ }
+
+ public ParameterArray AddParameter(Parameter parameter)
+ {
+ Parameters.Add(parameter);
+ return this;
+ }
+
+ public static ParameterArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCParameterArray = new ParameterArray()
+ {
+ parameters = new List()
+ };
+
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCParameterArray.Parameters.Add(Parameter.Parse(parsedString[i]));
+ }
+
+ return parsedROCParameterArray;
+ }
+
+ public Parameter GetParameter(SqlInt32 index)
+ {
+ return Parameters[index.Value];
+ }
+
+ public static ParameterArray Empty()
+ {
+ var rocParameterArray = new ParameterArray() { parameters = new List() };
+ return rocParameterArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ Parameters.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var parameter = new Parameter();
+ parameter.Read(binaryReader);
+ Parameters.Add(parameter);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; Parameters.Count > i; i++)
+ {
+ Parameters[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/Properties/AssemblyInfo.cs b/DeviceSQL.SQLTypes.ROC/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..bbfd0f7
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("DeviceSQL.SQLTypes.ROC")]
+[assembly: AssemblyDescription("DeviceSQL.SQLTypes.ROC")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("256ca566-5436-4543-bc13-d2480bee70c2")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusAlarmRecord.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusAlarmRecord.cs
new file mode 100644
index 0000000..7d252c8
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusAlarmRecord.cs
@@ -0,0 +1,250 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 28)]
+ public struct ROCPlusAlarmRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static ROCPlusAlarmRecord Null
+ {
+ get
+ {
+ return new ROCPlusAlarmRecord() { IsNull = true };
+ }
+ }
+
+ public byte[] Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[23];
+ }
+ return data;
+ }
+
+ internal set
+ {
+ data = value;
+ }
+ }
+
+ public int Index
+ {
+ get;
+ internal set;
+ }
+
+ public SqlDateTime DateTimeStamp
+ {
+ get
+ {
+ var dateTimeStamp = new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).DateTimeStamp;
+ return dateTimeStamp.HasValue ? dateTimeStamp.Value : SqlDateTime.Null;
+ }
+ }
+
+ public SqlString AlarmSrbxState
+ {
+ get
+ {
+ return new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).AlarmSrbxState.ToString();
+ }
+ }
+
+ public SqlString AlarmCondition
+ {
+ get
+ {
+ return new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).AlarmCondition.ToString();
+ }
+ }
+
+ public SqlString AlarmType
+ {
+ get
+ {
+ return new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).AlarmType.ToString();
+ }
+ }
+
+ public SqlString AlarmCode
+ {
+ get
+ {
+ var alarmCode = new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).AlarmCode;
+ return alarmCode.HasValue ? alarmCode.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public string AlarmDescription
+ {
+ get
+ {
+ return new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).AlarmDescription;
+ }
+ }
+
+ internal Tlp Tlp
+ {
+ get
+ {
+ return new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).Tlp;
+ }
+ }
+
+ public SqlByte PointType
+ {
+ get
+ {
+ return Tlp.PointType;
+ }
+ }
+
+ public SqlByte LogicalNumber
+ {
+ get
+ {
+ return Tlp.LogicalNumber;
+ }
+ }
+
+ public SqlByte ParameterNumber
+ {
+ get
+ {
+ return Tlp.Parameter;
+ }
+ }
+
+ public Parameter ParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !ParameterNumber.IsNull)
+ {
+ var pointType = PointType.Value;
+ var parameterNumber = ParameterNumber.Value;
+ var parameterDefinition = ParameterDatabase.ParameterDefinitions.Where(pd => pd.PointType == pointType && pd.Parameter == parameterNumber).FirstOrDefault();
+ var data = new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).data.Skip(19).Take(4).ToArray();
+ switch (parameterDefinition.DataType)
+ {
+ case "BIN":
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = data.Take(1).ToArray() };
+ case "FL":
+ return new Parameter() { RawType = ParameterType.FL, RawValue = data };
+ case "INT16":
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = data.Take(2).ToArray() };
+ case "INT32":
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = data };
+ case "INT8":
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = data.Take(1).ToArray() };
+ case "TLP":
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = data.Take(3).ToArray() };
+ case "UINT16":
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = data.Take(2).ToArray() };
+ case "UINT32":
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = data };
+ case "TIME":
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = data };
+ case "UINT8":
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = data.Take(1).ToArray() };
+ default:
+ return Parameter.Null;
+ }
+
+ }
+ else
+ {
+ return Parameter.Null;
+ }
+ }
+ }
+
+ public SqlSingle Value
+ {
+ get
+ {
+ var value = new Data.ROCPlusAlarmRecord(Convert.ToUInt16(Index), Data).Value;
+ return value.HasValue ? value.Value : SqlSingle.Null;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static ROCPlusAlarmRecord Parse(SqlString stringToParse)
+ {
+ var parsedROCPlusAlarmRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedROCPlusAlarmRecord[1]);
+ if (base64Bytes.Length == 23)
+ {
+ return new ROCPlusAlarmRecord() { Index = ushort.Parse(parsedROCPlusAlarmRecord[0]), Data = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 23 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1}", Index, Convert.ToBase64String(Data));
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ Index = binaryReader.ReadInt32();
+ if (!IsNull)
+ {
+ Data = binaryReader.ReadBytes(23);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Index);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Data, 0, 23);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusAlarmRecordArray.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusAlarmRecordArray.cs
new file mode 100644
index 0000000..36f629c
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusAlarmRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct ROCPlusAlarmRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List rocPlusAlarmRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal ROCPlusAlarmRecord this[int index]
+ {
+ get
+ {
+ return ROCPlusAlarmRecords[index];
+ }
+ set
+ {
+ ROCPlusAlarmRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return ROCPlusAlarmRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List ROCPlusAlarmRecords
+ {
+ get
+ {
+ if (rocPlusAlarmRecords == null)
+ {
+ rocPlusAlarmRecords = new List();
+ }
+ return rocPlusAlarmRecords;
+ }
+ }
+
+ public static ROCPlusAlarmRecordArray Null
+ {
+ get
+ {
+ return (new ROCPlusAlarmRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", ROCPlusAlarmRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public ROCPlusAlarmRecordArray AddROCPlusAlarmRecord(ROCPlusAlarmRecord rocPlusAlarmRecord)
+ {
+ ROCPlusAlarmRecords.Add(rocPlusAlarmRecord);
+ return this;
+ }
+
+ public static ROCPlusAlarmRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCPlusAlarmRecords = new ROCPlusAlarmRecordArray();
+ parsedROCPlusAlarmRecords.rocPlusAlarmRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCPlusAlarmRecords.rocPlusAlarmRecords.Add(ROCPlusAlarmRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCPlusAlarmRecords;
+ }
+
+ public ROCPlusAlarmRecord GetROCPlusAlarmRecord(SqlInt32 index)
+ {
+ return ROCPlusAlarmRecords[index.Value];
+ }
+
+ public static ROCPlusAlarmRecordArray Empty()
+ {
+ var rocPlusAlarmRecord = new ROCPlusAlarmRecordArray { rocPlusAlarmRecords = new List() };
+ return rocPlusAlarmRecord;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ ROCPlusAlarmRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var rocPLusAlarmRecord = new ROCPlusAlarmRecord();
+ rocPLusAlarmRecord.Read(binaryReader);
+ ROCPlusAlarmRecords.Add(rocPLusAlarmRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; ROCPlusAlarmRecords.Count > i; i++)
+ {
+ ROCPlusAlarmRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusEventRecord.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusEventRecord.cs
new file mode 100644
index 0000000..c21ced7
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusEventRecord.cs
@@ -0,0 +1,363 @@
+#region Imported Types
+
+using DeviceSQL.SQLTypes.ROC.Data;
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
+ public struct ROCPlusEventRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ private byte[] data;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public static ROCPlusEventRecord Null
+ {
+ get
+ {
+ return new ROCPlusEventRecord() { IsNull = true };
+ }
+ }
+
+ public byte[] Data
+ {
+ get
+ {
+ if (data == null)
+ {
+ data = new byte[22];
+ }
+ return data;
+ }
+
+ internal set
+ {
+ data = value;
+ }
+ }
+
+ public int Index
+ {
+ get;
+ internal set;
+ }
+
+ public SqlDateTime DateTimeStamp
+ {
+ get
+ {
+ var dateTimeStamp = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).DateTimeStamp;
+ return dateTimeStamp.HasValue ? dateTimeStamp.Value : SqlDateTime.Null;
+ }
+ }
+
+ public SqlString EventType
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).EventType.ToString();
+ }
+ }
+
+ public SqlString EventCode
+ {
+ get
+ {
+ var eventCode = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).EventCode;
+ return eventCode.HasValue ? eventCode.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public string OperatorId
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).OperatorId;
+ }
+ }
+
+ internal Tlp Tlp
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).Tlp;
+ }
+ }
+
+ public SqlByte PointType
+ {
+ get
+ {
+ return Tlp.PointType;
+ }
+ }
+
+ public SqlByte LogicalNumber
+ {
+ get
+ {
+ return Tlp.LogicalNumber;
+ }
+ }
+
+ public SqlByte Parameter
+ {
+ get
+ {
+ return Tlp.Parameter;
+ }
+ }
+
+ public SqlString DataType
+ {
+ get
+ {
+ var dataType = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).DataType;
+ return dataType.HasValue ? dataType.Value.ToString() : SqlString.Null;
+ }
+ }
+
+ public SqlBinary OldValue
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).OldValue;
+ }
+ }
+
+ public SqlBinary NewValue
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).NewValue;
+ }
+ }
+
+ public SqlInt32 Spare
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).Spare;
+ }
+ }
+
+ public SqlString Description
+ {
+ get
+ {
+ return new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).Description;
+ }
+ }
+
+ public SqlByte FstNumber
+ {
+ get
+ {
+ var fstNumber = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).FstNumber;
+ return fstNumber.HasValue ? fstNumber.Value : SqlByte.Null;
+ }
+ }
+
+ public SqlSingle FstValue
+ {
+ get
+ {
+ var fstValue = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).FstValue;
+ return fstValue.HasValue ? fstValue.Value : SqlSingle.Null;
+ }
+ }
+
+ public SqlDateTime DateTimeValue
+ {
+ get
+ {
+ var dateTimeValue = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).DateTimeValue;
+ return dateTimeValue.HasValue ? dateTimeValue.Value : SqlDateTime.Null;
+ }
+ }
+
+ public SqlSingle CalibrationRawValue
+ {
+ get
+ {
+ var calibrationRawValue = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).CalibrationRawValue;
+ return calibrationRawValue.HasValue ? calibrationRawValue.Value : SqlSingle.Null;
+ }
+ }
+
+ public SqlSingle CalibrationCalibratedValue
+ {
+ get
+ {
+ var calibrationCalibratedValue = new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).CalibrationCalibratedValue;
+ return calibrationCalibratedValue.HasValue ? calibrationCalibratedValue.Value : SqlSingle.Null;
+ }
+ }
+
+ public Parameter OldParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !Parameter.IsNull)
+ {
+ switch (new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).DataType)
+ {
+ case ParameterType.AC3:
+ return new Parameter() { RawType = ParameterType.AC3, RawValue = OldValue.Value.Take(3).ToArray() };
+ case ParameterType.BIN:
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = OldValue.Value.Take(1).ToArray() };
+ case ParameterType.FL:
+ return new Parameter() { RawType = ParameterType.FL, RawValue = OldValue.Value };
+ case ParameterType.INT16:
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = OldValue.Value.Take(2).ToArray() };
+ case ParameterType.INT32:
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = OldValue.Value };
+ case ParameterType.INT8:
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = OldValue.Value.Take(1).ToArray() };
+ case ParameterType.TLP:
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = OldValue.Value.Take(3).ToArray() };
+ case ParameterType.UINT16:
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = OldValue.Value.Take(2).ToArray() };
+ case ParameterType.UINT32:
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = OldValue.Value };
+ case ParameterType.TIME:
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = OldValue.Value };
+ case ParameterType.UINT8:
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = OldValue.Value.Take(1).ToArray() };
+ default:
+ return ROC.Parameter.Null;
+ }
+ }
+ else
+ {
+ return ROC.Parameter.Null;
+ }
+ }
+ }
+
+ public Parameter NewParameterValue
+ {
+ get
+ {
+ if (!PointType.IsNull && !Parameter.IsNull)
+ {
+ switch (new Data.ROCPlusEventRecord(Convert.ToUInt16(Index), Data).DataType)
+ {
+ case ParameterType.AC3:
+ return new Parameter() { RawType = ParameterType.AC3, RawValue = NewValue.Value.Take(3).ToArray() };
+ case ParameterType.AC7:
+ return new Parameter() { RawType = ParameterType.AC7, RawValue = NewValue.Value.Union(new byte[3]).ToArray() };
+ case ParameterType.AC10:
+ return new Parameter() { RawType = ParameterType.AC10, RawValue = NewValue.Value.Union(OldValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Spare.Value))).ToArray() };
+ case ParameterType.AC12:
+ return new Parameter() { RawType = ParameterType.AC12, RawValue = NewValue.Value.Union(OldValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Spare.Value))).Union(new byte[2]).ToArray() };
+ case ParameterType.AC20:
+ return new Parameter() { RawType = ParameterType.AC20, RawValue = NewValue.Value.Union(OldValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Spare.Value))).Union(new byte[10]).ToArray() };
+ case ParameterType.AC30:
+ return new Parameter() { RawType = ParameterType.AC30, RawValue = NewValue.Value.Union(OldValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Spare.Value))).Union(new byte[20]).ToArray() };
+ case ParameterType.AC40:
+ return new Parameter() { RawType = ParameterType.AC40, RawValue = NewValue.Value.Union(OldValue.Value).Union(BitConverter.GetBytes(Convert.ToUInt16(Spare.Value))).Union(new byte[30]).ToArray() };
+ case ParameterType.BIN:
+ return new Parameter() { RawType = ParameterType.BIN, RawValue = NewValue.Value.Take(1).ToArray() };
+ case ParameterType.FL:
+ return new Parameter() { RawType = ParameterType.FL, RawValue = NewValue.Value };
+ case ParameterType.DOUBLE:
+ return new Parameter() { RawType = ParameterType.DOUBLE, RawValue = NewValue.Value.Union(OldValue.Value).ToArray() };
+ case ParameterType.INT16:
+ return new Parameter() { RawType = ParameterType.INT16, RawValue = NewValue.Value.Take(2).ToArray() };
+ case ParameterType.INT32:
+ return new Parameter() { RawType = ParameterType.INT32, RawValue = NewValue.Value };
+ case ParameterType.INT8:
+ return new Parameter() { RawType = ParameterType.INT8, RawValue = NewValue.Value.Take(1).ToArray() };
+ case ParameterType.TLP:
+ return new Parameter() { RawType = ParameterType.TLP, RawValue = NewValue.Value.Take(3).ToArray() };
+ case ParameterType.UINT16:
+ return new Parameter() { RawType = ParameterType.UINT16, RawValue = NewValue.Value.Take(2).ToArray() };
+ case ParameterType.UINT32:
+ return new Parameter() { RawType = ParameterType.UINT32, RawValue = NewValue.Value };
+ case ParameterType.TIME:
+ return new Parameter() { RawType = ParameterType.TIME, RawValue = NewValue.Value };
+ case ParameterType.UINT8:
+ return new Parameter() { RawType = ParameterType.UINT8, RawValue = NewValue.Value.Take(1).ToArray() };
+ default:
+ return ROC.Parameter.Null;
+ }
+ }
+ else
+ {
+ return ROC.Parameter.Null;
+ }
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public static ROCPlusEventRecord Parse(SqlString stringToParse)
+ {
+ var parsedEventRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedEventRecord[1]);
+ if (base64Bytes.Length == 22)
+ {
+ return new ROCPlusEventRecord() { Index = ushort.Parse(parsedEventRecord[0]), Data = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 22 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1}", Index, Convert.ToBase64String(Data));
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ Index = binaryReader.ReadInt32();
+ if (!IsNull)
+ {
+ Data = binaryReader.ReadBytes(22);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Index);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Data, 0, 22);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusEventRecordArray.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusEventRecordArray.cs
new file mode 100644
index 0000000..bb925cc
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusEventRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct ROCPlusEventRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List rocPlusEventRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal ROCPlusEventRecord this[int index]
+ {
+ get
+ {
+ return ROCPlusEventRecords[index];
+ }
+ set
+ {
+ ROCPlusEventRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return ROCPlusEventRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List ROCPlusEventRecords
+ {
+ get
+ {
+ if (rocPlusEventRecords == null)
+ {
+ rocPlusEventRecords = new List();
+ }
+ return rocPlusEventRecords;
+ }
+ }
+
+ public static ROCPlusEventRecordArray Null
+ {
+ get
+ {
+ return (new ROCPlusEventRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", ROCPlusEventRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public ROCPlusEventRecordArray AddROCPlusEventRecord(ROCPlusEventRecord rocPlusEventRecord)
+ {
+ ROCPlusEventRecords.Add(rocPlusEventRecord);
+ return this;
+ }
+
+ public static ROCPlusEventRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCPlusEventRecords = new ROCPlusEventRecordArray();
+ parsedROCPlusEventRecords.rocPlusEventRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCPlusEventRecords.rocPlusEventRecords.Add(ROCPlusEventRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCPlusEventRecords;
+ }
+
+ public ROCPlusEventRecord GetROCPlusEventRecord(SqlInt32 index)
+ {
+ return ROCPlusEventRecords[index.Value];
+ }
+
+ public static EventRecordArray Empty()
+ {
+ var eventRecord = new EventRecordArray { eventRecords = new List() };
+ return eventRecord;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ ROCPlusEventRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var rocPlusEventRecord = new ROCPlusEventRecord();
+ rocPlusEventRecord.Read(binaryReader);
+ ROCPlusEventRecords.Add(rocPlusEventRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; ROCPlusEventRecords.Count > i; i++)
+ {
+ ROCPlusEventRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryPointArray.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryPointArray.cs
new file mode 100644
index 0000000..b1b5317
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryPointArray.cs
@@ -0,0 +1,159 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct ROCPlusHistoryPointArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List historyPoints;
+
+ #endregion
+
+ #region Properties
+
+ internal byte this[int index]
+ {
+ get
+ {
+ return HistoryPoints[index];
+ }
+ set
+ {
+ HistoryPoints[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return HistoryPoints.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List HistoryPoints
+ {
+ get
+ {
+ if (historyPoints == null)
+ {
+ historyPoints = new List();
+ }
+ return historyPoints;
+ }
+ }
+
+ public static ROCPlusHistoryPointArray Null
+ {
+ get
+ {
+ return (new ROCPlusHistoryPointArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", HistoryPoints.Select(parameter => parameter.ToString()));
+ }
+
+ public ROCPlusHistoryPointArray AddHistoryPoint(byte historyPoint)
+ {
+ HistoryPoints.Add(historyPoint);
+ return this;
+ }
+
+ public static ROCPlusHistoryPointArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCPlusHistoryPointArray = new ROCPlusHistoryPointArray();
+ parsedROCPlusHistoryPointArray.historyPoints = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCPlusHistoryPointArray.HistoryPoints.Add(byte.Parse(parsedString[i]));
+ }
+
+ return parsedROCPlusHistoryPointArray;
+ }
+
+ public byte GetHistoryPoint(SqlInt32 index)
+ {
+ return HistoryPoints[index.Value];
+ }
+
+ public static ROCPlusHistoryPointArray Empty()
+ {
+ var rocPlusHistoryPointArray = new ROCPlusHistoryPointArray() { historyPoints = new List() };
+ return rocPlusHistoryPointArray;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ HistoryPoints.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ HistoryPoints.Add(binaryReader.ReadByte());
+ }
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; HistoryPoints.Count > i; i++)
+ {
+ binaryWriter.Write(HistoryPoints[i]);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryRecord.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryRecord.cs
new file mode 100644
index 0000000..f6af00a
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryRecord.cs
@@ -0,0 +1,157 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Data.SqlTypes;
+using System.IO;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 15)]
+ public struct ROCPlusHistoryRecord : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ public byte[] value;
+
+ #endregion
+
+ #region Properties
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public bool HasTimeStamp
+ {
+ get
+ {
+ return Length == 8;
+ }
+ }
+
+ public static ROCPlusHistoryRecord Null
+ {
+ get
+ {
+ return new ROCPlusHistoryRecord() { IsNull = true };
+ }
+ }
+
+ public byte HistorySegment
+ {
+ get;
+ internal set;
+ }
+
+ public byte HistoryPointNumber
+ {
+ get;
+ internal set;
+ }
+
+ public int Index
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return Value.Length;
+ }
+ }
+
+ public byte[] Value
+ {
+ get
+ {
+ if (value == null)
+ {
+ value = new byte[8];
+ }
+ return value;
+ }
+ internal set
+ {
+ this.value = value;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ public SqlDateTime ToDateTimeStamp(DateTime deviceDateTime)
+ {
+ var dateTimeStamp = new Data.ROCPlusHistoryRecord() { HistoryPointNumber = this.HistoryPointNumber, HistorySegment = this.HistorySegment, Index = this.Index, Value = this.Value }.DateTimeStamp;
+ return dateTimeStamp.HasValue ? dateTimeStamp.Value : SqlDateTime.Null;
+ }
+
+ public SqlSingle ToFloat()
+ {
+ var floatValue = new Data.ROCPlusHistoryRecord() { HistoryPointNumber = this.HistoryPointNumber, HistorySegment = this.HistorySegment, Index = this.Index, Value = this.Value }.ToNullableFloat();
+ return floatValue.HasValue ? floatValue.Value : SqlSingle.Null;
+ }
+
+ public static ROCPlusHistoryRecord Parse(SqlString stringToParse)
+ {
+ var parsedROCPlusHistoryRecord = stringToParse.Value.Split(",".ToCharArray());
+ var base64Bytes = Convert.FromBase64String(parsedROCPlusHistoryRecord[3]);
+ if (base64Bytes.Length == 8 || base64Bytes.Length == 4)
+ {
+ return new ROCPlusHistoryRecord() { Index = ushort.Parse(parsedROCPlusHistoryRecord[0]), HistorySegment = byte.Parse(parsedROCPlusHistoryRecord[1]), HistoryPointNumber = byte.Parse(parsedROCPlusHistoryRecord[2]), value = base64Bytes };
+ }
+ else
+ {
+ throw new ArgumentException("Input must be exactly 8 or 4 bytes");
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Format("{0},{1},{2},{3}", Index, HistorySegment, HistoryPointNumber, Convert.ToBase64String(Value));
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ IsNull = binaryReader.ReadBoolean();
+ if (!IsNull)
+ {
+ var length = binaryReader.ReadInt32();
+ Index = binaryReader.ReadInt32();
+ HistorySegment = binaryReader.ReadByte();
+ HistoryPointNumber = binaryReader.ReadByte();
+ Value = binaryReader.ReadBytes(length);
+ }
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ if (!IsNull)
+ {
+ binaryWriter.Write(Length);
+ binaryWriter.Write(Index);
+ binaryWriter.Write(HistorySegment);
+ binaryWriter.Write(HistoryPointNumber);
+ binaryWriter.Write(Value, 0, Length);
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryRecordArray.cs b/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryRecordArray.cs
new file mode 100644
index 0000000..bd3f74f
--- /dev/null
+++ b/DeviceSQL.SQLTypes.ROC/ROCPlusHistoryRecordArray.cs
@@ -0,0 +1,162 @@
+#region Imported Types
+
+using Microsoft.SqlServer.Server;
+using System;
+using System.Collections.Generic;
+using System.Data.SqlTypes;
+using System.IO;
+using System.Linq;
+
+#endregion
+
+namespace DeviceSQL.SQLTypes.ROC
+{
+ [Serializable()]
+ [SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
+ public struct ROCPlusHistoryRecordArray : INullable, IBinarySerialize
+ {
+
+ #region Fields
+
+ internal List rocPlusHistoryRecords;
+
+ #endregion
+
+ #region Properties
+
+ internal ROCPlusHistoryRecord this[int index]
+ {
+ get
+ {
+ return ROCPlusHistoryRecords[index];
+ }
+ set
+ {
+ ROCPlusHistoryRecords[index] = value;
+ }
+ }
+
+ public bool IsNull
+ {
+ get;
+ internal set;
+ }
+
+ public int Length
+ {
+ get
+ {
+ return ROCPlusHistoryRecords.Count;
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods
+
+ private List ROCPlusHistoryRecords
+ {
+ get
+ {
+ if (rocPlusHistoryRecords == null)
+ {
+ rocPlusHistoryRecords = new List();
+ }
+ return rocPlusHistoryRecords;
+ }
+ }
+
+ public static ROCPlusHistoryRecordArray Null
+ {
+ get
+ {
+ return (new ROCPlusHistoryRecordArray() { IsNull = true });
+ }
+ }
+
+ public override string ToString()
+ {
+ return string.Join("|", ROCPlusHistoryRecords.Select(parameter => parameter.ToString()));
+ }
+
+ public ROCPlusHistoryRecordArray AddROCPlusHistoryRecord(ROCPlusHistoryRecord rocPlusHistoryRecord)
+ {
+ ROCPlusHistoryRecords.Add(rocPlusHistoryRecord);
+ return this;
+ }
+
+ public static ROCPlusHistoryRecordArray Parse(SqlString stringToParse)
+ {
+ if (stringToParse.IsNull)
+ {
+ return Null;
+ }
+
+ var parsedROCPlusHistoryRecords = new ROCPlusHistoryRecordArray();
+ parsedROCPlusHistoryRecords.rocPlusHistoryRecords = new List();
+ var parsedString = stringToParse.Value.Split("|".ToCharArray());
+
+ for (var i = 0; parsedString.Length > i; i++)
+ {
+ parsedROCPlusHistoryRecords.rocPlusHistoryRecords.Add(ROCPlusHistoryRecord.Parse(parsedString[i]));
+ }
+
+ return parsedROCPlusHistoryRecords;
+ }
+
+ public ROCPlusHistoryRecord GetROCPlusHistoryRecord(SqlInt32 index)
+ {
+ return ROCPlusHistoryRecords[index.Value];
+ }
+
+ public static ROCPlusHistoryRecordArray Empty()
+ {
+ var rocPlusHistoryRecord = new ROCPlusHistoryRecordArray { rocPlusHistoryRecords = new List() };
+ return rocPlusHistoryRecord;
+ }
+
+ #endregion
+
+ #region Serialization Methods
+
+ public void Read(BinaryReader binaryReader)
+ {
+ ROCPlusHistoryRecords.Clear();
+ IsNull = binaryReader.ReadBoolean();
+
+ if (IsNull)
+ {
+ return;
+ }
+ else
+ {
+ var length = binaryReader.ReadInt32();
+
+ for (var i = 0; length > i; i++)
+ {
+ var rocPlusHistoryRecord = new ROCPlusHistoryRecord();
+ rocPlusHistoryRecord.Read(binaryReader);
+ ROCPlusHistoryRecords.Add(rocPlusHistoryRecord);
+ }
+ }
+
+ }
+
+ public void Write(BinaryWriter binaryWriter)
+ {
+ binaryWriter.Write(IsNull);
+ binaryWriter.Write(Length);
+
+ if (Length > 0)
+ {
+ for (var i = 0; ROCPlusHistoryRecords.Count > i; i++)
+ {
+ ROCPlusHistoryRecords[i].Write(binaryWriter);
+ }
+ }
+ }
+
+ #endregion
+
+ }
+}
diff --git a/DeviceSQL.SQLTypes/DeviceSQL.SQLTypes.csproj b/DeviceSQL.SQLTypes/DeviceSQL.SQLTypes.csproj
new file mode 100644
index 0000000..94f23de
--- /dev/null
+++ b/DeviceSQL.SQLTypes/DeviceSQL.SQLTypes.csproj
@@ -0,0 +1,239 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {91B62CD7-190B-4727-B1EB-66B51913709D}
+ Library
+ Properties
+ DeviceSQL.SQLTypes
+ DeviceSQL.SQLTypes
+ v4.8
+ 512
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Devices\Device\Modbus\Data\BooleanRegister.cs
+
+
+ Devices\Device\Modbus\Data\CoilRegister.cs
+
+
+ Devices\Device\Modbus\Data\DiscreteInputRegister.cs
+
+
+ Devices\Device\Modbus\Data\EventArchiveRecord.cs
+
+
+ Devices\Device\Modbus\Data\FloatRegister.cs
+
+
+ Devices\Device\Modbus\Data\HistoryArchiveRecord.cs
+
+
+ Devices\Device\Modbus\Data\HoldingRegister.cs
+
+
+ Devices\Device\Modbus\Data\IModbusRegisterData.cs
+
+
+ Devices\Device\Modbus\Data\InputRegister.cs
+
+
+ Devices\Device\Modbus\Data\LongRegister.cs
+
+
+ Devices\Device\Modbus\Data\ModbusAddress.cs
+
+
+ Devices\Device\Modbus\Data\ModbusRegister.cs
+
+
+ Devices\Device\Modbus\Data\ShortRegister.cs
+
+
+ Devices\Device\Modbus\Data\StringRegister.cs
+
+
+ Devices\Device\Modbus\ModbusConverter.cs
+
+
+ Devices\Device\ROC\Data\Ac10Parameter.cs
+
+
+ Devices\Device\ROC\Data\Ac12Parameter.cs
+
+
+ Devices\Device\ROC\Data\Ac20Parameter.cs
+
+
+ Devices\Device\ROC\Data\Ac30Parameter.cs
+
+
+ Devices\Device\ROC\Data\Ac3Parameter.cs
+
+
+ Devices\Device\ROC\Data\Ac40Parameter.cs
+
+
+ Devices\Device\ROC\Data\Ac7Parameter.cs
+
+
+ Devices\Device\ROC\Data\AlarmRecord.cs
+
+
+ Devices\Device\ROC\Data\ArchiveInfo.cs
+
+
+ Devices\Device\ROC\Data\AuditLogRecord.cs
+
+
+ Devices\Device\ROC\Data\BinParameter.cs
+
+
+ Devices\Device\ROC\Data\DoubleParameter.cs
+
+
+ Devices\Device\ROC\Data\EventRecord.cs
+
+
+ Devices\Device\ROC\Data\FlpParameter.cs
+
+
+ Devices\Device\ROC\Data\FstCodeChunk.cs
+
+
+ Devices\Device\ROC\Data\FstHeaderInfo.cs
+
+
+ Devices\Device\ROC\Data\HistoryPointConfiguration.cs
+
+
+ Devices\Device\ROC\Data\HistoryRecord.cs
+
+
+ Devices\Device\ROC\Data\Int16Parameter.cs
+
+
+ Devices\Device\ROC\Data\Int32Parameter.cs
+
+
+ Devices\Device\ROC\Data\Int8Parameter.cs
+
+
+ Devices\Device\ROC\Data\IRocParameterData.cs
+
+
+ Devices\Device\ROC\Data\Parameter.cs
+
+
+ Devices\Device\ROC\Data\ParameterType.cs
+
+
+ Devices\Device\ROC\Data\RocPlusAlarmRecord.cs
+
+
+ Devices\Device\ROC\Data\RocPlusEventRecord.cs
+
+
+ Devices\Device\ROC\Data\RocPlusHistoryRecord.cs
+
+
+ Devices\Device\ROC\Data\TimeParameter.cs
+
+
+ Devices\Device\ROC\Data\Tlp.cs
+
+
+ Devices\Device\ROC\Data\TlpParameter.cs
+
+
+ Devices\Device\ROC\Data\UInt16Parameter.cs
+
+
+ Devices\Device\ROC\Data\UInt32Parameter.cs
+
+
+ Devices\Device\ROC\Data\UInt8Parameter.cs
+
+
+ Devices\Device\ROC\Message\ParameterDatabase.cs
+
+
+ IO\Channels\HexConverter.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL/Types/ModbusMaster/BooleanRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/BooleanRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/BooleanRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/BooleanRegister.cs
index 7ac3bbd..3717216 100644
--- a/DeviceSQL/Types/ModbusMaster/BooleanRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/BooleanRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 8)]
diff --git a/DeviceSQL/Types/ModbusMaster/BooleanRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/BooleanRegisterArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/BooleanRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/BooleanRegisterArray.cs
index dc051cb..ccfda43 100644
--- a/DeviceSQL/Types/ModbusMaster/BooleanRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/BooleanRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/CoilRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/CoilRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/CoilRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/CoilRegister.cs
index a2cc44b..381d7b1 100644
--- a/DeviceSQL/Types/ModbusMaster/CoilRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/CoilRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 8)]
diff --git a/DeviceSQL/Types/ModbusMaster/CoilRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/CoilRegisterArray.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/CoilRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/CoilRegisterArray.cs
index 6a11f55..2e38c29 100644
--- a/DeviceSQL/Types/ModbusMaster/CoilRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/CoilRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/DiscreteInputRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/DiscreteInputRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/DiscreteInputRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/DiscreteInputRegister.cs
index 69bd86a..4067ca8 100644
--- a/DeviceSQL/Types/ModbusMaster/DiscreteInputRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/DiscreteInputRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 8)]
diff --git a/DeviceSQL/Types/ModbusMaster/DiscreteInputRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/DiscreteInputRegisterArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/DiscreteInputRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/DiscreteInputRegisterArray.cs
index 88ec74f..3fb046d 100644
--- a/DeviceSQL/Types/ModbusMaster/DiscreteInputRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/DiscreteInputRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/EventArchiveRecord.cs b/DeviceSQL.SQLTypes/ModbusMaster/EventArchiveRecord.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/EventArchiveRecord.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/EventArchiveRecord.cs
index 07c7774..e7bea83 100644
--- a/DeviceSQL/Types/ModbusMaster/EventArchiveRecord.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/EventArchiveRecord.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 264)]
diff --git a/DeviceSQL/Types/ModbusMaster/EventArchiveRecordArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/EventArchiveRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/EventArchiveRecordArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/EventArchiveRecordArray.cs
index 2c5b9a3..60753b5 100644
--- a/DeviceSQL/Types/ModbusMaster/EventArchiveRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/EventArchiveRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/FloatRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/FloatRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/FloatRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/FloatRegister.cs
index 93c8a5a..2e7b523 100644
--- a/DeviceSQL/Types/ModbusMaster/FloatRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/FloatRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 13)]
diff --git a/DeviceSQL/Types/ModbusMaster/FloatRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/FloatRegisterArray.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/FloatRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/FloatRegisterArray.cs
index 43d0353..35a9515 100644
--- a/DeviceSQL/Types/ModbusMaster/FloatRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/FloatRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/HistoryArchiveRecord.cs b/DeviceSQL.SQLTypes/ModbusMaster/HistoryArchiveRecord.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/HistoryArchiveRecord.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/HistoryArchiveRecord.cs
index 5252536..a2ddbdc 100644
--- a/DeviceSQL/Types/ModbusMaster/HistoryArchiveRecord.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/HistoryArchiveRecord.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 264)]
diff --git a/DeviceSQL/Types/ModbusMaster/HistoryArchiveRecordArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/HistoryArchiveRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/HistoryArchiveRecordArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/HistoryArchiveRecordArray.cs
index 542b21f..8e4178e 100644
--- a/DeviceSQL/Types/ModbusMaster/HistoryArchiveRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/HistoryArchiveRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/HoldingRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/HoldingRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/HoldingRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/HoldingRegister.cs
index 92b1cea..4eede16 100644
--- a/DeviceSQL/Types/ModbusMaster/HoldingRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/HoldingRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 10)]
diff --git a/DeviceSQL/Types/ModbusMaster/HoldingRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/HoldingRegisterArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/HoldingRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/HoldingRegisterArray.cs
index 82ff78a..31c49d6 100644
--- a/DeviceSQL/Types/ModbusMaster/HoldingRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/HoldingRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/InputRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/InputRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/InputRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/InputRegister.cs
index ac3be00..b234b63 100644
--- a/DeviceSQL/Types/ModbusMaster/InputRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/InputRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 10)]
diff --git a/DeviceSQL/Types/ModbusMaster/InputRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/InputRegisterArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/InputRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/InputRegisterArray.cs
index e1cee68..6ef3074 100644
--- a/DeviceSQL/Types/ModbusMaster/InputRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/InputRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/LongRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/LongRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/LongRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/LongRegister.cs
index b6198a5..5690095 100644
--- a/DeviceSQL/Types/ModbusMaster/LongRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/LongRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 13)]
diff --git a/DeviceSQL/Types/ModbusMaster/LongRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/LongRegisterArray.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/LongRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/LongRegisterArray.cs
index a0e04e5..4494d1d 100644
--- a/DeviceSQL/Types/ModbusMaster/LongRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/LongRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/ModbusAddress.cs b/DeviceSQL.SQLTypes/ModbusMaster/ModbusAddress.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/ModbusAddress.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/ModbusAddress.cs
index d52d0a6..404df43 100644
--- a/DeviceSQL/Types/ModbusMaster/ModbusAddress.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/ModbusAddress.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 6)]
diff --git a/DeviceSQL/Types/ModbusMaster/ShortRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/ShortRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/ShortRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/ShortRegister.cs
index 8bdc1c0..7760aaf 100644
--- a/DeviceSQL/Types/ModbusMaster/ShortRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/ShortRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 10)]
diff --git a/DeviceSQL/Types/ModbusMaster/ShortRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/ShortRegisterArray.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/ShortRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/ShortRegisterArray.cs
index 918a620..79cc2d6 100644
--- a/DeviceSQL/Types/ModbusMaster/ShortRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/ShortRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ModbusMaster/StringRegister.cs b/DeviceSQL.SQLTypes/ModbusMaster/StringRegister.cs
similarity index 98%
rename from DeviceSQL/Types/ModbusMaster/StringRegister.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/StringRegister.cs
index 945c0b1..c66f5a1 100644
--- a/DeviceSQL/Types/ModbusMaster/StringRegister.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/StringRegister.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 264)]
diff --git a/DeviceSQL/Types/ModbusMaster/StringRegisterArray.cs b/DeviceSQL.SQLTypes/ModbusMaster/StringRegisterArray.cs
similarity index 99%
rename from DeviceSQL/Types/ModbusMaster/StringRegisterArray.cs
rename to DeviceSQL.SQLTypes/ModbusMaster/StringRegisterArray.cs
index c827f91..3ffb171 100644
--- a/DeviceSQL/Types/ModbusMaster/StringRegisterArray.cs
+++ b/DeviceSQL.SQLTypes/ModbusMaster/StringRegisterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.MODBUSMaster
+namespace DeviceSQL.SQLTypes.MODBUSMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL.TestHarness/Properties/AssemblyInfo.cs b/DeviceSQL.SQLTypes/Properties/AssemblyInfo.cs
similarity index 78%
rename from DeviceSQL.TestHarness/Properties/AssemblyInfo.cs
rename to DeviceSQL.SQLTypes/Properties/AssemblyInfo.cs
index 6b01e4f..e2577ec 100644
--- a/DeviceSQL.TestHarness/Properties/AssemblyInfo.cs
+++ b/DeviceSQL.SQLTypes/Properties/AssemblyInfo.cs
@@ -5,12 +5,12 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("DeviceSQL.TestHarness")]
-[assembly: AssemblyDescription("")]
+[assembly: AssemblyTitle("DeviceSQL.SQLTypes")]
+[assembly: AssemblyDescription("DeviceSQL.SQLTypes")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("DeviceSQL.TestHarness")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("ff09f40d-a515-4abb-9db1-21d9d1f2793e")]
+[assembly: Guid("91b62cd7-190b-4727-b1eb-66b51913709d")]
// Version information for an assembly consists of the following four values:
//
diff --git a/DeviceSQL/Types/ROCMaster/AlarmRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/AlarmRecord.cs
similarity index 98%
rename from DeviceSQL/Types/ROCMaster/AlarmRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/AlarmRecord.cs
index 86da088..e11ceef 100644
--- a/DeviceSQL/Types/ROCMaster/AlarmRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/AlarmRecord.cs
@@ -8,7 +8,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
diff --git a/DeviceSQL/Types/ROCMaster/AlarmRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/AlarmRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/AlarmRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/AlarmRecordArray.cs
index b3217d6..098b7fa 100644
--- a/DeviceSQL/Types/ROCMaster/AlarmRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/AlarmRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/ArchiveInformation.cs b/DeviceSQL.SQLTypes/ROCMaster/ArchiveInformation.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ArchiveInformation.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ArchiveInformation.cs
index 82b3b9a..cdfb814 100644
--- a/DeviceSQL/Types/ROCMaster/ArchiveInformation.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ArchiveInformation.cs
@@ -8,7 +8,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
diff --git a/DeviceSQL/Types/ROCMaster/AuditLogRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/AuditLogRecord.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/AuditLogRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/AuditLogRecord.cs
index 829f3a7..5e47e38 100644
--- a/DeviceSQL/Types/ROCMaster/AuditLogRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/AuditLogRecord.cs
@@ -1,6 +1,7 @@
#region Imported Types
using DeviceSQL.Device.ROC.Data;
+using DeviceSQL.Devices.Device.ROC.Data;
using Microsoft.SqlServer.Server;
using System;
using System.Data.SqlTypes;
@@ -9,7 +10,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 29)]
diff --git a/DeviceSQL/Types/ROCMaster/AuditLogRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/AuditLogRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/AuditLogRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/AuditLogRecordArray.cs
index e435c0d..459576b 100644
--- a/DeviceSQL/Types/ROCMaster/AuditLogRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/AuditLogRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/EventRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/EventRecord.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/EventRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/EventRecord.cs
index aa47e75..6319a7f 100644
--- a/DeviceSQL/Types/ROCMaster/EventRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/EventRecord.cs
@@ -1,6 +1,7 @@
#region Imported Types
using DeviceSQL.Device.ROC.Data;
+using DeviceSQL.Devices.Device.ROC.Data;
using Microsoft.SqlServer.Server;
using System;
using System.Data.SqlTypes;
@@ -9,7 +10,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
diff --git a/DeviceSQL/Types/ROCMaster/EventRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/EventRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/EventRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/EventRecordArray.cs
index 0926089..05a7a36 100644
--- a/DeviceSQL/Types/ROCMaster/EventRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/EventRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/FSTInformation.cs b/DeviceSQL.SQLTypes/ROCMaster/FSTInformation.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/FSTInformation.cs
rename to DeviceSQL.SQLTypes/ROCMaster/FSTInformation.cs
index 4c2f27c..93d216e 100644
--- a/DeviceSQL/Types/ROCMaster/FSTInformation.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/FSTInformation.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/HistoryRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/HistoryRecord.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/HistoryRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/HistoryRecord.cs
index 91bec24..505db2f 100644
--- a/DeviceSQL/Types/ROCMaster/HistoryRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/HistoryRecord.cs
@@ -8,7 +8,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 11)]
diff --git a/DeviceSQL/Types/ROCMaster/HistoryRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/HistoryRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/HistoryRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/HistoryRecordArray.cs
index 471c98c..0c8097a 100644
--- a/DeviceSQL/Types/ROCMaster/HistoryRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/HistoryRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/Parameter.cs b/DeviceSQL.SQLTypes/ROCMaster/Parameter.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/Parameter.cs
rename to DeviceSQL.SQLTypes/ROCMaster/Parameter.cs
index 6cab5b7..af587c9 100644
--- a/DeviceSQL/Types/ROCMaster/Parameter.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/Parameter.cs
@@ -1,6 +1,7 @@
#region Imported Types
using DeviceSQL.Device.ROC.Data;
+using DeviceSQL.Devices.Device.ROC.Data;
using Microsoft.SqlServer.Server;
using System;
using System.Data.SqlTypes;
@@ -8,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
diff --git a/DeviceSQL/Types/ROCMaster/ParameterArray.cs b/DeviceSQL.SQLTypes/ROCMaster/ParameterArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ParameterArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ParameterArray.cs
index b9a676a..97e4824 100644
--- a/DeviceSQL/Types/ROCMaster/ParameterArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ParameterArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusAlarmRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusAlarmRecord.cs
similarity index 98%
rename from DeviceSQL/Types/ROCMaster/ROCPlusAlarmRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusAlarmRecord.cs
index 3ac0be1..61deae3 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusAlarmRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusAlarmRecord.cs
@@ -1,6 +1,7 @@
#region Imported Types
using DeviceSQL.Device.ROC.Data;
+using DeviceSQL.Devices.Device.ROC.Data;
using Microsoft.SqlServer.Server;
using System;
using System.Data.SqlTypes;
@@ -9,7 +10,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 28)]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusAlarmRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusAlarmRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ROCPlusAlarmRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusAlarmRecordArray.cs
index 5d95eff..af950c8 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusAlarmRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusAlarmRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusEventRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusEventRecord.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ROCPlusEventRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusEventRecord.cs
index 8c6cf9d..533a872 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusEventRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusEventRecord.cs
@@ -1,6 +1,7 @@
#region Imported Types
using DeviceSQL.Device.ROC.Data;
+using DeviceSQL.Devices.Device.ROC.Data;
using Microsoft.SqlServer.Server;
using System;
using System.Data.SqlTypes;
@@ -9,7 +10,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 27)]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusEventRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusEventRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ROCPlusEventRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusEventRecordArray.cs
index 35ae73f..6ef2e3a 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusEventRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusEventRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusHistoryPointArray.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryPointArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ROCPlusHistoryPointArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryPointArray.cs
index 0339928..6ee3e53 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusHistoryPointArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryPointArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusHistoryRecord.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryRecord.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ROCPlusHistoryRecord.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryRecord.cs
index ee7bdc9..57ab050 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusHistoryRecord.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryRecord.cs
@@ -7,7 +7,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = 15)]
diff --git a/DeviceSQL/Types/ROCMaster/ROCPlusHistoryRecordArray.cs b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryRecordArray.cs
similarity index 99%
rename from DeviceSQL/Types/ROCMaster/ROCPlusHistoryRecordArray.cs
rename to DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryRecordArray.cs
index c056a31..8727010 100644
--- a/DeviceSQL/Types/ROCMaster/ROCPlusHistoryRecordArray.cs
+++ b/DeviceSQL.SQLTypes/ROCMaster/ROCPlusHistoryRecordArray.cs
@@ -9,7 +9,7 @@
#endregion
-namespace DeviceSQL.Types.ROCMaster
+namespace DeviceSQL.SQLTypes.ROCMaster
{
[Serializable()]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = false, IsFixedLength = false, MaxByteSize = -1)]
diff --git a/DeviceSQL.Service/API/ChannelController.cs b/DeviceSQL.Service/API/ChannelController.cs
new file mode 100644
index 0000000..629fa43
--- /dev/null
+++ b/DeviceSQL.Service/API/ChannelController.cs
@@ -0,0 +1,128 @@
+using DeviceSQL.IO.Channels;
+using DeviceSQL.Service.IOC;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Http;
+
+namespace DeviceSQL.Service.API
+{
+ public class ChannelController : ApiController
+ {
+
+ public ConcurrentDictionary ChannelConcurrentDictionary
+ {
+ get
+ {
+ return SimpleIOC.Default.GetInstance>();
+ }
+ }
+
+ public EventLog EventLog
+ {
+ get
+ {
+ return SimpleIOC.Default.GetInstance();
+ }
+ }
+
+ [HttpGet]
+ [Route("api/Channels/GetChannels")]
+ public IEnumerable GetChannels()
+ {
+ foreach (var channelKeyValuePair in ChannelConcurrentDictionary)
+ {
+ yield return channelKeyValuePair.Value;
+ }
+ }
+
+ [HttpGet]
+ [Route("api/Channels/RemoveChannel")]
+ public void RemoveChannel(string channelName)
+ {
+ if (ChannelConcurrentDictionary.TryRemove(channelName, out IChannel channel))
+ {
+ try
+ {
+ channel.Dispose();
+ }
+ catch (Exception ex)
+ {
+ EventLog.WriteEntry($"Error disposing channel: {ex.Message}", EventLogEntryType.Error);
+ throw new Exception($"Error disposing channel: {ex.Message}");
+ }
+ }
+ else
+ {
+ EventLog.WriteEntry("Channel does not exist", EventLogEntryType.Error);
+ throw new Exception("Channel does not exist");
+ }
+ }
+
+ [HttpGet]
+ [Route("api/Channels/AddTcpChannel")]
+ public void AddTcpChannel(string channelName, string hostName, int hostPort, int connectionAttempts, int connectionRetryDelay, int readTimeout, int writeTimeout)
+ {
+ int currentConnectAttempts = 0;
+ TcpChannel tcpChannel;
+
+
+
+ try
+ {
+ tcpChannel = new TcpChannel()
+ {
+ HostName = hostName,
+ HostPort = hostPort,
+ ConnectionAttempts = connectionAttempts,
+ ConnectionRetryDelay = connectionRetryDelay,
+ TcpClientReadTimeout = readTimeout,
+ TcpClientWriteTimeout = writeTimeout
+ };
+
+ if (ChannelConcurrentDictionary.TryAdd(channelName, tcpChannel))
+ {
+
+ Connect:
+ currentConnectAttempts++;
+
+ try
+ {
+ tcpChannel.TcpClient = new TcpClient();
+ tcpChannel.TcpClient.Connect(tcpChannel.HostName, tcpChannel.HostPort);
+ tcpChannel.ReadTimeout = tcpChannel.TcpClientReadTimeout;
+ tcpChannel.WriteTimeout = tcpChannel.TcpClientWriteTimeout;
+ }
+ catch (SocketException)
+ {
+ if (currentConnectAttempts > tcpChannel.ConnectionAttempts)
+ {
+ throw new Exception("Unable to connect to host");
+ }
+ else
+ {
+ System.Threading.Thread.Sleep(tcpChannel.ConnectionRetryDelay);
+ goto Connect;
+ }
+ }
+ }
+ else
+ {
+ EventLog.WriteEntry("TCP channel already exists", EventLogEntryType.Error);
+ throw new Exception("TCP channel already exists");
+ }
+ }
+ catch (Exception ex)
+ {
+ EventLog.WriteEntry($"Error creating TCP channel: {ex.Message}", EventLogEntryType.Error);
+ throw new Exception($"Error creating TCP channel: {ex.Message}");
+ }
+ }
+ }
+}
diff --git a/DeviceSQL.Service/App.config b/DeviceSQL.Service/App.config
new file mode 100644
index 0000000..f72ba73
--- /dev/null
+++ b/DeviceSQL.Service/App.config
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ http://localhost:8080
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DeviceSQL.Service/DeviceSQL.Service.csproj b/DeviceSQL.Service/DeviceSQL.Service.csproj
new file mode 100644
index 0000000..985f3b1
--- /dev/null
+++ b/DeviceSQL.Service/DeviceSQL.Service.csproj
@@ -0,0 +1,153 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}
+ WinExe
+ DeviceSQL.Service
+ DeviceSQL.Service
+ v4.8
+ 512
+ true
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ false
+
+
+
+
+
+
+
+ ..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll
+
+
+ ..\packages\Microsoft.Owin.Diagnostics.4.0.1\lib\net45\Microsoft.Owin.Diagnostics.dll
+
+
+ ..\packages\Microsoft.Owin.Host.HttpListener.4.0.1\lib\net45\Microsoft.Owin.Host.HttpListener.dll
+
+
+ ..\packages\Microsoft.Owin.Hosting.4.0.1\lib\net45\Microsoft.Owin.Hosting.dll
+
+
+ ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll
+
+
+ ..\packages\Owin.1.0\lib\net40\Owin.dll
+
+
+
+
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll
+
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Owin.5.2.7\lib\net45\System.Web.Http.Owin.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Component
+
+
+ ProjectInstaller.cs
+
+
+ Component
+
+
+ DeviceSqlService.cs
+
+
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+ DeviceSqlService.cs
+
+
+ ProjectInstaller.cs
+
+
+
+
+ {5deadadf-be60-4774-80c6-97b3a83fa289}
+ DeviceSQL.Devices.Common
+
+
+ {0869e7fe-4fac-4fc5-a2a8-313f410cf8cd}
+ DeviceSQL.Devices.Modbus
+
+
+ {af0e4b64-f2c2-4459-a518-9aa905ff6f0f}
+ DeviceSQL.Devices.ROC
+
+
+ {256ca566-5436-4543-bc13-d2480bee70c2}
+ DeviceSQL.SQLTypes.ROC
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.Service/DeviceSqlService.Designer.cs b/DeviceSQL.Service/DeviceSqlService.Designer.cs
new file mode 100644
index 0000000..d018be2
--- /dev/null
+++ b/DeviceSQL.Service/DeviceSqlService.Designer.cs
@@ -0,0 +1,40 @@
+namespace DeviceSQL.Service
+{
+ partial class DeviceSqlService
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ //
+ // DeviceSqlService
+ //
+ this.ServiceName = "DeviceSqlSvc";
+
+ }
+
+ #endregion
+ }
+}
diff --git a/DeviceSQL.Service/DeviceSqlService.cs b/DeviceSQL.Service/DeviceSqlService.cs
new file mode 100644
index 0000000..16f6f98
--- /dev/null
+++ b/DeviceSQL.Service/DeviceSqlService.cs
@@ -0,0 +1,66 @@
+using DeviceSQL.Device;
+using DeviceSQL.IO.Channels;
+using DeviceSQL.Service.IOC;
+using Microsoft.Owin.Hosting;
+using System;
+using System.Collections.Concurrent;
+using System.Diagnostics;
+using System.ServiceProcess;
+
+namespace DeviceSQL.Service
+{
+ public partial class DeviceSqlService : ServiceBase
+ {
+
+ private IDisposable webAppServer = null;
+
+ public DeviceSqlService()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnStart(string[] args)
+ {
+ SimpleIOC.Default.Register(() => { return new ConcurrentDictionary(); });
+ SimpleIOC.Default.Register(() => { return new ConcurrentDictionary(); });
+ SimpleIOC.Default.Register(() => { return EventLog; });
+ webAppServer = WebApp.Start(url: Properties.Settings.Default.BaseAddress);
+ }
+
+ protected override void OnStop()
+ {
+ if (webAppServer != null)
+ {
+ try
+ {
+ webAppServer.Dispose();
+ }
+ catch (Exception ex)
+ {
+ EventLog.WriteEntry($"Unable to dispose web app server: {ex.Message}", EventLogEntryType.Error);
+ }
+ }
+
+ if (SimpleIOC.Default.ContainsCreated>())
+ {
+
+ var channelConcurrentDictionary = SimpleIOC.Default.GetInstance>();
+
+ foreach (var channelKeyValuePair in channelConcurrentDictionary)
+ {
+ try
+ {
+ channelKeyValuePair.Value.Dispose();
+ }
+ catch (Exception ex)
+ {
+ EventLog.WriteEntry($"Unable to dispose channel: {ex.Message}", EventLogEntryType.Error);
+ }
+ }
+ }
+
+ base.OnStop();
+
+ }
+ }
+}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Resources.resx b/DeviceSQL.Service/DeviceSqlService.resx
similarity index 87%
rename from DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Resources.resx
rename to DeviceSQL.Service/DeviceSqlService.resx
index af7dbeb..e5858cc 100644
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Resources.resx
+++ b/DeviceSQL.Service/DeviceSqlService.resx
@@ -46,7 +46,7 @@
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
- : System.Serialization.Formatters.Binary.BinaryFormatter
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
@@ -60,6 +60,7 @@
: and then encoded with base64 encoding.
-->
+
@@ -68,9 +69,10 @@
-
+
+
@@ -85,9 +87,10 @@
-
+
+
@@ -109,9 +112,12 @@
2.0
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ False
+
\ No newline at end of file
diff --git a/DeviceSQL/IOC/ISimpleIOC.cs b/DeviceSQL.Service/IOC/ISimpleIOC.cs
similarity index 99%
rename from DeviceSQL/IOC/ISimpleIOC.cs
rename to DeviceSQL.Service/IOC/ISimpleIOC.cs
index a22db5e..54fec51 100644
--- a/DeviceSQL/IOC/ISimpleIOC.cs
+++ b/DeviceSQL.Service/IOC/ISimpleIOC.cs
@@ -13,12 +13,13 @@
//
// ****************************************************************************
-using DeviceSQL.ServiceLocation;
+
+using DeviceSQL.Service.ServiceLocation;
using System;
using System.Diagnostics.CodeAnalysis;
-namespace DeviceSQL.IOC
+namespace DeviceSQL.Service.IOC
{
///
/// A very simple IOC container with basic functionality needed to register and resolve
diff --git a/DeviceSQL/IOC/PreferredConstructor.cs b/DeviceSQL.Service/IOC/PreferredConstructor.cs
similarity index 97%
rename from DeviceSQL/IOC/PreferredConstructor.cs
rename to DeviceSQL.Service/IOC/PreferredConstructor.cs
index 1bf2921..aa69001 100644
--- a/DeviceSQL/IOC/PreferredConstructor.cs
+++ b/DeviceSQL.Service/IOC/PreferredConstructor.cs
@@ -15,7 +15,7 @@
using System;
-namespace DeviceSQL.IOC
+namespace DeviceSQL.Service.IOC
{
///
/// When used with the SimpleIoc container, specifies which constructor
diff --git a/DeviceSQL/IOC/SimpleIOC.cs b/DeviceSQL.Service/IOC/SimpleIOC.cs
similarity index 99%
rename from DeviceSQL/IOC/SimpleIOC.cs
rename to DeviceSQL.Service/IOC/SimpleIOC.cs
index 55ba599..f34aa08 100644
--- a/DeviceSQL/IOC/SimpleIOC.cs
+++ b/DeviceSQL.Service/IOC/SimpleIOC.cs
@@ -14,7 +14,7 @@
// BL0005
// ****************************************************************************
-using DeviceSQL.ServiceLocation;
+using DeviceSQL.Service.ServiceLocation;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
@@ -22,7 +22,7 @@
using System.Linq;
using System.Reflection;
-namespace DeviceSQL.IOC
+namespace DeviceSQL.Service.IOC
{
///
/// A very simple IOC container with basic functionality needed to register and resolve
diff --git a/DeviceSQL.Service/Program.cs b/DeviceSQL.Service/Program.cs
new file mode 100644
index 0000000..70e2ce3
--- /dev/null
+++ b/DeviceSQL.Service/Program.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceProcess;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DeviceSQL.Service
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ static void Main()
+ {
+ ServiceBase[] ServicesToRun;
+ ServicesToRun = new ServiceBase[]
+ {
+ new DeviceSqlService()
+ };
+ ServiceBase.Run(ServicesToRun);
+ }
+ }
+}
diff --git a/DeviceSQL.Service/ProjectInstaller.Designer.cs b/DeviceSQL.Service/ProjectInstaller.Designer.cs
new file mode 100644
index 0000000..4a98b7d
--- /dev/null
+++ b/DeviceSQL.Service/ProjectInstaller.Designer.cs
@@ -0,0 +1,60 @@
+namespace DeviceSQL.Service
+{
+ partial class ProjectInstaller
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.serviceProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller();
+ this.serviceInstaller = new System.ServiceProcess.ServiceInstaller();
+ //
+ // serviceProcessInstaller
+ //
+ this.serviceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.NetworkService;
+ this.serviceProcessInstaller.Password = null;
+ this.serviceProcessInstaller.Username = null;
+ //
+ // serviceInstaller
+ //
+ this.serviceInstaller.Description = "DeviceSQL Web API REST Services";
+ this.serviceInstaller.DisplayName = "DeviceSQL Service";
+ this.serviceInstaller.ServiceName = "DeviceSqlSvc";
+ this.serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
+ //
+ // ProjectInstaller
+ //
+ this.Installers.AddRange(new System.Configuration.Install.Installer[] {
+ this.serviceProcessInstaller,
+ this.serviceInstaller});
+
+ }
+
+ #endregion
+
+ private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller;
+ private System.ServiceProcess.ServiceInstaller serviceInstaller;
+ }
+}
\ No newline at end of file
diff --git a/DeviceSQL.Service/ProjectInstaller.cs b/DeviceSQL.Service/ProjectInstaller.cs
new file mode 100644
index 0000000..bda0512
--- /dev/null
+++ b/DeviceSQL.Service/ProjectInstaller.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration.Install;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace DeviceSQL.Service
+{
+ [RunInstaller(true)]
+ public partial class ProjectInstaller : System.Configuration.Install.Installer
+ {
+ public ProjectInstaller()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/DeviceSQL.Service/ProjectInstaller.resx b/DeviceSQL.Service/ProjectInstaller.resx
new file mode 100644
index 0000000..f92835d
--- /dev/null
+++ b/DeviceSQL.Service/ProjectInstaller.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 65
+
+
+ 196, 17
+
+
+ False
+
+
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.DeploymentScriptFormatter/Properties/AssemblyInfo.cs b/DeviceSQL.Service/Properties/AssemblyInfo.cs
similarity index 75%
rename from DeviceSQL.Utilities.DeploymentScriptFormatter/Properties/AssemblyInfo.cs
rename to DeviceSQL.Service/Properties/AssemblyInfo.cs
index a6d38c3..c971418 100644
--- a/DeviceSQL.Utilities.DeploymentScriptFormatter/Properties/AssemblyInfo.cs
+++ b/DeviceSQL.Service/Properties/AssemblyInfo.cs
@@ -5,14 +5,15 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("DeviceSQL.Utilities.DeploymentScriptFormatter")]
-[assembly: AssemblyDescription("")]
+[assembly: AssemblyTitle("DeviceSQL.Service")]
+[assembly: AssemblyDescription("DeviceSQL.Service")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("DeviceSQL.Utilities.DeploymentScriptFormatter")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
+[assembly: AssemblyCompany("CloudSonix")]
+[assembly: AssemblyProduct("DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFile("../DeviceSQL-Key.snk")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
@@ -20,7 +21,7 @@
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("0ea05da7-635f-4018-9f33-0d3419374c9f")]
+[assembly: Guid("f7b38332-a678-424c-a67e-25cf36c2430d")]
// Version information for an assembly consists of the following four values:
//
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Settings.Designer.cs b/DeviceSQL.Service/Properties/Settings.Designer.cs
similarity index 60%
rename from DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Settings.Designer.cs
rename to DeviceSQL.Service/Properties/Settings.Designer.cs
index f7bf38d..834a47d 100644
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Settings.Designer.cs
+++ b/DeviceSQL.Service/Properties/Settings.Designer.cs
@@ -8,23 +8,28 @@
//
//------------------------------------------------------------------------------
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Properties
-{
-
-
+namespace DeviceSQL.Service.Properties {
+
+
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.2.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
+
+ public static Settings Default {
+ get {
return defaultInstance;
}
}
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("http://localhost:8080")]
+ public string BaseAddress {
+ get {
+ return ((string)(this["BaseAddress"]));
+ }
+ }
}
}
diff --git a/DeviceSQL.Service/Properties/Settings.settings b/DeviceSQL.Service/Properties/Settings.settings
new file mode 100644
index 0000000..467b977
--- /dev/null
+++ b/DeviceSQL.Service/Properties/Settings.settings
@@ -0,0 +1,9 @@
+
+
+
+
+
+ http://localhost:8080
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL/ServiceLocation/ActivationException.cs b/DeviceSQL.Service/ServiceLocation/ActivationException.cs
similarity index 96%
rename from DeviceSQL/ServiceLocation/ActivationException.cs
rename to DeviceSQL.Service/ServiceLocation/ActivationException.cs
index 6224ab7..54c7e32 100644
--- a/DeviceSQL/ServiceLocation/ActivationException.cs
+++ b/DeviceSQL.Service/ServiceLocation/ActivationException.cs
@@ -4,7 +4,7 @@
#endregion
-namespace DeviceSQL.ServiceLocation
+namespace DeviceSQL.Service.ServiceLocation
{
///
/// The standard exception thrown when a ServiceLocator has an error in resolving an object.
diff --git a/DeviceSQL/ServiceLocation/IServiceLocator.cs b/DeviceSQL.Service/ServiceLocation/IServiceLocator.cs
similarity index 98%
rename from DeviceSQL/ServiceLocation/IServiceLocator.cs
rename to DeviceSQL.Service/ServiceLocation/IServiceLocator.cs
index abcb9e3..92eae8f 100644
--- a/DeviceSQL/ServiceLocation/IServiceLocator.cs
+++ b/DeviceSQL.Service/ServiceLocation/IServiceLocator.cs
@@ -5,7 +5,7 @@
#endregion
-namespace DeviceSQL.ServiceLocation
+namespace DeviceSQL.Service.ServiceLocation
{
///
/// The generic Service Locator interface. This interface is used
diff --git a/DeviceSQL/ServiceLocation/ServiceLocator.cs b/DeviceSQL.Service/ServiceLocation/ServiceLocator.cs
similarity index 96%
rename from DeviceSQL/ServiceLocation/ServiceLocator.cs
rename to DeviceSQL.Service/ServiceLocation/ServiceLocator.cs
index b812366..4582b5d 100644
--- a/DeviceSQL/ServiceLocation/ServiceLocator.cs
+++ b/DeviceSQL.Service/ServiceLocation/ServiceLocator.cs
@@ -4,7 +4,7 @@
#endregion
-namespace DeviceSQL.ServiceLocation
+namespace DeviceSQL.Service.ServiceLocation
{
///
/// This class provides the ambient container for this application. If your
diff --git a/DeviceSQL/ServiceLocation/ServiceLocatorImplBase.cs b/DeviceSQL.Service/ServiceLocation/ServiceLocatorImplBase.cs
similarity index 99%
rename from DeviceSQL/ServiceLocation/ServiceLocatorImplBase.cs
rename to DeviceSQL.Service/ServiceLocation/ServiceLocatorImplBase.cs
index f5a3e23..b9524ae 100644
--- a/DeviceSQL/ServiceLocation/ServiceLocatorImplBase.cs
+++ b/DeviceSQL.Service/ServiceLocation/ServiceLocatorImplBase.cs
@@ -6,7 +6,7 @@
#endregion
-namespace DeviceSQL.ServiceLocation
+namespace DeviceSQL.Service.ServiceLocation
{
///
/// This class is a helper that provides a default implementation
diff --git a/DeviceSQL/ServiceLocation/ServiceLocatorProvider.cs b/DeviceSQL.Service/ServiceLocation/ServiceLocatorProvider.cs
similarity index 90%
rename from DeviceSQL/ServiceLocation/ServiceLocatorProvider.cs
rename to DeviceSQL.Service/ServiceLocation/ServiceLocatorProvider.cs
index 5daa6d1..a819a53 100644
--- a/DeviceSQL/ServiceLocation/ServiceLocatorProvider.cs
+++ b/DeviceSQL.Service/ServiceLocation/ServiceLocatorProvider.cs
@@ -1,4 +1,4 @@
-namespace DeviceSQL.ServiceLocation
+namespace DeviceSQL.Service.ServiceLocation
{
///
/// This delegate type is used to provide a method that will
diff --git a/DeviceSQL.Service/Startup.cs b/DeviceSQL.Service/Startup.cs
new file mode 100644
index 0000000..06948ab
--- /dev/null
+++ b/DeviceSQL.Service/Startup.cs
@@ -0,0 +1,16 @@
+using Owin;
+using System.Web.Http;
+
+namespace DeviceSQL.Service
+{
+ public class Startup
+ {
+ public void Configuration(IAppBuilder appBuilder)
+ {
+ var httpConfiguration = new HttpConfiguration();
+
+ httpConfiguration.MapHttpAttributeRoutes();
+ appBuilder.UseWebApi(httpConfiguration);
+ }
+ }
+}
diff --git a/DeviceSQL.Service/packages.config b/DeviceSQL.Service/packages.config
new file mode 100644
index 0000000..73132f5
--- /dev/null
+++ b/DeviceSQL.Service/packages.config
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeviceSQL.TestHarness/App.config b/DeviceSQL.TestHarness/App.config
deleted file mode 100644
index 731f6de..0000000
--- a/DeviceSQL.TestHarness/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.TestHarness/DeviceSQL.TestHarness.csproj b/DeviceSQL.TestHarness/DeviceSQL.TestHarness.csproj
deleted file mode 100644
index 1315d74..0000000
--- a/DeviceSQL.TestHarness/DeviceSQL.TestHarness.csproj
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}
- Exe
- DeviceSQL.TestHarness
- DeviceSQL.TestHarness
- v4.6.1
- 512
- true
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {cb6f0884-5a58-432a-800e-4abfeeab6f46}
- DeviceSQL
-
-
-
-
- False
- Microsoft .NET Framework 4.6.1 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.TestHarness/Program.cs b/DeviceSQL.TestHarness/Program.cs
deleted file mode 100644
index 58e1d45..0000000
--- a/DeviceSQL.TestHarness/Program.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace DeviceSQL.TestHarness
-{
- class Program
- {
- static void Main(string[] args)
- {
- TcpChannelTest.Test();
- }
- }
-}
diff --git a/DeviceSQL.TestHarness/SerialPortChannelTest.cs b/DeviceSQL.TestHarness/SerialPortChannelTest.cs
deleted file mode 100644
index cd0ea99..0000000
--- a/DeviceSQL.TestHarness/SerialPortChannelTest.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace DeviceSQL.TestHarness
-{
- class SerialPortChannelTest
- {
- public static void Test()
- {
- using (var serialPortChannel = new IO.Channels.SerialPortChannel()
- {
- Name = "com1://localhost",
- ReadTimeout = 5000,
- WriteTimeout = 5000,
- TracingEnabled = true
- })
- {
- var rocMaster = new Device.ROC.ROCMaster(serialPortChannel)
- {
- Name = "FB103-01",
- DeviceAddress = 1,
- DeviceGroup = 2,
- HostAddress = 3,
- HostGroup = 1
- };
-
- rocMaster.Transport.NumberOfRetries = 3;
-
- serialPortChannel.SerialPort.BaudRate = 19200;
- serialPortChannel.SerialPort.DataBits = 8;
- serialPortChannel.SerialPort.Parity = System.IO.Ports.Parity.None;
- serialPortChannel.SerialPort.StopBits = System.IO.Ports.StopBits.One;
- serialPortChannel.SerialPort.Handshake = System.IO.Ports.Handshake.None;
-
- serialPortChannel.SerialPort.Open();
-
- var deviceRealTimeClockValue = rocMaster.GetRealTimeClockValue(null, null, null, null, 2000);
-
- serialPortChannel.SerialPort.Close();
-
- }
- }
- }
-}
diff --git a/DeviceSQL.TestHarness/TcpChannelTest.cs b/DeviceSQL.TestHarness/TcpChannelTest.cs
deleted file mode 100644
index 3ff8282..0000000
--- a/DeviceSQL.TestHarness/TcpChannelTest.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace DeviceSQL.TestHarness
-{
- class TcpChannelTest
- {
- public static void Test()
- {
-
-
-
-
- DeviceSQL.Functions.ChannelManager.ChannelManager_RegisterTcpChannel("tcp://96.53.12.52:4000", "96.53.12.52", 4000, 5, 5000, 5000, 5000);
-
- DeviceSQL.Functions.DeviceManager.DeviceManager_RegisterROCMaster("tcp://96.53.12.52:4000", "FB103-01", 1, 2, 3, 1, 5, 200, 0, 0);
-
- var index = 0;
-
- while (1000 > index)
- {
- var deviceDateTime = DeviceSQL.Functions.ROCMaster.ROCMaster_GetRealTimeClockValueWithCentury("FB103-01", 2000);
- Console.WriteLine(deviceDateTime);
- }
-
- DeviceSQL.Functions.DeviceManager.DeviceManager_UnregisterDevice("FB103-01");
-
- DeviceSQL.Functions.ChannelManager.ChannelManager_UnregisterChannel("tcp://96.53.12.52:4000");
-
- index++;
- }
- }
-}
diff --git a/DeviceSQL.Utilities.DeploymentScriptFormatter/App.config b/DeviceSQL.Utilities.DeploymentScriptFormatter/App.config
deleted file mode 100644
index 731f6de..0000000
--- a/DeviceSQL.Utilities.DeploymentScriptFormatter/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.DeploymentScriptFormatter/Program.cs b/DeviceSQL.Utilities.DeploymentScriptFormatter/Program.cs
deleted file mode 100644
index fd92727..0000000
--- a/DeviceSQL.Utilities.DeploymentScriptFormatter/Program.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-#region Imported Types
-
-using System;
-using System.IO;
-
-#endregion
-
-namespace DeviceSQL.Utilities.DeploymentScriptFormatter
-{
- class Program
- {
- static void Main(string[] args)
- {
- try
- {
- // This utility requires the user to copy the SQL publish output to "|>GitHub\DeviceSQL\Version 1.0\Install Script.sql"
- // If only Microsoft would add a new SQLCLR Attribute to define which schema the object belongs to (the project is bound to a single schema for the CLR objects).
-
- var installScriptFolderName = @"..\..\..\Version 1.0\";
- var installScriptFileName = @"..\..\..\Version 1.0\Install Script.sql";
- var installScriptText = "";
- using (var streamReader = File.OpenText(installScriptFileName))
- {
- installScriptText = streamReader.ReadToEnd();
- }
-
- installScriptText = $"CREATE DATABASE [DeviceSQL] \r\n" +
- "\r\n" +
- "GO \r\n" +
- "USE [DeviceSQL] \r\n" +
- "\r\n" +
- $"{installScriptText.Substring(installScriptText.IndexOf("PRINT N'Creating [ChannelManager]...';"))}";
-
- installScriptText = installScriptText.Substring(0, installScriptText.IndexOf("DECLARE @VarDecimalSupported AS BIT;"));
-
- installScriptText = installScriptText.Replace("[dbo].[Watchdog_", "[Watchdog].[").Replace("[dbo].[ChannelManager_", "[ChannelManager].[").Replace("[dbo].[DeviceManager_", "[DeviceManager].[").Replace("[dbo].[MODBUSMaster_", "[MODBUSMaster].[").Replace("[dbo].[ROCMaster_", "[ROCMaster].[");
-
- File.WriteAllText(installScriptFolderName + "Install Script.sql", installScriptText);
-
- Console.WriteLine("Formatting Completed");
-
- Console.ReadKey();
-
- }
- catch (Exception ex)
- {
- Console.WriteLine($"Formatting Error: {ex.Message}");
-
- Console.ReadKey();
- }
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/App.config b/DeviceSQL.Utilities.RealFLOMappingGenerator/App.config
deleted file mode 100644
index 731f6de..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/App.xaml b/DeviceSQL.Utilities.RealFLOMappingGenerator/App.xaml
deleted file mode 100644
index 7a5e709..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/App.xaml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/App.xaml.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/App.xaml.cs
deleted file mode 100644
index 9ddb1ab..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/App.xaml.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model;
-using DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel;
-using GalaSoft.MvvmLight.Ioc;
-using Microsoft.Practices.ServiceLocation;
-using System.Windows;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator
-{
- public partial class App : Application
- {
- private void Application_Startup(object sender, StartupEventArgs e)
- {
- ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
- SimpleIoc.Default.Register();
- SimpleIoc.Default.Register();
- SimpleIoc.Default.Register();
- SimpleIoc.Default.Register();
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Converter/BoolToVisibilityConverter.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Converter/BoolToVisibilityConverter.cs
deleted file mode 100644
index 5ae0519..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Converter/BoolToVisibilityConverter.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Globalization;
-using System.Windows;
-using System.Windows.Data;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Converter
-{
- public class BoolToVisibilityConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- return ((bool?)value).GetValueOrDefault() ? Visibility.Visible : Visibility.Collapsed;
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Converter/NegatedBoolToVisibilityConverter.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Converter/NegatedBoolToVisibilityConverter.cs
deleted file mode 100644
index 1c0f764..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Converter/NegatedBoolToVisibilityConverter.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Globalization;
-using System.Windows;
-using System.Windows.Data;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Converter
-{
- public class NegatedBoolToVisibilityConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- return (!(bool?)value).GetValueOrDefault() ? Visibility.Visible : Visibility.Collapsed;
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/DeviceSQL.Utilities.RealFLOMappingGenerator.csproj b/DeviceSQL.Utilities.RealFLOMappingGenerator/DeviceSQL.Utilities.RealFLOMappingGenerator.csproj
deleted file mode 100644
index 865cc90..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/DeviceSQL.Utilities.RealFLOMappingGenerator.csproj
+++ /dev/null
@@ -1,337 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}
- WinExe
- DeviceSQL.Utilities.RealFLOMappingGenerator
- DeviceSQL.Utilities.RealFLOMappingGenerator
- v4.6.1
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
- true
- C:\Users\jason\Documents\GitHub\DeviceSQL\Version 1.0\Utilities\RealFLO Mapping Generator\
- true
- Web
- true
- Foreground
- 7
- Days
- false
- false
- true
- http://liwt-app01.cloudapp.net/DeviceSQL/RealFLOMappingGenerator/
- http://localhost/DeviceSQL.Utilities.RealFLOMappingGenerator/
- https://github.com/jasonrichardcraig/DeviceSQL/blob/master/ReadMe.md
- en-US
- RealFLO Mapping Generator
- Jason Richard Craig
- DeviceSQL
- true
- publish.htm
- true
- 5
- 1.0.0.%2a
- true
- true
- true
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
- Resources\Images\RealFLO.ico
-
-
- CAE5F5BEE4170D26B52B0960F9D7628C18AAE939
-
-
- DeviceSQL.Utilities.RealFLOMappingGenerator_TemporaryKey.pfx
-
-
- true
-
-
- true
-
-
- true
-
-
- Key.snk
-
-
- Internet
-
-
- Properties\app.manifest
-
-
-
- ..\packages\CommonServiceLocator.2.0.2\lib\net45\CommonServiceLocator.dll
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\EQATEC.Analytics.Monitor.dll
- True
-
-
- ..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.dll
-
-
- ..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Extras.dll
-
-
- ..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Platform.dll
-
-
- ..\packages\HtmlAgilityPack.1.6.11\lib\Net45\HtmlAgilityPack.dll
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\SharpDX\SharpDX.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\SharpDX\SharpDX.D3DCompiler.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\SharpDX\SharpDX.Direct2D1.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\SharpDX\SharpDX.Direct3D10.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\SharpDX\SharpDX.Direct3D9.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\SharpDX\SharpDX.DXGI.dll
- True
-
-
-
-
- ..\packages\MvvmLightLibs.5.3.0.0\lib\net45\System.Windows.Interactivity.dll
-
-
-
-
-
-
-
-
- 4.0
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Cloud.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.Docking.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.FileDialogs.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.FixedDocumentViewers.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.GridView.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.Input.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.Navigation.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Controls.RibbonView.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Data.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Diagrams.Core.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Documents.Core.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Documents.Fixed.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Documents.Spreadsheet.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Themes.Office2016Touch.dll
- True
-
-
- ..\lib\RCWPF\2017.3.1018.45.NoXaml\Telerik.Windows.Zip.dll
- True
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- NewMapWizard.xaml
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
-
- Designer
- MSBuild:Compile
-
-
-
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- Microsoft .NET Framework 4.6.1 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
-
-
- False
- RealFLO Map
- RealFLOMappingGenerator
- RealFLO.ico
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Interop/HelpDocument.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Interop/HelpDocument.cs
deleted file mode 100644
index 97ec9a1..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Interop/HelpDocument.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel;
-using Microsoft.Practices.ServiceLocation;
-using System.Runtime.InteropServices;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Interop
-{
- [ComVisible(true)]
- public class HelpDocument
- {
- public void NavigateMain(string source)
- {
- ServiceLocator.Current.GetInstance().NavigateMainWebBrowserCommand.Execute(source);
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Interop/Main.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Interop/Main.cs
deleted file mode 100644
index c959d7d..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Interop/Main.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using System.Runtime.InteropServices;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Interop
-{
- [ComVisible(true)]
- public class Main
- {
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Key.snk b/DeviceSQL.Utilities.RealFLOMappingGenerator/Key.snk
deleted file mode 100644
index 316e834..0000000
Binary files a/DeviceSQL.Utilities.RealFLOMappingGenerator/Key.snk and /dev/null differ
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/MainWindow.xaml b/DeviceSQL.Utilities.RealFLOMappingGenerator/MainWindow.xaml
deleted file mode 100644
index 0f07657..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/MainWindow.xaml
+++ /dev/null
@@ -1,169 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/MainWindow.xaml.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/MainWindow.xaml.cs
deleted file mode 100644
index 30b0a85..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/MainWindow.xaml.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel;
-using Microsoft.Practices.ServiceLocation;
-using System.Windows;
-using System.Windows.Navigation;
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator
-{
- public partial class MainWindow : Window
- {
-
- #region Constructor
-
- public MainWindow()
- {
- InitializeComponent();
- }
-
- #endregion
-
- #region Base Class Events
-
- private void Window_Loaded(object sender, RoutedEventArgs e)
- {
- var mainViewModel = ServiceLocator.Current.GetInstance();
- mainViewModel.NavigateHelpDocumentWebBrowserCommand = new GalaSoft.MvvmLight.CommandWpf.RelayCommand(NavigateHelpDocumentWebBrowser);
- mainViewModel.NavigateMainWebBrowserCommand = new GalaSoft.MvvmLight.CommandWpf.RelayCommand(NavigateMainWebBrowser);
- MainWebBrowser.Navigate("about:blank");
- HelpDocumentWebBrowser.Navigate("about:blank");
- }
-
- #endregion
-
- #region Web Browser Events
-
- private void MainWebBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
- {
-
- }
-
- private void MainWebBrowser_Navigated(object sender, NavigationEventArgs e)
- {
- var mainViewModel = ServiceLocator.Current.GetInstance();
- if (mainViewModel.MainWebBrowserObjectForScripting != MainWebBrowser.ObjectForScripting)
- {
- MainWebBrowser.ObjectForScripting = mainViewModel.MainWebBrowserObjectForScripting;
- }
- }
-
- private void HelpDocumentWebBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
- {
-
- }
-
- private void HelpDocumentWebBrowser_Navigated(object sender, NavigationEventArgs e)
- {
- var mainViewModel = ServiceLocator.Current.GetInstance();
- if (mainViewModel.HelpDocumentWebBrowserObjectForScripting != HelpDocumentWebBrowser.ObjectForScripting)
- {
- HelpDocumentWebBrowser.ObjectForScripting = mainViewModel.HelpDocumentWebBrowserObjectForScripting;
- }
- }
-
- #endregion
-
- #region Navigation Methods
-
- private void NavigateMainWebBrowser(string source)
- {
- MainWebBrowser.Navigate(source);
- }
-
- private void NavigateHelpDocumentWebBrowser(string source)
- {
- HelpDocumentWebBrowser.Navigate(source);
- }
-
- #endregion
-
- }
-
-}
-
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/DataService.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/DataService.cs
deleted file mode 100644
index a7871c5..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/DataService.cs
+++ /dev/null
@@ -1,175 +0,0 @@
-#region Imported Types
-
-using HtmlAgilityPack;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.Serialization.Formatters.Binary;
-using System.Windows;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model
-{
- public class DataService
- {
-
- public string GetVersion()
- {
- return Assembly.GetEntryAssembly().GetName().Version.ToString();
- }
-
- public Map NewMap(string fileName, string chmFileName)
- {
- var map = new Map()
- {
- Id = Guid.NewGuid(),
- HelpFileBytes = File.ReadAllBytes(chmFileName),
- EnronArchives = new List(),
- EnronEvents = new List(),
- EnronRegisters = new List(),
- TeleBUSArchives = new List(),
- TeleBUSEvents = new List(),
- TeleBUSRegisters = new List()
- };
- return map;
- }
-
- public Map LoadMap(string fileName)
- {
- using (var fileStream = new FileStream(fileName, FileMode.Open))
- {
- return new BinaryFormatter().Deserialize(fileStream) as Map;
- }
- }
-
- public void SaveMap(Map map, string fileName)
- {
- using (var fileStream = new FileStream(fileName, FileMode.OpenOrCreate))
- {
- new BinaryFormatter().Serialize(fileStream, map);
- }
- }
-
- public void ExtractCHMFile(Map map, out string chmFileName, out string decompiledCHMFolderName)
- {
- var formattedMapId = map.Id.ToString().Replace("-", "");
- var chmFolderName = $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\\RealFLOMappingGenerator";
-
- chmFileName = $"{chmFolderName}\\rfm.{formattedMapId}.chm";
- decompiledCHMFolderName = $"{chmFolderName}\\rfm.{formattedMapId}.decompiled";
-
- if (!Directory.Exists(chmFolderName))
- {
- Directory.CreateDirectory(chmFolderName);
- }
-
- if (!Directory.Exists(decompiledCHMFolderName))
- {
- Directory.CreateDirectory(decompiledCHMFolderName);
- }
-
- File.WriteAllBytes(chmFileName, map.HelpFileBytes);
-
- using (var process = Process.Start("hh.exe", $" -decompile {decompiledCHMFolderName} {chmFileName}"))
- {
- if (process.WaitForExit(30000))
- {
- using (var styleFileStream = File.Create($"{decompiledCHMFolderName}\\rfm.style.css"))
- using (var treeFileStream = File.Create($"{decompiledCHMFolderName}\\rfm.index.js"))
- {
- Application.GetResourceStream(new Uri("Resources/Styles/rfm.style.css", UriKind.RelativeOrAbsolute)).Stream.CopyTo(styleFileStream);
- Application.GetResourceStream(new Uri("Resources/Scripts/rfm.index.js", UriKind.RelativeOrAbsolute)).Stream.CopyTo(treeFileStream);
- }
-
- foreach (var htmFileInfo in new DirectoryInfo(decompiledCHMFolderName).GetFiles("*.htm", SearchOption.AllDirectories))
- {
- var chmHTMLDocument = new HtmlDocument();
-
- chmHTMLDocument.Load(htmFileInfo.FullName);
- File.WriteAllText(htmFileInfo.FullName, $"\r\n{ chmHTMLDocument.DocumentNode.InnerHtml }", System.Text.Encoding.UTF8);
- }
- }
- else
- {
- throw new TimeoutException("HTML help decompiler timed out");
- }
- }
- }
-
- public string CreateIndexHTMLDocument(string chmFolderName)
- {
- var hhcFileInfo = new DirectoryInfo(chmFolderName).EnumerateFiles("*.hhc").FirstOrDefault();
-
- if (hhcFileInfo != null)
- {
- var hhcHTMLDocument = new HtmlDocument();
- var destinationHHCFileName = $"{hhcFileInfo.DirectoryName}\\rfm.index.html";
- var defaultSource = "";
-
- //file:///C:/Users/jason/Desktop/Realflo%20Reference%20Manual.htm
-
- hhcHTMLDocument.OptionUseIdAttribute = true;
- hhcHTMLDocument.OptionOutputAsXml = true;
- hhcHTMLDocument.Load(hhcFileInfo.FullName);
-
- hhcHTMLDocument.DocumentNode.ChildNodes.Where(node => node.Name == "#comment" && node.InnerText.StartsWith(""), htmlNode.FirstChild);
- }
-
- hhcHTMLDocument.DocumentNode.SelectSingleNode("//head").AppendChild(HtmlNode.CreateNode(""));
- hhcHTMLDocument.DocumentNode.SelectSingleNode("//head").AppendChild(HtmlNode.CreateNode(""));
- hhcHTMLDocument.DocumentNode.SelectSingleNode("//head").AppendChild(HtmlNode.CreateNode(""));
- hhcHTMLDocument.DocumentNode.SelectSingleNode("//head").AppendChild(HtmlNode.CreateNode(""));
-
- foreach (var objectHTMLNode in hhcHTMLDocument.DocumentNode.SelectNodes("//object"))
- {
- switch (objectHTMLNode.GetAttributeValue("type", null))
- {
- case "text/sitemap":
- {
- var name = objectHTMLNode.ChildNodes.FirstOrDefault(htmlNode => htmlNode.NodeType == HtmlNodeType.Element && htmlNode.Name == "param" && htmlNode.GetAttributeValue("name", "") == "Name")?.GetAttributeValue("value", "");
- var imageNumber = objectHTMLNode.ChildNodes.FirstOrDefault(htmlNode => htmlNode.NodeType == HtmlNodeType.Element && htmlNode.Name == "param" && htmlNode.GetAttributeValue("name", "") == "ImageNumber")?.GetAttributeValue("value", "");
- var local = objectHTMLNode.ChildNodes.FirstOrDefault(htmlNode => htmlNode.NodeType == HtmlNodeType.Element && htmlNode.Name == "param" && htmlNode.GetAttributeValue("name", "") == "Local")?.GetAttributeValue("value", "");
-
- objectHTMLNode.Name = "a";
- objectHTMLNode.InnerHtml = name;
- objectHTMLNode.Attributes.Add("href", $"#_{local}_");
- objectHTMLNode.Attributes.Add("onclick", $"javascript: window.external.NavigateMain('{chmFolderName.Replace("\\","\\\\")}\\\\{local}');");
-
- if(defaultSource == "")
- {
- defaultSource = $"{chmFolderName}\\{local}";
- }
- }
- break;
- default:
- {
- objectHTMLNode.RemoveAllChildren();
- objectHTMLNode.Remove();
- }
- break;
- }
- }
-
- hhcHTMLDocument.DocumentNode.SelectSingleNode("//head").AppendChild(HtmlNode.CreateNode($""));
-
- File.WriteAllText(destinationHHCFileName, $"\r\n\r\n{ hhcHTMLDocument.DocumentNode.InnerHtml }", System.Text.Encoding.UTF8);
-
- return destinationHHCFileName;
- }
- else
- {
- return null;
- }
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/DialogService.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/DialogService.cs
deleted file mode 100644
index 74bef13..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/DialogService.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel;
-using Microsoft.Practices.ServiceLocation;
-using Microsoft.Win32;
-using System;
-using System.IO;
-using Telerik.Windows.Controls;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model
-{
- public class DialogService
- {
-
- #region Properties
-
- public DataService DataService
- {
- get
- {
- return ServiceLocator.Current.GetInstance();
- }
- }
-
- #endregion
-
- #region Dialog Methods
-
- public void ShowErrorMessage(string errorMessage)
- {
- RadWindow.Alert(errorMessage);
- }
-
- public string OpenCreateMapFileDialog()
- {
- var saveFileDialog = new SaveFileDialog()
- {
- Title = "Set Map File Destination",
- FileName = "RealFLO Map.rfm",
- InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
- DefaultExt = ".chm",
- Filter = "RealFLO Map Files|*.rfm",
- OverwritePrompt = true,
- CreatePrompt = true,
- ValidateNames = true,
- CheckPathExists = true,
- };
-
- var dialogResult = saveFileDialog.ShowDialog();
-
- if (dialogResult.HasValue && dialogResult.Value)
- {
- try
- {
- using (var fileStream = File.Create(saveFileDialog.FileName))
- {
- return saveFileDialog.FileName;
- }
- }
- catch (Exception ex)
- {
- ShowErrorMessage($"Error creating map file: {ex.Message}");
- return null;
- }
-
- }
- else
- {
- return null;
- }
-
- }
-
- public string OpenSelectRealFLOHelpFileDialog(string fileName)
- {
-
- var fileInfo = new FileInfo(fileName);
-
- var openFileDialog = new OpenFileDialog()
- {
- Title = "Select RealFLO Help File",
- FileName = fileInfo.Name,
- InitialDirectory = fileInfo.DirectoryName,
- DefaultExt = ".chm",
- Filter = "Help Files|*.chm"
- };
-
- var dialogResult = openFileDialog.ShowDialog();
-
- if (dialogResult.HasValue && dialogResult.Value)
- {
- return openFileDialog.FileName;
- }
- else
- {
- return null;
- }
- }
-
- public bool? ShowSaveBeforeProceedingDialog()
- {
- var dialogResult = (bool?)null;
- var dialogParameters = new DialogParameters()
- {
- Content = "Would you like to save before proceeding?",
- OkButtonContent = "Yes",
- CancelButtonContent = "No",
- Closed = (s, e) =>
- {
- dialogResult = e.DialogResult;
- }
- };
-
- RadWindow.Confirm(dialogParameters);
-
- return dialogResult;
-
- }
-
- public Map OpenNewMapWizardDialog()
- {
- var newMapWizard = new Wizard.NewMapWizard()
- {
- Owner = App.Current.MainWindow
- };
-
- var dialogResult = newMapWizard.ShowDialog();
-
- if (dialogResult.HasValue && dialogResult.Value)
- {
- try
- {
- var newMapWizardViewModel = ServiceLocator.Current.GetInstance();
-
- return DataService.NewMap(newMapWizardViewModel.FileName, newMapWizardViewModel.CHMFileName);
-
- }
- catch (Exception ex)
- {
- var dialogParameters = new DialogParameters()
- {
- Content = $"Error creating new map: {ex.Message}"
- };
-
- RadWindow.Alert(dialogParameters);
- return null;
- }
- }
- else
- {
- return null;
- }
- }
-
- public Map OpenMapFileDialog()
- {
-
- var openFileDialog = new OpenFileDialog()
- {
- Title = "Select RealFLO Map File",
- InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
- DefaultExt = ".rfm",
- Filter = "RealFLO Map Files|*.rfm"
- };
-
- var dialogResult = openFileDialog.ShowDialog();
-
- if (dialogResult.HasValue && dialogResult.Value)
- {
- try
- {
- return DataService.LoadMap(openFileDialog.FileName);
- }
- catch (Exception ex)
- {
- ShowErrorMessage($"Error opening map file: {ex.Message}");
- }
- return null;
- }
- else
- {
- return null;
- }
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Archive.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Archive.cs
deleted file mode 100644
index d45f49b..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Archive.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Collections.Generic;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron
-{
- [Serializable]
- public class Archive
- {
- public List Fields
- {
- get;
- set;
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/ArchiveField.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/ArchiveField.cs
deleted file mode 100644
index 1e94155..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/ArchiveField.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS
-{
- public class ArchiveField
- {
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Event.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Event.cs
deleted file mode 100644
index 238a9df..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Event.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron
-{
- [Serializable]
- public class Event
- {
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Register.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Register.cs
deleted file mode 100644
index f9ca9f7..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Enron/Register.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron
-{
- [Serializable]
- public class Register
- {
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Map.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Map.cs
deleted file mode 100644
index bc391fd..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/Map.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Collections.Generic;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model
-{
- [Serializable]
- public class Map
- {
-
- #region Properties
-
- public Guid Id
- {
- get;
- set;
- }
-
- public byte[] HelpFileBytes
- {
- get;
- set;
- }
-
- public List EnronRegisters
- {
- get;
- set;
- }
-
- public List TeleBUSRegisters
- {
- get;
- set;
- }
-
- public List EnronArchives
- {
- get;
- set;
- }
-
- public List TeleBUSArchives
- {
- get;
- set;
- }
-
- public List EnronEvents
- {
- get;
- set;
- }
-
- public List TeleBUSEvents
- {
- get;
- set;
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Archive.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Archive.cs
deleted file mode 100644
index 3caa0c2..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Archive.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS
-{
- [Serializable]
- public class Archive
- {
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ArchiveCommand.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ArchiveCommand.cs
deleted file mode 100644
index feed439..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ArchiveCommand.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS
-{
- [Serializable]
- public class ArchiveCommand
- {
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ArchiveField.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ArchiveField.cs
deleted file mode 100644
index 8e5bf7c..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ArchiveField.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron
-{
- [Serializable]
- public class ArchiveField
- {
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ConfigurationCommand.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ConfigurationCommand.cs
deleted file mode 100644
index fa437a2..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/ConfigurationCommand.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS
-{
- [Serializable]
- public class ConfigurationCommand
- {
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Event.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Event.cs
deleted file mode 100644
index 00ad842..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Event.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS
-{
- [Serializable]
- public class Event
- {
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Register.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Register.cs
deleted file mode 100644
index f4e4bee..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Model/TeleBUS/Register.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS
-{
- [Serializable]
- public class Register
- {
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/AssemblyInfo.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8097267..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Reflection;
-using System.Resources;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Windows;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("DeviceSQL.Utilities.RealFLOMappingGenerator")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("DeviceSQL.Utilities.RealFLOMappingGenerator")]
-[assembly: AssemblyCopyright("Copyright © 2017")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-//In order to begin building localizable applications, set
-//CultureYouAreCodingWith in your .csproj file
-//inside a . For example, if you are using US english
-//in your source files, set the to en-US. Then uncomment
-//the NeutralResourceLanguage attribute below. Update the "en-US" in
-//the line below to match the UICulture setting in the project file.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly: ThemeInfo(
- ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
- //(used if a resource is not found in the page,
- // or application resource dictionaries)
- ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
- //(used if a resource is not found in the page,
- // app, or any theme specific resource dictionaries)
-)]
-
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Resources.Designer.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Resources.Designer.cs
deleted file mode 100644
index 42ded07..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Properties
-{
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DeviceSQL.Utilities.RealFLOMappingGenerator.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
- return resourceCulture;
- }
- set
- {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Settings.settings b/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Settings.settings
deleted file mode 100644
index 033d7a5..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/app.manifest b/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/app.manifest
deleted file mode 100644
index f0a58bd..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Properties/app.manifest
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/RealFLO.ico b/DeviceSQL.Utilities.RealFLOMappingGenerator/RealFLO.ico
deleted file mode 100644
index 49da11f..0000000
Binary files a/DeviceSQL.Utilities.RealFLOMappingGenerator/RealFLO.ico and /dev/null differ
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/RealFLO_24x24.png b/DeviceSQL.Utilities.RealFLOMappingGenerator/RealFLO_24x24.png
deleted file mode 100644
index 2ec04c2..0000000
Binary files a/DeviceSQL.Utilities.RealFLOMappingGenerator/RealFLO_24x24.png and /dev/null differ
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO.ico b/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO.ico
deleted file mode 100644
index 49da11f..0000000
Binary files a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO.ico and /dev/null differ
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO_24x24.png b/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO_24x24.png
deleted file mode 100644
index a3df78f..0000000
Binary files a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO_24x24.png and /dev/null differ
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO_32x32.png b/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO_32x32.png
deleted file mode 100644
index 906aac0..0000000
Binary files a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Images/RealFLO_32x32.png and /dev/null differ
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Scripts/rfm.index.js b/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Scripts/rfm.index.js
deleted file mode 100644
index bc0153a..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Scripts/rfm.index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$(document).ready(function () {
- window.external.NavigateMain(defaultSource);
-});
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Styles/rfm.style.css b/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Styles/rfm.style.css
deleted file mode 100644
index 56759d9..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Resources/Styles/rfm.style.css
+++ /dev/null
@@ -1,84 +0,0 @@
-body, a {
- color: #3B4C56;
- font-family: sans-serif;
- font-size: 14px;
- text-decoration: none;
-}
-
-#logo {
- width: 505px;
- margin: 0 auto;
- text-align: center;
-}
-
-#pgtitle {
- margin: 0px 0px 20px;
- font-size: 18pt;
-}
-
-a {
- cursor: pointer;
-}
-
-.tree ul {
- list-style: none outside none;
-}
-
-.tree li a {
- line-height: 25px;
-}
-
-.tree > ul > li > a {
- color: #3B4C56;
- display: block;
- font-weight: normal;
- position: relative;
- text-decoration: none;
-}
-
-.tree li.parent > a {
- padding: 0 0 0 28px;
-}
-
- .tree li.parent > a:before {
- background-image: url("../images/plus_minus_icons.png");
- background-position: 25px center;
- content: "";
- display: block;
- height: 21px;
- left: 0;
- position: absolute;
- top: 2px;
- vertical-align: middle;
- width: 23px;
- }
-
-.tree ul li.active > a:before {
- background-position: 0 center;
-}
-
-.tree ul li ul {
- border-left: 1px solid #D9DADB;
- display: none;
- margin: 0 0 0 12px;
- overflow: hidden;
- padding: 0 0 0 25px;
-}
-
- .tree ul li ul li {
- position: relative;
- }
-
- .tree ul li ul li:before {
- border-bottom: 1px dashed #E2E2E3;
- content: "";
- left: -20px;
- position: absolute;
- top: 12px;
- width: 15px;
- }
-
-#wrapper {
- margin: 0 auto;
- width: 300px;
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/ArchiveViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/ArchiveViewModel.cs
deleted file mode 100644
index abd2fa1..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/ArchiveViewModel.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel.Enron
-{
- public class ArchiveViewModel : TrackableViewModelBase
- {
- #region Fields
-
- private Archive archive;
-
- #endregion
-
- #region Properties
-
- public Archive Archive
- {
- get
- {
- return archive;
- }
- set
- {
- archive = value;
- RaisePropertyChanged("Archive");
- }
- }
-
- #endregion
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/EventViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/EventViewModel.cs
deleted file mode 100644
index 105e4a4..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/EventViewModel.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel.Enron
-{
- public class EventViewModel : TrackableViewModelBase
- {
- #region Fields
-
- private Event _event;
-
- #endregion
-
- #region Imported Types
-
- public Event Event
- {
- get
- {
- return _event;
- }
- set
- {
- _event = value;
- RaisePropertyChanged("Event");
- }
- }
-
- #endregion
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/RegisterViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/RegisterViewModel.cs
deleted file mode 100644
index c2e7da0..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/Enron/RegisterViewModel.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model.Enron;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel.Enron
-{
- public class RegisterViewModel : TrackableViewModelBase
- {
-
- #region Fields
-
- private Register register;
-
- #endregion
-
- #region Imported Types
-
- public Register Register
- {
- get
- {
- return register;
- }
- set
- {
- register = value;
- RaisePropertyChanged("Register");
- }
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/ExportMapWizardViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/ExportMapWizardViewModel.cs
deleted file mode 100644
index ea48dce..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/ExportMapWizardViewModel.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel
-{
- public class ExportMapWizardViewModel : ViewModelBase
- {
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/MainViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/MainViewModel.cs
deleted file mode 100644
index 4685bba..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/MainViewModel.cs
+++ /dev/null
@@ -1,638 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model;
-using GalaSoft.MvvmLight;
-using GalaSoft.MvvmLight.CommandWpf;
-using Microsoft.Practices.ServiceLocation;
-using System;
-using System.Collections.ObjectModel;
-using System.Collections.Specialized;
-using System.IO;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel
-{
- public class MainViewModel : ViewModelBase
- {
-
- #region Fields
-
- private Guid id;
- private byte[] helpFileBytes;
- private string currentMapFileName;
- private string currentCHMFileName;
- private string currentCHMFolderName;
- private string mainWebBrowserPanelHeaderText = "about:blank";
- private Interop.Main mainWebBrowserObjectForScripting;
- private Interop.HelpDocument helpDocumentWebBrowserObjectForScripting;
- private ObservableCollection enronRegisterViewModels;
- private ObservableCollection enronArchiveViewModels;
- private ObservableCollection enronEventViewModels;
- private ObservableCollection teleBUSRegisterViewModels;
- private ObservableCollection teleBUSArchiveViewModels;
- private ObservableCollection teleBUSEventViewModels;
- private bool hasChanged;
-
- #endregion
-
- #region Properties
-
- public Guid Id
- {
- get
- {
- return id;
- }
- set
- {
- id = value;
- RaisePropertyChanged("Id");
- }
- }
-
- public byte[] HelpFileBytes
- {
- get
- {
- return helpFileBytes;
- }
- set
- {
- helpFileBytes = value;
- RaisePropertyChanged("HelpFileBytes");
- }
- }
-
- public DialogService DialogService
- {
- get
- {
- return ServiceLocator.Current.GetInstance();
- }
- }
-
- public DataService DataService
- {
- get
- {
- return ServiceLocator.Current.GetInstance();
- }
- }
-
- public ObservableCollection EnronRegisterViewModels
- {
- get
- {
- return enronRegisterViewModels;
- }
- set
- {
- if (enronRegisterViewModels != null)
- {
- enronRegisterViewModels.CollectionChanged -= EnronRegisterViewModels_CollectionChanged;
- }
-
- enronRegisterViewModels = value;
-
- if (enronRegisterViewModels != null)
- {
- enronRegisterViewModels.CollectionChanged += EnronRegisterViewModels_CollectionChanged;
- }
- }
- }
-
- public ObservableCollection EnronArchiveViewModels
- {
- get
- {
- return enronArchiveViewModels;
- }
- set
- {
- if (enronArchiveViewModels != null)
- {
- enronArchiveViewModels.CollectionChanged -= EnronArchiveViewModels_CollectionChanged;
- }
-
- enronArchiveViewModels = value;
-
- if (enronArchiveViewModels != null)
- {
- enronArchiveViewModels.CollectionChanged += EnronArchiveViewModels_CollectionChanged;
- }
- }
- }
-
- public ObservableCollection EnronEventViewModels
- {
- get
- {
- return enronEventViewModels;
- }
- set
- {
- if (enronEventViewModels != null)
- {
- enronEventViewModels.CollectionChanged -= EnronEventViewModels_CollectionChanged;
- }
-
- enronEventViewModels = value;
-
- if (enronEventViewModels != null)
- {
- enronEventViewModels.CollectionChanged += EnronEventViewModels_CollectionChanged;
- }
- }
- }
-
- public ObservableCollection TeleBUSRegisterViewModels
- {
- get
- {
- return teleBUSRegisterViewModels;
- }
- set
- {
- if (teleBUSRegisterViewModels != null)
- {
- teleBUSRegisterViewModels.CollectionChanged -= TeleBUSRegisterViewModels_CollectionChanged;
- }
-
- teleBUSRegisterViewModels = value;
-
- if (teleBUSRegisterViewModels != null)
- {
- teleBUSRegisterViewModels.CollectionChanged += TeleBUSRegisterViewModels_CollectionChanged;
- }
- }
- }
-
- public ObservableCollection TeleBUSArchiveViewModels
- {
- get
- {
- return teleBUSArchiveViewModels;
- }
- set
- {
- if (teleBUSArchiveViewModels != null)
- {
- teleBUSArchiveViewModels.CollectionChanged -= TeleBUSArchiveViewModels_CollectionChanged;
- }
-
- teleBUSArchiveViewModels = value;
-
- if (teleBUSArchiveViewModels != null)
- {
- teleBUSArchiveViewModels.CollectionChanged += TeleBUSArchiveViewModels_CollectionChanged;
- }
- }
- }
-
- public ObservableCollection TeleBUSEventViewModels
- {
- get
- {
- return teleBUSEventViewModels;
- }
- set
- {
- if (teleBUSEventViewModels != null)
- {
- teleBUSEventViewModels.CollectionChanged -= TeleBUSEventViewModels_CollectionChanged;
- }
-
- teleBUSEventViewModels = value;
-
- if (teleBUSEventViewModels != null)
- {
- teleBUSEventViewModels.CollectionChanged += TeleBUSEventViewModels_CollectionChanged;
- }
- }
- }
-
- public string Version
- {
- get
- {
- return DataService.GetVersion();
- }
- }
-
- public Interop.Main MainWebBrowserObjectForScripting
- {
- get
- {
- return mainWebBrowserObjectForScripting;
- }
- set
- {
- mainWebBrowserObjectForScripting = value;
- RaisePropertyChanged("MainWebBrowserObjectForScripting");
- }
- }
-
- public Interop.HelpDocument HelpDocumentWebBrowserObjectForScripting
- {
- get
- {
- return helpDocumentWebBrowserObjectForScripting;
- }
- set
- {
- helpDocumentWebBrowserObjectForScripting = value;
- RaisePropertyChanged("HelpDocumentWebBrowserObjectForScripting");
- }
- }
-
- public RelayCommand NewCommand
- {
- get;
- set;
- }
-
- public RelayCommand OpenCommand
- {
- get;
- set;
- }
-
- public RelayCommand SaveCommand
- {
- get;
- set;
- }
-
- public RelayCommand ExportCommand
- {
- get;
- set;
- }
-
- public RelayCommand CloseCommand
- {
- get;
- set;
- }
-
- public RelayCommand NavigateHelpDocumentWebBrowserCommand
- {
- get;
- set;
- }
-
- public RelayCommand NavigateMainWebBrowserCommand
- {
- get;
- set;
- }
-
- public string MainWebBrowserPanelHeaderText
- {
- get
- {
- return mainWebBrowserPanelHeaderText;
- }
- set
- {
- mainWebBrowserPanelHeaderText = value;
- RaisePropertyChanged("MainWebBrowserPanelHeaderText");
- }
- }
-
- public bool CurrentMapFileExists
- {
- get
- {
- return File.Exists(CurrentCHMFileName);
- }
- }
-
- public string CurrentMapFileName
- {
- get
- {
- return currentMapFileName;
- }
- set
- {
- currentMapFileName = value;
- RaisePropertyChanged("CurrentMapFileName");
- }
- }
-
- public string CurrentCHMFileName
- {
- get
- {
- return currentCHMFileName;
- }
- set
- {
- currentCHMFileName = value;
- RaisePropertyChanged("CurrentCHMFileName");
- }
- }
-
- public string CurrentCHMFolderName
- {
- get
- {
- return currentCHMFolderName;
- }
- set
- {
- currentCHMFolderName = value;
- RaisePropertyChanged("CurrentCHMFolderName");
- }
- }
-
- public bool HasChanged
- {
- get
- {
- return hasChanged;
- }
- set
- {
- hasChanged = value;
- RaisePropertyChanged("HasChanged");
- }
- }
-
- #endregion
-
- #region Constructor
-
- public MainViewModel()
- {
- NewCommand = new RelayCommand(New);
- OpenCommand = new RelayCommand(Open);
- SaveCommand = new RelayCommand(Save, CanSave);
- ExportCommand = new RelayCommand(Export, CanExport);
- CloseCommand = new RelayCommand(Close, CanClose);
- MainWebBrowserObjectForScripting = new Interop.Main();
- HelpDocumentWebBrowserObjectForScripting = new Interop.HelpDocument();
- }
-
- #endregion
-
- #region Command Methods
-
- private void New()
- {
- if (CanSave())
- {
- var showSaveBeforeProceedingDialogResult = DialogService.ShowSaveBeforeProceedingDialog();
- if (showSaveBeforeProceedingDialogResult.HasValue)
- {
- if (showSaveBeforeProceedingDialogResult.Value)
- {
- Save();
- }
- }
- else
- {
- return;
- }
- }
-
- var map = DialogService.OpenNewMapWizardDialog();
-
- if (map != null)
- {
- LoadMap(map);
- }
- }
-
- private void Open()
- {
- var map = DialogService.OpenMapFileDialog();
- if (map != null)
- {
- LoadMap(map);
- }
- }
- private bool CanSave()
- {
- return HasChanged;
- }
-
- private void Save()
- {
- try
- {
- var map = new Map()
- {
- Id = Id,
- HelpFileBytes = HelpFileBytes,
- EnronRegisters = EnronRegisterViewModels?.Select(enronRegisterViewModel => enronRegisterViewModel.Register).ToList(),
- EnronArchives = EnronArchiveViewModels?.Select(enronArchiveViewModel => enronArchiveViewModel.Archive).ToList(),
- EnronEvents = EnronEventViewModels?.Select(enronEventViewModel => enronEventViewModel.Event).ToList(),
- TeleBUSRegisters = TeleBUSRegisterViewModels?.Select(teleBUSRegisterViewModel => teleBUSRegisterViewModel.Register).ToList(),
- TeleBUSArchives = teleBUSArchiveViewModels?.Select(teleBUSArchiveViewModel => teleBUSArchiveViewModel.Archive).ToList(),
- TeleBUSEvents = TeleBUSEventViewModels?.Select(teleBUSEventViewModel => teleBUSEventViewModel.Event).ToList()
- };
- DataService.SaveMap(map, CurrentMapFileName);
- }
- catch (Exception ex)
- {
- DialogService.ShowErrorMessage($"Error saving map: {ex.Message}");
- }
- }
-
- private bool CanExport()
- {
- return false;
- }
-
- private void Export()
- {
-
- }
-
- private bool CanClose()
- {
- return !Id.Equals(Guid.Empty);
- }
-
- private void Close()
- {
- if (CanSave())
- {
- var showSaveBeforeProceedingDialogResult = DialogService.ShowSaveBeforeProceedingDialog();
- if (showSaveBeforeProceedingDialogResult.HasValue)
- {
- if (showSaveBeforeProceedingDialogResult.Value)
- {
- Save();
- }
- }
- else
- {
- return;
- }
- }
- Id = Guid.Empty;
- CurrentMapFileName = null;
- CurrentCHMFileName = null;
- HelpFileBytes = new byte[] { };
- EnronArchiveViewModels = new ObservableCollection();
- EnronRegisterViewModels = new ObservableCollection();
- EnronEventViewModels = new ObservableCollection();
- TeleBUSArchiveViewModels = new ObservableCollection();
- TeleBUSRegisterViewModels = new ObservableCollection();
- TeleBUSEventViewModels = new ObservableCollection();
- }
-
- #endregion
-
- #region Observable Collection Events
-
- private void EnronRegisterViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- break;
- case NotifyCollectionChangedAction.Move:
- break;
- case NotifyCollectionChangedAction.Remove:
- break;
- case NotifyCollectionChangedAction.Replace:
- break;
- case NotifyCollectionChangedAction.Reset:
- break;
- }
- }
-
- private void EnronArchiveViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- break;
- case NotifyCollectionChangedAction.Move:
- break;
- case NotifyCollectionChangedAction.Remove:
- break;
- case NotifyCollectionChangedAction.Replace:
- break;
- case NotifyCollectionChangedAction.Reset:
- break;
- }
- }
-
- private void EnronEventViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- break;
- case NotifyCollectionChangedAction.Move:
- break;
- case NotifyCollectionChangedAction.Remove:
- break;
- case NotifyCollectionChangedAction.Replace:
- break;
- case NotifyCollectionChangedAction.Reset:
- break;
- }
- }
-
- private void TeleBUSRegisterViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- break;
- case NotifyCollectionChangedAction.Move:
- break;
- case NotifyCollectionChangedAction.Remove:
- break;
- case NotifyCollectionChangedAction.Replace:
- break;
- case NotifyCollectionChangedAction.Reset:
- break;
- }
- }
-
- private void TeleBUSArchiveViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- break;
- case NotifyCollectionChangedAction.Move:
- break;
- case NotifyCollectionChangedAction.Remove:
- break;
- case NotifyCollectionChangedAction.Replace:
- break;
- case NotifyCollectionChangedAction.Reset:
- break;
- }
- }
-
- private void TeleBUSEventViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- break;
- case NotifyCollectionChangedAction.Move:
- break;
- case NotifyCollectionChangedAction.Remove:
- break;
- case NotifyCollectionChangedAction.Replace:
- break;
- case NotifyCollectionChangedAction.Reset:
- break;
- }
- }
-
- #endregion
-
- #region Helper Methods
-
- private void LoadMap(Map map)
- {
- if (map != null)
- {
- try
- {
- Id = map.Id;
- DataService.ExtractCHMFile(map, out currentCHMFileName, out currentCHMFolderName);
- HelpFileBytes = map.HelpFileBytes;
- EnronArchiveViewModels = new ObservableCollection(map.EnronArchives.Select(enronArchive => new Enron.ArchiveViewModel() { Archive = enronArchive }));
- EnronRegisterViewModels = new ObservableCollection(map.EnronRegisters.Select(enronArchive => new Enron.RegisterViewModel() { Register = enronArchive }));
- EnronEventViewModels = new ObservableCollection(map.EnronEvents.Select(enronEvent => new Enron.EventViewModel() { Event = enronEvent }));
- TeleBUSArchiveViewModels = new ObservableCollection(map.TeleBUSArchives.Select(teleBUSArchive => new TeleBUS.ArchiveViewModel() { Archive = teleBUSArchive }));
- TeleBUSRegisterViewModels = new ObservableCollection(map.TeleBUSRegisters.Select(teleBUSArchive => new TeleBUS.RegisterViewModel() { Register = teleBUSArchive }));
- TeleBUSEventViewModels = new ObservableCollection(map.TeleBUSEvents.Select(teleBUSEvent => new TeleBUS.EventViewModel() { Event = teleBUSEvent }));
-
- var indexHTMLDocumentFileName = DataService.CreateIndexHTMLDocument(currentCHMFolderName);
-
- if (indexHTMLDocumentFileName != null)
- {
- NavigateHelpDocumentWebBrowserCommand.Execute(indexHTMLDocumentFileName);
- }
- else
- {
- DialogService.ShowErrorMessage("Unable to create index HTML document");
- Close();
- }
- }
- catch (Exception ex)
- {
- DialogService.ShowErrorMessage($"Error loading map: {ex.Message}");
- }
- }
- }
-
- #endregion
-
- }
-}
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/NewMapWizardViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/NewMapWizardViewModel.cs
deleted file mode 100644
index b6d383b..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/NewMapWizardViewModel.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-#region Imported Types
-
-using System;
-using GalaSoft.MvvmLight;
-using GalaSoft.MvvmLight.CommandWpf;
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model;
-using Microsoft.Practices.ServiceLocation;
-using System.IO;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel
-{
- public class NewMapWizardViewModel : ViewModelBase
- {
-
- #region Fields
-
- private string fileName;
- private string chmFileName = @"C:\Program Files (x86)\Schneider Electric\Realflo\Help\Realflo Reference Manual.chm";
-
- #endregion
-
- #region Properties
-
- public DataService DataService
- {
- get
- {
- return ServiceLocator.Current.GetInstance();
- }
- }
-
- public DialogService DialogService
- {
- get
- {
- return ServiceLocator.Current.GetInstance();
- }
- }
-
- public RelayCommand SelectRealFLOHelpFileCommand
- {
- get;
- set;
- }
-
- public RelayCommand SelectMapFileNameCommand
- {
- get;
- set;
- }
-
- public bool FileExists
- {
- get
- {
- return File.Exists(FileName);
- }
- }
-
- public string FileName
- {
- get
- {
- return fileName;
- }
- set
- {
- fileName = value;
- RaisePropertyChanged("FileName");
- RaisePropertyChanged("FileExists");
- }
- }
-
- public bool CHMFileExists
- {
- get
- {
- return File.Exists(CHMFileName);
- }
- }
-
- public string CHMFileName
- {
- get
- {
- return chmFileName;
- }
- set
- {
- chmFileName = value;
- RaisePropertyChanged("CHMFileName");
- RaisePropertyChanged("CHMFileExists");
- }
- }
-
- #endregion
-
- #region Constructor
-
- public NewMapWizardViewModel()
- {
- SelectRealFLOHelpFileCommand = new RelayCommand(SelectRealFLOHelpFile);
- SelectMapFileNameCommand = new RelayCommand(SelectMapFileName);
- }
-
- #endregion
-
- #region Command Methods
-
- private void SelectRealFLOHelpFile()
- {
- var selectedCHMFile = DialogService.OpenSelectRealFLOHelpFileDialog(CHMFileName);
- if(selectedCHMFile!= null)
- {
- CHMFileName = selectedCHMFile;
- }
- }
-
- private void SelectMapFileName()
- {
- var selectedMapFileName = DialogService.OpenCreateMapFileDialog();
-
- if(selectedMapFileName != null)
- {
- FileName = selectedMapFileName;
- }
- else
- {
- FileName = null;
- CHMFileName = null;
- }
-
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/ArchiveViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/ArchiveViewModel.cs
deleted file mode 100644
index 96f7511..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/ArchiveViewModel.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel.TeleBUS
-{
- public class ArchiveViewModel : TrackableViewModelBase
- {
- #region Fields
-
- private Archive archive;
-
- #endregion
-
- #region Imported Types
-
- public Archive Archive
- {
- get
- {
- return archive;
- }
- set
- {
- archive = value;
- RaisePropertyChanged("Archive");
- }
- }
-
- #endregion
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/EventViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/EventViewModel.cs
deleted file mode 100644
index 5f1d4b7..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/EventViewModel.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel.TeleBUS
-{
- public class EventViewModel : TrackableViewModelBase
- {
- #region Fields
-
- private Event _event;
-
- #endregion
-
- #region Imported Types
-
- public Event Event
- {
- get
- {
- return _event;
- }
- set
- {
- _event = value;
- RaisePropertyChanged("Event");
- }
- }
-
- #endregion
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/RegisterViewModel.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/RegisterViewModel.cs
deleted file mode 100644
index 7a30cf9..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TeleBUS/RegisterViewModel.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.Model.TeleBUS;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel.TeleBUS
-{
- public class RegisterViewModel : TrackableViewModelBase
- {
- #region Fields
-
- private Register register;
-
- #endregion
-
- #region Imported Types
-
- public Register Register
- {
- get
- {
- return register;
- }
- set
- {
- register = value;
- RaisePropertyChanged("Register");
- }
- }
-
- #endregion
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TrackableViewModelBase.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TrackableViewModelBase.cs
deleted file mode 100644
index 0bada95..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/TrackableViewModelBase.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-#region Imported Types
-
-using System.Runtime.CompilerServices;
-using GalaSoft.MvvmLight;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel
-{
- public class TrackableViewModelBase : ViewModelBase
- {
-
- #region Fields
-
- private bool hasChanged;
- private TrackableViewModelBase parent;
-
- #endregion
-
- #region Properties
-
- public bool HasChanged
- {
- get
- {
- return hasChanged;
- }
- set
- {
- hasChanged = value;
- RaisePropertyChanged("HasChanged");
- }
- }
-
- public TrackableViewModelBase Parent
- {
- get
- {
- return parent;
- }
- }
-
- #endregion
-
- #region Constructor(s)
-
- public TrackableViewModelBase()
- {
- }
-
- public TrackableViewModelBase(TrackableViewModelBase parent)
- {
- this.parent = parent;
- }
-
- #endregion
-
- #region Overrides
-
- public override void RaisePropertyChanged([CallerMemberName] string propertyName = null)
- {
- HasChanged = true;
- if (parent != null)
- {
- parent.HasChanged = true;
- }
- base.RaisePropertyChanged(propertyName);
- }
-
- #endregion
-
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/ViewModelLocator.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/ViewModelLocator.cs
deleted file mode 100644
index f645007..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/ViewModel/ViewModelLocator.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-#region Imported Types
-
-using GalaSoft.MvvmLight;
-using Microsoft.Practices.ServiceLocation;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel
-{
- public class ViewModelLocator
- {
- public ViewModelLocator()
- {
-
- }
-
- public ExportMapWizardViewModel ExportMapWizard
- {
- get
- {
- if (!ViewModelBase.IsInDesignModeStatic)
- {
- return ServiceLocator.Current.GetInstance();
- }
- else
- {
- return null;
- }
-
- }
- }
-
- public NewMapWizardViewModel NewMapWizard
- {
- get
- {
- if (!ViewModelBase.IsInDesignModeStatic)
- {
- return ServiceLocator.Current.GetInstance();
- }
- else
- {
- return null;
- }
- }
- }
-
- public MainViewModel Main
- {
- get
- {
- if (!ViewModelBase.IsInDesignModeStatic)
- {
- return ServiceLocator.Current.GetInstance();
- }
- else
- {
- return null;
- }
- }
- }
-
- public static void Cleanup()
- {
-
- }
- }
-}
\ No newline at end of file
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Wizard/NewMapWizard.xaml b/DeviceSQL.Utilities.RealFLOMappingGenerator/Wizard/NewMapWizard.xaml
deleted file mode 100644
index 7896ea5..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Wizard/NewMapWizard.xaml
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/Wizard/NewMapWizard.xaml.cs b/DeviceSQL.Utilities.RealFLOMappingGenerator/Wizard/NewMapWizard.xaml.cs
deleted file mode 100644
index bd50a86..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/Wizard/NewMapWizard.xaml.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Utilities.RealFLOMappingGenerator.ViewModel;
-using Microsoft.Practices.ServiceLocation;
-using System.Windows;
-
-#endregion
-
-namespace DeviceSQL.Utilities.RealFLOMappingGenerator.Wizard
-{
- public partial class NewMapWizard : Window
- {
-
- #region Constructor(s)
-
- public NewMapWizard()
- {
- InitializeComponent();
- }
-
- #endregion
-
- #region Wizard Events
-
- private void RadWizard_Finish(object sender, Telerik.Windows.Controls.NavigationButtonsEventArgs e)
- {
- DialogResult = true;
- Close();
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL.Utilities.RealFLOMappingGenerator/packages.config b/DeviceSQL.Utilities.RealFLOMappingGenerator/packages.config
deleted file mode 100644
index c36c606..0000000
--- a/DeviceSQL.Utilities.RealFLOMappingGenerator/packages.config
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL.sln b/DeviceSQL.sln
index cadd9af..b830189 100644
--- a/DeviceSQL.sln
+++ b/DeviceSQL.sln
@@ -1,17 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2010
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29306.81
MinimumVisualStudioVersion = 10.0.40219.1
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "DeviceSQL", "DeviceSQL\DeviceSQL.sqlproj", "{CB6F0884-5A58-432A-800E-4ABFEEAB6F46}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.TestHarness", "DeviceSQL.TestHarness\DeviceSQL.TestHarness.csproj", "{FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.DatabaseSetupUtility", "DeviceSQL.DatabaseSetupUtility\DeviceSQL.DatabaseSetupUtility.csproj", "{22929CF0-D02A-47D9-A308-D1D5497BF42B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.Utilities.DeploymentScriptFormatter", "DeviceSQL.Utilities.DeploymentScriptFormatter\DeviceSQL.Utilities.DeploymentScriptFormatter.csproj", "{0EA05DA7-635F-4018-9F33-0D3419374C9F}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.Service", "DeviceSQL.Service\DeviceSQL.Service.csproj", "{F7B38332-A678-424C-A67E-25CF36C2430D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.Utilities.RealFLOMappingGenerator", "DeviceSQL.Utilities.RealFLOMappingGenerator\DeviceSQL.Utilities.RealFLOMappingGenerator.csproj", "{6037A772-F9F9-420A-B04E-24E4B646911A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.Devices.ROC", "DeviceSQL.Devices.ROC\DeviceSQL.Devices.ROC.csproj", "{AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.DatabaseSetupUtility", "DeviceSQL.DatabaseSetupUtility\DeviceSQL.DatabaseSetupUtility.csproj", "{22929CF0-D02A-47D9-A308-D1D5497BF42B}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.Devices.Modbus", "DeviceSQL.Devices.Modbus\DeviceSQL.Devices.Modbus.csproj", "{0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.Devices.Common", "DeviceSQL.Devices.Common\DeviceSQL.Devices.Common.csproj", "{5DEADADF-BE60-4774-80C6-97B3A83FA289}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.SQLTypes.ROC", "DeviceSQL.SQLTypes.ROC\DeviceSQL.SQLTypes.ROC.csproj", "{256CA566-5436-4543-BC13-D2480BEE70C2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceSQL.SQLTypes.Modbus", "DeviceSQL.SQLTypes.Modbus\DeviceSQL.SQLTypes.Modbus.csproj", "{CD45D76E-D2ED-4587-9873-F35AD24E42A5}"
+EndProject
+Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "DeviceSQL.ChannelManager", "DeviceSQL.ChannelManager\DeviceSQL.ChannelManager.sqlproj", "{6393A621-3002-48AB-8DE0-74A03FFC4AFB}"
+EndProject
+Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "DeviceSQL.ROCMaster", "DeviceSQL.ROCMaster\DeviceSQL.ROCMaster.sqlproj", "{C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}"
+EndProject
+Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "DeviceSQL.ModbusMaster", "DeviceSQL.ModbusMaster\DeviceSQL.ModbusMaster.sqlproj", "{BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}"
+EndProject
+Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "DeviceSQL.DeviceManager", "DeviceSQL.DeviceManager\DeviceSQL.DeviceManager.sqlproj", "{0186AFD4-F3E0-42C0-A6BA-58F704804C31}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -33,30 +47,6 @@ Global
{CB6F0884-5A58-432A-800E-4ABFEEAB6F46}.Release|x86.ActiveCfg = Release|Any CPU
{CB6F0884-5A58-432A-800E-4ABFEEAB6F46}.Release|x86.Build.0 = Release|Any CPU
{CB6F0884-5A58-432A-800E-4ABFEEAB6F46}.Release|x86.Deploy.0 = Release|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Debug|x86.Build.0 = Debug|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Release|Any CPU.Build.0 = Release|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Release|x86.ActiveCfg = Release|Any CPU
- {FF09F40D-A515-4ABB-9DB1-21D9D1F2793E}.Release|x86.Build.0 = Release|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Debug|x86.Build.0 = Debug|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Release|Any CPU.Build.0 = Release|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Release|x86.ActiveCfg = Release|Any CPU
- {0EA05DA7-635F-4018-9F33-0D3419374C9F}.Release|x86.Build.0 = Release|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Debug|x86.ActiveCfg = Debug|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Debug|x86.Build.0 = Debug|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Release|Any CPU.Build.0 = Release|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Release|x86.ActiveCfg = Release|Any CPU
- {6037A772-F9F9-420A-B04E-24E4B646911A}.Release|x86.Build.0 = Release|Any CPU
{22929CF0-D02A-47D9-A308-D1D5497BF42B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{22929CF0-D02A-47D9-A308-D1D5497BF42B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{22929CF0-D02A-47D9-A308-D1D5497BF42B}.Debug|x86.ActiveCfg = Debug|Any CPU
@@ -65,6 +55,102 @@ Global
{22929CF0-D02A-47D9-A308-D1D5497BF42B}.Release|Any CPU.Build.0 = Release|Any CPU
{22929CF0-D02A-47D9-A308-D1D5497BF42B}.Release|x86.ActiveCfg = Release|Any CPU
{22929CF0-D02A-47D9-A308-D1D5497BF42B}.Release|x86.Build.0 = Release|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Debug|x86.Build.0 = Debug|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Release|x86.ActiveCfg = Release|Any CPU
+ {F7B38332-A678-424C-A67E-25CF36C2430D}.Release|x86.Build.0 = Release|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Debug|x86.Build.0 = Debug|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Release|x86.ActiveCfg = Release|Any CPU
+ {AF0E4B64-F2C2-4459-A518-9AA905FF6F0F}.Release|x86.Build.0 = Release|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Debug|x86.Build.0 = Debug|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Release|x86.ActiveCfg = Release|Any CPU
+ {0869E7FE-4FAC-4FC5-A2A8-313F410CF8CD}.Release|x86.Build.0 = Release|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Debug|x86.Build.0 = Debug|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Release|x86.ActiveCfg = Release|Any CPU
+ {5DEADADF-BE60-4774-80C6-97B3A83FA289}.Release|x86.Build.0 = Release|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Debug|x86.Build.0 = Debug|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Release|x86.ActiveCfg = Release|Any CPU
+ {256CA566-5436-4543-BC13-D2480BEE70C2}.Release|x86.Build.0 = Release|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Debug|x86.Build.0 = Debug|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Release|x86.ActiveCfg = Release|Any CPU
+ {CD45D76E-D2ED-4587-9873-F35AD24E42A5}.Release|x86.Build.0 = Release|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Debug|x86.Build.0 = Debug|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Debug|x86.Deploy.0 = Debug|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Release|x86.ActiveCfg = Release|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Release|x86.Build.0 = Release|Any CPU
+ {6393A621-3002-48AB-8DE0-74A03FFC4AFB}.Release|x86.Deploy.0 = Release|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Debug|x86.Build.0 = Debug|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Debug|x86.Deploy.0 = Debug|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Release|x86.ActiveCfg = Release|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Release|x86.Build.0 = Release|Any CPU
+ {C5358ADC-ECA3-464D-AEB9-CE99048D4BE3}.Release|x86.Deploy.0 = Release|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Debug|x86.Build.0 = Debug|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Debug|x86.Deploy.0 = Debug|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Release|x86.ActiveCfg = Release|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Release|x86.Build.0 = Release|Any CPU
+ {BF99E0A7-F591-4629-8DD2-DDA18B05E5F2}.Release|x86.Deploy.0 = Release|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Debug|x86.Build.0 = Debug|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Debug|x86.Deploy.0 = Debug|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Release|x86.ActiveCfg = Release|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Release|x86.Build.0 = Release|Any CPU
+ {0186AFD4-F3E0-42C0-A6BA-58F704804C31}.Release|x86.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/DeviceSQL/Device/ROC/Crc16.cs b/DeviceSQL/Device/ROC/Crc16.cs
deleted file mode 100644
index 54bae8a..0000000
--- a/DeviceSQL/Device/ROC/Crc16.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-#region Imported Types
-
-using System;
-
-#endregion
-
-namespace DeviceSQL.Device.ROC.Utility
-{
- public class CRC16 : System.Security.Cryptography.HashAlgorithm
- {
-
- #region Fields
-
- protected System.UInt16 _crc;
-
- protected readonly static System.UInt16 _initialCondition = 0x0;
-
- /* Table of CRC values for high-order byte */
- protected readonly static byte[] _crcHiLookupTable = {
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
- 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
- 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
- 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
- };
-
- /* Table of CRC values for low-order byte */
- protected readonly static byte[] _crcLoLookupTable = {
- 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
- 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
- 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
- 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
- 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
- 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
- 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
- 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
- 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
- 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
- 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
- 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
- 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
- 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
- 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
- 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
- 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
- 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
- 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
- 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
- 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
- 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
- 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
- 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
- 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
- 0x43, 0x83, 0x41, 0x81, 0x80, 0x40
- };
-
- #endregion
-
- #region Overridden Methods
-
- public override void Initialize()
- {
- _crc = _initialCondition;
- }
-
- protected override void HashCore(byte[] buffer, int offset, int count)
- {
- byte[] crc = BitConverter.GetBytes(_crc);
- int nextByte = 0;
- int uIndex;
- for (int i = offset; i < count && i < buffer.Length; i++)
- {
- nextByte = (0xFF & ((int)buffer[i]));
- uIndex = (crc[0] ^ nextByte);
- crc[0] = (Convert.ToByte((crc[1] ^ _crcHiLookupTable[uIndex])));
- crc[1] = _crcLoLookupTable[uIndex];
- }
- _crc = BitConverter.ToUInt16(crc, 0);
- }
-
- protected override byte[] HashFinal()
- {
- return BitConverter.GetBytes(_crc);
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL/DeviceSQL.sqlproj b/DeviceSQL/DeviceSQL.sqlproj
index d2b0ca9..590f94a 100644
--- a/DeviceSQL/DeviceSQL.sqlproj
+++ b/DeviceSQL/DeviceSQL.sqlproj
@@ -8,7 +8,7 @@
2.0
4.1
{cb6f0884-5a58-432a-800e-4abfeeab6f46}
- Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider
+ Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider
Database
@@ -17,16 +17,17 @@
1033, CI
BySchemaAndSchemaType
True
- v4.6.1
+ v4.8
CS
Properties
False
True
True
UNSAFE
- True
- DeviceSQL-Key.snk
+ False
+ ..\DeviceSQL-Key.snk
False
+
bin\Release\
@@ -62,323 +63,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -387,26 +75,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/DeviceSQL/Documentation/Modbus_Application_Protocol_V1_1b3.pdf b/DeviceSQL/Documentation/Modbus_Application_Protocol_V1_1b3.pdf
deleted file mode 100644
index c531a74..0000000
Binary files a/DeviceSQL/Documentation/Modbus_Application_Protocol_V1_1b3.pdf and /dev/null differ
diff --git a/DeviceSQL/Functions/ChannelManager/DisableChannelTracing.cs b/DeviceSQL/Functions/ChannelManager/DisableChannelTracing.cs
deleted file mode 100644
index f3c3174..0000000
--- a/DeviceSQL/Functions/ChannelManager/DisableChannelTracing.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.IO.Channels;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
-
- [Microsoft.SqlServer.Server.SqlFunction]
- public static SqlBoolean ChannelManager_DisableChannelLogging (SqlString channelName)
- {
- try
- {
- var channelNameValue = channelName.Value;
- var channels = DeviceSQL.Watchdog.Worker.Channels;
- var channel = channels.FirstOrDefault(c => c.Name == channelName.Value);
-
- if (channel != null)
- {
-
- channel.TracingEnabled = false;
-
- return new SqlBoolean(true);
-
- }
- else
- {
- throw new ArgumentException("Channel does not exist");
- }
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error disabling channel tracing: {0}", ex.Message));
- }
- return new SqlBoolean(false);
- }
- }
-
-}
diff --git a/DeviceSQL/Functions/ChannelManager/EnableChannelTracing.cs b/DeviceSQL/Functions/ChannelManager/EnableChannelTracing.cs
deleted file mode 100644
index f91a8c1..0000000
--- a/DeviceSQL/Functions/ChannelManager/EnableChannelTracing.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
-
- [Microsoft.SqlServer.Server.SqlFunction]
- public static SqlBoolean ChannelManager_EnableChannelLogging(SqlString channelName)
- {
- try
- {
- var channelNameValue = channelName.Value;
- var channels = DeviceSQL.Watchdog.Worker.Channels;
- var channel = channels.FirstOrDefault(c => c.Name == channelName.Value);
-
- if (channel != null)
- {
-
- channel.TracingEnabled = true;
-
- return new SqlBoolean(true);
-
- }
- else
- {
- throw new ArgumentException("Channel does not exist");
- }
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error enabling channel tracing: {0}", ex.Message));
- }
- return new SqlBoolean(false);
- }
- }
-
-}
diff --git a/DeviceSQL/Functions/ChannelManager/GetChannels.cs b/DeviceSQL/Functions/ChannelManager/GetChannels.cs
deleted file mode 100644
index 27a6a2b..0000000
--- a/DeviceSQL/Functions/ChannelManager/GetChannels.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Collections;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
- [SqlFunction(FillRowMethodName = "GetChannels_FillRow", TableDefinition = "ChannelName nvarchar(512), ChannelType nvarchar(512), ReadTimeout int, WriteTimeout int, ConnectionString nvarchar(512), TracingEnabled bit")]
- public static IEnumerable ChannelManager_GetChannels()
- {
- ArrayList resultCollection = new ArrayList();
- var channels = DeviceSQL.Watchdog.Worker.Channels;
- channels.ToList().ForEach(channel => resultCollection.Add(new GetChannels_Result(channel.Name, channel.GetType().Name, channel.ReadTimeout, channel.WriteTimeout, channel.ConnectionString, channel.TracingEnabled)));
- return resultCollection;
- }
-
- internal class GetChannels_Result
- {
- public SqlString ChannelName;
- public SqlString ChannelType;
- public SqlInt32 ReadTimeout;
- public SqlInt32 WriteTimeout;
- public SqlString ConnectionString;
- public SqlBoolean TracingEnabled;
-
- public GetChannels_Result(SqlString channelName, SqlString channelType, SqlInt32 readTimeout, SqlInt32 writeTimeout, SqlString connectionString, SqlBoolean tracingEnabled)
- {
- ChannelName = channelName;
- ChannelType = channelType;
- ReadTimeout = readTimeout;
- WriteTimeout = writeTimeout;
- ConnectionString = connectionString;
- TracingEnabled = tracingEnabled;
- }
- }
-
- public static void GetChannels_FillRow(object getChannels_ResultObj, out SqlString channelName, out SqlString channelType, out SqlInt32 readTimeout, out SqlInt32 writeTimeout, out SqlString connectionString, out SqlBoolean tracingEnabled)
- {
- var getChannels_Result = (getChannels_ResultObj as GetChannels_Result);
- channelName = getChannels_Result.ChannelName;
- channelType = getChannels_Result.ChannelType;
- readTimeout = getChannels_Result.ReadTimeout;
- writeTimeout = getChannels_Result.WriteTimeout;
- connectionString = getChannels_Result.ConnectionString;
- tracingEnabled = getChannels_Result.TracingEnabled;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ChannelManager/RegisterSerialPortChannel.cs b/DeviceSQL/Functions/ChannelManager/RegisterSerialPortChannel.cs
deleted file mode 100644
index 9156a1f..0000000
--- a/DeviceSQL/Functions/ChannelManager/RegisterSerialPortChannel.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.IO.Channels;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
- [SqlFunction]
- public static SqlBoolean ChannelManager_RegisterSerialPortChannel(SqlString channelName, SqlString portName, SqlInt32 baudRate, SqlByte dataBits, SqlByte parity, SqlByte stopBits, SqlInt32 readTimeout, SqlInt32 writeTimeout)
- {
- try
- {
- var channelNameValue = channelName.Value;
- var channels = DeviceSQL.Watchdog.Worker.Channels;
-
- if (channels.Where(serialPortChannel => serialPortChannel.Name == channelNameValue).Count() == 0)
- {
- if (channelNameValue.Count(c =>
- {
- switch (c)
- {
- case '|':
- case ';':
- case ',':
- return true;
- default:
- return false;
- }
- }) > 0)
- {
- throw new ArgumentException("Invalid channel name");
- }
-
- var serialPortChannel = new SerialPortChannel()
- {
- Name = channelNameValue,
- ReadTimeout = readTimeout.Value,
- WriteTimeout = writeTimeout.Value
- };
-
- serialPortChannel.SerialPort.PortName = portName.Value;
- serialPortChannel.SerialPort.BaudRate = baudRate.Value;
- serialPortChannel.SerialPort.Parity = (System.IO.Ports.Parity)Enum.Parse(typeof(System.IO.Ports.Parity), parity.Value.ToString());
- serialPortChannel.SerialPort.StopBits = (System.IO.Ports.StopBits)Enum.Parse(typeof(System.IO.Ports.StopBits), stopBits.Value.ToString());
- serialPortChannel.SerialPort.Handshake = System.IO.Ports.Handshake.None;
- serialPortChannel.SerialPort.DtrEnable = false;
- serialPortChannel.SerialPort.RtsEnable = false;
-
- serialPortChannel.SerialPort.Open();
-
- channels.Add(serialPortChannel);
-
- return new SqlBoolean(true);
-
- }
- else
- {
- throw new ArgumentException("Channel name is already registered");
- }
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error registering channel: {0}", ex.Message));
- }
- return new SqlBoolean(false);
- }
- }
-}
diff --git a/DeviceSQL/Functions/ChannelManager/RegisterTcpChannel.cs b/DeviceSQL/Functions/ChannelManager/RegisterTcpChannel.cs
deleted file mode 100644
index 3a2caeb..0000000
--- a/DeviceSQL/Functions/ChannelManager/RegisterTcpChannel.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.IO.Channels;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-using System.Net.Sockets;
-
-#endregion
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
-
- [Microsoft.SqlServer.Server.SqlFunction]
- public static SqlBoolean ChannelManager_RegisterTcpChannel(SqlString channelName, SqlString hostName, SqlInt32 hostPort, SqlInt32 connectAttempts, SqlInt32 connectionRetryDelay, SqlInt32 readTimeout, SqlInt32 writeTimeout)
- {
-
- var channelNameValue = channelName.Value;
- var channels = DeviceSQL.Watchdog.Worker.Channels;
-
- if (channelNameValue.Count(c =>
- {
- switch (c)
- {
- case '|':
- case ';':
- case ',':
- return true;
- default:
- return false;
- }
- }) > 0)
- {
- throw new ArgumentException("Invalid channel name");
- }
-
- if (channels.Where(channel => channel.Name == channelNameValue).Count() == 0)
- {
- var tcpChannel = new TcpChannel()
- {
- Name = channelNameValue,
- HostName = hostName.Value,
- HostPort = hostPort.Value,
- ConnectionAttempts = connectAttempts.Value,
- ConnectionRetryDelay = connectionRetryDelay.Value
- };
-
- var currentConnectAttempts = 0;
-
- Connect:
- currentConnectAttempts++;
-
- try
- {
-
- tcpChannel.TcpClient.Connect(tcpChannel.HostName, tcpChannel.HostPort);
-
- }
- catch(SocketException socketException)
- {
- if (currentConnectAttempts > tcpChannel.ConnectionAttempts)
- {
- throw socketException;
- }
- else
- {
- System.Threading.Thread.Sleep(500);
- goto Connect;
- }
- }
-
- tcpChannel.ReadTimeout = readTimeout.Value;
- tcpChannel.WriteTimeout = writeTimeout.Value;
-
- channels.Add(tcpChannel);
-
- return new SqlBoolean(true);
-
- }
- else
- {
- throw new ArgumentException("Channel name is already registered");
- }
- }
- }
-
-}
diff --git a/DeviceSQL/Functions/ChannelManager/TraceChannels.cs b/DeviceSQL/Functions/ChannelManager/TraceChannels.cs
deleted file mode 100644
index 353a3f0..0000000
--- a/DeviceSQL/Functions/ChannelManager/TraceChannels.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.IO.Channels;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-using System.Threading;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
- [SqlFunction(FillRowMethodName = "TraceChannels_FillRow", TableDefinition = "[MessageDateTimeStamp] datetime, [ChannelType] nvarchar(64), [ChannelName] nvarchar(1024), [Operation] nvarchar(32), [Sequence] int, [StartTime] datetime, [Duration] float, [Count] int, [Data] nvarchar(640)")]
- public static IEnumerable ChannelManager_TraceChannels()
- {
- var queueLockObject = new object();
- using (var channelTraceListener = new ChannelTraceListener())
- {
- var channelTraceListenerMessageQueue = new Queue();
- channelTraceListener.ChannelTraceMessageReceived += (object sender, ChannelTraceEventArgs e) =>
- {
- lock (queueLockObject)
- {
- channelTraceListenerMessageQueue.Enqueue(new TraceChannels_Result(e.MessageDateTimeStamp, e.ChannelType, e.Name, e.Operation, e.Sequence, e.StartTime, e.Duration, e.Count, e.Data));
- }
- };
-
- while (channelTraceListener != null)
- {
- lock (queueLockObject)
- {
- while (channelTraceListenerMessageQueue.Count > 0)
- {
- yield return channelTraceListenerMessageQueue.Dequeue();
- }
- }
- TimedThreadBlocker.Wait(125);
- }
-
- }
- }
-
- internal class TraceChannels_Result
- {
-
- internal SqlDateTime MessageDateTimeStamp { get; set; }
- internal SqlString Name { get; set; }
- internal SqlDateTime StartTime { get; set; }
- internal SqlString Operation { get; set; }
- internal SqlDouble Duration { get; set; }
- internal SqlInt32 Sequence { get; set; }
- internal SqlInt32 Count { get; set; }
- internal SqlString Data { get; set; }
- internal SqlString ChannelType { get; set; }
-
- public TraceChannels_Result(SqlDateTime messageDateTimeStamp, SqlString channelType, SqlString name, SqlString operation, SqlInt32 sequence, SqlDateTime startTime, SqlDouble duration, SqlInt32 count, SqlString data)
- {
- MessageDateTimeStamp = messageDateTimeStamp;
- Name = name;
- StartTime = startTime;
- Operation = operation;
- Duration = duration;
- Sequence = sequence;
- Count = count;
- Data = data;
- ChannelType = channelType;
- }
- }
-
- public static void TraceChannels_FillRow(object TraceChannels_ResultObj, out SqlDateTime messageDateTimeStamp, out SqlString channelType, out SqlString name, out SqlString operation, out SqlInt32 sequence, out SqlDateTime startTime, out SqlDouble duration, out SqlInt32 count, out SqlString data)
- {
- var TraceChannels_Result = (TraceChannels_ResultObj as TraceChannels_Result);
-
- messageDateTimeStamp = TraceChannels_Result.MessageDateTimeStamp;
- name = TraceChannels_Result.Name;
- startTime = TraceChannels_Result.StartTime;
- operation = TraceChannels_Result.Operation;
- duration = TraceChannels_Result.Duration;
- sequence = TraceChannels_Result.Sequence;
- count = TraceChannels_Result.Count;
- data = TraceChannels_Result.Data;
- channelType = TraceChannels_Result.ChannelType;
-
- }
- }
-}
diff --git a/DeviceSQL/Functions/ChannelManager/UnregisterChannel.cs b/DeviceSQL/Functions/ChannelManager/UnregisterChannel.cs
deleted file mode 100644
index 34d5ad7..0000000
--- a/DeviceSQL/Functions/ChannelManager/UnregisterChannel.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ChannelManager
- {
- [Microsoft.SqlServer.Server.SqlFunction]
- public static SqlBoolean ChannelManager_UnregisterChannel(SqlString channelName)
- {
- try
- {
- var channelNameValue = channelName.Value;
- var channels = DeviceSQL.Watchdog.Worker.Channels;
- var channelsToRemove = channels.Where(channel => channel.Name == channelNameValue).ToList();
- channelsToRemove.ForEach((channel) =>
- {
- try
- {
- channel.Dispose();
- channels.TryTake(out channel);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error unregistering channel: {0}", ex.Message));
- }
- });
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error unregistering channel: {0}", ex.Message));
- }
- return new SqlBoolean(true);
- }
- }
-
-}
diff --git a/DeviceSQL/Functions/DeviceManager/GetDevices.cs b/DeviceSQL/Functions/DeviceManager/GetDevices.cs
deleted file mode 100644
index 3836665..0000000
--- a/DeviceSQL/Functions/DeviceManager/GetDevices.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Collections;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class DeviceManager
- {
-
- [SqlFunction(FillRowMethodName = "GetDevices_FillRow", TableDefinition = "DeviceName nvarchar(512), ChannelName nvarchar(512), DeviceType nvarchar(512), Address nvarchar(512), NumberOfRetries int, WaitToRetry int, RequestWriteDelay int, ResponseReadDelay int")]
- public static IEnumerable DeviceManager_GetDevices()
- {
- ArrayList resultCollection = new ArrayList();
- var devices = DeviceSQL.Watchdog.Worker.Devices;
- devices.ToList().ForEach(device => resultCollection.Add(new GetDevices_Result(device.Name, device.Transport.Channel.Name, device.GetType().Name, device.Address, device.Transport.NumberOfRetries, device.Transport.WaitToRetryMilliseconds, device.Transport.RequestWriteDelayMilliseconds, device.Transport.ResponseReadDelayMilliseconds)));
- return resultCollection;
- }
-
- internal class GetDevices_Result
- {
-
- #region Fields
-
- public SqlString ChannelName;
- public SqlString DeviceName;
- public SqlString DeviceType;
- public SqlString Address;
- public SqlInt32 NumberOfRetries;
- public SqlInt32 WaitToRetry;
- public SqlInt32 RequestWriteDelay;
- public SqlInt32 ResponseReadDelay;
-
- #endregion
-
- #region Constructor
-
- public GetDevices_Result(SqlString channelName, SqlString deviceName, SqlString deviceType, SqlString address, SqlInt32 numberOfRetries, SqlInt32 waitToRetry, SqlInt32 requestWriteDelay, SqlInt32 responseReadDelay)
- {
- ChannelName = channelName;
- DeviceName = deviceName;
- DeviceType = deviceType;
- Address = address;
- NumberOfRetries = numberOfRetries;
- WaitToRetry = waitToRetry;
- RequestWriteDelay = requestWriteDelay;
- ResponseReadDelay = responseReadDelay;
- }
-
- #endregion
-
- }
-
- public static void GetDevices_FillRow(object getDevices_ResultObj, out SqlString channelName, out SqlString deviceName, out SqlString deviceType, out SqlString address, out SqlInt32 numberOfRetries, out SqlInt32 waitToRetry, out SqlInt32 requestWriteDelay, out SqlInt32 responseReadDelay)
- {
- GetDevices_Result getDevices_Result = (getDevices_ResultObj as GetDevices_Result);
- channelName = getDevices_Result.ChannelName;
- deviceName = getDevices_Result.DeviceName;
- deviceType = getDevices_Result.DeviceType;
- address = getDevices_Result.Address;
- numberOfRetries = getDevices_Result.NumberOfRetries;
- waitToRetry = getDevices_Result.WaitToRetry;
- requestWriteDelay = getDevices_Result.RequestWriteDelay;
- responseReadDelay = getDevices_Result.ResponseReadDelay;
- }
-
- }
-
-}
diff --git a/DeviceSQL/Functions/DeviceManager/RegisterModbusMaster.cs b/DeviceSQL/Functions/DeviceManager/RegisterModbusMaster.cs
deleted file mode 100644
index b56fea3..0000000
--- a/DeviceSQL/Functions/DeviceManager/RegisterModbusMaster.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class DeviceManager
- {
- [SqlFunction]
- public static SqlBoolean DeviceManager_RegisterMODBUSMaster(SqlString channelName, SqlString deviceName, SqlInt32 unitId, SqlBoolean useExtendedAddressing, SqlInt32 numberOfRetries, SqlInt32 waitToRetry, SqlInt32 requestWriteDelay, SqlInt32 responseReadDelay)
- {
- try
- {
- var deviceNameValue = deviceName.Value;
- var devices = DeviceSQL.Watchdog.Worker.Devices;
- if (devices.Where(device => device.Name == deviceNameValue).Count() == 0)
- {
- var channelNameValue = channelName.Value;
- var MODBUSMaster = new Device.MODBUS.MODBUSMaster(DeviceSQL.Watchdog.Worker.Channels.First(channel => channel.Name == channelNameValue))
- {
- Name = deviceNameValue,
- UnitId = Convert.ToUInt16(unitId.Value),
- UseExtendedAddressing = useExtendedAddressing.Value
- };
-
- MODBUSMaster.Transport.NumberOfRetries = numberOfRetries.Value;
- MODBUSMaster.Transport.WaitToRetryMilliseconds = waitToRetry.Value;
- MODBUSMaster.Transport.RequestWriteDelayMilliseconds = requestWriteDelay.Value;
- MODBUSMaster.Transport.ResponseReadDelayMilliseconds = responseReadDelay.Value;
-
- devices.Add(MODBUSMaster);
-
- return new SqlBoolean(true);
-
- }
- else
- {
- throw new ArgumentException("Device name is already registered");
- }
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error registering device: {0}", ex.Message));
- }
- return new SqlBoolean(false);
- }
- }
-}
diff --git a/DeviceSQL/Functions/DeviceManager/RegisterROCMaster.cs b/DeviceSQL/Functions/DeviceManager/RegisterROCMaster.cs
deleted file mode 100644
index be8894d..0000000
--- a/DeviceSQL/Functions/DeviceManager/RegisterROCMaster.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class DeviceManager
- {
- [SqlFunction]
- public static SqlBoolean DeviceManager_RegisterROCMaster(SqlString channelName, SqlString deviceName, SqlByte deviceAddress, SqlByte deviceGroup, SqlByte hostAddress, SqlByte hostGroup, SqlInt32 numberOfRetries, SqlInt32 waitToRetry, SqlInt32 requestWriteDelay, SqlInt32 responseReadDelay)
- {
- try
- {
- var deviceNameValue = deviceName.Value;
- var devices = DeviceSQL.Watchdog.Worker.Devices;
- if (devices.Where(device => device.Name == deviceNameValue).Count() == 0)
- {
- var channelNameValue = channelName.Value;
- var rocMaster = new Device.ROC.ROCMaster(DeviceSQL.Watchdog.Worker.Channels.First(channel => channel.Name == channelNameValue))
- {
- Name = deviceNameValue,
- DeviceAddress = deviceAddress.Value,
- DeviceGroup = deviceGroup.Value,
- HostAddress = hostAddress.Value,
- HostGroup = hostGroup.Value
- };
-
- rocMaster.Transport.NumberOfRetries = numberOfRetries.Value;
- rocMaster.Transport.WaitToRetryMilliseconds = waitToRetry.Value;
- rocMaster.Transport.RequestWriteDelayMilliseconds = requestWriteDelay.Value;
- rocMaster.Transport.ResponseReadDelayMilliseconds = responseReadDelay.Value;
-
- devices.Add(rocMaster);
-
- return new SqlBoolean(true);
-
- }
- else
- {
- throw new ArgumentException("Device name is already registered");
- }
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error registering device: {0}", ex.Message));
- }
- return new SqlBoolean(false);
- }
- }
-}
diff --git a/DeviceSQL/Functions/DeviceManager/UnregisterDevice.cs b/DeviceSQL/Functions/DeviceManager/UnregisterDevice.cs
deleted file mode 100644
index c2c3e14..0000000
--- a/DeviceSQL/Functions/DeviceManager/UnregisterDevice.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class DeviceManager
- {
- [SqlFunction]
- public static SqlBoolean DeviceManager_UnregisterDevice(SqlString deviceName)
- {
- try
- {
- var deviceNameValue = deviceName.Value;
- var devices = DeviceSQL.Watchdog.Worker.Devices;
- var devicesToRemove = devices.Where(channel => channel.Name == deviceNameValue).ToList();
- devicesToRemove.ForEach((device) =>
- {
- try
- {
- devices.TryTake(out device);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error unregistering device: {0}", ex.Message));
- }
- });
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error unregistering device: {0}", ex.Message));
- }
- return new SqlBoolean(true);
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadCoils.cs b/DeviceSQL/Functions/ModbusMaster/ReadCoils.cs
deleted file mode 100644
index 675ecbc..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadCoils.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_CoilRegisterArray MODBUSMaster_ReadCoils(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_CoilRegisterArray coilRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var coilRegisters = new List(coilRegisterArray.coilRegisters.Select(coilRegister => new Device.MODBUS.Data.CoilRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(coilRegister.Address.RelativeAddress.Value), coilRegister.Address.IsZeroBased.Value))));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadCoilRegisters(null, ref coilRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_CoilRegisterArray() { coilRegisters = coilRegisters.Select(coilRegister => new Types.MODBUSMaster.MODBUSMaster_CoilRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = coilRegister.Address.RelativeAddress, IsZeroBased = coilRegister.Address.IsZeroBased }, Data = coilRegister.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadDiscreteInputs.cs b/DeviceSQL/Functions/ModbusMaster/ReadDiscreteInputs.cs
deleted file mode 100644
index 06e21eb..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadDiscreteInputs.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_DiscreteInputRegisterArray MODBUSMaster_ReadDiscreteInputs(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_DiscreteInputRegisterArray discreteInputRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var discreteInputRegisters = new List(discreteInputRegisterArray.discreteInputRegisters.Select(discreteInputRegister => new Device.MODBUS.Data.DiscreteInputRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(discreteInputRegister.Address.RelativeAddress.Value), discreteInputRegister.Address.IsZeroBased.Value))));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadDiscreteInputRegisters(null, ref discreteInputRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_DiscreteInputRegisterArray() { discreteInputRegisters = discreteInputRegisters.Select(discreteInputRegister => new Types.MODBUSMaster.MODBUSMaster_DiscreteInputRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = discreteInputRegister.Address.RelativeAddress, IsZeroBased = discreteInputRegister.Address.IsZeroBased }, Data = discreteInputRegister.Data }).ToList() };
- }
- }
-}
\ No newline at end of file
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadEventArchiveRecords.cs b/DeviceSQL/Functions/ModbusMaster/ReadEventArchiveRecords.cs
deleted file mode 100644
index 5e3e5e7..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadEventArchiveRecords.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_EventArchiveRecordArray MODBUSMaster_ReadEventArchiveRecords(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_MODBUSAddress eventArchiveAddress, SqlInt32 index)
- {
- var deviceNameValue = deviceName.Value;
- var eventArchiveRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadEventArchiveRecord(null, new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(eventArchiveAddress.RelativeAddress.Value), eventArchiveAddress.IsZeroBased.Value), Convert.ToUInt16(index.Value), null);
- return new Types.MODBUSMaster.MODBUSMaster_EventArchiveRecordArray() { eventArchiveRecords = eventArchiveRecords.Select(ear => new Types.MODBUSMaster.MODBUSMaster_EventArchiveRecord() { Index = ear.Index, Data = ear.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadFloats.cs b/DeviceSQL/Functions/ModbusMaster/ReadFloats.cs
deleted file mode 100644
index 1c4afd1..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadFloats.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_FloatRegisterArray MODBUSMaster_ReadFloats(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_FloatRegisterArray floatRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var floatRegisters = new List(floatRegisterArray.floatRegisters.Select(floatRegister => new Device.MODBUS.Data.FloatRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(floatRegister.Address.RelativeAddress.Value), floatRegister.Address.IsZeroBased.Value), floatRegister.ByteSwap.Value, floatRegister.WordSwap.Value)));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadFloatRegisters(null, ref floatRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_FloatRegisterArray() { floatRegisters = floatRegisters.Select(floatRegister => new Types.MODBUSMaster.MODBUSMaster_FloatRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = floatRegister.Address.RelativeAddress, IsZeroBased = floatRegister.Address.IsZeroBased }, Data = floatRegister.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadHistoryArchiveRecord.cs b/DeviceSQL/Functions/ModbusMaster/ReadHistoryArchiveRecord.cs
deleted file mode 100644
index 6cedc48..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadHistoryArchiveRecord.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_HistoryArchiveRecord MODBUSMaster_ReadHistoryArchiveRecord(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_MODBUSAddress historyArchiveAddress, SqlInt32 index, SqlByte recordSize)
- {
- var deviceNameValue = deviceName.Value;
- var historyArchiveRecord = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadHistoryArchiveRecord(null, new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(historyArchiveAddress.RelativeAddress.Value), historyArchiveAddress.IsZeroBased.Value), Convert.ToUInt16(index.Value), recordSize.Value, null);
- return new Types.MODBUSMaster.MODBUSMaster_HistoryArchiveRecord() { Index = historyArchiveRecord.Index, Data = historyArchiveRecord.Data };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadHoldings.cs b/DeviceSQL/Functions/ModbusMaster/ReadHoldings.cs
deleted file mode 100644
index d758aca..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadHoldings.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_HoldingRegisterArray MODBUSMaster_ReadHoldings(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_HoldingRegisterArray holdingRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var holdingRegisters = new List(holdingRegisterArray.holdingRegisters.Select(holdingRegister => new Device.MODBUS.Data.HoldingRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(holdingRegister.Address.RelativeAddress.Value), holdingRegister.Address.IsZeroBased.Value), holdingRegister.ByteSwap.Value)));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadHoldingRegisters(null, ref holdingRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_HoldingRegisterArray() { holdingRegisters = holdingRegisters.Select(holdingRegister => new Types.MODBUSMaster.MODBUSMaster_HoldingRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = holdingRegister.Address.RelativeAddress, IsZeroBased = holdingRegister.Address.IsZeroBased }, ByteSwap = holdingRegister.ByteSwap, Data = holdingRegister.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadInputs.cs b/DeviceSQL/Functions/ModbusMaster/ReadInputs.cs
deleted file mode 100644
index 3bdb884..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadInputs.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_InputRegisterArray MODBUSMaster_ReadInputs(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_InputRegisterArray inputRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var inputRegisters = new List(inputRegisterArray.inputRegisters.Select(inputRegister => new Device.MODBUS.Data.InputRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(inputRegister.Address.RelativeAddress.Value), inputRegister.Address.IsZeroBased.Value), inputRegister.ByteSwap.Value)));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadInputRegisters(null, ref inputRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_InputRegisterArray() { inputRegisters = inputRegisters.Select(inputRegister => new Types.MODBUSMaster.MODBUSMaster_InputRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = inputRegister.Address.RelativeAddress, IsZeroBased = inputRegister.Address.IsZeroBased }, ByteSwap = inputRegister.ByteSwap, Data = inputRegister.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadLongs.cs b/DeviceSQL/Functions/ModbusMaster/ReadLongs.cs
deleted file mode 100644
index e3c1f46..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadLongs.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_LongRegisterArray MODBUSMaster_ReadLongs(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_LongRegisterArray longRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var longRegisters = new List(longRegisterArray.longRegisters.Select(longRegister => new Device.MODBUS.Data.LongRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(longRegister.Address.RelativeAddress.Value), longRegister.Address.IsZeroBased.Value), longRegister.ByteSwap.Value, longRegister.WordSwap.Value)));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadLongRegisters(null, ref longRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_LongRegisterArray() { longRegisters = longRegisters.Select(floatRegister => new Types.MODBUSMaster.MODBUSMaster_LongRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = floatRegister.Address.RelativeAddress, IsZeroBased = floatRegister.Address.IsZeroBased }, Data = floatRegister.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadShorts.cs b/DeviceSQL/Functions/ModbusMaster/ReadShorts.cs
deleted file mode 100644
index fe31434..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadShorts.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_ShortRegisterArray MODBUSMaster_ReadShorts(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_ShortRegisterArray shortRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var shortRegisters = new List(shortRegisterArray.shortRegisters.Select(longRegister => new Device.MODBUS.Data.ShortRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(longRegister.Address.RelativeAddress.Value), longRegister.Address.IsZeroBased.Value), longRegister.ByteSwap.Value)));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadShortRegisters(null, ref shortRegisters, null);
- return new Types.MODBUSMaster.MODBUSMaster_ShortRegisterArray() { shortRegisters = shortRegisters.Select(shortRegister => new Types.MODBUSMaster.MODBUSMaster_ShortRegister() { Address = new Types.MODBUSMaster.MODBUSMaster_MODBUSAddress { RelativeAddress = shortRegister.Address.RelativeAddress, IsZeroBased = shortRegister.Address.IsZeroBased }, Data = shortRegister.Data }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/ReadString.cs b/DeviceSQL/Functions/ModbusMaster/ReadString.cs
deleted file mode 100644
index 6c28c57..0000000
--- a/DeviceSQL/Functions/ModbusMaster/ReadString.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static Types.MODBUSMaster.MODBUSMaster_StringRegister MODBUSMaster_ReadString(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_StringRegister stringRegister)
- {
- var deviceNameValue = deviceName.Value;
- var stringRegisterValue = new Device.MODBUS.Data.StringRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(stringRegister.Address.RelativeAddress.Value), stringRegister.Address.IsZeroBased.Value), stringRegister.Length.Value);
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).ReadStringRegister(null, null, ref stringRegisterValue);
- stringRegister.Data = stringRegisterValue.Data;
- return stringRegister;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/WriteBoolean.cs b/DeviceSQL/Functions/ModbusMaster/WriteBoolean.cs
deleted file mode 100644
index d7edbbc..0000000
--- a/DeviceSQL/Functions/ModbusMaster/WriteBoolean.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static SqlBoolean MODBUSMaster_WriteBoolean(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_BooleanRegister booleanRegister)
- {
- var deviceNameValue = deviceName.Value;
- var booleanRegisterRaw = new Device.MODBUS.Data.BooleanRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(booleanRegister.Address.RelativeAddress.Value), booleanRegister.Address.IsZeroBased.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).WriteBooleanRegister(null, booleanRegisterRaw, null);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ModbusMaster/WriteFloats.cs b/DeviceSQL/Functions/ModbusMaster/WriteFloats.cs
deleted file mode 100644
index 2b951f3..0000000
--- a/DeviceSQL/Functions/ModbusMaster/WriteFloats.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class MODBUSMaster
- {
- [SqlFunction]
- public static SqlBoolean MODBUSMaster_WriteFloats(SqlString deviceName, Types.MODBUSMaster.MODBUSMaster_FloatRegisterArray floatRegisterArray)
- {
- var deviceNameValue = deviceName.Value;
- var floatRegisters = new List(floatRegisterArray.floatRegisters.Select(floatRegister => new Device.MODBUS.Data.FloatRegister(new Device.MODBUS.Data.MODBUSAddress(Convert.ToUInt16(floatRegister.Address.RelativeAddress.Value), floatRegister.Address.IsZeroBased.Value), floatRegister.ByteSwap.Value, floatRegister.WordSwap.Value)));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.MODBUS.MODBUSMaster).WriteFloatRegisters(null, floatRegisters, null);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/ClearAuditLogEventFlags.cs b/DeviceSQL/Functions/ROCMaster/ClearAuditLogEventFlags.cs
deleted file mode 100644
index a798040..0000000
--- a/DeviceSQL/Functions/ROCMaster/ClearAuditLogEventFlags.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static int ROCMaster_ClearAuditLogEventFlags(SqlString deviceName, byte numberOfAuditLogRecordsToClear, int startingAuditLogPointer)
- {
- var deviceNameValue = deviceName.Value;
- return (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ClearAuditLogEventFlags(null, null, null, null, numberOfAuditLogRecordsToClear, Convert.ToUInt16(startingAuditLogPointer));
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetAlarms.cs b/DeviceSQL/Functions/ROCMaster/GetAlarms.cs
deleted file mode 100644
index 8d60bd1..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetAlarms.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_AlarmRecordArray ROCMaster_GetAlarms(SqlString deviceName, byte count, int startIndex)
- {
- var deviceNameValue = deviceName.Value;
- var alarmsRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetAlarms(null, null, null, null, count, Convert.ToUInt16(startIndex));
- return new Types.ROCMaster.ROCMaster_AlarmRecordArray() { alarmRecords = alarmsRecords.Select(a => new Types.ROCMaster.ROCMaster_AlarmRecord() { data = a.data, Index = a.Index }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetArchiveInfo.cs b/DeviceSQL/Functions/ROCMaster/GetArchiveInfo.cs
deleted file mode 100644
index 4790a17..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetArchiveInfo.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ArchiveInformation ROCMaster_GetArchiveInfo(SqlString deviceName)
- {
- var deviceNameValue = deviceName.Value;
- var archiveInfo = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetArchiveInfo(null, null, null, null);
- return new Types.ROCMaster.ROCMaster_ArchiveInformation() { Data = archiveInfo.data };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetAuditLogRecords.cs b/DeviceSQL/Functions/ROCMaster/GetAuditLogRecords.cs
deleted file mode 100644
index abbceaa..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetAuditLogRecords.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_AuditLogRecordArray ROCMaster_GetAuditLogRecords(SqlString deviceName, byte count, int startIndex)
- {
- var deviceNameValue = deviceName.Value;
- var auditLogRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetAuditLogRecords(null, null, null, null, count, Convert.ToUInt16(startIndex));
- return new Types.ROCMaster.ROCMaster_AuditLogRecordArray() { auditLogRecords = auditLogRecords.Select(e => new Types.ROCMaster.ROCMaster_AuditLogRecord() { Data = e.data, Index = e.Index }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusAlarmIndex.cs b/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusAlarmIndex.cs
deleted file mode 100644
index 874e0f8..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusAlarmIndex.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static int ROCMaster_GetCurrentROCPlusAlarmIndex(SqlString deviceName)
- {
- var deviceNameValue = deviceName.Value;
- return (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetCurrentROCPlusAlarmIndex(null, null, null, null);
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusEventIndex.cs b/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusEventIndex.cs
deleted file mode 100644
index 5c24221..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusEventIndex.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static int ROCMaster_GetCurrentROCPlusEventIndex(SqlString deviceName)
- {
- var deviceNameValue = deviceName.Value;
- return (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetCurrentROCPlusEventIndex(null, null, null, null);
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusHistorySegmentIndex.cs b/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusHistorySegmentIndex.cs
deleted file mode 100644
index a562308..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetCurrentROCPlusHistorySegmentIndex.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static int ROCMaster_GetCurrentROCPlusHistorySegmentIndex(SqlString deviceName, byte historySegment, byte historyType)
- {
- var deviceNameValue = deviceName.Value;
- return (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetCurrentROCPlusHistorySegmentIndex(null, null, null, null, historySegment, historyType);
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetDoubleValue.cs b/DeviceSQL/Functions/ROCMaster/GetDoubleValue.cs
deleted file mode 100644
index 66aa649..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetDoubleValue.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlDouble ROCMaster_GetDoubleValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var DoubleParameter = new DoubleParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref DoubleParameter);
- return DoubleParameter.NullableValue.HasValue ? DoubleParameter.Value : SqlDouble.Null;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetEvents.cs b/DeviceSQL/Functions/ROCMaster/GetEvents.cs
deleted file mode 100644
index 74a94c1..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetEvents.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_EventRecordArray ROCMaster_GetEvents(SqlString deviceName, byte count, int startIndex)
- {
- var deviceNameValue = deviceName.Value;
- var eventRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetEvents(null, null, null, null, count, Convert.ToUInt16(startIndex));
- return new Types.ROCMaster.ROCMaster_EventRecordArray() { eventRecords = eventRecords.Select(e => new Types.ROCMaster.ROCMaster_EventRecord() { Data = e.data, Index = e.Index }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetFloatValue.cs b/DeviceSQL/Functions/ROCMaster/GetFloatValue.cs
deleted file mode 100644
index 0637600..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetFloatValue.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlSingle ROCMaster_GetFloatValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var flpParameter = new FlpParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref flpParameter);
- return flpParameter.NullableValue.HasValue ? flpParameter.Value : SqlSingle.Null;
- }
-
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetFstInformation.cs b/DeviceSQL/Functions/ROCMaster/GetFstInformation.cs
deleted file mode 100644
index 5f50b43..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetFstInformation.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_FSTInformation ROCMaster_GetFstInformation(SqlString deviceName, SqlByte fstNumber)
- {
- var deviceNameValue = deviceName.Value;
- var rocMaster = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster);
-
- var fstHeaderInfo = rocMaster.GetFstHeaderInfo(null, null, null, null, fstNumber.Value);
- var fstSizeParameter = new UInt16Parameter(new Tlp(16, fstNumber.Value, 25));
-
- rocMaster.ReadParameter(null, null, null, null, ref fstSizeParameter);
-
- var fstSize = fstSizeParameter.Value;
- var codeBytes = new List();
-
- while (fstSize > codeBytes.Count)
- {
- codeBytes.AddRange(rocMaster.GetFstCodeChunk(null, null, null, null, 0, (byte)codeBytes.Count, (fstSize - codeBytes.Count) > 240 ? (byte)240 : (byte)(fstSize - codeBytes.Count)).CodeBytes);
- }
-
- return new Types.ROCMaster.ROCMaster_FSTInformation()
- {
- FSTNumber = fstNumber.Value,
- Version = fstHeaderInfo.Version,
- Description = fstHeaderInfo.Description,
- FSTCode = codeBytes.ToArray()
- };
-
- }
-
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetHistory.cs b/DeviceSQL/Functions/ROCMaster/GetHistory.cs
deleted file mode 100644
index 8f0b172..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetHistory.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_HistoryRecordArray ROCMaster_GetHistory(SqlString deviceName, byte historicalRamArea, byte historyPointNumber, byte count, int startIndex)
- {
- var deviceNameValue = deviceName.Value;
- var historyRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetHistory(null, null, null, null, historicalRamArea, historyPointNumber, count, Convert.ToUInt16(startIndex));
- return new Types.ROCMaster.ROCMaster_HistoryRecordArray() { historyRecords = historyRecords.Select(h => new Types.ROCMaster.ROCMaster_HistoryRecord() { HistorySegment = h.HistorySegment, HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetInt16Value.cs b/DeviceSQL/Functions/ROCMaster/GetInt16Value.cs
deleted file mode 100644
index 403a2d8..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetInt16Value.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlInt16 ROCMaster_GetInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var int16Parameter = new Int16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref int16Parameter);
- return int16Parameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetInt32Value.cs b/DeviceSQL/Functions/ROCMaster/GetInt32Value.cs
deleted file mode 100644
index 6106d85..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetInt32Value.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlInt32 ROCMaster_GetInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var int32Parameter = new Int32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref int32Parameter);
- return int32Parameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetInt8Value.cs b/DeviceSQL/Functions/ROCMaster/GetInt8Value.cs
deleted file mode 100644
index 4aec4aa..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetInt8Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlInt16 ROCMaster_GetInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var int8Parameter = new Int8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref int8Parameter);
- return int8Parameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetMinutelyHistory.cs b/DeviceSQL/Functions/ROCMaster/GetMinutelyHistory.cs
deleted file mode 100644
index d59020f..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetMinutelyHistory.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_HistoryRecordArray ROCMaster_GetMinutelyHistory(SqlString deviceName, byte historyPointNumber)
- {
- var deviceNameValue = deviceName.Value;
- var historyRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetMinutelyHistory(null, null, null, null, historyPointNumber);
- return new Types.ROCMaster.ROCMaster_HistoryRecordArray() { historyRecords = historyRecords.Select(h => new Types.ROCMaster.ROCMaster_HistoryRecord() { HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetROCPlusAlarms.cs b/DeviceSQL/Functions/ROCMaster/GetROCPlusAlarms.cs
deleted file mode 100644
index 068bf69..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetROCPlusAlarms.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ROCPlusAlarmRecordArray ROCMaster_GetROCPlusAlarms(SqlString deviceName, byte count, int startIndex)
- {
- var deviceNameValue = deviceName.Value;
- var rocPlusAlarmRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusAlarms(null, null, null, null, count, Convert.ToUInt16(startIndex));
- return new Types.ROCMaster.ROCMaster_ROCPlusAlarmRecordArray() { rocPlusAlarmRecords = rocPlusAlarmRecords.Select(a => new Types.ROCMaster.ROCMaster_ROCPlusAlarmRecord() { Data = a.data, Index = a.Index }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetROCPlusConfiguredHistoryPoints.cs b/DeviceSQL/Functions/ROCMaster/GetROCPlusConfiguredHistoryPoints.cs
deleted file mode 100644
index eba61f8..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetROCPlusConfiguredHistoryPoints.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ROCPlusHistoryPointArray ROCMaster_GetROCPlusConfiguredHistoryPoints(SqlString deviceName, byte historySegment)
- {
- var deviceNameValue = deviceName.Value;
- var configuredHistoryPoints = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusConfiguredHistoryPoints(null, null, null, null, historySegment);
- return new Types.ROCMaster.ROCMaster_ROCPlusHistoryPointArray() { historyPoints = configuredHistoryPoints };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetROCPlusEvents.cs b/DeviceSQL/Functions/ROCMaster/GetROCPlusEvents.cs
deleted file mode 100644
index ab6705a..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetROCPlusEvents.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ROCPlusEventRecordArray ROCMaster_GetROCPlusEvents(SqlString deviceName, byte count, int startIndex)
- {
- var deviceNameValue = deviceName.Value;
- var rocPlusEventRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusEvents(null, null, null, null, count, Convert.ToUInt16(startIndex));
- return new Types.ROCMaster.ROCMaster_ROCPlusEventRecordArray() { rocPlusEventRecords = rocPlusEventRecords.Select(e => new Types.ROCMaster.ROCMaster_ROCPlusEventRecord() { Data = e.data, Index = e.Index }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetROCPlusHistory.cs b/DeviceSQL/Functions/ROCMaster/GetROCPlusHistory.cs
deleted file mode 100644
index 2344d10..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetROCPlusHistory.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ROCPlusHistoryRecordArray ROCMaster_GetROCPlusHistory(SqlString deviceName, byte historySegment, int historyIndex, byte historyType, byte startingHistoryPoint, byte numberOfHistoryPoints, byte numberOfTimePeriods)
- {
- var deviceNameValue = deviceName.Value;
- var rocPlusHistoryRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusHistory(null, null, null, null, historySegment, Convert.ToUInt16(historyIndex), historyType, startingHistoryPoint, numberOfHistoryPoints, numberOfTimePeriods);
- return new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecordArray() { rocPlusHistoryRecords = rocPlusHistoryRecords.Select(h => new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecord() { HistorySegment = h.HistorySegment, HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetROCPlusHistoryByHistoryPointArray.cs b/DeviceSQL/Functions/ROCMaster/GetROCPlusHistoryByHistoryPointArray.cs
deleted file mode 100644
index b57c984..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetROCPlusHistoryByHistoryPointArray.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ROCPlusHistoryRecordArray ROCMaster_GetROCPlusHistoryByHistoryPointArray(SqlString deviceName, byte historySegment, int historyIndex, byte historyType, byte startingHistoryPoint, bool requestTimeStamps, byte numberOfHistoryPoints, Types.ROCMaster.ROCMaster_ROCPlusHistoryPointArray requestedHistoryPoints, byte numberOfTimePeriods)
- {
- var deviceNameValue = deviceName.Value;
- var rocPlusHistoryRecords = (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetROCPlusHistory(null, null, null, null, historySegment, Convert.ToUInt16(historyIndex), historyType, requestTimeStamps, requestedHistoryPoints.historyPoints, numberOfTimePeriods);
- return new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecordArray() { rocPlusHistoryRecords = rocPlusHistoryRecords.Select(h => new Types.ROCMaster.ROCMaster_ROCPlusHistoryRecord() { HistorySegment = h.HistorySegment, HistoryPointNumber = h.HistoryPointNumber, Index = h.Index, Value = h.Value }).ToList() };
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetRealTimeClockValue.cs b/DeviceSQL/Functions/ROCMaster/GetRealTimeClockValue.cs
deleted file mode 100644
index 9619e71..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetRealTimeClockValue.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlDateTime ROCMaster_GetRealTimeClockValue(SqlString deviceName)
- {
- var deviceNameValue = deviceName.Value;
- return new SqlDateTime((DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetRealTimeClockValue(null, null, null, null));
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetRealTimeClockValueWithCentury.cs b/DeviceSQL/Functions/ROCMaster/GetRealTimeClockValueWithCentury.cs
deleted file mode 100644
index 65125ec..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetRealTimeClockValueWithCentury.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlDateTime ROCMaster_GetRealTimeClockValueWithCentury(SqlString deviceName, SqlInt32 century)
- {
- var deviceNameValue = deviceName.Value;
- return new SqlDateTime((DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).GetRealTimeClockValue(null, null, null, null, Convert.ToUInt16(century.Value)));
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetStringValue.cs b/DeviceSQL/Functions/ROCMaster/GetStringValue.cs
deleted file mode 100644
index 338c658..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetStringValue.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlString ROCMaster_GetStringValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlByte stringLength)
- {
- var deviceNameValue = deviceName.Value;
-
- if (10 >= stringLength)
- {
- var ac10Parameter = new Ac10Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac10Parameter);
- return ac10Parameter.Value;
- }
- else if (12 >= stringLength)
- {
- var ac12Parameter = new Ac12Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac12Parameter);
- return ac12Parameter.Value;
- }
- else if (20 >= stringLength)
- {
- var ac20Parameter = new Ac20Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac20Parameter);
- return ac20Parameter.Value;
- }
- else
- {
- var ac30Parameter = new Ac30Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref ac30Parameter);
- return ac30Parameter.Value;
- }
-
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetTimeValue.cs b/DeviceSQL/Functions/ROCMaster/GetTimeValue.cs
deleted file mode 100644
index 0f44e4d..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetTimeValue.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlDateTime ROCMaster_GetTimeValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var timeParameter = new Device.ROC.Data.TimeParameter(new Device.ROC.Data.Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref timeParameter);
- return timeParameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetUInt16Value.cs b/DeviceSQL/Functions/ROCMaster/GetUInt16Value.cs
deleted file mode 100644
index e885d9b..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetUInt16Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlInt32 ROCMaster_GetUInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var uInt16Parameter = new UInt16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt16Parameter);
- return uInt16Parameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetUInt32Value.cs b/DeviceSQL/Functions/ROCMaster/GetUInt32Value.cs
deleted file mode 100644
index 1f2887b..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetUInt32Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlInt64 ROCMaster_GetUInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var uInt32Parameter = new UInt32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt32Parameter);
- return uInt32Parameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/GetUInt8Value.cs b/DeviceSQL/Functions/ROCMaster/GetUInt8Value.cs
deleted file mode 100644
index 61eaf5a..0000000
--- a/DeviceSQL/Functions/ROCMaster/GetUInt8Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlByte ROCMaster_GetUInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber)
- {
- var deviceNameValue = deviceName.Value;
- var uInt8Parameter = new UInt8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value));
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt8Parameter);
- return uInt8Parameter.Value;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/ReadParameters.cs b/DeviceSQL/Functions/ROCMaster/ReadParameters.cs
deleted file mode 100644
index 75a77b3..0000000
--- a/DeviceSQL/Functions/ROCMaster/ReadParameters.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static Types.ROCMaster.ROCMaster_ParameterArray ROCMaster_ReadParameters(SqlString deviceName, Types.ROCMaster.ROCMaster_ParameterArray parameterArray)
- {
- var deviceNameValue = deviceName.Value;
- var parameters = new List();
- var length = parameterArray.Length;
-
- for (var parameterIndex = 0; length > parameterIndex; parameterIndex++)
- {
- var parameter = parameterArray.GetParameter(parameterIndex);
-
- switch (parameter.RawType)
- {
- case ParameterType.AC3:
- parameters.Add(new Ac3Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC7:
- parameters.Add(new Ac7Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC10:
- parameters.Add(new Ac10Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC12:
- parameters.Add(new Ac12Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC20:
- parameters.Add(new Ac20Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC30:
- parameters.Add(new Ac30Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC40:
- parameters.Add(new Ac40Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.BIN:
- parameters.Add(new BinParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.FL:
- parameters.Add(new FlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.DOUBLE:
- parameters.Add(new DoubleParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.INT16:
- parameters.Add(new Int16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.INT32:
- parameters.Add(new Int32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.INT8:
- parameters.Add(new Int8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.TLP:
- parameters.Add(new TlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.UINT16:
- parameters.Add(new UInt16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.UINT32:
- parameters.Add(new UInt32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.TIME:
- parameters.Add(new TimeParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.UINT8:
- parameters.Add(new UInt8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- }
-
- }
-
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameters(null, null, null, null, ref parameters);
-
-
- for (var parameterIndex = 0; length > parameterIndex; parameterIndex++)
- {
- var parameter = parameterArray[parameterIndex];
- parameter.RawValue = parameters[parameterIndex].Data;
- parameterArray[parameterIndex] = parameter;
- }
-
- return parameterArray;
-
- }
-
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetFloatValue.cs b/DeviceSQL/Functions/ROCMaster/SetFloatValue.cs
deleted file mode 100644
index 1f14278..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetFloatValue.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetFloatValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlSingle value)
- {
- var deviceNameValue = deviceName.Value;
- var flpParameter = new FlpParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, flpParameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetInt16Value.cs b/DeviceSQL/Functions/ROCMaster/SetInt16Value.cs
deleted file mode 100644
index 215410d..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetInt16Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt16 value)
- {
- var deviceNameValue = deviceName.Value;
- var int16Parameter = new Int16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, int16Parameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetInt32Value.cs b/DeviceSQL/Functions/ROCMaster/SetInt32Value.cs
deleted file mode 100644
index aa27474..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetInt32Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt32 value)
- {
- var deviceNameValue = deviceName.Value;
- var int32Parameter = new Int32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, int32Parameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetInt8Value.cs b/DeviceSQL/Functions/ROCMaster/SetInt8Value.cs
deleted file mode 100644
index 9fc8c50..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetInt8Value.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt16 value)
- {
- var deviceNameValue = deviceName.Value;
- var int8Parameter = new Int8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = Convert.ToSByte(value.Value) };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as DeviceSQL.Device.ROC.ROCMaster).WriteParameter(null, null, null, null, int8Parameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetOperatorIdentification.cs b/DeviceSQL/Functions/ROCMaster/SetOperatorIdentification.cs
deleted file mode 100644
index f71784c..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetOperatorIdentification.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetOperatorIdentification(SqlString deviceName, SqlString operatorId, SqlInt32 password)
- {
- var deviceNameValue = deviceName.Value;
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).SetOperatorIdentification(null, null, null, null, operatorId.IsNull ? "LOI" : operatorId.Value, Convert.ToUInt16(password.IsNull ? 1000 : password.Value));
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetRealTimeClock.cs b/DeviceSQL/Functions/ROCMaster/SetRealTimeClock.cs
deleted file mode 100644
index bbb2759..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetRealTimeClock.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetRealTimeClock(SqlString deviceName, SqlDateTime dateTime)
- {
- var deviceNameValue = deviceName.Value;
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).SetRealTimeClock(null, null, null, null, dateTime.Value);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetStringValue.cs b/DeviceSQL/Functions/ROCMaster/SetStringValue.cs
deleted file mode 100644
index f4b524e..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetStringValue.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetStringValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlByte stringLength, SqlString value)
- {
- var deviceNameValue = deviceName.Value;
-
- if (10 >= stringLength)
- {
- var ac10Parameter = new Ac10Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac10Parameter);
- return true;
- }
- else if (12 >= stringLength)
- {
- var ac12Parameter = new Ac12Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac12Parameter);
- return true;
- }
- else if (20 >= stringLength)
- {
- var ac20Parameter = new Ac20Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac20Parameter);
- return true;
- }
- else
- {
- var ac30Parameter = new Ac30Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, ac30Parameter);
- return true;
- }
-
- }
-
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetTimeValue.cs b/DeviceSQL/Functions/ROCMaster/SetTimeValue.cs
deleted file mode 100644
index 0ce8543..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetTimeValue.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetTimeValue(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlDateTime value)
- {
- var deviceNameValue = deviceName.Value;
- var timeParameter = new TimeParameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, timeParameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetUInt16Value.cs b/DeviceSQL/Functions/ROCMaster/SetUInt16Value.cs
deleted file mode 100644
index 72213ea..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetUInt16Value.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetUInt16Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt32 value)
- {
- var deviceNameValue = deviceName.Value;
- var uInt16Parameter = new UInt16Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = Convert.ToUInt16(value.Value) };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).ReadParameter(null, null, null, null, ref uInt16Parameter);
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/DeviceSQL/Functions/ROCMaster/SetUInt32Value.cs b/DeviceSQL/Functions/ROCMaster/SetUInt32Value.cs
deleted file mode 100644
index f4ec445..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetUInt32Value.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetUInt32Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlInt64 value)
- {
- var deviceNameValue = deviceName.Value;
- var uInt32Parameter = new UInt32Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = Convert.ToUInt32(value.Value) };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, uInt32Parameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/SetUInt8Value.cs b/DeviceSQL/Functions/ROCMaster/SetUInt8Value.cs
deleted file mode 100644
index fbc5294..0000000
--- a/DeviceSQL/Functions/ROCMaster/SetUInt8Value.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_SetUInt8Value(SqlString deviceName, SqlByte pointType, SqlByte logicalNumber, SqlByte parameterNumber, SqlByte value)
- {
- var deviceNameValue = deviceName.Value;
- var uInt8Parameter = new UInt8Parameter(new Tlp(pointType.Value, logicalNumber.Value, parameterNumber.Value)) { Value = value.Value };
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameter(null, null, null, null, uInt8Parameter);
- return true;
- }
- }
-}
diff --git a/DeviceSQL/Functions/ROCMaster/WriteParameters.cs b/DeviceSQL/Functions/ROCMaster/WriteParameters.cs
deleted file mode 100644
index 6a2a1d5..0000000
--- a/DeviceSQL/Functions/ROCMaster/WriteParameters.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device.ROC.Data;
-using Microsoft.SqlServer.Server;
-using System.Collections.Generic;
-using System.Data.SqlTypes;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class ROCMaster
- {
- [SqlFunction]
- public static SqlBoolean ROCMaster_WriteParameters(SqlString deviceName, Types.ROCMaster.ROCMaster_ParameterArray parameterArray)
- {
- var deviceNameValue = deviceName.Value;
- var parameters = new List();
- var length = parameterArray.Length;
-
- for (var parameterIndex = 0; length > parameterIndex; parameterIndex++)
- {
- var parameter = parameterArray.GetParameter(parameterIndex);
-
- switch (parameter.RawType)
- {
- case ParameterType.AC3:
- parameters.Add(new Ac3Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC7:
- parameters.Add(new Ac7Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC10:
- parameters.Add(new Ac10Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC12:
- parameters.Add(new Ac12Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC20:
- parameters.Add(new Ac20Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC30:
- parameters.Add(new Ac30Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.AC40:
- parameters.Add(new Ac40Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.BIN:
- parameters.Add(new BinParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.FL:
- parameters.Add(new FlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.DOUBLE:
- parameters.Add(new DoubleParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.INT16:
- parameters.Add(new Int16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.INT32:
- parameters.Add(new Int32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.INT8:
- parameters.Add(new Int8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.TLP:
- parameters.Add(new TlpParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.UINT16:
- parameters.Add(new UInt16Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.UINT32:
- parameters.Add(new UInt32Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.TIME:
- parameters.Add(new TimeParameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- case ParameterType.UINT8:
- parameters.Add(new UInt8Parameter(new Tlp(parameter.PointType, parameter.LogicalNumber, parameter.Parameter)) { Data = parameter.RawValue });
- break;
- }
-
- }
-
- (DeviceSQL.Watchdog.Worker.Devices.First(device => (device.Name == deviceNameValue)) as Device.ROC.ROCMaster).WriteParameters(null, null, null, null, parameters);
-
- return true;
-
- }
-
- }
-}
diff --git a/DeviceSQL/Functions/Watchdog/GetCounterValue.cs b/DeviceSQL/Functions/Watchdog/GetCounterValue.cs
deleted file mode 100644
index 517bfc6..0000000
--- a/DeviceSQL/Functions/Watchdog/GetCounterValue.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class Watchdog
- {
- [SqlFunction]
- public static SqlInt32 Watchdog_GetCounterValue()
- {
- try
- {
- return new SqlInt32(DeviceSQL.Watchdog.Worker.WatchdogCounter);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error getting watchdog counter value: {0}", ex.Message));
- }
- return 0;
- }
- }
-}
diff --git a/DeviceSQL/Functions/Watchdog/IsAlive.cs b/DeviceSQL/Functions/Watchdog/IsAlive.cs
deleted file mode 100644
index 2c38a28..0000000
--- a/DeviceSQL/Functions/Watchdog/IsAlive.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class Watchdog
-
- {
- [SqlFunction]
- public static SqlBoolean Watchdog_IsAlive()
- {
- try
- {
- return new SqlBoolean(DeviceSQL.Watchdog.Worker.IsAlive);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error getting watchdog IsAlive value: {0}", ex.Message));
- }
- return false;
- }
- }
-}
diff --git a/DeviceSQL/Functions/Watchdog/Run.cs b/DeviceSQL/Functions/Watchdog/Run.cs
deleted file mode 100644
index a6c99cc..0000000
--- a/DeviceSQL/Functions/Watchdog/Run.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class Watchdog
- {
- [SqlFunction]
- public static SqlBoolean Watchdog_Run()
- {
- try
- {
- DeviceSQL.Watchdog.Worker.Run();
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error starting channel manager: {0}", ex.Message));
- }
- return new SqlBoolean(true);
- }
- }
-}
diff --git a/DeviceSQL/Functions/Watchdog/Stop.cs b/DeviceSQL/Functions/Watchdog/Stop.cs
deleted file mode 100644
index 5df65cc..0000000
--- a/DeviceSQL/Functions/Watchdog/Stop.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-#region Imported Types
-
-using Microsoft.SqlServer.Server;
-using System;
-using System.Data.SqlTypes;
-using System.Diagnostics;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.Functions
-{
- public partial class Watchdog
- {
- [SqlFunction]
- public static SqlBoolean Watchdog_Stop()
- {
- try
- {
- var channels = DeviceSQL.Watchdog.Worker.Channels;
- var channelList = channels.ToList();
- channelList.ForEach((channel) =>
- {
- try
- {
- channel.Dispose();
- channels.TryTake(out channel);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error disposing channel: {0}", ex.Message));
- }
- });
- DeviceSQL.Watchdog.Worker.Stop();
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error stopping channel manager: {0}", ex.Message));
- }
- return new SqlBoolean(true);
- }
- }
-}
diff --git a/DeviceSQL/IO/Channels/ChannelTraceEventArgs.cs b/DeviceSQL/IO/Channels/ChannelTraceEventArgs.cs
deleted file mode 100644
index dcd1a99..0000000
--- a/DeviceSQL/IO/Channels/ChannelTraceEventArgs.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-#endregion
-
-namespace DeviceSQL.IO.Channels
-{
- internal class ChannelTraceEventArgs : EventArgs
- {
- internal DateTime MessageDateTimeStamp { get; set; }
- internal string Name { get; set; }
- internal DateTime StartTime { get; set; }
- internal string Operation { get; set; }
- internal double Duration { get; set; }
- internal int Sequence { get; set; }
- internal int Count { get; set; }
- internal string Data { get; set; }
- internal string ChannelType { get; set; }
- }
-}
diff --git a/DeviceSQL/IO/Channels/SerialPortMuxChannel.cs b/DeviceSQL/IO/Channels/SerialPortMuxChannel.cs
deleted file mode 100644
index aa98fe5..0000000
--- a/DeviceSQL/IO/Channels/SerialPortMuxChannel.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-#region Imported Types
-
-using System;
-using System.Diagnostics;
-using System.IO.Ports;
-using System.Linq;
-
-#endregion
-
-namespace DeviceSQL.IO.Channels
-{
- public class SerialPortMuxChannel : SerialPortChannel, IMuxChannel
- {
-
- #region Fields
-
- private string sourceChannelName = "";
- private int requestDelay = 0;
- private int responseDelay = 0;
- private int responseTimeout = 3000;
-
- #endregion
-
- #region Properties
-
- public IChannel SourceChannel
- {
- get
- {
- return Watchdog.Worker.Channels.FirstOrDefault(channel => channel.Name == sourceChannelName);
- }
- }
-
- public string SourceChannelName
- {
- get
- {
- return sourceChannelName;
- }
- set
- {
- sourceChannelName = value;
- }
- }
-
- public int RequestDelay
- {
- get
- {
- return requestDelay;
- }
- set
- {
- requestDelay = value;
- }
- }
-
- public int ResponseDelay
- {
- get
- {
- return responseDelay;
- }
- set
- {
- responseDelay = value;
- }
- }
-
- public int ResponseTimeout
- {
- get
- {
- return responseTimeout;
- }
- set
- {
- responseTimeout = value;
- }
- }
-
- #endregion
-
- #region Mux Methods
-
- public void Run()
- {
- SerialPort.DataReceived -= SerialPort_DataReceived;
- SerialPort.DataReceived += SerialPort_DataReceived;
- }
-
- public void Stop()
- {
- SerialPort.DataReceived -= SerialPort_DataReceived;
- }
-
- #endregion
-
- #region Serial Port Events
-
- private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- var startTime = DateTime.Now;
- var lockObject = SourceChannel.LockObject;
- lock (lockObject)
- {
- var masterStopWatch = new Stopwatch();
- var requestBytes = new byte[] { };
-
- TimedThreadBlocker.Wait(requestDelay);
-
- requestBytes = new byte[SerialPort.BytesToRead];
-
- if (requestBytes.Length > 0)
- {
- Read(ref requestBytes, 0, requestBytes.Length, 0);
- SourceChannel.Write(ref requestBytes, 0, requestBytes.Length);
- TimedThreadBlocker.Wait(responseDelay);
- masterStopWatch.Start();
-
- var sequence = 0;
- while (SourceChannel.NumberOfBytesAvailable > 0 && responseTimeout > masterStopWatch.ElapsedMilliseconds)
- {
- var responseBytes = new byte[SourceChannel.NumberOfBytesAvailable];
-
- SourceChannel.Read(ref responseBytes, 0, responseBytes.Length, sequence++);
- Write(ref responseBytes, 0, responseBytes.Length);
- }
-
- masterStopWatch.Stop();
-
- }
- }
- }
-
- #endregion
-
- }
-}
diff --git a/DeviceSQL/Properties/AssemblyInfo.cs b/DeviceSQL/Properties/AssemblyInfo.cs
index a90746f..f25f370 100644
--- a/DeviceSQL/Properties/AssemblyInfo.cs
+++ b/DeviceSQL/Properties/AssemblyInfo.cs
@@ -3,14 +3,15 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with the SQLCLR assembly.
-[assembly: AssemblyTitle("DeviceSQL libraries")]
-[assembly: AssemblyDescription("SQL Server libraries for communicating with anything")]
+[assembly: AssemblyTitle("DeviceSQL")]
+[assembly: AssemblyDescription("DeviceSQL")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("DeviceSQL")]
+[assembly: AssemblyCompany("CloudSonix")]
[assembly: AssemblyProduct("DeviceSQL")]
-[assembly: AssemblyCopyright("2017 DeviceSQL")]
+[assembly: AssemblyCopyright("© CloudSonix. All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
+[assembly: AssemblyKeyFileAttribute("../DeviceSQL-Key.snk")]
// Version information for an assembly consists of the following four values:
//
diff --git a/DeviceSQL/Schemas/ChannelManager.sql b/DeviceSQL/Schemas/ChannelManager.sql
deleted file mode 100644
index c37a8ce..0000000
--- a/DeviceSQL/Schemas/ChannelManager.sql
+++ /dev/null
@@ -1 +0,0 @@
-CREATE SCHEMA [ChannelManager]
diff --git a/DeviceSQL/Schemas/DeviceManager.sql b/DeviceSQL/Schemas/DeviceManager.sql
deleted file mode 100644
index c45b236..0000000
--- a/DeviceSQL/Schemas/DeviceManager.sql
+++ /dev/null
@@ -1 +0,0 @@
-CREATE SCHEMA [DeviceManager]
diff --git a/DeviceSQL/Schemas/ModbusMaster.sql b/DeviceSQL/Schemas/ModbusMaster.sql
deleted file mode 100644
index ced978d..0000000
--- a/DeviceSQL/Schemas/ModbusMaster.sql
+++ /dev/null
@@ -1 +0,0 @@
-CREATE SCHEMA [MODBUSMaster]
diff --git a/DeviceSQL/Schemas/Watchdog.sql b/DeviceSQL/Schemas/Watchdog.sql
deleted file mode 100644
index b7bb5f6..0000000
--- a/DeviceSQL/Schemas/Watchdog.sql
+++ /dev/null
@@ -1 +0,0 @@
-CREATE SCHEMA [Watchdog]
diff --git a/DeviceSQL/Tables/FlowSQL/DifferentialPressureMeterProcessVariableAlarms.sql b/DeviceSQL/Tables/FlowSQL/DifferentialPressureMeterProcessVariableAlarms.sql
deleted file mode 100644
index 0b47bbc..0000000
--- a/DeviceSQL/Tables/FlowSQL/DifferentialPressureMeterProcessVariableAlarms.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-CREATE TABLE [FlowSQL].[DifferentialPressureMeterProcessVariableAlarms] (
- [MeterId] BIGINT NOT NULL,
- [DateTimeStamp] DATETIMEOFFSET (7) NOT NULL,
- [DifferentialPressure.LowLowAlarm] FLOAT (53) NOT NULL,
- [DifferentialPressure.LowAlarm] FLOAT (53) NOT NULL,
- [DifferentialPressure.HighAlarm] FLOAT (53) NOT NULL,
- [DifferentialPressure.HighHighAlarm] FLOAT (53) NOT NULL,
- [DifferentialPressure.RateAlarm] FLOAT (53) NOT NULL,
- [DifferentialPressure.Deadband] FLOAT (53) NOT NULL,
- [StaticPressure.LowLowAlarm] FLOAT (53) NOT NULL,
- [StaticPressure.LowAlarm] FLOAT (53) NOT NULL,
- [StaticPressure.HighAlarm] FLOAT (53) NOT NULL,
- [StaticPressure.HighHighAlarm] FLOAT (53) NOT NULL,
- [StaticPressure.RateAlarm] FLOAT (53) NOT NULL,
- [StaticPressure.Deadband] FLOAT (53) NOT NULL,
- [Temperature.LowLowAlarm] FLOAT (53) NOT NULL,
- [Temperature.LowAlarm] FLOAT (53) NOT NULL,
- [Temperature.HighAlarm] FLOAT (53) NOT NULL,
- [Temperature.HighHighAlarm] FLOAT (53) NOT NULL,
- [Temperature.RateAlarm] FLOAT (53) NOT NULL,
- [Temperature.Deadband] FLOAT (53) NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_DifferentialPressureMeterProcessVariableAlarms] PRIMARY KEY CLUSTERED ([MeterId] ASC, [DateTimeStamp] ASC),
- CONSTRAINT [FK_DifferentialPressureMeterProcessVariableAlarms_Meters] FOREIGN KEY ([MeterId]) REFERENCES [FlowSQL].[Meters] ([Id])
-);
-
diff --git a/DeviceSQL/Tables/FlowSQL/DifferentialPressureMeterProcessVariableValues.sql b/DeviceSQL/Tables/FlowSQL/DifferentialPressureMeterProcessVariableValues.sql
deleted file mode 100644
index 3d11d58..0000000
--- a/DeviceSQL/Tables/FlowSQL/DifferentialPressureMeterProcessVariableValues.sql
+++ /dev/null
@@ -1,41 +0,0 @@
-CREATE TABLE [FlowSQL].[DifferentialPressureMeterProcessVariableValues] (
- [MeterId] BIGINT NOT NULL,
- [DateTimeStamp] DATETIMEOFFSET (7) NOT NULL,
- [DifferentialPressure.AlarmingEnabled] BIT NOT NULL,
- [DifferentialPressure.ScanningEnabled] BIT NOT NULL,
- [DifferentialPressure.ScanPeriod] INT NOT NULL,
- [DifferentialPressure.Filter] INT NOT NULL,
- [DifferentialPressure.Units] VARCHAR (30) NOT NULL,
- [DifferentialPressure.Raw.Value] FLOAT (53) NOT NULL,
- [DifferentialPressure.EU.Value] FLOAT (53) NOT NULL,
- [DifferentialPressure.Raw.ZeroValue] INT NOT NULL,
- [DifferentialPressure.Raw.SpanValue] INT NOT NULL,
- [DifferentialPressure.EU.ZeroValue] FLOAT (53) NOT NULL,
- [DifferentialPressure.EU.SpanValue] FLOAT (53) NOT NULL,
- [StaticPressure.AlarmingEnabled] BIT NOT NULL,
- [StaticPressure.ScanningEnabled] BIT NOT NULL,
- [StaticPressure.ScanPeriod] INT NOT NULL,
- [StaticPressure.Filter] INT NOT NULL,
- [StaticPressure.Units] VARCHAR (30) NOT NULL,
- [StaticPressure.Raw.Value] FLOAT (53) NOT NULL,
- [StaticPressure.EU.Value] FLOAT (53) NOT NULL,
- [StaticPressure.Raw.ZeroValue] INT NOT NULL,
- [StaticPressure.Raw.SpanValue] INT NOT NULL,
- [StaticPressure.EU.ZeroValue] FLOAT (53) NOT NULL,
- [StaticPressure.EU.SpanValue] FLOAT (53) NOT NULL,
- [Temperature.AlarmingEnabled] BIT NOT NULL,
- [Temperature.ScanningEnabled] BIT NOT NULL,
- [Temperature.ScanPeriod] INT NOT NULL,
- [Temperature.Filter] INT NOT NULL,
- [Temperature.Units] VARCHAR (30) NOT NULL,
- [Temperature.Raw.Value] FLOAT (53) NOT NULL,
- [Temperature.EU.Value] FLOAT (53) NOT NULL,
- [Temperature.Raw.ZeroValue] INT NOT NULL,
- [Temperature.Raw.SpanValue] INT NOT NULL,
- [Temperature.EU.ZeroValue] FLOAT (53) NOT NULL,
- [Temperature.EU.SpanValue] FLOAT (53) NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_DifferentialPressureMeterProcessVariableValues] PRIMARY KEY CLUSTERED ([MeterId] ASC, [DateTimeStamp] ASC),
- CONSTRAINT [FK_DifferentialPressureMeterProcessVariableValues_Meters] FOREIGN KEY ([MeterId]) REFERENCES [FlowSQL].[Meters] ([Id])
-);
-
diff --git a/DeviceSQL/Tables/FlowSQL/MeterAttributes.sql b/DeviceSQL/Tables/FlowSQL/MeterAttributes.sql
deleted file mode 100644
index c384b5c..0000000
--- a/DeviceSQL/Tables/FlowSQL/MeterAttributes.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-CREATE TABLE [FlowSQL].[MeterAttributes] (
- [MeterId] BIGINT NOT NULL,
- [AttributeName] VARCHAR (255) NOT NULL,
- [AttributeValue] SQL_VARIANT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_MeterAttributes] PRIMARY KEY CLUSTERED ([MeterId] ASC, [AttributeName] ASC),
- CONSTRAINT [FK_MeterAttributes_Meters] FOREIGN KEY ([MeterId]) REFERENCES [FlowSQL].[Meters] ([Id])
-);
-
diff --git a/DeviceSQL/Tables/FlowSQL/Meters.sql b/DeviceSQL/Tables/FlowSQL/Meters.sql
deleted file mode 100644
index a857346..0000000
--- a/DeviceSQL/Tables/FlowSQL/Meters.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE [FlowSQL].[Meters] (
- [Id] BIGINT IDENTITY (1, 1) NOT NULL,
- [Name] VARCHAR (255) NOT NULL,
- [Description] VARCHAR (255) NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_Meters] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
diff --git a/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterHistory.sql b/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterHistory.sql
deleted file mode 100644
index 4e36bf1..0000000
--- a/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterHistory.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-CREATE TABLE [ROCMaster].[FloBoss.103.MeterHistory] (
- [Id] BIGINT IDENTITY (1, 1) NOT NULL,
- [ROCMeterId] INT NOT NULL,
- [FlowDuration] [ROCMaster].[HistoryRecord] NOT NULL,
- [DIfferentialPressure] [ROCMaster].[HistoryRecord] NOT NULL,
- [StaticPressure] [ROCMaster].[HistoryRecord] NOT NULL,
- [Temperature] [ROCMaster].[HistoryRecord] NOT NULL,
- [IMV] [ROCMaster].[HistoryRecord] NOT NULL,
- [HwPf] [ROCMaster].[HistoryRecord] NOT NULL,
- [Energy] [ROCMaster].[HistoryRecord] NOT NULL,
- [Volume] [ROCMaster].[HistoryRecord] NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_FloBoss.103.MeterHistory] PRIMARY KEY CLUSTERED ([Id] ASC),
- CONSTRAINT [FK_FloBoss.103.MeterHistory_ROCMeters] FOREIGN KEY ([Id]) REFERENCES [ROCMaster].[ROCMeters] ([Id])
-);
-
diff --git a/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterProcessVariableAlarms.sql b/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterProcessVariableAlarms.sql
deleted file mode 100644
index 75a5af6..0000000
--- a/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterProcessVariableAlarms.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-CREATE TABLE [ROCMaster].[FloBoss.103.MeterProcessVariableAlarms] (
- [ROCMeterId] BIGINT NOT NULL,
- [DateTimeStamp] DATETIMEOFFSET (7) CONSTRAINT [DF_FloBoss.103.MeterProcessVariableAlarms_DateTimeStamp] DEFAULT (sysdatetime()) NOT NULL,
- [DifferentialPressure.LowLowAlarm] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.LowAlarm] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.HighAlarm] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.HighHighAlarm] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.RateAlarm] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.Deadband] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.LowLowAlarm] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.LowAlarm] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.HighAlarm] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.HighHighAlarm] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.RateAlarm] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.Deadband] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.LowLowAlarm] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.LowAlarm] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.HighAlarm] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.HighHighAlarm] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.RateAlarm] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.Deadband] [ROCMaster].[Parameter] NOT NULL,
- [RowVersion] ROWVERSION NOT NULL,
- CONSTRAINT [PK_FloBoss.103.MeterProcessVariableAlarms_1] PRIMARY KEY CLUSTERED ([ROCMeterId] ASC),
- CONSTRAINT [FK_FloBoss.103.MeterProcessVariableAlarms_ROCMeters] FOREIGN KEY ([ROCMeterId]) REFERENCES [ROCMaster].[ROCMeters] ([Id])
-);
-
diff --git a/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterProcessVariables.sql b/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterProcessVariables.sql
deleted file mode 100644
index 938d01d..0000000
--- a/DeviceSQL/Tables/ROCMaster/FloBoss.103.MeterProcessVariables.sql
+++ /dev/null
@@ -1,46 +0,0 @@
-CREATE TABLE [ROCMaster].[FloBoss.103.MeterProcessVariables] (
- [ROCMeterId] BIGINT NOT NULL,
- [DateTimeStamp] DATETIMEOFFSET (7) CONSTRAINT [DF_FloBoss.103.MeterProcessVariables_DateTimeStamp] DEFAULT (sysdatetime()) NOT NULL,
- [DifferentialPressure.AlarmingEnabled] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.ScanningEnabled] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.ScanPeriod] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.Filter] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.Units] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.Raw.Value] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.EU.Value] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.Raw.ZeroValue] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.Raw.SpanValue] [ROCMaster].[Parameter] NOT NULL,
- [[DifferentialPressure.EU.ZeroValue] [ROCMaster].[Parameter] NOT NULL,
- [DifferentialPressure.EU.SpanValue] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.AlarmingEnabled] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressurePressure.ScanningEnabled] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressurePressure.ScanPeriod] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressurePressure.Filter] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressurePressure.Units] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.Raw.Value] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.EU.Value] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.Raw.ZeroValue] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.Raw.SpanValue] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.EU.ZeroValue] [ROCMaster].[Parameter] NOT NULL,
- [StaticPressure.EU.SpanValue] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.AlarmingEnabled] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.ScanningEnabled] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.ScanPeriod] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.Filter] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.Units] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.Raw.Value] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.EU.Value] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.Raw.ZeroValue] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.Raw.SpanValue] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.EU.ZeroValue] [ROCMaster].[Parameter] NOT NULL,
- [Temperature.EU.SpanValue] [ROCMaster].[Parameter] NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_FloBoss.103.MeterProcessVariables_1] PRIMARY KEY CLUSTERED ([ROCMeterId] ASC),
- CONSTRAINT [FK_FloBoss.103.MeterProcessVariables_ROCMeters] FOREIGN KEY ([ROCMeterId]) REFERENCES [ROCMaster].[ROCMeters] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_FloBoss.103.MeterProcessVariables]
- ON [ROCMaster].[FloBoss.103.MeterProcessVariables]([ROCMeterId] ASC, [DateTimeStamp] ASC);
-
diff --git a/DeviceSQL/Tables/ROCMaster/ROCChannelGroup.sql b/DeviceSQL/Tables/ROCMaster/ROCChannelGroup.sql
deleted file mode 100644
index 6cc901d..0000000
--- a/DeviceSQL/Tables/ROCMaster/ROCChannelGroup.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE [ROCMaster].[ROCChannelGroup] (
- [Id] INT IDENTITY (1, 1) NOT NULL,
- [Name] VARCHAR (255) NOT NULL,
- [Timeout] INT NOT NULL,
- [HostAddress] TINYINT NOT NULL,
- [HostGroup] TINYINT NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_ROCChannelGroup] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
diff --git a/DeviceSQL/Tables/ROCMaster/ROCChannels.sql b/DeviceSQL/Tables/ROCMaster/ROCChannels.sql
deleted file mode 100644
index cc2326d..0000000
--- a/DeviceSQL/Tables/ROCMaster/ROCChannels.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-CREATE TABLE [ROCMaster].[ROCChannels] (
- [Id] BIGINT IDENTITY (1, 1) NOT NULL,
- [Name] VARCHAR (1024) NOT NULL,
- [IsSerialPortChannel] BIT NOT NULL,
- [PortName] VARCHAR (8) NOT NULL,
- [BaudRate] INT NOT NULL,
- [HostName] VARCHAR (255) NOT NULL,
- [HostPort] INT NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_ROCChannels] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-
diff --git a/DeviceSQL/Tables/ROCMaster/ROCMeters.sql b/DeviceSQL/Tables/ROCMaster/ROCMeters.sql
deleted file mode 100644
index 68263d5..0000000
--- a/DeviceSQL/Tables/ROCMaster/ROCMeters.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-CREATE TABLE [ROCMaster].[ROCMeters] (
- [Id] BIGINT NOT NULL,
- [Name] VARCHAR (255) NOT NULL,
- [Description] VARCHAR (255) NOT NULL,
- [ROCChannelId] BIGINT NOT NULL,
- [ROCChannelGroupId] INT NOT NULL,
- [DeviceAddress] TINYINT NOT NULL,
- [DeviceGroup] TINYINT NOT NULL,
- [RowVersion] ROWVERSION NULL,
- CONSTRAINT [PK_ROCMeters] PRIMARY KEY CLUSTERED ([Id] ASC),
- CONSTRAINT [FK_ROCMeters_ROCChannelGroup] FOREIGN KEY ([ROCChannelGroupId]) REFERENCES [ROCMaster].[ROCChannelGroup] ([Id]),
- CONSTRAINT [FK_ROCMeters_ROCChannels] FOREIGN KEY ([ROCChannelId]) REFERENCES [ROCMaster].[ROCChannels] ([Id])
-);
-
diff --git a/DeviceSQL/Watchdog/Worker.cs b/DeviceSQL/Watchdog/Worker.cs
deleted file mode 100644
index ebd9d2e..0000000
--- a/DeviceSQL/Watchdog/Worker.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-#region Imported Types
-
-using DeviceSQL.Device;
-using DeviceSQL.IO.Channels;
-using DeviceSQL.IOC;
-using DeviceSQL.ServiceLocation;
-using System;
-using System.Collections.Concurrent;
-using System.Diagnostics;
-using System.Linq;
-using System.Threading;
-
-#endregion
-
-namespace DeviceSQL.Watchdog
-{
- public static class Worker
- {
- #region Fields
-
- private static volatile bool isRunning;
- private static volatile bool stopRequested;
- private static volatile int watchdogCounter;
- public readonly static BlockingCollection Channels = new BlockingCollection();
- public readonly static BlockingCollection Devices = new BlockingCollection();
- public readonly static SimpleIOC MainContainer = SimpleIOC.Default;
-
- #endregion
-
- #region Properties
-
- public static int WatchdogCounter
- {
- get
- {
- return watchdogCounter;
- }
- }
-
- public static bool IsAlive
- {
- get
- {
- return isRunning;
- }
- }
-
- #endregion
-
- #region Watchdog Methods
-
- public static void Run()
- {
- if (isRunning)
- {
- return;
- }
- stopRequested = false;
- try
- {
- ServiceLocator.SetLocatorProvider(() => MainContainer);
- MainContainer.Register>(() => { return Channels; });
- MainContainer.Register>(() => { return Devices; });
-
- while (!stopRequested)
- {
- isRunning = true;
- if (MainContainer != SimpleIOC.Default)
- {
- Trace.TraceWarning("SimpleIOC \"Default\" object reference changed");
- }
- if (Channels != MainContainer.GetInstance>())
- {
- Trace.TraceWarning("Channels object reference changed");
- }
- if (Devices != MainContainer.GetInstance>())
- {
- Trace.TraceWarning("Devices object reference changed");
- }
- if (watchdogCounter >= (int.MaxValue - 1))
- {
- watchdogCounter = 0;
- }
- else
- {
- watchdogCounter++;
- }
- TimedThreadBlocker.Wait(300);
- }
- }
- catch (ThreadAbortException taex)
- {
- Trace.TraceError(string.Format("Watchdog thread aborted: {0}", taex.Message));
- }
- finally
- {
- if (isRunning)
- {
- isRunning = false;
- var channelList = Channels.ToList();
- var deviceList = Devices.ToList();
- channelList.ToList().ForEach((channel) =>
- {
- try
- {
- channel.Dispose();
- Channels.TryTake(out channel);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error removing channel: {0}", ex.Message));
- }
- });
- deviceList.ToList().ForEach((device) =>
- {
- try
- {
- Devices.TryTake(out device);
- }
- catch (Exception ex)
- {
- Trace.TraceError(string.Format("Error removing device: {0}", ex.Message));
- }
- });
- MainContainer.Unregister>();
- MainContainer.Unregister>();
- }
- }
-
- }
-
- public static void Stop()
- {
- while (isRunning)
- {
- stopRequested = true;
- TimedThreadBlocker.Wait(100);
- }
- isRunning = false;
- }
-
- #endregion
- }
-}
diff --git a/ReadMe.md b/ReadMe.md
index ab12f0f..bbd551d 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -6,4 +6,4 @@
[Version 1.0 Now Available for Download](https://github.com/jasonrichardcraig/DeviceSQL/tree/master/Version%201.0 "1.0")
-#### Support (Mountain Time): 403-618-6945 | Jason.Craig@Outlook.com | Skype - JasonRichardCraig
+#### Support (Eastern Standard Time): +1-587-731-1776 | Jason.Craig@Outlook.com | Skype - JasonRichardCraig
diff --git a/Version 1.0/ReadMe.md b/Version 1.0/ReadMe.md
index f4ff6c5..e9bfab3 100644
--- a/Version 1.0/ReadMe.md
+++ b/Version 1.0/ReadMe.md
@@ -17,4 +17,4 @@
##### CREATE LOGIN [DeviceSqlClrLogin] FROM ASYMMETRIC KEY [DeviceSqlKey]
##### GRANT UNSAFE ASSEMBLY TO [DeviceSqlClrLogin]
-
+You must enable the Lock Pages In Memory option: https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-2017