From 6941e3624a928572e4869fe0636cbc7594689589 Mon Sep 17 00:00:00 2001
From: i7-8700 <1281261856@qq.com>
Date: Fri, 19 Apr 2024 23:17:06 +0800
Subject: [PATCH] fix c# demo

---
 swig/CSharpDemo.cs                            |   2 +-
 swig/nodejs-demo.js                           |   2 +-
 tools/dist/win_csharp/CSharpDemo.cs           | 243 +++++
 .../ademco/SWIGTYPE_p_hb_zone_property_t.cs   |  33 +
 .../com/hb3344/ademco/SWIGTYPE_p_int.cs       |  33 +
 .../com/hb3344/ademco/SWIGTYPE_p_size_t.cs    |  33 +
 .../com/hb3344/ademco/SWIGTYPE_p_time_t.cs    |  33 +
 .../hb3344/ademco/SWIGTYPE_p_unsigned_char.cs |  33 +
 .../hb3344/ademco/SWIGTYPE_p_unsigned_int.cs  |  33 +
 .../ademco/SWIGTYPE_p_unsigned_short.cs       |  33 +
 .../com/hb3344/ademco/SWIGTYPE_p_void.cs      |  33 +
 .../hb3344/ademco/ademco_control_source_t.cs  |  34 +
 .../com/hb3344/ademco/ademco_data_t.cs        | 126 +++
 .../com/hb3344/ademco/ademco_event_level_t.cs |  21 +
 .../com/hb3344/ademco/ademco_event_t.cs       |  97 ++
 .../com/hb3344/ademco/ademco_packet_id_t.cs   |  26 +
 .../com/hb3344/ademco/ademco_packet_t.cs      | 170 ++++
 .../com/hb3344/ademco/ademco_parse_error_t.cs | 105 ++
 .../hb3344/ademco/ademco_parse_result_t.cs    |  19 +
 .../ademco/ademco_xdata_length_format_t.cs    |  18 +
 .../com/hb3344/ademco/ademco_xdata_t.cs       |  96 ++
 .../hb3344/ademco/ademco_xdata_transform_t.cs |  18 +
 .../com/hb3344/ademco/hb_machine_status_t.cs  |  22 +
 .../hb3344/ademco/hb_machine_time_point_t.cs  |  85 ++
 .../hb3344/ademco/hb_machine_timer_one_t.cs   |  87 ++
 .../com/hb3344/ademco/hb_machine_timer_t.cs   |  87 ++
 .../com/hb3344/ademco/hb_machine_type_t.cs    |  31 +
 .../hb3344/ademco/hb_zone_and_property_t.cs   |  85 ++
 .../com/hb3344/ademco/hb_zone_property_t.cs   |  30 +
 .../win_csharp/com/hb3344/ademco/libademco.cs | 586 ++++++++++++
 .../com/hb3344/ademco/libademcoPINVOKE.cs     | 902 ++++++++++++++++++
 31 files changed, 3154 insertions(+), 2 deletions(-)
 create mode 100644 tools/dist/win_csharp/CSharpDemo.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_hb_zone_property_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_int.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_size_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_time_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_char.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_int.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_short.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_void.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_control_source_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_data_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_event_level_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_event_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_id_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_error_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_result_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_length_format_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_transform_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_machine_status_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_machine_time_point_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_one_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_machine_type_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_zone_and_property_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/hb_zone_property_t.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/libademco.cs
 create mode 100644 tools/dist/win_csharp/com/hb3344/ademco/libademcoPINVOKE.cs

diff --git a/swig/CSharpDemo.cs b/swig/CSharpDemo.cs
index aced01c..309facd 100644
--- a/swig/CSharpDemo.cs
+++ b/swig/CSharpDemo.cs
@@ -33,7 +33,7 @@ namespace CSharpDemo
                 Debug.Assert(pkt.seq == 0);
                 Debug.Assert(pkt.acct == "90219125916578");
                 Debug.Assert(pkt.data.ademco_id == 0);
-                Debug.Assert(pkt.data.ademco_event == ademco_event_t.EVENT_I_AM_WIRE_MACHINE);
+                Debug.Assert(pkt.data.ademco_event == ademco_event_t.EVENT_I_AM_WIRE);
                 Debug.Assert(pkt.data.gg == 0);
                 Debug.Assert(pkt.data.zone == 0);
                 Console.WriteLine("res={0:D}, commited={1:D}", res, libademco.size_tp_value(cb));
diff --git a/swig/nodejs-demo.js b/swig/nodejs-demo.js
index 3e76dd3..24035d0 100644
--- a/swig/nodejs-demo.js
+++ b/swig/nodejs-demo.js
@@ -21,7 +21,7 @@ function test_parse() {
     assert.strictEqual(pkt.seq, 0);
     assert.strictEqual(pkt.acct, "90219125916578");
     assert.strictEqual(pkt.data.ademco_id, 0);
-    assert.strictEqual(pkt.data.ademco_event, libademco.EVENT_I_AM_WIRE_MACHINE);
+    assert.strictEqual(pkt.data.ademco_event, libademco.EVENT_I_AM_WIRE);
     assert.strictEqual(pkt.data.gg, 0);
     assert.strictEqual(pkt.data.zone, 0);
     console.log("res=%d, commited=%d", res, libademco.size_tp_value(cb));
diff --git a/tools/dist/win_csharp/CSharpDemo.cs b/tools/dist/win_csharp/CSharpDemo.cs
new file mode 100644
index 0000000..309facd
--- /dev/null
+++ b/tools/dist/win_csharp/CSharpDemo.cs
@@ -0,0 +1,243 @@
+using System;
+
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Text.RegularExpressions;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading;
+using System.IO;
+using System.Collections.Concurrent;
+using com.hb3344.ademco;
+
+namespace CSharpDemo
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            // test parse
+            {
+                Console.WriteLine("test parse");
+                string str = "\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r";
+                byte[] raw = Encoding.ASCII.GetBytes(str);
+                SWIGTYPE_p_size_t cb = libademco.new_size_tp();
+                ademco_packet_t pkt = new ademco_packet_t();
+                ademco_parse_result_t res = libademco.ademco_parse_packet(raw, (uint)raw.Length, pkt, cb, null);
+                Debug.Assert(res == ademco_parse_result_t.ADEMCO_PARSE_RESULT_OK);
+                Debug.Assert(libademco.size_tp_value(cb) == (uint)str.Length);
+                Debug.Assert(pkt.crc == 0xC5C3);
+                Debug.Assert(pkt.len == 0x0053);
+                Debug.Assert(pkt.id == ademco_packet_id_t.AID_HB);
+                Debug.Assert(pkt.seq == 0);
+                Debug.Assert(pkt.acct == "90219125916578");
+                Debug.Assert(pkt.data.ademco_id == 0);
+                Debug.Assert(pkt.data.ademco_event == ademco_event_t.EVENT_I_AM_WIRE);
+                Debug.Assert(pkt.data.gg == 0);
+                Debug.Assert(pkt.data.zone == 0);
+                Console.WriteLine("res={0:D}, commited={1:D}", res, libademco.size_tp_value(cb));
+            }
+
+            // test pack
+            {
+                Console.WriteLine("test pack");
+                byte[] buff = new byte[1024];
+                uint len = libademco.ademco_make_hb_packet(buff, 1024, 1, "861234567890", 666666, ademco_event_t.EVENT_ARM_AWAY, 0, 0, null);
+                Debug.Assert(len > 0);
+                Console.WriteLine("len={0:D}", len);
+                libademco.ademco_print(buff, len);
+
+                Console.WriteLine("test parse packed data");
+                ademco_packet_t pkt = new ademco_packet_t();
+                SWIGTYPE_p_size_t cb = libademco.new_size_tp();
+                ademco_parse_result_t res = libademco.ademco_parse_packet(buff, len, pkt, cb, null);
+                Debug.Assert(res == ademco_parse_result_t.ADEMCO_PARSE_RESULT_OK);
+                Debug.Assert(libademco.size_tp_value(cb) == len);
+                Debug.Assert(pkt.id == ademco_packet_id_t.AID_HB);
+                Debug.Assert(pkt.seq == 1);
+                Debug.Assert(pkt.acct == "861234567890");
+                Debug.Assert(pkt.data.ademco_id == 666666);
+                Debug.Assert(pkt.data.ademco_event == ademco_event_t.EVENT_ARM_AWAY);
+                Debug.Assert(pkt.data.gg == 0);
+                Debug.Assert(pkt.data.zone == 0);
+            }
+
+            // test pack
+            // buff not enough
+            {
+                Console.WriteLine("test pack, buff not enough");
+                Byte[] buff = new Byte[10];
+                uint len = libademco.ademco_make_hb_packet(buff, 10, 1, "861234567890", 666666, ademco_event_t.EVENT_ARM_AWAY, 0, 0, null);
+                Debug.Assert(len == 0);
+            }
+
+            Console.WriteLine("");
+            simpleServer(12345);
+        }
+
+        static void simpleServer(int port)
+        {
+            Console.WriteLine("running simpleServer {0:D}", port);
+
+            try
+            {
+                var listener = new TcpListener(IPAddress.Any, port);
+                listener.Start();
+                while (true)
+                {
+                    TcpClient client = listener.AcceptTcpClient();
+                    Thread thread = new Thread(new ParameterizedThreadStart(clientHandler));
+                    thread.Start(client);
+                }
+
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+            }
+        }
+
+        static byte[] append(byte[] origin, byte[] buf, int len)
+        {
+            byte[] dst = new byte[origin.Length + len];
+            Array.ConstrainedCopy(origin, 0, dst, 0, origin.Length);
+            Array.ConstrainedCopy(buf, 0, dst, origin.Length, len);
+            return dst;
+        }
+
+        static byte[] eat(byte[] origin, int len)
+        {
+            if (origin.Length == len) { return new byte[0]; }
+            byte[] dst = new byte[origin.Length - len];
+            Array.ConstrainedCopy(origin, len, dst, 0, origin.Length - len);
+            return dst;
+        }
+
+        static ushort nextSeq(ushort seq)
+        {
+            if (++seq == 10000) { seq = 1; }
+            return seq;
+        }
+
+        static void clientHandler(object cli)
+        {
+            TcpClient client = (TcpClient)cli;
+            NetworkStream stream = client.GetStream();
+            ademco_packet_t pkt = new ademco_packet_t();
+            SWIGTYPE_p_size_t cb = libademco.new_size_tp();
+            byte[] buff = new byte[0];
+            int nread = 0;
+            uint ademco_id = 0;
+            string acct = "";
+            hb_machine_type_t type = hb_machine_type_t.HMT_INVALID;
+            hb_machine_status_t status = hb_machine_status_t.HMS_INVALID;
+            ushort seq = 0;
+            int counter = 1;
+
+            while (true)
+            {
+                byte[] msg = new byte[1024];
+                try
+                {
+                    nread = stream.Read(msg, 0, 1024);
+                }
+                catch
+                {
+                    break;
+                }
+                if (nread == 0) { break; }
+                buff = append(buff, msg, nread);
+
+                ademco_parse_result_t res = ademco_parse_result_t.ADEMCO_PARSE_RESULT_OK;
+                while (res == ademco_parse_result_t.ADEMCO_PARSE_RESULT_OK)
+                {
+                    res = libademco.ademco_parse_packet(buff, (uint)buff.Length, pkt, cb, null);
+                    switch (res)
+                    {
+                        case ademco_parse_result_t.ADEMCO_PARSE_RESULT_OK:
+                            Console.Write("C:"); libademco.ademco_print(buff, libademco.size_tp_value(cb));
+                            buff = eat(buff, (int)libademco.size_tp_value(cb));
+                            switch (pkt.id)
+                            {
+                                case ademco_packet_id_t.AID_NULL:
+                                    replyAck(stream, pkt.seq, pkt.acct);
+                                    break;
+                                case ademco_packet_id_t.AID_HB:
+                                case ademco_packet_id_t.AID_ADM_CID:
+                                    replyAck(stream, pkt.seq, pkt.acct);
+                                    acct = pkt.acct;
+                                    ademco_id = pkt.data.ademco_id;
+                                    if (libademco.ademco_is_machine_type_event(pkt.data.ademco_event) != 0)
+                                    {
+                                        type = libademco.hb_machine_type_from_ademco_event(pkt.data.ademco_event);
+                                    }
+                                    if (libademco.ademco_is_machine_status_event(pkt.data.ademco_event) != 0)
+                                    {
+                                        status = libademco.hb_machine_status_from_ademco_event(pkt.data.ademco_event);
+                                    }
+
+                                    // 演示如何进行布撤防,真实项目里可以删改本段                             
+                                    if (++counter % 5 == 0)
+                                    {
+                                        if (status == hb_machine_status_t.HMS_ARM)
+                                        {
+                                            sendDisarm(stream, nextSeq(seq), acct, ademco_id, "123456");
+                                        }
+                                        else
+                                        {
+                                            sendArm(stream, nextSeq(seq), acct, ademco_id);
+                                        }
+                                    }
+
+                                    break;
+                                default:
+                                    break;
+                            }
+                            break;
+                        case ademco_parse_result_t.ADEMCO_PARSE_RESULT_ERROR:
+                            buff = new byte[0];
+                            break;
+                    }
+                }
+            }
+        }
+
+        static void replyAck(NetworkStream stream, ushort seq, string acct)
+        {
+            byte[] buff = new byte[1024];
+            uint len = libademco.ademco_make_ack_packet(buff, 1024, seq, acct, 0);
+            Console.Write("S:");
+            libademco.ademco_print(buff, len);
+            stream.Write(buff, 0, (int)len);
+        }
+
+        static void sendArm(NetworkStream stream, ushort seq, string acct, uint ademco_id)
+        {
+            byte[] buff = new byte[1024];
+            uint len = libademco.ademco_make_hb_packet(buff, 1024, seq, acct, ademco_id, ademco_event_t.EVENT_ARM_AWAY, 0, 0, null);
+            Console.Write("S:");
+            libademco.ademco_print(buff, len);
+            stream.Write(buff, 0, (int)len);
+        }
+
+        static void sendDisarm(NetworkStream stream, ushort seq, string acct, uint ademco_id, string pwd)
+        {
+            byte[] buff = new byte[1024];
+            ademco_xdata_t xdata = null;
+            if (!string.IsNullOrEmpty(pwd))
+            {
+                xdata = new ademco_xdata_t();
+                libademco.ademco_make_xdata(xdata,
+                    ademco_xdata_length_format_t.ADEMCO_XDATA_LENGTH_FMT_TWO_HEX,
+                    ademco_xdata_transform_t.ADEMCO_XDATA_TRANSFORM_AS_IS,
+                    Encoding.ASCII.GetBytes(pwd),
+                    (uint)pwd.Length);
+            }
+            uint len = libademco.ademco_make_hb_packet(buff, 1024, seq, acct, ademco_id, ademco_event_t.EVENT_DISARM, 0, 0, xdata);
+            Console.Write("S:");
+            libademco.ademco_print(buff, len);
+            stream.Write(buff, 0, (int)len);
+        }
+    }
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_hb_zone_property_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_hb_zone_property_t.cs
new file mode 100644
index 0000000..428c9ab
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_hb_zone_property_t.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_hb_zone_property_t {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_hb_zone_property_t(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_hb_zone_property_t() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_hb_zone_property_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_hb_zone_property_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_int.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_int.cs
new file mode 100644
index 0000000..e06b4ce
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_int.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_int {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_int(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_int() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_int obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_int obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_size_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_size_t.cs
new file mode 100644
index 0000000..2b8a331
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_size_t.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_size_t {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_size_t(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_size_t() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_size_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_size_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_time_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_time_t.cs
new file mode 100644
index 0000000..7e9996a
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_time_t.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_time_t {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_time_t(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_time_t() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_time_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_time_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_char.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_char.cs
new file mode 100644
index 0000000..1d74edd
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_char.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_unsigned_char {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_unsigned_char(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_unsigned_char() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_unsigned_char obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_unsigned_char obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_int.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_int.cs
new file mode 100644
index 0000000..a5ca0e7
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_int.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_unsigned_int {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_unsigned_int(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_unsigned_int() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_unsigned_int obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_unsigned_int obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_short.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_short.cs
new file mode 100644
index 0000000..1c75b95
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_unsigned_short.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_unsigned_short {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_unsigned_short(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_unsigned_short() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_unsigned_short obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_unsigned_short obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_void.cs b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_void.cs
new file mode 100644
index 0000000..6ea4dd6
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/SWIGTYPE_p_void.cs
@@ -0,0 +1,33 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class SWIGTYPE_p_void {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+  internal SWIGTYPE_p_void(global::System.IntPtr cPtr, bool futureUse) {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  protected SWIGTYPE_p_void() {
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_void obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(SWIGTYPE_p_void obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_control_source_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_control_source_t.cs
new file mode 100644
index 0000000..8ab34dd
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_control_source_t.cs
@@ -0,0 +1,34 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_control_source_t {
+  ADEMCO_CONTROL_SOURCE_MACHINE = 0,
+  ADEMCO_CONTROL_SOURCE_REMOTE = 1,
+  ADEMCO_CONTROL_SOURCE_REMOTE_MAX = 50,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_ALEXA = 51,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_GOOGLE = 52,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_APPLE = 54,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_SAMSUNG = 55,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_ALI_GENIE = 56,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_MI_AI = 57,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_BAIDU = 58,
+  ADEMCO_CONTROL_SOURCE_SMART_HOME_MAX = 97,
+  ADEMCO_CONTROL_SOURCE_CENTER_TRANSMIT = 98,
+  ADEMCO_CONTROL_SOURCE_CENTER_DIRECT = 99,
+  ADEMCO_CONTROL_SOURCE_PHONE_APP = 100,
+  ADEMCO_CONTROL_SOURCE_PHONE_APP_MAX = 199,
+  ADEMCO_CONTROL_SOURCE_OWNER = 200,
+  ADEMCO_CONTROL_SOURCE_SHAREE = 201,
+  ADEMCO_CONTROL_SOURCE_SHAREE_MAX = 255
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_data_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_data_t.cs
new file mode 100644
index 0000000..8e0d06d
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_data_t.cs
@@ -0,0 +1,126 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class ademco_data_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal ademco_data_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ademco_data_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(ademco_data_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~ademco_data_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_ademco_data_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public SWIGTYPE_p_unsigned_char raw {
+    set {
+      libademcoPINVOKE.ademco_data_t_raw_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.ademco_data_t_raw_get(swigCPtr);
+      SWIGTYPE_p_unsigned_char ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public uint raw_len {
+    set {
+      libademcoPINVOKE.ademco_data_t_raw_len_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = libademcoPINVOKE.ademco_data_t_raw_len_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint ademco_id {
+    set {
+      libademcoPINVOKE.ademco_data_t_ademco_id_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = libademcoPINVOKE.ademco_data_t_ademco_id_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_event_t ademco_event {
+    set {
+      libademcoPINVOKE.ademco_data_t_ademco_event_set(swigCPtr, (int)value);
+    } 
+    get {
+      ademco_event_t ret = (ademco_event_t)libademcoPINVOKE.ademco_data_t_ademco_event_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public byte gg {
+    set {
+      libademcoPINVOKE.ademco_data_t_gg_set(swigCPtr, value);
+    } 
+    get {
+      byte ret = libademcoPINVOKE.ademco_data_t_gg_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ushort zone {
+    set {
+      libademcoPINVOKE.ademco_data_t_zone_set(swigCPtr, value);
+    } 
+    get {
+      ushort ret = libademcoPINVOKE.ademco_data_t_zone_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_data_t() : this(libademcoPINVOKE.new_ademco_data_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_event_level_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_event_level_t.cs
new file mode 100644
index 0000000..719f937
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_event_level_t.cs
@@ -0,0 +1,21 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_event_level_t {
+  EVENT_LEVEL_NULL,
+  EVENT_LEVEL_STATUS,
+  EVENT_LEVEL_EXCEPTION_RECOVER,
+  EVENT_LEVEL_EXCEPTION,
+  EVENT_LEVEL_ALARM
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_event_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_event_t.cs
new file mode 100644
index 0000000..b31f82b
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_event_t.cs
@@ -0,0 +1,97 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_event_t {
+  EVENT_INVALID_EVENT = 0,
+  EVENT_ARM_AWAY = 3400,
+  EVENT_DISARM = 1400,
+  EVENT_ARM_STAY = 3456,
+  EVENT_ARM_STAY_1456 = 1456,
+  EVENT_EMERGENCY = 1120,
+  EVENT_BURGLAR = 1130,
+  EVENT_DOOR_RING = 1134,
+  EVENT_FIRE = 1110,
+  EVENT_DURESS = 1121,
+  EVENT_GAS = 1151,
+  EVENT_WATER = 1113,
+  EVENT_TAMPER = 1137,
+  EVENT_ZONE_TAMPER = 1383,
+  EVENT_BYPASS = 1570,
+  EVENT_EMERGENCY_RECOVER = 3120,
+  EVENT_BURGLAR_RECOVER = 3130,
+  EVENT_DOOR_RING_RECOVER = 3134,
+  EVENT_FIRE_RECOVER = 3110,
+  EVENT_DURESS_RECOVER = 3121,
+  EVENT_GAS_RECOVER = 3151,
+  EVENT_WATER_RECOVER = 3113,
+  EVENT_TAMPER_RECOVER = 3137,
+  EVENT_ZONE_TAMPER_RECOVER = 3383,
+  EVENT_BYPASS_RECOVER = 3570,
+  EVENT_AC_BROKE = 1301,
+  EVENT_LOW_BATTERY = 1302,
+  EVENT_BAD_BATTERY = 1311,
+  EVENT_SOLAR_DISTURB = 1387,
+  EVENT_DISCONNECT = 1381,
+  EVENT_LOST = 1393,
+  EVENT_BATTERY_EXCEPTION = 1384,
+  EVENT_OTHER_EXCEPTION = 1380,
+  EVENT_AC_RECOVER = 3301,
+  EVENT_LOW_BATTERY_RECOVER = 3302,
+  EVENT_BAD_BATTERY_RECOVER = 3311,
+  EVENT_SOLAR_DISTURB_RECOVER = 3387,
+  EVENT_DISCONNECT_RECOVER = 3381,
+  EVENT_LOST_RECOVER = 3393,
+  EVENT_BATTERY_EXCEPTION_RECOVER = 3384,
+  EVENT_OTHER_EXCEPTION_RECOVER = 3380,
+  EVENT_CLEAR_EXCPTION = 3100,
+  EVENT_SERIAL_485_DIS = 1485,
+  EVENT_SERIAL_485_RECOVER = 3485,
+  EVENT_CONN_HANGUP = 1700,
+  EVENT_CONN_RECOVER = 3700,
+  EVENT_DISARM_PWD_ERR = 1701,
+  EVENT_SUB_MACHINE_SENSOR_EXCEPTION = 1702,
+  EVENT_SUB_MACHINE_SENSOR_RECOVER = 3702,
+  EVENT_SUB_MACHINE_POWER_EXCEPTION = 1703,
+  EVENT_SUB_MACHINE_POWER_RECOVER = 3703,
+  EVENT_COM_PASSTHROUGH = 1704,
+  EVENT_ENTER_SET_MODE = 2704,
+  EVENT_EXIT_SET_MODE = 3704,
+  EVENT_QUERY_SUB_MACHINE = 1705,
+  EVENT_WRITE_TO_MACHINE = 1706,
+  EVENT_I_AM_NET_MODULE = 1707,
+  EVENT_I_AM_GPRS = 1717,
+  EVENT_I_AM_LCD = 1727,
+  EVENT_I_AM_WIRE = 1737,
+  EVENT_I_AM_WIFI = 1747,
+  EVENT_I_AM_3_SECTION = 1757,
+  EVENT_I_AM_IOT = 1767,
+  EVENT_I_AM_TRUE_COLOR = 1777,
+  EVENT_I_AM_GPRS_IOT = 1787,
+  EVENT_I_AM_GPRS_PHONE = 1797,
+  EVENT_I_AM_NB = 1807,
+  EVENT_I_AM_WIFI2 = 1817,
+  EVENT_PHONE_USER_SOS = 1709,
+  EVENT_PHONE_USER_CANCLE_ALARM = 1711,
+  EVENT_ENTER_SETTING_MODE = 1712,
+  EVENT_EXIT_SETTING_MODE = 3712,
+  EVENT_RESTORE_FACTORY_SETTINGS_710 = 1710,
+  EVENT_RESTORE_FACTORY_SETTINGS = 1713,
+  EVENT_SIM_IS_IOT_CARD = 1756,
+  EVENT_SIM_IS_IOT_PLATFORM_CARD = 2756,
+  EVENT_SIM_IS_NOT_IOT_CARD = 3756,
+  EVENT_WHAT_IS_YOUR_TYPE = 1798,
+  EVENT_SIGNAL_STRENGTH_CHANGED = 1799,
+  EVENT_OFFLINE = 1944,
+  EVENT_ONLINE = 1946
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_id_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_id_t.cs
new file mode 100644
index 0000000..4c622ce
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_id_t.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_packet_id_t {
+  AID_NULL,
+  AID_ACK,
+  AID_NAK,
+  AID_DUH,
+  AID_HB,
+  AID_ADM_CID,
+  AID_MOD_REG,
+  AID_REG_RSP,
+  AID_COUNT,
+  AID_INVALID = -1
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_t.cs
new file mode 100644
index 0000000..642a2f4
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_packet_t.cs
@@ -0,0 +1,170 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class ademco_packet_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal ademco_packet_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ademco_packet_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(ademco_packet_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~ademco_packet_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_ademco_packet_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public ushort crc {
+    set {
+      libademcoPINVOKE.ademco_packet_t_crc_set(swigCPtr, value);
+    } 
+    get {
+      ushort ret = libademcoPINVOKE.ademco_packet_t_crc_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint len {
+    set {
+      libademcoPINVOKE.ademco_packet_t_len_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = libademcoPINVOKE.ademco_packet_t_len_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_packet_id_t id {
+    set {
+      libademcoPINVOKE.ademco_packet_t_id_set(swigCPtr, (int)value);
+    } 
+    get {
+      ademco_packet_id_t ret = (ademco_packet_id_t)libademcoPINVOKE.ademco_packet_t_id_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ushort seq {
+    set {
+      libademcoPINVOKE.ademco_packet_t_seq_set(swigCPtr, value);
+    } 
+    get {
+      ushort ret = libademcoPINVOKE.ademco_packet_t_seq_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public string acct {
+    set {
+      libademcoPINVOKE.ademco_packet_t_acct_set(swigCPtr, value);
+    } 
+    get {
+      string ret = libademcoPINVOKE.ademco_packet_t_acct_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_data_t data {
+    set {
+      libademcoPINVOKE.ademco_packet_t_data_set(swigCPtr, ademco_data_t.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.ademco_packet_t_data_get(swigCPtr);
+      ademco_data_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new ademco_data_t(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public ademco_xdata_t xdata {
+    set {
+      libademcoPINVOKE.ademco_packet_t_xdata_set(swigCPtr, ademco_xdata_t.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.ademco_packet_t_xdata_get(swigCPtr);
+      ademco_xdata_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new ademco_xdata_t(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public SWIGTYPE_p_time_t timestamp {
+    set {
+      libademcoPINVOKE.ademco_packet_t_timestamp_set(swigCPtr, SWIGTYPE_p_time_t.getCPtr(value));
+      if (libademcoPINVOKE.SWIGPendingException.Pending) throw libademcoPINVOKE.SWIGPendingException.Retrieve();
+    } 
+    get {
+      SWIGTYPE_p_time_t ret = new SWIGTYPE_p_time_t(libademcoPINVOKE.ademco_packet_t_timestamp_get(swigCPtr), true);
+      if (libademcoPINVOKE.SWIGPendingException.Pending) throw libademcoPINVOKE.SWIGPendingException.Retrieve();
+      return ret;
+    } 
+  }
+
+  public SWIGTYPE_p_unsigned_char raw {
+    set {
+      libademcoPINVOKE.ademco_packet_t_raw_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.ademco_packet_t_raw_get(swigCPtr);
+      SWIGTYPE_p_unsigned_char ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public uint raw_len {
+    set {
+      libademcoPINVOKE.ademco_packet_t_raw_len_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = libademcoPINVOKE.ademco_packet_t_raw_len_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_packet_t() : this(libademcoPINVOKE.new_ademco_packet_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_error_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_error_t.cs
new file mode 100644
index 0000000..1de2661
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_error_t.cs
@@ -0,0 +1,105 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class ademco_parse_error_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal ademco_parse_error_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ademco_parse_error_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(ademco_parse_error_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~ademco_parse_error_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_ademco_parse_error_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public string file {
+    set {
+      libademcoPINVOKE.ademco_parse_error_t_file_set(swigCPtr, value);
+    } 
+    get {
+      string ret = libademcoPINVOKE.ademco_parse_error_t_file_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public int line {
+    set {
+      libademcoPINVOKE.ademco_parse_error_t_line_set(swigCPtr, value);
+    } 
+    get {
+      int ret = libademcoPINVOKE.ademco_parse_error_t_line_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public uint offset {
+    set {
+      libademcoPINVOKE.ademco_parse_error_t_offset_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = libademcoPINVOKE.ademco_parse_error_t_offset_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public string msg {
+    set {
+      libademcoPINVOKE.ademco_parse_error_t_msg_set(swigCPtr, value);
+    } 
+    get {
+      string ret = libademcoPINVOKE.ademco_parse_error_t_msg_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_parse_error_t() : this(libademcoPINVOKE.new_ademco_parse_error_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_result_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_result_t.cs
new file mode 100644
index 0000000..a80a473
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_parse_result_t.cs
@@ -0,0 +1,19 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_parse_result_t {
+  ADEMCO_PARSE_RESULT_OK,
+  ADEMCO_PARSE_RESULT_NOT_ENOUGH,
+  ADEMCO_PARSE_RESULT_ERROR
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_length_format_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_length_format_t.cs
new file mode 100644
index 0000000..28d9711
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_length_format_t.cs
@@ -0,0 +1,18 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_xdata_length_format_t {
+  ADEMCO_XDATA_LENGTH_FMT_TWO_HEX,
+  ADEMCO_XDATA_LENGTH_FMT_FOUR_DECIMAL
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_t.cs
new file mode 100644
index 0000000..27062bd
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_t.cs
@@ -0,0 +1,96 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class ademco_xdata_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal ademco_xdata_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ademco_xdata_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(ademco_xdata_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~ademco_xdata_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_ademco_xdata_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public ademco_xdata_length_format_t lenghFormat {
+    set {
+      libademcoPINVOKE.ademco_xdata_t_lenghFormat_set(swigCPtr, (int)value);
+    } 
+    get {
+      ademco_xdata_length_format_t ret = (ademco_xdata_length_format_t)libademcoPINVOKE.ademco_xdata_t_lenghFormat_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public SWIGTYPE_p_unsigned_char raw {
+    set {
+      libademcoPINVOKE.ademco_xdata_t_raw_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.ademco_xdata_t_raw_get(swigCPtr);
+      SWIGTYPE_p_unsigned_char ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public uint raw_len {
+    set {
+      libademcoPINVOKE.ademco_xdata_t_raw_len_set(swigCPtr, value);
+    } 
+    get {
+      uint ret = libademcoPINVOKE.ademco_xdata_t_raw_len_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public ademco_xdata_t() : this(libademcoPINVOKE.new_ademco_xdata_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_transform_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_transform_t.cs
new file mode 100644
index 0000000..d37f67d
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/ademco_xdata_transform_t.cs
@@ -0,0 +1,18 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum ademco_xdata_transform_t {
+  ADEMCO_XDATA_TRANSFORM_AS_IS,
+  ADEMCO_XDATA_TRANSFORM_TO_ASCII
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_status_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_status_t.cs
new file mode 100644
index 0000000..9c560b1
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_status_t.cs
@@ -0,0 +1,22 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum hb_machine_status_t {
+  HMS_ARM_AWAY = 0,
+  HMS_ARM_STAY = 1,
+  HMS_DISARM = 2,
+  HMS_SETTING = 3,
+  HMS_COUNT = 4,
+  HMS_INVALID = -1
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_time_point_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_time_point_t.cs
new file mode 100644
index 0000000..ecdf559
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_time_point_t.cs
@@ -0,0 +1,85 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class hb_machine_time_point_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal hb_machine_time_point_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(hb_machine_time_point_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(hb_machine_time_point_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~hb_machine_time_point_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_hb_machine_time_point_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public byte hour {
+    set {
+      libademcoPINVOKE.hb_machine_time_point_t_hour_set(swigCPtr, value);
+    } 
+    get {
+      byte ret = libademcoPINVOKE.hb_machine_time_point_t_hour_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public byte minute {
+    set {
+      libademcoPINVOKE.hb_machine_time_point_t_minute_set(swigCPtr, value);
+    } 
+    get {
+      byte ret = libademcoPINVOKE.hb_machine_time_point_t_minute_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public hb_machine_time_point_t() : this(libademcoPINVOKE.new_hb_machine_time_point_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_one_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_one_t.cs
new file mode 100644
index 0000000..3c1ecab
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_one_t.cs
@@ -0,0 +1,87 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class hb_machine_timer_one_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal hb_machine_timer_one_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(hb_machine_timer_one_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(hb_machine_timer_one_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~hb_machine_timer_one_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_hb_machine_timer_one_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public hb_machine_time_point_t arm_at {
+    set {
+      libademcoPINVOKE.hb_machine_timer_one_t_arm_at_set(swigCPtr, hb_machine_time_point_t.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.hb_machine_timer_one_t_arm_at_get(swigCPtr);
+      hb_machine_time_point_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new hb_machine_time_point_t(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public hb_machine_time_point_t disarm_at {
+    set {
+      libademcoPINVOKE.hb_machine_timer_one_t_disarm_at_set(swigCPtr, hb_machine_time_point_t.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.hb_machine_timer_one_t_disarm_at_get(swigCPtr);
+      hb_machine_time_point_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new hb_machine_time_point_t(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public hb_machine_timer_one_t() : this(libademcoPINVOKE.new_hb_machine_timer_one_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_t.cs
new file mode 100644
index 0000000..776144c
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_timer_t.cs
@@ -0,0 +1,87 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class hb_machine_timer_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal hb_machine_timer_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(hb_machine_timer_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(hb_machine_timer_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~hb_machine_timer_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_hb_machine_timer_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public hb_machine_timer_one_t timer {
+    set {
+      libademcoPINVOKE.hb_machine_timer_t_timer_set(swigCPtr, hb_machine_timer_one_t.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.hb_machine_timer_t_timer_get(swigCPtr);
+      hb_machine_timer_one_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new hb_machine_timer_one_t(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public SWIGTYPE_p_unsigned_char data {
+    set {
+      libademcoPINVOKE.hb_machine_timer_t_data_set(swigCPtr, SWIGTYPE_p_unsigned_char.getCPtr(value));
+    } 
+    get {
+      global::System.IntPtr cPtr = libademcoPINVOKE.hb_machine_timer_t_data_get(swigCPtr);
+      SWIGTYPE_p_unsigned_char ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false);
+      return ret;
+    } 
+  }
+
+  public hb_machine_timer_t() : this(libademcoPINVOKE.new_hb_machine_timer_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_type_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_type_t.cs
new file mode 100644
index 0000000..a83bb25
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_machine_type_t.cs
@@ -0,0 +1,31 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum hb_machine_type_t {
+  HMT_WIFI = 0,
+  HMT_CAMERA = 1,
+  HMT_GPRS_IOT = 2,
+  HMT_NETMOD = 3,
+  HMT_GPRS = 4,
+  HMT_LCD = 5,
+  HMT_WIRED = 6,
+  HMT_TRUE_COLOR = 7,
+  HMT_THREE_SECTION = 8,
+  HMT_IOT = 9,
+  HMT_GPRS_PHONE = 10,
+  HMT_NB = 11,
+  HMT_WIFI2 = 12,
+  HMT_COUNT = 13,
+  HMT_INVALID = -1
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_zone_and_property_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_zone_and_property_t.cs
new file mode 100644
index 0000000..c0ced97
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_zone_and_property_t.cs
@@ -0,0 +1,85 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class hb_zone_and_property_t : global::System.IDisposable {
+  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+  protected bool swigCMemOwn;
+
+  internal hb_zone_and_property_t(global::System.IntPtr cPtr, bool cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(hb_zone_and_property_t obj) {
+    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+  }
+
+  internal static global::System.Runtime.InteropServices.HandleRef swigRelease(hb_zone_and_property_t obj) {
+    if (obj != null) {
+      if (!obj.swigCMemOwn)
+        throw new global::System.ApplicationException("Cannot release ownership as memory is not owned");
+      global::System.Runtime.InteropServices.HandleRef ptr = obj.swigCPtr;
+      obj.swigCMemOwn = false;
+      obj.Dispose();
+      return ptr;
+    } else {
+      return new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+    }
+  }
+
+  ~hb_zone_and_property_t() {
+    Dispose(false);
+  }
+
+  public void Dispose() {
+    Dispose(true);
+    global::System.GC.SuppressFinalize(this);
+  }
+
+  protected virtual void Dispose(bool disposing) {
+    lock(this) {
+      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
+        if (swigCMemOwn) {
+          swigCMemOwn = false;
+          libademcoPINVOKE.delete_hb_zone_and_property_t(swigCPtr);
+        }
+        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+      }
+    }
+  }
+
+  public ushort zone {
+    set {
+      libademcoPINVOKE.hb_zone_and_property_t_zone_set(swigCPtr, value);
+    } 
+    get {
+      ushort ret = libademcoPINVOKE.hb_zone_and_property_t_zone_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public hb_zone_property_t prop {
+    set {
+      libademcoPINVOKE.hb_zone_and_property_t_prop_set(swigCPtr, (int)value);
+    } 
+    get {
+      hb_zone_property_t ret = (hb_zone_property_t)libademcoPINVOKE.hb_zone_and_property_t_prop_get(swigCPtr);
+      return ret;
+    } 
+  }
+
+  public hb_zone_and_property_t() : this(libademcoPINVOKE.new_hb_zone_and_property_t(), true) {
+  }
+
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/hb_zone_property_t.cs b/tools/dist/win_csharp/com/hb3344/ademco/hb_zone_property_t.cs
new file mode 100644
index 0000000..4df3c01
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/hb_zone_property_t.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public enum hb_zone_property_t {
+  HZP_BUGLAR = 0,
+  HZP_EMERGENCY = 1,
+  HZP_FIRE = 2,
+  HZP_DURESS = 3,
+  HZP_GAS = 4,
+  HZP_WATER = 5,
+  HZP_SUB_MACHINE = 6,
+  HZP_REMOTE_CONTROL = 7,
+  HZP_BUGLAR_HALF = 8,
+  HZP_SHIELD = 9,
+  HZP_DOOR_RING = 0x0A,
+  HZP_BYPASS = 0x0F,
+  HZP_COUNT = 12,
+  HZP_INVALID = -1
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/libademco.cs b/tools/dist/win_csharp/com/hb3344/ademco/libademco.cs
new file mode 100644
index 0000000..a17ecdb
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/libademco.cs
@@ -0,0 +1,586 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+public class libademco {
+  public static SWIGTYPE_p_int new_intp() {
+    global::System.IntPtr cPtr = libademcoPINVOKE.new_intp();
+    SWIGTYPE_p_int ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_int(cPtr, false);
+    return ret;
+  }
+
+  public static SWIGTYPE_p_int copy_intp(int value) {
+    global::System.IntPtr cPtr = libademcoPINVOKE.copy_intp(value);
+    SWIGTYPE_p_int ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_int(cPtr, false);
+    return ret;
+  }
+
+  public static void delete_intp(SWIGTYPE_p_int obj) {
+    libademcoPINVOKE.delete_intp(SWIGTYPE_p_int.getCPtr(obj));
+  }
+
+  public static void intp_assign(SWIGTYPE_p_int obj, int value) {
+    libademcoPINVOKE.intp_assign(SWIGTYPE_p_int.getCPtr(obj), value);
+  }
+
+  public static int intp_value(SWIGTYPE_p_int obj) {
+    int ret = libademcoPINVOKE.intp_value(SWIGTYPE_p_int.getCPtr(obj));
+    return ret;
+  }
+
+  public static SWIGTYPE_p_unsigned_short new_uint16p() {
+    global::System.IntPtr cPtr = libademcoPINVOKE.new_uint16p();
+    SWIGTYPE_p_unsigned_short ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_short(cPtr, false);
+    return ret;
+  }
+
+  public static SWIGTYPE_p_unsigned_short copy_uint16p(ushort value) {
+    global::System.IntPtr cPtr = libademcoPINVOKE.copy_uint16p(value);
+    SWIGTYPE_p_unsigned_short ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_short(cPtr, false);
+    return ret;
+  }
+
+  public static void delete_uint16p(SWIGTYPE_p_unsigned_short obj) {
+    libademcoPINVOKE.delete_uint16p(SWIGTYPE_p_unsigned_short.getCPtr(obj));
+  }
+
+  public static void uint16p_assign(SWIGTYPE_p_unsigned_short obj, ushort value) {
+    libademcoPINVOKE.uint16p_assign(SWIGTYPE_p_unsigned_short.getCPtr(obj), value);
+  }
+
+  public static ushort uint16p_value(SWIGTYPE_p_unsigned_short obj) {
+    ushort ret = libademcoPINVOKE.uint16p_value(SWIGTYPE_p_unsigned_short.getCPtr(obj));
+    return ret;
+  }
+
+  public static SWIGTYPE_p_unsigned_int new_uint32p() {
+    global::System.IntPtr cPtr = libademcoPINVOKE.new_uint32p();
+    SWIGTYPE_p_unsigned_int ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_int(cPtr, false);
+    return ret;
+  }
+
+  public static SWIGTYPE_p_unsigned_int copy_uint32p(uint value) {
+    global::System.IntPtr cPtr = libademcoPINVOKE.copy_uint32p(value);
+    SWIGTYPE_p_unsigned_int ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_unsigned_int(cPtr, false);
+    return ret;
+  }
+
+  public static void delete_uint32p(SWIGTYPE_p_unsigned_int obj) {
+    libademcoPINVOKE.delete_uint32p(SWIGTYPE_p_unsigned_int.getCPtr(obj));
+  }
+
+  public static void uint32p_assign(SWIGTYPE_p_unsigned_int obj, uint value) {
+    libademcoPINVOKE.uint32p_assign(SWIGTYPE_p_unsigned_int.getCPtr(obj), value);
+  }
+
+  public static uint uint32p_value(SWIGTYPE_p_unsigned_int obj) {
+    uint ret = libademcoPINVOKE.uint32p_value(SWIGTYPE_p_unsigned_int.getCPtr(obj));
+    return ret;
+  }
+
+  public static SWIGTYPE_p_size_t new_size_tp() {
+    global::System.IntPtr cPtr = libademcoPINVOKE.new_size_tp();
+    SWIGTYPE_p_size_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_size_t(cPtr, false);
+    return ret;
+  }
+
+  public static SWIGTYPE_p_size_t copy_size_tp(uint value) {
+    global::System.IntPtr cPtr = libademcoPINVOKE.copy_size_tp(value);
+    SWIGTYPE_p_size_t ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_size_t(cPtr, false);
+    return ret;
+  }
+
+  public static void delete_size_tp(SWIGTYPE_p_size_t obj) {
+    libademcoPINVOKE.delete_size_tp(SWIGTYPE_p_size_t.getCPtr(obj));
+  }
+
+  public static void size_tp_assign(SWIGTYPE_p_size_t obj, uint value) {
+    libademcoPINVOKE.size_tp_assign(SWIGTYPE_p_size_t.getCPtr(obj), value);
+  }
+
+  public static uint size_tp_value(SWIGTYPE_p_size_t obj) {
+    uint ret = libademcoPINVOKE.size_tp_value(SWIGTYPE_p_size_t.getCPtr(obj));
+    return ret;
+  }
+
+  public static uint ademco_version() {
+    uint ret = libademcoPINVOKE.ademco_version();
+    return ret;
+  }
+
+  public static string ademco_version_string() {
+    string ret = libademcoPINVOKE.ademco_version_string();
+    return ret;
+  }
+
+  public static void ademco_print(byte[] buff, uint len) {
+    libademcoPINVOKE.ademco_print(buff, len);
+  }
+
+  public static byte ademco_encode_signal_strength(byte strength) {
+    byte ret = libademcoPINVOKE.ademco_encode_signal_strength(strength);
+    return ret;
+  }
+
+  public static byte ademco_decode_signal_strength(byte code) {
+    byte ret = libademcoPINVOKE.ademco_decode_signal_strength(code);
+    return ret;
+  }
+
+  public static int ademco_is_valid_account(string acct) {
+    int ret = libademcoPINVOKE.ademco_is_valid_account(acct);
+    return ret;
+  }
+
+  public static int ademco_is_machine_status_event(ademco_event_t ademco_event) {
+    int ret = libademcoPINVOKE.ademco_is_machine_status_event((int)ademco_event);
+    return ret;
+  }
+
+  public static int ademco_is_machine_type_event(ademco_event_t ademco_event) {
+    int ret = libademcoPINVOKE.ademco_is_machine_type_event((int)ademco_event);
+    return ret;
+  }
+
+  public static int ademco_is_event_need_control_source(ademco_event_t ademco_event) {
+    int ret = libademcoPINVOKE.ademco_is_event_need_control_source((int)ademco_event);
+    return ret;
+  }
+
+  public static ademco_event_level_t ademco_get_event_level(ademco_event_t ademco_event) {
+    ademco_event_level_t ret = (ademco_event_level_t)libademcoPINVOKE.ademco_get_event_level((int)ademco_event);
+    return ret;
+  }
+
+  public static ademco_event_t ademco_get_exception_event_by_recover_event(ademco_event_t recover_event) {
+    ademco_event_t ret = (ademco_event_t)libademcoPINVOKE.ademco_get_exception_event_by_recover_event((int)recover_event);
+    return ret;
+  }
+
+  public static string ademco_event_to_string(ademco_event_t ademco_event) {
+    string ret = libademcoPINVOKE.ademco_event_to_string((int)ademco_event);
+    return ret;
+  }
+
+  public static string ademco_event_to_string_chinese(ademco_event_t ademco_event) {
+    string ret = libademcoPINVOKE.ademco_event_to_string_chinese((int)ademco_event);
+    return ret;
+  }
+
+  public static uint ademco_append_data(byte[] packet, string acct, uint ademco_id, ademco_event_t ademco_event, byte gg, ushort zone) {
+    uint ret = libademcoPINVOKE.ademco_append_data(packet, acct, ademco_id, (int)ademco_event, gg, zone);
+    return ret;
+  }
+
+  public static uint ademco_append_data2(ademco_data_t ademco_data, string acct, uint ademco_id, ademco_event_t ademco_event, byte gg, ushort zone) {
+    uint ret = libademcoPINVOKE.ademco_append_data2(ademco_data_t.getCPtr(ademco_data), acct, ademco_id, (int)ademco_event, gg, zone);
+    return ret;
+  }
+
+  public static ademco_parse_result_t ademco_parse_data(byte[] packet, uint packet_len, ademco_data_t ademco_data, ademco_parse_error_t err) {
+    ademco_parse_result_t ret = (ademco_parse_result_t)libademcoPINVOKE.ademco_parse_data(packet, packet_len, ademco_data_t.getCPtr(ademco_data), ademco_parse_error_t.getCPtr(err));
+    return ret;
+  }
+
+  public static uint ademco_data_to_congwin_fe100(byte[] fe100, uint fe100_len, ademco_data_t ademco_data) {
+    uint ret = libademcoPINVOKE.ademco_data_to_congwin_fe100(fe100, fe100_len, ademco_data_t.getCPtr(ademco_data));
+    return ret;
+  }
+
+  public static void ademco_xdata_init(ademco_xdata_t xdata) {
+    libademcoPINVOKE.ademco_xdata_init(ademco_xdata_t.getCPtr(xdata));
+  }
+
+  public static int ademco_xdata_convert(ademco_xdata_t xdata, ademco_xdata_length_format_t xlf) {
+    int ret = libademcoPINVOKE.ademco_xdata_convert(ademco_xdata_t.getCPtr(xdata), (int)xlf);
+    return ret;
+  }
+
+  public static uint ademco_xdata_get_valid_content_len(ademco_xdata_t xdata) {
+    uint ret = libademcoPINVOKE.ademco_xdata_get_valid_content_len(ademco_xdata_t.getCPtr(xdata));
+    return ret;
+  }
+
+  public static int ademco_xdata_memcmp(ademco_xdata_t xdata, SWIGTYPE_p_void buf, uint buf_len) {
+    int ret = libademcoPINVOKE.ademco_xdata_memcmp(ademco_xdata_t.getCPtr(xdata), SWIGTYPE_p_void.getCPtr(buf), buf_len);
+    return ret;
+  }
+
+  public static uint ademco_xdata_copy(ademco_xdata_t dst, ademco_xdata_t src) {
+    uint ret = libademcoPINVOKE.ademco_xdata_copy(ademco_xdata_t.getCPtr(dst), ademco_xdata_t.getCPtr(src));
+    return ret;
+  }
+
+  public static int ademco_make_xdata(ademco_xdata_t xdata, ademco_xdata_length_format_t xlf, ademco_xdata_transform_t xtr, byte[] content, uint len) {
+    int ret = libademcoPINVOKE.ademco_make_xdata(ademco_xdata_t.getCPtr(xdata), (int)xlf, (int)xtr, content, len);
+    return ret;
+  }
+
+  public static int ademco_is_valid_packet_id(string standard, string id, uint len) {
+    int ret = libademcoPINVOKE.ademco_is_valid_packet_id(standard, id, len);
+    return ret;
+  }
+
+  public static ademco_packet_id_t ademco_packet_id_from_string(string id, uint len) {
+    ademco_packet_id_t ret = (ademco_packet_id_t)libademcoPINVOKE.ademco_packet_id_from_string(id, len);
+    return ret;
+  }
+
+  public static string ademco_packet_id_to_string(ademco_packet_id_t id) {
+    string ret = libademcoPINVOKE.ademco_packet_id_to_string((int)id);
+    return ret;
+  }
+
+  public static uint ademco_make_empty_data_packet(byte[] dst_buff, uint len, string id, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_empty_data_packet(dst_buff, len, id, seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_adm_empty_data_packet(byte[] dst_buff, uint len, string id, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_adm_empty_data_packet(dst_buff, len, id, seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_null_packet(byte[] buff, uint len, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_null_packet(buff, len, seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_ack_packet(byte[] buff, uint len, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_ack_packet(buff, len, seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_nak_packet(byte[] buff, uint len, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_nak_packet(buff, len, seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_hb_packet(byte[] buff, uint len, ushort seq, string acct, uint ademco_id, ademco_event_t ademco_event, byte gg, ushort zone, ademco_xdata_t xdata) {
+    uint ret = libademcoPINVOKE.ademco_make_hb_packet(buff, len, seq, acct, ademco_id, (int)ademco_event, gg, zone, ademco_xdata_t.getCPtr(xdata));
+    return ret;
+  }
+
+  public static uint ademco_make_adm_packet(byte[] buff, uint len, ushort seq, string acct, uint ademco_id, ademco_event_t ademco_event, byte gg, ushort zone, ademco_xdata_t xdata) {
+    uint ret = libademcoPINVOKE.ademco_make_adm_packet(buff, len, seq, acct, ademco_id, (int)ademco_event, gg, zone, ademco_xdata_t.getCPtr(xdata));
+    return ret;
+  }
+
+  public static uint ademco_make_null_packet2(ademco_packet_t pkt, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_null_packet2(ademco_packet_t.getCPtr(pkt), seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_ack_packet2(ademco_packet_t pkt, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_ack_packet2(ademco_packet_t.getCPtr(pkt), seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_nak_packet2(ademco_packet_t pkt, ushort seq, string acct, uint ademco_id) {
+    uint ret = libademcoPINVOKE.ademco_make_nak_packet2(ademco_packet_t.getCPtr(pkt), seq, acct, ademco_id);
+    return ret;
+  }
+
+  public static uint ademco_make_hb_packet2(ademco_packet_t pkt, ushort seq, string acct, uint ademco_id, ademco_event_t ademco_event, byte gg, ushort zone, ademco_xdata_t xdata) {
+    uint ret = libademcoPINVOKE.ademco_make_hb_packet2(ademco_packet_t.getCPtr(pkt), seq, acct, ademco_id, (int)ademco_event, gg, zone, ademco_xdata_t.getCPtr(xdata));
+    return ret;
+  }
+
+  public static uint ademco_make_adm_packet2(ademco_packet_t pkt, ushort seq, string acct, uint ademco_id, ademco_event_t ademco_event, byte gg, ushort zone, ademco_xdata_t xdata) {
+    uint ret = libademcoPINVOKE.ademco_make_adm_packet2(ademco_packet_t.getCPtr(pkt), seq, acct, ademco_id, (int)ademco_event, gg, zone, ademco_xdata_t.getCPtr(xdata));
+    return ret;
+  }
+
+  public static ademco_parse_result_t ademco_parse_packet(byte[] buff, uint len, ademco_packet_t pkt, SWIGTYPE_p_size_t cb_commited, ademco_parse_error_t err) {
+    ademco_parse_result_t ret = (ademco_parse_result_t)libademcoPINVOKE.ademco_parse_packet(buff, len, ademco_packet_t.getCPtr(pkt), SWIGTYPE_p_size_t.getCPtr(cb_commited), ademco_parse_error_t.getCPtr(err));
+    return ret;
+  }
+
+  public static ushort ademco_crc16(byte[] buff, uint len) {
+    ushort ret = libademcoPINVOKE.ademco_crc16(buff, len);
+    return ret;
+  }
+
+  public static uint ademco_hilo_array_to_dec_str(byte[] str, byte[] arr, uint len) {
+    uint ret = libademcoPINVOKE.ademco_hilo_array_to_dec_str(str, arr, len);
+    return ret;
+  }
+
+  public static uint ademco_hilo_array_to_hex_str(byte[] str, byte[] arr, uint len) {
+    uint ret = libademcoPINVOKE.ademco_hilo_array_to_hex_str(str, arr, len);
+    return ret;
+  }
+
+  public static uint ademco_dec_str_to_hilo_array(byte[] arr, uint len, string str) {
+    uint ret = libademcoPINVOKE.ademco_dec_str_to_hilo_array(arr, len, str);
+    return ret;
+  }
+
+  public static uint ademco_hex_str_to_hilo_array(byte[] arr, uint len, string str) {
+    uint ret = libademcoPINVOKE.ademco_hex_str_to_hilo_array(arr, len, str);
+    return ret;
+  }
+
+  public static uint ademco_hex_array_to_str(string str, byte[] arr, uint len) {
+    uint ret = libademcoPINVOKE.ademco_hex_array_to_str(str, arr, len);
+    return ret;
+  }
+
+  public static uint ademco_hex_str_to_array(byte[] arr, string str, byte padding) {
+    uint ret = libademcoPINVOKE.ademco_hex_str_to_array(arr, str, padding);
+    return ret;
+  }
+
+  public static uint ademco_hex_str_to_array_n(byte[] arr, string str, uint len, byte padding) {
+    uint ret = libademcoPINVOKE.ademco_hex_str_to_array_n(arr, str, len, padding);
+    return ret;
+  }
+
+  public static uint ademco_hex_str_to_array_n_allow_non_hex_str(byte[] arr, string str, uint len, byte padding) {
+    uint ret = libademcoPINVOKE.ademco_hex_str_to_array_n_allow_non_hex_str(arr, str, len, padding);
+    return ret;
+  }
+
+  public static uint hb_get_available_zone_properties_by_type(hb_machine_type_t type, SWIGTYPE_p_hb_zone_property_t props) {
+    uint ret = libademcoPINVOKE.hb_get_available_zone_properties_by_type((int)type, SWIGTYPE_p_hb_zone_property_t.getCPtr(props));
+    return ret;
+  }
+
+  public static ushort hb_get_max_zone_by_type(hb_machine_type_t type) {
+    ushort ret = libademcoPINVOKE.hb_get_max_zone_by_type((int)type);
+    return ret;
+  }
+
+  public static int hb_is_valid_zone_by_type(hb_machine_type_t type, ushort zone) {
+    int ret = libademcoPINVOKE.hb_is_valid_zone_by_type((int)type, zone);
+    return ret;
+  }
+
+  public static int hb_is_valid_zone_by_type_strict(hb_machine_type_t type, ushort zone) {
+    int ret = libademcoPINVOKE.hb_is_valid_zone_by_type_strict((int)type, zone);
+    return ret;
+  }
+
+  public static int hb_is_machine_on_sale(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_is_machine_on_sale((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_arm(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_arm((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_disarm(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_disarm((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_config(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_config((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_half_arm(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_half_arm((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_report_signal_strength(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_report_signal_strength((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_report_by_sms(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_report_by_sms((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_has_wired_zones(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_has_wired_zones((int)type);
+    return ret;
+  }
+
+  public static ushort hb_wired_zone_min(hb_machine_type_t type) {
+    ushort ret = libademcoPINVOKE.hb_wired_zone_min((int)type);
+    return ret;
+  }
+
+  public static ushort hb_wired_zone_max(hb_machine_type_t type) {
+    ushort ret = libademcoPINVOKE.hb_wired_zone_max((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_write_zone(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_write_zone((int)type);
+    return ret;
+  }
+
+  public static int hb_machine_can_link_sub_machine(hb_machine_type_t type) {
+    int ret = libademcoPINVOKE.hb_machine_can_link_sub_machine((int)type);
+    return ret;
+  }
+
+  public static int hb_zone_can_report_lost(hb_zone_property_t zp) {
+    int ret = libademcoPINVOKE.hb_zone_can_report_lost((int)zp);
+    return ret;
+  }
+
+  public static void hb_machine_timer_init(hb_machine_timer_t timer) {
+    libademcoPINVOKE.hb_machine_timer_init(hb_machine_timer_t.getCPtr(timer));
+  }
+
+  public static int hb_is_valid_time_point(hb_machine_time_point_t tp) {
+    int ret = libademcoPINVOKE.hb_is_valid_time_point(hb_machine_time_point_t.getCPtr(tp));
+    return ret;
+  }
+
+  public static void hb_time_point_to_greenwich(hb_machine_time_point_t tp) {
+    libademcoPINVOKE.hb_time_point_to_greenwich(hb_machine_time_point_t.getCPtr(tp));
+  }
+
+  public static void hb_time_point_from_greenwich(hb_machine_time_point_t tp) {
+    libademcoPINVOKE.hb_time_point_from_greenwich(hb_machine_time_point_t.getCPtr(tp));
+  }
+
+  public static int hb_is_valid_timer_one(hb_machine_timer_one_t timer) {
+    int ret = libademcoPINVOKE.hb_is_valid_timer_one(hb_machine_timer_one_t.getCPtr(timer));
+    return ret;
+  }
+
+  public static int hb_is_valid_machine_timer(hb_machine_timer_t timer) {
+    int ret = libademcoPINVOKE.hb_is_valid_machine_timer(hb_machine_timer_t.getCPtr(timer));
+    return ret;
+  }
+
+  public static void hb_machine_timer_to_greenwich(hb_machine_timer_t timer) {
+    libademcoPINVOKE.hb_machine_timer_to_greenwich(hb_machine_timer_t.getCPtr(timer));
+  }
+
+  public static void hb_machine_timer_from_greenwich(hb_machine_timer_t timer) {
+    libademcoPINVOKE.hb_machine_timer_from_greenwich(hb_machine_timer_t.getCPtr(timer));
+  }
+
+  public static ademco_event_t hb_machine_status_to_ademco_event(hb_machine_status_t status) {
+    ademco_event_t ret = (ademco_event_t)libademcoPINVOKE.hb_machine_status_to_ademco_event((int)status);
+    return ret;
+  }
+
+  public static hb_machine_status_t hb_machine_status_from_ademco_event(ademco_event_t ademco_event) {
+    hb_machine_status_t ret = (hb_machine_status_t)libademcoPINVOKE.hb_machine_status_from_ademco_event((int)ademco_event);
+    return ret;
+  }
+
+  public static ademco_event_t hb_machine_type_to_ademco_event(hb_machine_type_t type) {
+    ademco_event_t ret = (ademco_event_t)libademcoPINVOKE.hb_machine_type_to_ademco_event((int)type);
+    return ret;
+  }
+
+  public static hb_machine_type_t hb_machine_type_from_ademco_event(ademco_event_t ademco_event) {
+    hb_machine_type_t ret = (hb_machine_type_t)libademcoPINVOKE.hb_machine_type_from_ademco_event((int)ademco_event);
+    return ret;
+  }
+
+  public static ademco_event_t hb_zone_property_to_ademco_event(hb_zone_property_t zp) {
+    ademco_event_t ret = (ademco_event_t)libademcoPINVOKE.hb_zone_property_to_ademco_event((int)zp);
+    return ret;
+  }
+
+  public static string hb_machine_status_to_string(hb_machine_status_t status) {
+    string ret = libademcoPINVOKE.hb_machine_status_to_string((int)status);
+    return ret;
+  }
+
+  public static string hb_machine_type_to_string(hb_machine_type_t type) {
+    string ret = libademcoPINVOKE.hb_machine_type_to_string((int)type);
+    return ret;
+  }
+
+  public static string hb_zone_property_to_string(hb_zone_property_t zp) {
+    string ret = libademcoPINVOKE.hb_zone_property_to_string((int)zp);
+    return ret;
+  }
+
+  public static string hb_machine_status_to_string_chinese(hb_machine_status_t status) {
+    string ret = libademcoPINVOKE.hb_machine_status_to_string_chinese((int)status);
+    return ret;
+  }
+
+  public static string hb_machine_type_to_string_chinese(hb_machine_type_t type) {
+    string ret = libademcoPINVOKE.hb_machine_type_to_string_chinese((int)type);
+    return ret;
+  }
+
+  public static string hb_zone_property_to_string_chinese(hb_zone_property_t zp) {
+    string ret = libademcoPINVOKE.hb_zone_property_to_string_chinese((int)zp);
+    return ret;
+  }
+
+  public static string hb_get_zone_format_str(hb_machine_type_t type) {
+    string ret = libademcoPINVOKE.hb_get_zone_format_str((int)type);
+    return ret;
+  }
+
+  public static readonly int ADEMCO_ENABLE_CHINESE = libademcoPINVOKE.ADEMCO_ENABLE_CHINESE_get();
+  public static readonly int ADEMCO_ENABLE_PARSE_ERROR = libademcoPINVOKE.ADEMCO_ENABLE_PARSE_ERROR_get();
+  public static readonly int ADEMCO_VERSION_MAJOR = libademcoPINVOKE.ADEMCO_VERSION_MAJOR_get();
+  public static readonly int ADEMCO_VERSION_MINOR = libademcoPINVOKE.ADEMCO_VERSION_MINOR_get();
+  public static readonly int ADEMCO_VERSION_PATCH = libademcoPINVOKE.ADEMCO_VERSION_PATCH_get();
+  public static readonly int ADEMCO_VERSION_IS_RELEASE = libademcoPINVOKE.ADEMCO_VERSION_IS_RELEASE_get();
+  public static readonly string ADEMCO_VERSION_SUFFIX = libademcoPINVOKE.ADEMCO_VERSION_SUFFIX_get();
+  public static readonly int ADEMCO_VERSION_HEX = libademcoPINVOKE.ADEMCO_VERSION_HEX_get();
+  public static readonly int ADEMCO_OK = libademcoPINVOKE.ADEMCO_OK_get();
+  public static readonly int ADEMCO_ERR = libademcoPINVOKE.ADEMCO_ERR_get();
+  public static readonly int ADEMCO_PACKET_ACCT_MIN_LEN = libademcoPINVOKE.ADEMCO_PACKET_ACCT_MIN_LEN_get();
+  public static readonly int ADEMCO_PACKET_ACCT_MAX_LEN = libademcoPINVOKE.ADEMCO_PACKET_ACCT_MAX_LEN_get();
+  public static readonly int ADEMCO_PACKET_ACCT_MAC_LEN = libademcoPINVOKE.ADEMCO_PACKET_ACCT_MAC_LEN_get();
+  public static readonly int ADEMCO_PACKET_PWD_MIN_LEN = libademcoPINVOKE.ADEMCO_PACKET_PWD_MIN_LEN_get();
+  public static readonly int ADEMCO_PACKET_PWD_MAX_LEN = libademcoPINVOKE.ADEMCO_PACKET_PWD_MAX_LEN_get();
+  public static readonly int ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN = libademcoPINVOKE.ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN_get();
+  public static readonly int ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN = libademcoPINVOKE.ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_get();
+  public static readonly int ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX = libademcoPINVOKE.ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX_get();
+  public static readonly int ADEMCO_PACKET_MAX_LEN = libademcoPINVOKE.ADEMCO_PACKET_MAX_LEN_get();
+  public static readonly int CONGWIN_FE100_PACKET_LEN = libademcoPINVOKE.CONGWIN_FE100_PACKET_LEN_get();
+  public static readonly int ADEMCO_PACKET_TIMESTAMP_LEN = libademcoPINVOKE.ADEMCO_PACKET_TIMESTAMP_LEN_get();
+  public static readonly int ADEMCO_PACKET_XDATA_MAX_LEN = libademcoPINVOKE.ADEMCO_PACKET_XDATA_MAX_LEN_get();
+  public static readonly int ADEMCO_ID_INVALID = libademcoPINVOKE.ADEMCO_ID_INVALID_get();
+  public static readonly int ADEMCO_ID_MIN = libademcoPINVOKE.ADEMCO_ID_MIN_get();
+  public static readonly int ADEMCO_ID_MAX = libademcoPINVOKE.ADEMCO_ID_MAX_get();
+  public static readonly int ADEMCO_ID_SENTINEL = libademcoPINVOKE.ADEMCO_ID_SENTINEL_get();
+  public static readonly int ADEMCO_ID_MASK = libademcoPINVOKE.ADEMCO_ID_MASK_get();
+  public static readonly int ADEMCO_ZONE_FOR_MACHINE_SELF = libademcoPINVOKE.ADEMCO_ZONE_FOR_MACHINE_SELF_get();
+  public static readonly int ADEMCO_ZONE_MIN = libademcoPINVOKE.ADEMCO_ZONE_MIN_get();
+  public static readonly int ADEMCO_ZONE_MAX = libademcoPINVOKE.ADEMCO_ZONE_MAX_get();
+  public static readonly int ADEMCO_ZONE_SENTINEL = libademcoPINVOKE.ADEMCO_ZONE_SENTINEL_get();
+  public static readonly int ADEMCO_ZONE_MASK = libademcoPINVOKE.ADEMCO_ZONE_MASK_get();
+  public static readonly int ADEMCO_GG_MIN = libademcoPINVOKE.ADEMCO_GG_MIN_get();
+  public static readonly int ADEMCO_GG_MAX = libademcoPINVOKE.ADEMCO_GG_MAX_get();
+  public static readonly int ADEMCO_GG_SENTINEL = libademcoPINVOKE.ADEMCO_GG_SENTINEL_get();
+  public static readonly int ADEMCO_GG_MASK = libademcoPINVOKE.ADEMCO_GG_MASK_get();
+  public static readonly int ADEMCO_SIGNAL_STRENGTH_MIN = libademcoPINVOKE.ADEMCO_SIGNAL_STRENGTH_MIN_get();
+  public static readonly int ADEMCO_SIGNAL_STRENGTH_MAX = libademcoPINVOKE.ADEMCO_SIGNAL_STRENGTH_MAX_get();
+  public static readonly string ADEMCO_PACKET_ID_NULL = libademcoPINVOKE.ADEMCO_PACKET_ID_NULL_get();
+  public static readonly string ADEMCO_PACKET_ID_ACK = libademcoPINVOKE.ADEMCO_PACKET_ID_ACK_get();
+  public static readonly string ADEMCO_PACKET_ID_NAK = libademcoPINVOKE.ADEMCO_PACKET_ID_NAK_get();
+  public static readonly string ADEMCO_PACKET_ID_DUH = libademcoPINVOKE.ADEMCO_PACKET_ID_DUH_get();
+  public static readonly string ADEMCO_PACKET_ID_HB = libademcoPINVOKE.ADEMCO_PACKET_ID_HB_get();
+  public static readonly string ADEMCO_PACKET_ID_ADM_CID = libademcoPINVOKE.ADEMCO_PACKET_ID_ADM_CID_get();
+  public static readonly string ADEMCO_PACKET_ID_MOD_REG = libademcoPINVOKE.ADEMCO_PACKET_ID_MOD_REG_get();
+  public static readonly string ADEMCO_PACKET_ID_REG_RSP = libademcoPINVOKE.ADEMCO_PACKET_ID_REG_RSP_get();
+  public static readonly string ADEMCO_RRCVR_DEFAULT = libademcoPINVOKE.ADEMCO_RRCVR_DEFAULT_get();
+  public static readonly string ADEMCO_LPREF_DEFAULT = libademcoPINVOKE.ADEMCO_LPREF_DEFAULT_get();
+  public static readonly char ADEMCO_PACKET_PREFIX = libademcoPINVOKE.ADEMCO_PACKET_PREFIX_get();
+  public static readonly char ADEMCO_PACKET_SUFIX = libademcoPINVOKE.ADEMCO_PACKET_SUFIX_get();
+  public static readonly int HB_3SECTION_MACHINE_GG_MIN = libademcoPINVOKE.HB_3SECTION_MACHINE_GG_MIN_get();
+  public static readonly int HB_3SECTION_MACHINE_GG_MAX = libademcoPINVOKE.HB_3SECTION_MACHINE_GG_MAX_get();
+}
+
+}
diff --git a/tools/dist/win_csharp/com/hb3344/ademco/libademcoPINVOKE.cs b/tools/dist/win_csharp/com/hb3344/ademco/libademcoPINVOKE.cs
new file mode 100644
index 0000000..fc76019
--- /dev/null
+++ b/tools/dist/win_csharp/com/hb3344/ademco/libademcoPINVOKE.cs
@@ -0,0 +1,902 @@
+//------------------------------------------------------------------------------
+// <auto-generated />
+//
+// This file was automatically generated by SWIG (https://www.swig.org).
+// Version 4.1.1
+//
+// Do not make changes to this file unless you know what you are doing - modify
+// the SWIG interface file instead.
+//------------------------------------------------------------------------------
+
+namespace com.hb3344.ademco {
+
+class libademcoPINVOKE {
+
+  protected class SWIGExceptionHelper {
+
+    public delegate void ExceptionDelegate(string message);
+    public delegate void ExceptionArgumentDelegate(string message, string paramName);
+
+    static ExceptionDelegate applicationDelegate = new ExceptionDelegate(SetPendingApplicationException);
+    static ExceptionDelegate arithmeticDelegate = new ExceptionDelegate(SetPendingArithmeticException);
+    static ExceptionDelegate divideByZeroDelegate = new ExceptionDelegate(SetPendingDivideByZeroException);
+    static ExceptionDelegate indexOutOfRangeDelegate = new ExceptionDelegate(SetPendingIndexOutOfRangeException);
+    static ExceptionDelegate invalidCastDelegate = new ExceptionDelegate(SetPendingInvalidCastException);
+    static ExceptionDelegate invalidOperationDelegate = new ExceptionDelegate(SetPendingInvalidOperationException);
+    static ExceptionDelegate ioDelegate = new ExceptionDelegate(SetPendingIOException);
+    static ExceptionDelegate nullReferenceDelegate = new ExceptionDelegate(SetPendingNullReferenceException);
+    static ExceptionDelegate outOfMemoryDelegate = new ExceptionDelegate(SetPendingOutOfMemoryException);
+    static ExceptionDelegate overflowDelegate = new ExceptionDelegate(SetPendingOverflowException);
+    static ExceptionDelegate systemDelegate = new ExceptionDelegate(SetPendingSystemException);
+
+    static ExceptionArgumentDelegate argumentDelegate = new ExceptionArgumentDelegate(SetPendingArgumentException);
+    static ExceptionArgumentDelegate argumentNullDelegate = new ExceptionArgumentDelegate(SetPendingArgumentNullException);
+    static ExceptionArgumentDelegate argumentOutOfRangeDelegate = new ExceptionArgumentDelegate(SetPendingArgumentOutOfRangeException);
+
+    [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="SWIGRegisterExceptionCallbacks_libademco")]
+    public static extern void SWIGRegisterExceptionCallbacks_libademco(
+                                ExceptionDelegate applicationDelegate,
+                                ExceptionDelegate arithmeticDelegate,
+                                ExceptionDelegate divideByZeroDelegate, 
+                                ExceptionDelegate indexOutOfRangeDelegate, 
+                                ExceptionDelegate invalidCastDelegate,
+                                ExceptionDelegate invalidOperationDelegate,
+                                ExceptionDelegate ioDelegate,
+                                ExceptionDelegate nullReferenceDelegate,
+                                ExceptionDelegate outOfMemoryDelegate, 
+                                ExceptionDelegate overflowDelegate, 
+                                ExceptionDelegate systemExceptionDelegate);
+
+    [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="SWIGRegisterExceptionArgumentCallbacks_libademco")]
+    public static extern void SWIGRegisterExceptionCallbacksArgument_libademco(
+                                ExceptionArgumentDelegate argumentDelegate,
+                                ExceptionArgumentDelegate argumentNullDelegate,
+                                ExceptionArgumentDelegate argumentOutOfRangeDelegate);
+
+    static void SetPendingApplicationException(string message) {
+      SWIGPendingException.Set(new global::System.ApplicationException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingArithmeticException(string message) {
+      SWIGPendingException.Set(new global::System.ArithmeticException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingDivideByZeroException(string message) {
+      SWIGPendingException.Set(new global::System.DivideByZeroException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingIndexOutOfRangeException(string message) {
+      SWIGPendingException.Set(new global::System.IndexOutOfRangeException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingInvalidCastException(string message) {
+      SWIGPendingException.Set(new global::System.InvalidCastException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingInvalidOperationException(string message) {
+      SWIGPendingException.Set(new global::System.InvalidOperationException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingIOException(string message) {
+      SWIGPendingException.Set(new global::System.IO.IOException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingNullReferenceException(string message) {
+      SWIGPendingException.Set(new global::System.NullReferenceException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingOutOfMemoryException(string message) {
+      SWIGPendingException.Set(new global::System.OutOfMemoryException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingOverflowException(string message) {
+      SWIGPendingException.Set(new global::System.OverflowException(message, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingSystemException(string message) {
+      SWIGPendingException.Set(new global::System.SystemException(message, SWIGPendingException.Retrieve()));
+    }
+
+    static void SetPendingArgumentException(string message, string paramName) {
+      SWIGPendingException.Set(new global::System.ArgumentException(message, paramName, SWIGPendingException.Retrieve()));
+    }
+    static void SetPendingArgumentNullException(string message, string paramName) {
+      global::System.Exception e = SWIGPendingException.Retrieve();
+      if (e != null) message = message + " Inner Exception: " + e.Message;
+      SWIGPendingException.Set(new global::System.ArgumentNullException(paramName, message));
+    }
+    static void SetPendingArgumentOutOfRangeException(string message, string paramName) {
+      global::System.Exception e = SWIGPendingException.Retrieve();
+      if (e != null) message = message + " Inner Exception: " + e.Message;
+      SWIGPendingException.Set(new global::System.ArgumentOutOfRangeException(paramName, message));
+    }
+
+    static SWIGExceptionHelper() {
+      SWIGRegisterExceptionCallbacks_libademco(
+                                applicationDelegate,
+                                arithmeticDelegate,
+                                divideByZeroDelegate,
+                                indexOutOfRangeDelegate,
+                                invalidCastDelegate,
+                                invalidOperationDelegate,
+                                ioDelegate,
+                                nullReferenceDelegate,
+                                outOfMemoryDelegate,
+                                overflowDelegate,
+                                systemDelegate);
+
+      SWIGRegisterExceptionCallbacksArgument_libademco(
+                                argumentDelegate,
+                                argumentNullDelegate,
+                                argumentOutOfRangeDelegate);
+    }
+  }
+
+  protected static SWIGExceptionHelper swigExceptionHelper = new SWIGExceptionHelper();
+
+  public class SWIGPendingException {
+    [global::System.ThreadStatic]
+    private static global::System.Exception pendingException = null;
+    private static int numExceptionsPending = 0;
+    private static global::System.Object exceptionsLock = null;
+
+    public static bool Pending {
+      get {
+        bool pending = false;
+        if (numExceptionsPending > 0)
+          if (pendingException != null)
+            pending = true;
+        return pending;
+      } 
+    }
+
+    public static void Set(global::System.Exception e) {
+      if (pendingException != null)
+        throw new global::System.ApplicationException("FATAL: An earlier pending exception from unmanaged code was missed and thus not thrown (" + pendingException.ToString() + ")", e);
+      pendingException = e;
+      lock(exceptionsLock) {
+        numExceptionsPending++;
+      }
+    }
+
+    public static global::System.Exception Retrieve() {
+      global::System.Exception e = null;
+      if (numExceptionsPending > 0) {
+        if (pendingException != null) {
+          e = pendingException;
+          pendingException = null;
+          lock(exceptionsLock) {
+            numExceptionsPending--;
+          }
+        }
+      }
+      return e;
+    }
+
+    static SWIGPendingException() {
+      exceptionsLock = new global::System.Object();
+    }
+  }
+
+
+  protected class SWIGStringHelper {
+
+    public delegate string SWIGStringDelegate(string message);
+    static SWIGStringDelegate stringDelegate = new SWIGStringDelegate(CreateString);
+
+    [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="SWIGRegisterStringCallback_libademco")]
+    public static extern void SWIGRegisterStringCallback_libademco(SWIGStringDelegate stringDelegate);
+
+    static string CreateString(string cString) {
+      return cString;
+    }
+
+    static SWIGStringHelper() {
+      SWIGRegisterStringCallback_libademco(stringDelegate);
+    }
+  }
+
+  static protected SWIGStringHelper swigStringHelper = new SWIGStringHelper();
+
+
+  static libademcoPINVOKE() {
+  }
+
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_intp___")]
+  public static extern global::System.IntPtr new_intp();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_copy_intp___")]
+  public static extern global::System.IntPtr copy_intp(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_intp___")]
+  public static extern void delete_intp(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_intp_assign___")]
+  public static extern void intp_assign(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_intp_value___")]
+  public static extern int intp_value(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_uint16p___")]
+  public static extern global::System.IntPtr new_uint16p();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_copy_uint16p___")]
+  public static extern global::System.IntPtr copy_uint16p(ushort jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_uint16p___")]
+  public static extern void delete_uint16p(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_uint16p_assign___")]
+  public static extern void uint16p_assign(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_uint16p_value___")]
+  public static extern ushort uint16p_value(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_uint32p___")]
+  public static extern global::System.IntPtr new_uint32p();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_copy_uint32p___")]
+  public static extern global::System.IntPtr copy_uint32p(uint jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_uint32p___")]
+  public static extern void delete_uint32p(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_uint32p_assign___")]
+  public static extern void uint32p_assign(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_uint32p_value___")]
+  public static extern uint uint32p_value(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_size_tp___")]
+  public static extern global::System.IntPtr new_size_tp();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_copy_size_tp___")]
+  public static extern global::System.IntPtr copy_size_tp(uint jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_size_tp___")]
+  public static extern void delete_size_tp(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_size_tp_assign___")]
+  public static extern void size_tp_assign(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_size_tp_value___")]
+  public static extern uint size_tp_value(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ENABLE_CHINESE_get___")]
+  public static extern int ADEMCO_ENABLE_CHINESE_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ENABLE_PARSE_ERROR_get___")]
+  public static extern int ADEMCO_ENABLE_PARSE_ERROR_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_VERSION_MAJOR_get___")]
+  public static extern int ADEMCO_VERSION_MAJOR_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_VERSION_MINOR_get___")]
+  public static extern int ADEMCO_VERSION_MINOR_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_VERSION_PATCH_get___")]
+  public static extern int ADEMCO_VERSION_PATCH_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_VERSION_IS_RELEASE_get___")]
+  public static extern int ADEMCO_VERSION_IS_RELEASE_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_VERSION_SUFFIX_get___")]
+  public static extern string ADEMCO_VERSION_SUFFIX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_VERSION_HEX_get___")]
+  public static extern int ADEMCO_VERSION_HEX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_OK_get___")]
+  public static extern int ADEMCO_OK_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ERR_get___")]
+  public static extern int ADEMCO_ERR_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ACCT_MIN_LEN_get___")]
+  public static extern int ADEMCO_PACKET_ACCT_MIN_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ACCT_MAX_LEN_get___")]
+  public static extern int ADEMCO_PACKET_ACCT_MAX_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ACCT_MAC_LEN_get___")]
+  public static extern int ADEMCO_PACKET_ACCT_MAC_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_PWD_MIN_LEN_get___")]
+  public static extern int ADEMCO_PACKET_PWD_MIN_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_PWD_MAX_LEN_get___")]
+  public static extern int ADEMCO_PACKET_PWD_MAX_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN_get___")]
+  public static extern int ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_get___")]
+  public static extern int ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX_get___")]
+  public static extern int ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_MAX_LEN_get___")]
+  public static extern int ADEMCO_PACKET_MAX_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_CONGWIN_FE100_PACKET_LEN_get___")]
+  public static extern int CONGWIN_FE100_PACKET_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_TIMESTAMP_LEN_get___")]
+  public static extern int ADEMCO_PACKET_TIMESTAMP_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_XDATA_MAX_LEN_get___")]
+  public static extern int ADEMCO_PACKET_XDATA_MAX_LEN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ID_INVALID_get___")]
+  public static extern int ADEMCO_ID_INVALID_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ID_MIN_get___")]
+  public static extern int ADEMCO_ID_MIN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ID_MAX_get___")]
+  public static extern int ADEMCO_ID_MAX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ID_SENTINEL_get___")]
+  public static extern int ADEMCO_ID_SENTINEL_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ID_MASK_get___")]
+  public static extern int ADEMCO_ID_MASK_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ZONE_FOR_MACHINE_SELF_get___")]
+  public static extern int ADEMCO_ZONE_FOR_MACHINE_SELF_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ZONE_MIN_get___")]
+  public static extern int ADEMCO_ZONE_MIN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ZONE_MAX_get___")]
+  public static extern int ADEMCO_ZONE_MAX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ZONE_SENTINEL_get___")]
+  public static extern int ADEMCO_ZONE_SENTINEL_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_ZONE_MASK_get___")]
+  public static extern int ADEMCO_ZONE_MASK_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_GG_MIN_get___")]
+  public static extern int ADEMCO_GG_MIN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_GG_MAX_get___")]
+  public static extern int ADEMCO_GG_MAX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_GG_SENTINEL_get___")]
+  public static extern int ADEMCO_GG_SENTINEL_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_GG_MASK_get___")]
+  public static extern int ADEMCO_GG_MASK_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_SIGNAL_STRENGTH_MIN_get___")]
+  public static extern int ADEMCO_SIGNAL_STRENGTH_MIN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_SIGNAL_STRENGTH_MAX_get___")]
+  public static extern int ADEMCO_SIGNAL_STRENGTH_MAX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_file_set___")]
+  public static extern void ademco_parse_error_t_file_set(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_file_get___")]
+  public static extern string ademco_parse_error_t_file_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_line_set___")]
+  public static extern void ademco_parse_error_t_line_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_line_get___")]
+  public static extern int ademco_parse_error_t_line_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_offset_set___")]
+  public static extern void ademco_parse_error_t_offset_set(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_offset_get___")]
+  public static extern uint ademco_parse_error_t_offset_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_msg_set___")]
+  public static extern void ademco_parse_error_t_msg_set(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_error_t_msg_get___")]
+  public static extern string ademco_parse_error_t_msg_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_ademco_parse_error_t___")]
+  public static extern global::System.IntPtr new_ademco_parse_error_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_ademco_parse_error_t___")]
+  public static extern void delete_ademco_parse_error_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_raw_set___")]
+  public static extern void ademco_data_t_raw_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_raw_get___")]
+  public static extern global::System.IntPtr ademco_data_t_raw_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_raw_len_set___")]
+  public static extern void ademco_data_t_raw_len_set(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_raw_len_get___")]
+  public static extern uint ademco_data_t_raw_len_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_ademco_id_set___")]
+  public static extern void ademco_data_t_ademco_id_set(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_ademco_id_get___")]
+  public static extern uint ademco_data_t_ademco_id_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_ademco_event_set___")]
+  public static extern void ademco_data_t_ademco_event_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_ademco_event_get___")]
+  public static extern int ademco_data_t_ademco_event_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_gg_set___")]
+  public static extern void ademco_data_t_gg_set(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_gg_get___")]
+  public static extern byte ademco_data_t_gg_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_zone_set___")]
+  public static extern void ademco_data_t_zone_set(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_t_zone_get___")]
+  public static extern ushort ademco_data_t_zone_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_ademco_data_t___")]
+  public static extern global::System.IntPtr new_ademco_data_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_ademco_data_t___")]
+  public static extern void delete_ademco_data_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_t_lenghFormat_set___")]
+  public static extern void ademco_xdata_t_lenghFormat_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_t_lenghFormat_get___")]
+  public static extern int ademco_xdata_t_lenghFormat_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_t_raw_set___")]
+  public static extern void ademco_xdata_t_raw_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_t_raw_get___")]
+  public static extern global::System.IntPtr ademco_xdata_t_raw_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_t_raw_len_set___")]
+  public static extern void ademco_xdata_t_raw_len_set(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_t_raw_len_get___")]
+  public static extern uint ademco_xdata_t_raw_len_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_ademco_xdata_t___")]
+  public static extern global::System.IntPtr new_ademco_xdata_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_ademco_xdata_t___")]
+  public static extern void delete_ademco_xdata_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_NULL_get___")]
+  public static extern string ADEMCO_PACKET_ID_NULL_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_ACK_get___")]
+  public static extern string ADEMCO_PACKET_ID_ACK_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_NAK_get___")]
+  public static extern string ADEMCO_PACKET_ID_NAK_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_DUH_get___")]
+  public static extern string ADEMCO_PACKET_ID_DUH_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_HB_get___")]
+  public static extern string ADEMCO_PACKET_ID_HB_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_ADM_CID_get___")]
+  public static extern string ADEMCO_PACKET_ID_ADM_CID_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_MOD_REG_get___")]
+  public static extern string ADEMCO_PACKET_ID_MOD_REG_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_ID_REG_RSP_get___")]
+  public static extern string ADEMCO_PACKET_ID_REG_RSP_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_RRCVR_DEFAULT_get___")]
+  public static extern string ADEMCO_RRCVR_DEFAULT_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_LPREF_DEFAULT_get___")]
+  public static extern string ADEMCO_LPREF_DEFAULT_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_PREFIX_get___")]
+  public static extern char ADEMCO_PACKET_PREFIX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ADEMCO_PACKET_SUFIX_get___")]
+  public static extern char ADEMCO_PACKET_SUFIX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_crc_set___")]
+  public static extern void ademco_packet_t_crc_set(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_crc_get___")]
+  public static extern ushort ademco_packet_t_crc_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_len_set___")]
+  public static extern void ademco_packet_t_len_set(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_len_get___")]
+  public static extern uint ademco_packet_t_len_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_id_set___")]
+  public static extern void ademco_packet_t_id_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_id_get___")]
+  public static extern int ademco_packet_t_id_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_seq_set___")]
+  public static extern void ademco_packet_t_seq_set(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_seq_get___")]
+  public static extern ushort ademco_packet_t_seq_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_acct_set___")]
+  public static extern void ademco_packet_t_acct_set(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_acct_get___")]
+  public static extern string ademco_packet_t_acct_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_data_set___")]
+  public static extern void ademco_packet_t_data_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_data_get___")]
+  public static extern global::System.IntPtr ademco_packet_t_data_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_xdata_set___")]
+  public static extern void ademco_packet_t_xdata_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_xdata_get___")]
+  public static extern global::System.IntPtr ademco_packet_t_xdata_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_timestamp_set___")]
+  public static extern void ademco_packet_t_timestamp_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_timestamp_get___")]
+  public static extern global::System.IntPtr ademco_packet_t_timestamp_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_raw_set___")]
+  public static extern void ademco_packet_t_raw_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_raw_get___")]
+  public static extern global::System.IntPtr ademco_packet_t_raw_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_raw_len_set___")]
+  public static extern void ademco_packet_t_raw_len_set(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_t_raw_len_get___")]
+  public static extern uint ademco_packet_t_raw_len_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_ademco_packet_t___")]
+  public static extern global::System.IntPtr new_ademco_packet_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_ademco_packet_t___")]
+  public static extern void delete_ademco_packet_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_version___")]
+  public static extern uint ademco_version();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_version_string___")]
+  public static extern string ademco_version_string();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_print___")]
+  public static extern void ademco_print([global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_encode_signal_strength___")]
+  public static extern byte ademco_encode_signal_strength(byte jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_decode_signal_strength___")]
+  public static extern byte ademco_decode_signal_strength(byte jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_is_valid_account___")]
+  public static extern int ademco_is_valid_account(string jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_is_machine_status_event___")]
+  public static extern int ademco_is_machine_status_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_is_machine_type_event___")]
+  public static extern int ademco_is_machine_type_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_is_event_need_control_source___")]
+  public static extern int ademco_is_event_need_control_source(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_get_event_level___")]
+  public static extern int ademco_get_event_level(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_get_exception_event_by_recover_event___")]
+  public static extern int ademco_get_exception_event_by_recover_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_event_to_string___")]
+  public static extern string ademco_event_to_string(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_event_to_string_chinese___")]
+  public static extern string ademco_event_to_string_chinese(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_append_data___")]
+  public static extern uint ademco_append_data([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, string jarg2, uint jarg3, int jarg4, byte jarg5, ushort jarg6);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_append_data2___")]
+  public static extern uint ademco_append_data2(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2, uint jarg3, int jarg4, byte jarg5, ushort jarg6);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_data___")]
+  public static extern int ademco_parse_data([global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_data_to_congwin_fe100___")]
+  public static extern uint ademco_data_to_congwin_fe100([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, global::System.Runtime.InteropServices.HandleRef jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_init___")]
+  public static extern void ademco_xdata_init(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_convert___")]
+  public static extern int ademco_xdata_convert(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_get_valid_content_len___")]
+  public static extern uint ademco_xdata_get_valid_content_len(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_memcmp___")]
+  public static extern int ademco_xdata_memcmp(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, uint jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_xdata_copy___")]
+  public static extern uint ademco_xdata_copy(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_xdata___")]
+  public static extern int ademco_make_xdata(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3, [global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg4, uint jarg5);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_is_valid_packet_id___")]
+  public static extern int ademco_is_valid_packet_id(string jarg1, string jarg2, uint jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_id_from_string___")]
+  public static extern int ademco_packet_id_from_string(string jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_packet_id_to_string___")]
+  public static extern string ademco_packet_id_to_string(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_empty_data_packet___")]
+  public static extern uint ademco_make_empty_data_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, string jarg3, ushort jarg4, string jarg5, uint jarg6);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_adm_empty_data_packet___")]
+  public static extern uint ademco_make_adm_empty_data_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, string jarg3, ushort jarg4, string jarg5, uint jarg6);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_null_packet___")]
+  public static extern uint ademco_make_null_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, ushort jarg3, string jarg4, uint jarg5);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_ack_packet___")]
+  public static extern uint ademco_make_ack_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, ushort jarg3, string jarg4, uint jarg5);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_nak_packet___")]
+  public static extern uint ademco_make_nak_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, ushort jarg3, string jarg4, uint jarg5);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_hb_packet___")]
+  public static extern uint ademco_make_hb_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, ushort jarg3, string jarg4, uint jarg5, int jarg6, byte jarg7, ushort jarg8, global::System.Runtime.InteropServices.HandleRef jarg9);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_adm_packet___")]
+  public static extern uint ademco_make_adm_packet([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, ushort jarg3, string jarg4, uint jarg5, int jarg6, byte jarg7, ushort jarg8, global::System.Runtime.InteropServices.HandleRef jarg9);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_null_packet2___")]
+  public static extern uint ademco_make_null_packet2(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2, string jarg3, uint jarg4);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_ack_packet2___")]
+  public static extern uint ademco_make_ack_packet2(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2, string jarg3, uint jarg4);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_nak_packet2___")]
+  public static extern uint ademco_make_nak_packet2(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2, string jarg3, uint jarg4);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_hb_packet2___")]
+  public static extern uint ademco_make_hb_packet2(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2, string jarg3, uint jarg4, int jarg5, byte jarg6, ushort jarg7, global::System.Runtime.InteropServices.HandleRef jarg8);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_make_adm_packet2___")]
+  public static extern uint ademco_make_adm_packet2(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2, string jarg3, uint jarg4, int jarg5, byte jarg6, ushort jarg7, global::System.Runtime.InteropServices.HandleRef jarg8);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_parse_packet___")]
+  public static extern int ademco_parse_packet([global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4, global::System.Runtime.InteropServices.HandleRef jarg5);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_crc16___")]
+  public static extern ushort ademco_crc16([global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hilo_array_to_dec_str___")]
+  public static extern uint ademco_hilo_array_to_dec_str([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, [global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg2, uint jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hilo_array_to_hex_str___")]
+  public static extern uint ademco_hilo_array_to_hex_str([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, [global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg2, uint jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_dec_str_to_hilo_array___")]
+  public static extern uint ademco_dec_str_to_hilo_array([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, string jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hex_str_to_hilo_array___")]
+  public static extern uint ademco_hex_str_to_hilo_array([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, uint jarg2, string jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hex_array_to_str___")]
+  public static extern uint ademco_hex_array_to_str(string jarg1, [global::System.Runtime.InteropServices.In, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg2, uint jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hex_str_to_array___")]
+  public static extern uint ademco_hex_str_to_array([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, string jarg2, byte jarg3);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hex_str_to_array_n___")]
+  public static extern uint ademco_hex_str_to_array_n([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, string jarg2, uint jarg3, byte jarg4);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_ademco_hex_str_to_array_n_allow_non_hex_str___")]
+  public static extern uint ademco_hex_str_to_array_n_allow_non_hex_str([global::System.Runtime.InteropServices.Out, global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray)]byte[] jarg1, string jarg2, uint jarg3, byte jarg4);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_HB_3SECTION_MACHINE_GG_MIN_get___")]
+  public static extern int HB_3SECTION_MACHINE_GG_MIN_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_HB_3SECTION_MACHINE_GG_MAX_get___")]
+  public static extern int HB_3SECTION_MACHINE_GG_MAX_get();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_and_property_t_zone_set___")]
+  public static extern void hb_zone_and_property_t_zone_set(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_and_property_t_zone_get___")]
+  public static extern ushort hb_zone_and_property_t_zone_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_and_property_t_prop_set___")]
+  public static extern void hb_zone_and_property_t_prop_set(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_and_property_t_prop_get___")]
+  public static extern int hb_zone_and_property_t_prop_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_hb_zone_and_property_t___")]
+  public static extern global::System.IntPtr new_hb_zone_and_property_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_hb_zone_and_property_t___")]
+  public static extern void delete_hb_zone_and_property_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_time_point_t_hour_set___")]
+  public static extern void hb_machine_time_point_t_hour_set(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_time_point_t_hour_get___")]
+  public static extern byte hb_machine_time_point_t_hour_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_time_point_t_minute_set___")]
+  public static extern void hb_machine_time_point_t_minute_set(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_time_point_t_minute_get___")]
+  public static extern byte hb_machine_time_point_t_minute_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_hb_machine_time_point_t___")]
+  public static extern global::System.IntPtr new_hb_machine_time_point_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_hb_machine_time_point_t___")]
+  public static extern void delete_hb_machine_time_point_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_one_t_arm_at_set___")]
+  public static extern void hb_machine_timer_one_t_arm_at_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_one_t_arm_at_get___")]
+  public static extern global::System.IntPtr hb_machine_timer_one_t_arm_at_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_one_t_disarm_at_set___")]
+  public static extern void hb_machine_timer_one_t_disarm_at_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_one_t_disarm_at_get___")]
+  public static extern global::System.IntPtr hb_machine_timer_one_t_disarm_at_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_hb_machine_timer_one_t___")]
+  public static extern global::System.IntPtr new_hb_machine_timer_one_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_hb_machine_timer_one_t___")]
+  public static extern void delete_hb_machine_timer_one_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_t_timer_set___")]
+  public static extern void hb_machine_timer_t_timer_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_t_timer_get___")]
+  public static extern global::System.IntPtr hb_machine_timer_t_timer_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_t_data_set___")]
+  public static extern void hb_machine_timer_t_data_set(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_t_data_get___")]
+  public static extern global::System.IntPtr hb_machine_timer_t_data_get(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_new_hb_machine_timer_t___")]
+  public static extern global::System.IntPtr new_hb_machine_timer_t();
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_delete_hb_machine_timer_t___")]
+  public static extern void delete_hb_machine_timer_t(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_get_available_zone_properties_by_type___")]
+  public static extern uint hb_get_available_zone_properties_by_type(int jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_get_max_zone_by_type___")]
+  public static extern ushort hb_get_max_zone_by_type(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_is_valid_zone_by_type___")]
+  public static extern int hb_is_valid_zone_by_type(int jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_is_valid_zone_by_type_strict___")]
+  public static extern int hb_is_valid_zone_by_type_strict(int jarg1, ushort jarg2);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_is_machine_on_sale___")]
+  public static extern int hb_is_machine_on_sale(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_arm___")]
+  public static extern int hb_machine_can_arm(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_disarm___")]
+  public static extern int hb_machine_can_disarm(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_config___")]
+  public static extern int hb_machine_can_config(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_half_arm___")]
+  public static extern int hb_machine_can_half_arm(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_report_signal_strength___")]
+  public static extern int hb_machine_can_report_signal_strength(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_report_by_sms___")]
+  public static extern int hb_machine_can_report_by_sms(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_has_wired_zones___")]
+  public static extern int hb_machine_has_wired_zones(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_wired_zone_min___")]
+  public static extern ushort hb_wired_zone_min(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_wired_zone_max___")]
+  public static extern ushort hb_wired_zone_max(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_write_zone___")]
+  public static extern int hb_machine_can_write_zone(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_can_link_sub_machine___")]
+  public static extern int hb_machine_can_link_sub_machine(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_can_report_lost___")]
+  public static extern int hb_zone_can_report_lost(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_init___")]
+  public static extern void hb_machine_timer_init(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_is_valid_time_point___")]
+  public static extern int hb_is_valid_time_point(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_time_point_to_greenwich___")]
+  public static extern void hb_time_point_to_greenwich(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_time_point_from_greenwich___")]
+  public static extern void hb_time_point_from_greenwich(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_is_valid_timer_one___")]
+  public static extern int hb_is_valid_timer_one(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_is_valid_machine_timer___")]
+  public static extern int hb_is_valid_machine_timer(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_to_greenwich___")]
+  public static extern void hb_machine_timer_to_greenwich(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_timer_from_greenwich___")]
+  public static extern void hb_machine_timer_from_greenwich(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_status_to_ademco_event___")]
+  public static extern int hb_machine_status_to_ademco_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_status_from_ademco_event___")]
+  public static extern int hb_machine_status_from_ademco_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_type_to_ademco_event___")]
+  public static extern int hb_machine_type_to_ademco_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_type_from_ademco_event___")]
+  public static extern int hb_machine_type_from_ademco_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_property_to_ademco_event___")]
+  public static extern int hb_zone_property_to_ademco_event(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_status_to_string___")]
+  public static extern string hb_machine_status_to_string(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_type_to_string___")]
+  public static extern string hb_machine_type_to_string(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_property_to_string___")]
+  public static extern string hb_zone_property_to_string(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_status_to_string_chinese___")]
+  public static extern string hb_machine_status_to_string_chinese(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_machine_type_to_string_chinese___")]
+  public static extern string hb_machine_type_to_string_chinese(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_zone_property_to_string_chinese___")]
+  public static extern string hb_zone_property_to_string_chinese(int jarg1);
+
+  [global::System.Runtime.InteropServices.DllImport("libademco", EntryPoint="CSharp_comfhb3344fademco_hb_get_zone_format_str___")]
+  public static extern string hb_get_zone_format_str(int jarg1);
+}
+
+}
-- 
2.18.1