lixun il y a 2 ans
Parent
commit
387d25c585

+ 121 - 0
src/YSAI.DAQ/YSAI.Can/CanData.cs

@@ -0,0 +1,121 @@
+using Newtonsoft.Json.Converters;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Text.Json.Serialization;
+using System.Threading.Tasks;
+
+namespace YSAI.Can
+{
+    public class CanData
+    {
+        /// <summary>
+        /// 基础数据
+        /// </summary>
+        public class Basics
+        {
+            /// <summary>
+            /// 唯一标识符
+            /// </summary>
+            [Description("唯一标识符")]
+            public string? SN { get; set; }
+            /// <summary>
+            /// 波特率
+            /// </summary>
+            [Description("波特率")]
+            [JsonConverter(typeof(StringEnumConverter))]
+            public CanBaudRate BaudRate { get; set; }
+            /// <summary>
+            /// 打开的CAN通道
+            /// </summary>
+            [Description("打开的CAN通道")]
+            public int CanChannel { get; set; }
+            /// <summary>
+            /// 重写基类中的Equals方法
+            /// </summary>
+            /// <param name="obj"></param>
+            /// <returns></returns>
+            public override bool Equals(object obj)
+            {
+                if (obj == null)
+                {
+                    return false;
+                }
+                Basics? Obj = obj as Basics;
+                if (Obj == null)
+                {
+                    return false;
+                }
+                else
+                {
+                    if (BaudRate == Obj.BaudRate && 
+                        CanChannel == Obj.CanChannel && 
+                        SN == Obj.SN)
+                    {
+                        return true;
+                    }
+                    else
+                    {
+                        return false;
+                    }
+                }
+            }
+        }
+        /// <summary>
+        /// 事件抛出
+        /// </summary>
+        public class Event
+        {
+            /// <summary>
+            /// CANID
+            /// </summary>
+            public int CanID { get; set; }
+            /// <summary>
+            /// 字节数据
+            /// </summary>
+            public byte[] ByteData { get; set; }
+            /// <summary>
+            /// 字符串形式的字节数据
+            /// </summary>
+            public string StrByteData { get; set; }
+            /// <summary>
+            /// 长度
+            /// </summary>
+            public int Length { get; set; }
+            /// <summary>
+            /// 标志
+            /// </summary>
+            public int Flag { get; set; }
+            /// <summary>
+            /// 时间
+            /// </summary>
+            public DateTime Time { get; set; }
+        }
+
+
+        /// <summary>
+        /// 波特率
+        /// </summary>
+        public enum CanBaudRate
+        {
+            canBITRATE_1M = -1,
+            canBITRATE_500K = -2,
+            canBITRATE_250K = -3,
+            canBITRATE_125K = -4,
+            canBITRATE_100K = -5,
+            canBITRATE_62K = -6,
+            canBITRATE_50K = -7,
+            canBITRATE_83K = -8,
+            canBITRATE_10K = -9,
+            canFD_BITRATE_500K_80P = -1000,
+            canFD_BITRATE_1M_80P = -1001,
+            canFD_BITRATE_2M_80P = -1002,
+            canFD_BITRATE_2M_60P = -1007,
+            canFD_BITRATE_4M_80P = -1003,
+            canFD_BITRATE_8M_60P = -1004,
+            canFD_BITRATE_8M_80P = -1005
+        }
+    }
+}

+ 333 - 0
src/YSAI.DAQ/YSAI.Can/CanOperator.cs

@@ -0,0 +1,333 @@
+using Kvaser.CanLib;
+using System.Collections.Concurrent;
+using System.Threading.Channels;
+using YSAI.Core.data;
+using YSAI.Core.@interface.only;
+using YSAI.Core.@interface.unify;
+using YSAI.Core.virtualAddress;
+using YSAI.Unility;
+
+namespace YSAI.Can
+{
+    /// <summary>
+    /// can的读取比较特殊无须地址
+    /// </summary>
+    public class CanOperator : IBaseAbstract<CanData.Event>, ICan
+    {
+        protected override string LogHead => "[ CanOperator 操作 ]";
+        protected override string ClassName => "CanOperator";
+
+
+        private static readonly object Lock = new object();  //锁
+        private static List<CanOperator> ThisObjList = new List<CanOperator>(); //自身对象集合
+
+        /// <summary>
+        /// 单例模式
+        /// </summary>
+        /// <returns></returns>
+        public static CanOperator Instance(CanData.Basics basics)
+        {
+            CanOperator? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
+            if (exp == null)
+            {
+                lock (Lock)
+                {
+                    if (ThisObjList.Count(c => c.basics.Equals(basics)) > 0)
+                    {
+                        return ThisObjList.First(c => c.basics.Equals(basics));
+                    }
+                    else
+                    {
+                        CanOperator exp2 = new CanOperator(basics);
+                        ThisObjList.Add(exp2);
+                        return exp2;
+                    }
+                }
+            }
+            return exp;
+        }
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="param">参数</param>
+        public CanOperator(CanData.Basics basics)
+        {
+            this.basics = basics;
+        }
+
+        /// <summary>
+        /// 基础数据
+        /// </summary>
+        private CanData.Basics basics { get; set; }
+        /// <summary>      
+        /// 为方法返回的执行状态信息,可以用来判断方法是否成功执行
+        /// </summary>
+        Canlib.canStatus Status;
+        /// <summary>
+        /// 句柄
+        /// </summary>
+        int Handle = 0;
+        /// <summary>
+        /// 监控开关 
+        /// </summary>
+        private CancellationTokenSource MonitorSwitch;
+        /// <summary>
+        /// Can当前状态
+        /// </summary>
+        private bool CanState = false;
+        /// <summary>
+        /// 获取CAN当前状态
+        /// </summary>
+        /// <returns></returns>
+        public bool GetCanState()
+        {
+            return CanState;
+        }
+
+        /// <summary>
+        /// 虚拟地址
+        /// </summary>
+        private VirtualAddressManage VAM = new VirtualAddressManage();
+
+
+
+        public void Dispose()
+        {
+            Off();
+            GC.Collect();
+            GC.SuppressFinalize(this);
+            ThisObjList.Remove(this);
+        }
+
+        public OperateResult Off()
+        {
+            Depart("Off");
+            try
+            {
+                if (CanState)
+                {
+                    Status = Canlib.canBusOff(Handle); //关闭bus总线
+                    if (Status.Equals(Canlib.canStatus.canOK))
+                    {
+                        //关闭通道
+                        Status = Canlib.canClose(Handle);
+                        if (Status.Equals(Canlib.canStatus.canOK))
+                        {
+                            Handle = 0;
+                            CanState = false;
+                            return Break("Off", true);
+                        }
+                        else
+                        {
+                            return Break("Off", false, "关闭CAN通道失败");
+                        }
+                    }
+                    else
+                    {
+                        return Break("Off", false, "关闭BUS总线失败");
+                    }
+                }
+                else
+                {
+                    return Break("Off", false, "CAN通道未打开");
+                }
+            }
+            catch (Exception ex)
+            {
+                return Break("Off", false, ex.Message);
+            }
+        }
+
+        public Task<OperateResult> OffAsync()
+        {
+            return Task.Run(() => Off());
+        }
+
+        public OperateResult On()
+        {
+            Depart("On");
+            try
+            {
+                if (!CanState)
+                {
+                    try
+                    {
+                        //初始化文件库
+                        Canlib.canInitializeLibrary();
+                    }
+                    catch
+                    {
+                        return Break("On", false, "驱动尚未安装");
+                    }
+                    //打开CAN通道,channelNumber为通道编号,一般为0,handle为返回的句柄
+                    Handle = Canlib.canOpenChannel(basics.CanChannel, Canlib.canOPEN_ACCEPT_VIRTUAL);
+                    //设置波特率
+                    //先判断CAN波特率
+                    Status = Canlib.canSetBusParams(Handle, (int)basics.BaudRate, 0, 0, 0, 0);
+
+                    if (Status.Equals(Canlib.canStatus.canOK))
+                    {
+                        //打开bus总线
+                        Status = Canlib.canBusOn(Handle);
+                        if (Status.Equals(Canlib.canStatus.canOK))
+                        {
+                            //初始化监控开关
+                            MonitorSwitch = new CancellationTokenSource();
+                            //设置CAN状态
+                            CanState = true;
+                            return Break("On", true);
+                        }
+                        else
+                        {
+                            return Break("On", false, "打开BUS总线失败");
+                        }
+                    }
+                    else
+                    {
+                        return Break("On", false, "设置CAN通道波特率失败");
+                    }
+
+                }
+                else
+                {
+                    return Break("On", false, "CAN通信已打开");
+                }
+            }
+            catch (Exception ex)
+            {
+                return Break("On", false, ex.Message);
+            }
+        }
+
+        public Task<OperateResult> OnAsync()
+        {
+            return Task.Run(() => On());
+        }
+
+        public OperateResult Read(Address address)
+        {
+            Depart("Read");
+            try
+            {
+                if (CanState)
+                {
+                    //节点数据
+                    ConcurrentDictionary<string, AddressValue> param = new ConcurrentDictionary<string, AddressValue>();
+
+                    foreach (var item in address.AddressArray)
+                    {
+
+                        //是不是虚拟地址
+                        bool IsVA = false;
+                        //初始化虚拟地址
+                        VAM.InitVirtualAddress(item, out IsVA);
+
+                        if (IsVA)
+                        {
+                            string? Value = VAM.Read(item);
+
+                            //数据处理
+                            AddressValue addressValue = YSAI.Core.data.AddressHandler.Execute(item, Value);
+
+                            //数据添加
+                            param.AddOrUpdate(item.AddressName, addressValue, (k, v) => addressValue);
+                        }
+                        else
+                        {
+                            int id;  //CANID
+                            byte[] msg = new byte[64];  //数据
+                            int dlc;   //数据长度
+                            int flag;  //标志
+                            long time;  //时间
+                            Status = Canlib.canRead(Handle, out id, msg, out dlc, out flag, out time);
+                            if (Status.Equals(Canlib.canStatus.canOK) && dlc > 0)
+                            {
+                                msg = ByteTool.ByteTrimEnd(msg);
+
+                                CanData.Event candata = new CanData.Event() { CanID = id, ByteData = msg, StrByteData = ByteTool.HexToStr(msg), Flag = flag, Length = dlc, Time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(time).ToLocalTime() };
+
+
+                                string? Value = candata.StrByteData;
+
+                                //数据处理
+                                AddressValue addressValue = YSAI.Core.data.AddressHandler.Execute(item, Value);
+
+                                //数据添加
+                                param.AddOrUpdate(item.AddressName, addressValue, (k, v) => addressValue);
+
+                            }
+                            else
+                            {
+                                if (Status.Equals(Canlib.canStatus.canERR_HARDWARE))
+                                {
+                                    Off();
+                                    return Break("Read", false, "CAN通道被强制关闭");
+                                }
+                            }
+                        }
+
+                    }
+                    if (param.Count > 0)
+                    {
+                        return Break("Read", true, RData: param, RType: Core.@enum.ResultType.KeyValue);
+                    }
+                    else
+                    {
+                        return Break("Read", false, "读取失败");
+                    }
+                }
+                else
+                {
+                    return Break("Read", false, "CAN通道未打开");
+                }
+            }
+            catch (Exception ex)
+            {
+                return Break("Read", false, ex.Message);
+            }
+        }
+
+        public Task<OperateResult> ReadAsync(Address address)
+        {
+            throw new NotImplementedException();
+        }
+
+        public OperateResult Write(ConcurrentDictionary<int, byte[]> Values)
+        {
+            Depart("On");
+            try
+            {
+                if (CanState)
+                {
+                    List<string> FailMessage = new List<string>();
+                    foreach (var item in Values)
+                    {
+                        Status = Canlib.canWrite(Handle, item.Key, item.Value, item.Value.Length, 0);
+                        if (!Status.Equals(Canlib.canStatus.canOK))
+                        {
+                            FailMessage.Add($"[ {item.Key} ] 发送CAN数据失败");
+                        }
+                    }
+                    if (FailMessage.Count > 0)
+                    {
+                        return Break("Write", false, "一个或多个数据发送失败", FailMessage);
+                    }
+                    return Break("Write", true);
+                }
+                else
+                {
+                    return Break("Write", false, "CAN通信尚未打开");
+                }
+            }
+            catch (Exception ex)
+            {
+                return Break("On", false, ex.Message);
+            }
+        }
+
+        public Task<OperateResult> WriteAsync(ConcurrentDictionary<int, byte[]> Values)
+        {
+            return Task.Run(() => Write(Values));
+        }
+    }
+}

+ 9 - 0
src/YSAI.DAQ/YSAI.Can/YSAI.Can.csproj

@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>

BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.CanLib.dll


Fichier diff supprimé car celui-ci est trop grand
+ 3564 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.CanLib.xml


BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvaDbLib.dll


Fichier diff supprimé car celui-ci est trop grand
+ 1244 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvaDbLib.xml


BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvlcLib.dll


+ 722 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvlcLib.xml

@@ -0,0 +1,722 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Kvaser.KvlcLib</name>
+    </assembly>
+    <members>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.MAX_STRING_SIZE">
+            <summary>Maximum size of strings.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.MAX_DATA_SIZE">
+            <summary>Maximum size of data buffers.</summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx">
+            <summary>A CAN message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx.id">
+            <summary>The message identifier.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx.timeStamp">
+            <summary>The timestamp in units of 1 nanosecond.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx.channel">
+            <summary>The device channel on which the message arrived, 0,1,... </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx.dlc">
+            <summary>  The length of the message. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx.flags">
+            <summary>Message flags.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogMsgEx.data">
+            <summary>Message data (64 bytes) </summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.KvlcLibDLL.kvmLogRtcClockEx">
+            <summary>A RTC clock message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogRtcClockEx.calendarTime">
+            <summary>RTC date, seconds since 1970-01-01T00:00:00+00:00 (UTC) </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogRtcClockEx.timeStamp">
+            <summary>The timestamp in units of 1 nanosecond. </summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.KvlcLibDLL.kvmLogTriggerEx">
+            <summary>A trigger message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogTriggerEx.type">
+            <summary>The type of trigger </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogTriggerEx.preTrigger">
+            <summary>Pretrigger time in milliseconds.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogTriggerEx.postTrigger">
+            <summary>Posttrigger time in milliseconds.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogTriggerEx.trigMask">
+            <summary>Bitmask with all active triggers. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogTriggerEx.timeStamp">
+            <summary>The timestamp in units of 1 nanosecond.</summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx">
+            <summary>A version message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.lioMajor">
+            <summary>lioMajor</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.lioMinor">
+            <summary>lioMinor</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.fwMajor">
+            <summary>fwMajor</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.fwMinor">
+            <summary>fwMinor</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.fwBuild">
+            <summary>fwBuild</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.serialNumber">
+            <summary>serialNumber</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.eanHi">
+            <summary>eanHi</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogVersionEx.eanLo">
+            <summary>eanLo</summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx">
+            <summary>The union of events</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx.type">
+            <summary>Event types in log </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx.msg">
+            <summary>A CAN message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx.rtc">
+            <summary>An RTC message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx.trig">
+            <summary>kvmLogTriggerEx</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx.ver">
+            <summary>A version message.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.KvlcLibDLL.kvmLogEventEx.raw">
+            <summary>Raw data in a array.</summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.Kvlclib">
+            <summary>The kvlclib is used for converting Kvaser Memorator log files. </summary>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.AddDatabase(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvadbLib.Kvadblib.Hnd,System.Int32)">
+            <summary>Add a database handle. Output formats with the property <see cref="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SIGNAL_BASED"/> will match events against all entries in the database and write signals to the output file.
+            <para>&#160;</para>
+            Note. Data conversion is faster with fewer signals and fewer active channels.
+            </summary>.
+            <param name="hnd">An open handle to a converter. </param>
+            <param name="dbHandle">A database handle created with kvadblib. </param>
+            <param name="channelMask">Bitmask with active channels.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.AddDatabaseFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String,System.Int32)">
+            <summary>Add a database file. Output formats with the property <see cref="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SIGNAL_BASED"/> will match events against all entries in the database and write signals to the output file.
+            <para>&#160;</para>
+            Note. Data conversion is faster with fewer signals and fewer active channels.</summary>.
+            <param name="hnd">An open handle to a converter. </param>
+            <param name="filename">String containing database file name. </param>
+            <param name="channelMask">Bitmask with active channels.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.AttachFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String)">
+            <summary>Attach a file to be included in the output file, e.g. used to add a database or a movie to the output.
+            <para>&#160;</para>
+            Note. The output format must support the property <see cref="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_ATTACHMENTS"/>.</summary>.
+            <param name="hnd">An open handle to a converter. </param>
+            <param name="filename">The name of the file to be included in the output.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.ConvertEvent(Kvaser.KvlcLib.Kvlclib.Handle)">
+             <summary>Convert one event from input file and write it to output file.
+            </summary>.
+             <param name="hnd">An open handle to a converter. </param>
+             <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.CreateConverter(Kvaser.KvlcLib.Kvlclib.Handle@,System.String,Kvaser.KvlcLib.Kvlclib.FileFormat)">
+            <summary>Create a new converter.
+            <para>&#160;</para>
+            Note. No more than 128 converter handles can be open at the same time. </summary>.
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="filename">Output filename.</param>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.DeleteConverter(Kvaser.KvlcLib.Kvlclib.Handle)">
+            <summary>Delete a converter and close all files.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.EventCount(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32@)">
+            <summary>Get the estimated number of remaining events in the input file. This can be useful for displaying progress during conversion.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            /// <param name="count">The estimated number of remaining events in the input file.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.EventCountEx(Kvaser.KvlcLib.Kvlclib.Handle,System.Int64@)">
+            <summary>Get the estimated number of remaining events in the input file. This can be useful for displaying progress during conversion.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            /// <param name="count">The estimated number of remaining events in the input file.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.FeedLogEvent(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvmLib.Kvmlib.Log)">
+            <summary>Feed one event to the converter. Used when reading log files directly from device.
+            <para>&#160;</para>
+            Note. kvlcFeedLogEvent cannot be used along side a set input file, see <see cref="M:Kvaser.KvlcLib.Kvlclib.SetInputFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String,Kvaser.KvlcLib.Kvlclib.FileFormat)"/>.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="event">An event that matches the selected input format.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success, <see cref="F:Kvaser.KvlcLib.Kvlclib.Status.Fail"/> if an input file has been set, see <see cref="M:Kvaser.KvlcLib.Kvlclib.SetInputFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String,Kvaser.KvlcLib.Kvlclib.FileFormat)"/>.
+            Else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.FeedNextFile(Kvaser.KvlcLib.Kvlclib.Handle)">
+            <summary>Notify the converter that next event in <see cref="M:Kvaser.KvlcLib.Kvlclib.FeedLogEvent(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvmLib.Kvmlib.Log)"/> will come from another file.
+            Used when reading log files directly from device.
+            E.g.use this function with <see cref="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MEMO_LOG"/> when using KVMLIB to read events from a Kvaser Memorator connected to USB.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.FeedSelectFormat(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.FileFormat)">
+             <summary>Select feed format. Used when reading log files directly from device.
+            E.g.use this function with <see cref="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MEMO_LOG"/> when using KVMLIB to read events from a Kvaser Memorator connected to USB.
+             </summary>
+             <param name="hnd">An open handle to a converter.</param>
+             <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+             <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetDlcMismatchList(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32[]@,System.Int32[]@,System.Int32[]@)">
+            <summary>Return sets of mismatching msg id and dlc.</summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="MsgIds">An array to hold the returned message ids </param>
+            <param name="MsgDlc">An array to hold the returned message dlc </param>
+            <param name="MsgOccurence">An array to hold the returned number of occurence of each mismatch </param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetErrorText(Kvaser.KvlcLib.Kvlclib.Status,System.String@)">
+            <summary>Convert a <see cref="T:Kvaser.KvlcLib.Kvlclib.Status"/> error code to a text.
+            </summary>
+            <param name="error">The error code to convert. </param>
+            <param name="buf">Error Text.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetFirstReaderFormat(Kvaser.KvlcLib.Kvlclib.FileFormat@)">
+            <summary>Get the first supported input format.
+            </summary>
+            <param name="format">First input format.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetFirstWriterFormat(Kvaser.KvlcLib.Kvlclib.FileFormat@)">
+            <summary>Get the first supported output format.
+            </summary>
+            <param name="format">First output  format.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetNextWriterFormat(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.FileFormat@)">
+            <summary>Get the next supported output format.
+            </summary>
+            <param name="currentFormat">Current output format. </param>
+            <param name="nextFormat">Next output format. Zero if no more formats are to be found.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetNextReaderFormat(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.FileFormat@)">
+            <summary>Get the next supported input format.
+            </summary>
+            <param name="currentFormat">Current input format. </param>
+            <param name="nextFormat">Next input format. Zero if no more formats are to be found.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetOutputFilename(Kvaser.KvlcLib.Kvlclib.Handle,System.String@)">
+             <summary>Get the filename of the current output file.
+            This function can be used in conjunction with <see cref="M:Kvaser.KvlcLib.Kvlclib.IsOutputFilenameNew(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32@)"/> to report current filename when splitting output into multiple files.
+             </summary>
+             <param name="hnd">An open handle to a converter.</param>
+             <param name="filename">Output filename as string</param>
+             <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetProperty(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)">
+            <summary>Get a property value.</summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetProperty(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.Property,System.Char@)">
+            <summary>Get a property value.</summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetProperty(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.Property,System.Int64@)">
+            <summary>Get a property value.</summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetReaderDescription(Kvaser.KvlcLib.Kvlclib.FileFormat,System.String@)">
+            <summary>Get output converter file description.
+            </summary>
+            <param name="format">Output format.  </param>
+            <param name="str">Description</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetReaderExtension(Kvaser.KvlcLib.Kvlclib.FileFormat,System.String@)">
+            <summary>Get input converter file extension.
+            </summary>
+            <param name="format">input format.</param>
+            <param name="str">Extension</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetReaderName(Kvaser.KvlcLib.Kvlclib.FileFormat,System.String@)">
+            <summary>Get input converter name.
+            </summary>
+            <param name="format">Output format.</param>
+            <param name="str">Converter Name</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetReaderPropertyDefault(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)">
+            <summary>Get the default value for a reader property.</summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetReaderPropertyDefault(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Char@)">
+            <summary>Get the default value for a reader property.</summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetReaderPropertyDefault(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int64@)">
+            <summary>Get the default value for a reader property.</summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetUTF8Bytes(System.String)">
+            <summary>
+                Create a byte[] containing the utf-8 representation of string stringValue and a terminating'\0' character.
+            </summary>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetUTF8String(System.Byte[])">
+            <summary>
+                Convert byte[] contents to a string object using the utf-8 decoder.
+            </summary>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetVersion(System.Int32@,System.Int32@,System.Int32@)">
+            <summary>Returns the version of the kvlcvlib DLL.</summary>
+            <param name="major">Major version number.</param>
+            <param name="minor">Minor version number.</param>
+            <param name="build">Build version number.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetWriterDescription(Kvaser.KvlcLib.Kvlclib.FileFormat,System.String@)">
+            <summary>Get output converter file description.
+            </summary>
+            <param name="format">Output format.</param>
+            <param name="str">Description</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetWriterExtension(Kvaser.KvlcLib.Kvlclib.FileFormat,System.String@)">
+            <summary>Get output converter file extension.
+            </summary>
+            <param name="format">Output format.</param>
+            <param name="str"> Writer extension</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetWriterPropertyDefault(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)">
+            <summary>Get the default value for a writer property.</summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetWriterPropertyDefault(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Char@)">
+            <summary>Get the default value for a writer property.</summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetWriterPropertyDefault(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int64@)">
+            <summary>Get the default value for a writer property.</summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.GetWriterName(Kvaser.KvlcLib.Kvlclib.FileFormat,System.String@)">
+            <summary>Get output converter name.
+            </summary>
+            <param name="format">Output format.</param>
+            <param name="str">Converter Name</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.IsDataTruncated(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32@)">
+            <summary>Get truncation status.
+            Truncation occurs when the selected output converter can't write all bytes in a data frame to file.
+            This can happen if CAN FD data is extracted to a format that only supports up to 8 data bytes, e.g. <see cref="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_KME40"/>.
+            It can also happen if <see cref="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_LIMIT_DATA_BYTES"/> is set to limit the number of data bytes in output.
+            </summary>
+            <param name="hnd">An open handle to a converter. </param>
+            <param name="truncated">Not zero if data is truncated.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.IsDlcMismatch(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32@)">
+            <summary>Return dlc mismatch status (i.e. CAN id is found in db but it has mismatching dlc)</summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="mismatch">Not zero if a mismatch occured.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.IsOutputFilenameNew(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32@)">
+            <summary>Check if the converter has created a new file. It is only true once after a new file has been created. Used when splitting output into multiple files.
+            </summary>
+            <param name="hnd">An open handle to a converter. </param>
+            <param name="updated">Not zero if a new file has been created.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.IsOverrunActive(Kvaser.KvlcLib.Kvlclib.Handle,System.Int32@)">
+            <summary>Get overrun status.
+            Overruns can occur during logging with a Memorator if the bus load exceeds the logging capacity.This is very unusual, but can occur if a Memorator runs complex scripts and triggers.
+            </summary>
+            <param name="hnd">An open handle to a converter. </param>
+            <param name="overrun">Not zero if an overrun occurred.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.IsPropertySupported(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)">
+            <summary>Check if property is supported by output format.
+            </summary>
+            <param name="format">Output format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="supported">Not zero if format supports property.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.NextInputFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String)">
+            <summary>Select next input file.
+            <para>&#160;</para>
+            Note. It is the responsibility of the caller to arrange multiple files in correct time stamp order. Overlapping time stamps are not handled.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="filename">Next input filename.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.ResetDataTruncated(Kvaser.KvlcLib.Kvlclib.Handle)">
+            <summary>Reset truncation status.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.ResetDlcMismatch(Kvaser.KvlcLib.Kvlclib.Handle)">
+            <summary>Reset dlc mismatch status</summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.ResetOverrunActive(Kvaser.KvlcLib.Kvlclib.Handle)">
+            <summary>Reset overrun status.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.SetInputFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String,Kvaser.KvlcLib.Kvlclib.FileFormat)">
+            <summary>Select input file.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="filename">Input filename.</param>
+            <param name="format">Input format, use <see cref="T:Kvaser.KvlcLib.Kvlclib.FileFormat"/>.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.SetProperty(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.Property,System.Int32)">
+            <summary>Set a property value.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.SetProperty(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.Property,System.Char)">
+            <summary>Set a property value.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvlcLib.Kvlclib.SetProperty(Kvaser.KvlcLib.Kvlclib.Handle,Kvaser.KvlcLib.Kvlclib.Property,System.Int64)">
+            <summary>Set a property value.
+            </summary>
+            <param name="hnd">An open handle to a converter.</param>
+            <param name="property">Property, use <see cref="T:Kvaser.KvlcLib.Kvlclib.Property"/>. </param>
+            <param name="value">Property value.</param>
+            <returns><see cref="F:Kvaser.KvlcLib.Kvlclib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="T:Kvaser.KvlcLib.Kvlclib.Handle">
+            <summary>
+             Handle to a converter created by <see cref="M:Kvaser.KvlcLib.Kvlclib.CreateConverter(Kvaser.KvlcLib.Kvlclib.Handle@,System.String,Kvaser.KvlcLib.Kvlclib.FileFormat)"/>
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Handle.handle">
+            <summary>Handle</summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.Kvlclib.FileFormat">
+            <summary>
+                Format used for input and output
+                /// <para>&#160;</para>
+                Note. Not all formats are valid as both output and input format.
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_KME24">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_KME25">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_VECTOR_ASC">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_CSV">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_PLAIN_ASC">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MEMO_LOG">
+            <summary>Input (internal device logfile format). </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_KME40">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_VECTOR_BLF">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_KME50">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_CSV_SIGNAL">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MDF">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MATLAB">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_J1587">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_J1587_ALT">
+            <summary>Obsolete. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_FAMOS">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MDF_SIGNAL">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MDF_4X">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_MDF_4X_SIGNAL">
+            <summary>Output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_VECTOR_BLF_FD">
+            <summary>Input and output file format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_XCP">
+            <summary>Not supported. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_FAMOS_XCP">
+            <summary>Not supported. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.FileFormat.FILE_FORMAT_DEBUG">
+            <summary>Reserved for debug. </summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.Kvlclib.Status">
+            <summary>
+                Status return codes
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.OK">
+            <summary>OK.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.Fail">
+            <summary>Generic error.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_PARAM">
+            <summary>Error in supplied parameters.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.EOF">
+            <summary>End of input file reached.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_NOT_IMPLEMENTED">
+            <summary>Not implemented.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_FILE_ERROR">
+            <summary>File I/O error.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_FILE_EXISTS">
+            <summary>Output file already exists.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_INTERNAL_ERROR">
+            <summary>Unhandled internal error.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_NULL_POINTER">
+            <summary>Unexpected null pointer.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_FILE_TOO_LARGE">
+            <summary>File size too large for specified format.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_TYPE_MISMATCH">
+            <summary>Supplied parameter has incorrect type.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_NO_FREE_HANDLES">
+            <summary>Too many open KvlcHandle hnds.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_NO_INPUT_SELECTED">
+            <summary>Missing call to kvlcSetInputFile or kvlcFeedSelectFormat.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_CONVERTING">
+            <summary>Call failed since conversion is running.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_BUFFER_SIZE">
+            <summary>The supplied buffer is too small to hold the result.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_INVALID_LOG_EVENT">
+            <summary>Event is unknown to converter.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_NO_TIME_REFERENCE">
+            <summary>Required timestamp missing.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_TIME_DECREASING">
+            <summary>Decreasing time between files.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_MIXED_ENDIANESS">
+            <summary>Event is unknown to converter.</summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Status.ERR_RESULT_TOO_BIG">
+            <summary>Result is too big for an out-parameter.</summary>
+        </member>
+        <member name="T:Kvaser.KvlcLib.Kvlclib.Property">
+            <summary>
+                Converter properties used in the output format.
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_START_OF_MEASUREMENT">
+            <summary>(int) Use start of measurement as time reference. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_FIRST_TRIGGER">
+            <summary>(int) Use first trigger as time reference. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_USE_OFFSET">
+            <summary>(int) Use offset as time reference. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_OFFSET">
+            <summary>(time_int64) Time reference offset. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_CHANNEL_MASK">
+            <summary>(unsigned int) Bitmask of the channels that should be used during conversion. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_HLP_J1939">
+            <summary>(int) Interpret events as J1939. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_CALENDAR_TIME_STAMPS">
+            <summary>(int) Write calendar time stamps. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_WRITE_HEADER">
+            <summary>(int) Write informational header. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SEPARATOR_CHAR">
+            <summary>(char) Use token as separator. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_DECIMAL_CHAR">
+            <summary>(char) Use token as decimal separator. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_ID_IN_HEX">
+            <summary>(int) Write id in hexadecimal format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_DATA_IN_HEX">
+            <summary>(int) Write data in hexadecimal format. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_NUMBER_OF_TIME_DECIMALS">
+            <summary>(int) Number of time decimals (0-9). </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_NAME_MANGLING">
+            <summary>(int) Make signal names safe for use in Matlab. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_FILL_BLANKS">
+            <summary>(int) Propagate values down to next row in csv-files. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SHOW_UNITS">
+            <summary>(int) Show units on their own row. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_ISO8601_DECIMALS">
+            <summary>(int) Number of time decimals (0-9) to print in the calendar timestamps using ISO8601. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_MERGE_LINES">
+            <summary>(int) Merge two lines if their signal values are equal. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_RESAMPLE_COLUMN">
+            <summary>(int) Only print a line when the given column has been accessed. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_VERSION">
+            <summary>(int) File format version. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SHOW_COUNTER">
+            <summary>(int) Add a counter to the output. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_CROP_PRETRIGGER">
+            <summary>(int) Crop pre-triggers. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_ENUM_VALUES">
+            <summary>(int) Replace integer values in signals with strings from database. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SIZE_LIMIT">
+            <summary>(unsigned int) Maximum file size in megabytes before starting a new output file. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_TIME_LIMIT">
+            <summary>(unsigned int) Maximum delta time in seconds between first and last event before starting a new output file. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_LIMIT_DATA_BYTES">
+            <summary>(int) Number of data bytes that a converter will write. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_CREATION_DATE">
+            <summary>(time_int64) File creation date/time as seconds in standard UNIX format. Used in file headers if not zero. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_OVERWRITE">
+            <summary>(int) Overwrite existing output files. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_TIMEZONE">
+            <summary>(int) Timezone for absolute timestamps. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_FULLY_QUALIFIED_NAMES">
+            <summary>(int) Write fully qualified names. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_NUMBER_OF_DATA_DECIMALS">
+            <summary>(int) Number of data decimals (0-9). </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SIGNAL_BASED">
+            <summary>Writes signals and not data frames. Used only with <see cref="M:Kvaser.KvlcLib.Kvlclib.IsPropertySupported(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)"/>. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_SHOW_SIGNAL_SELECT">
+            <summary>Requires a database. Used only with  <see cref="M:Kvaser.KvlcLib.Kvlclib.IsPropertySupported(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)"/>. </summary>
+        </member>
+        <member name="F:Kvaser.KvlcLib.Kvlclib.Property.PROPERTY_ATTACHMENTS">
+            <summary>Can attach files to converted data. Use <see cref="M:Kvaser.KvlcLib.Kvlclib.AttachFile(Kvaser.KvlcLib.Kvlclib.Handle,System.String)"/> to add a file. Used only with <see cref="M:Kvaser.KvlcLib.Kvlclib.IsPropertySupported(Kvaser.KvlcLib.Kvlclib.FileFormat,Kvaser.KvlcLib.Kvlclib.Property,System.Int32@)"/>. </summary>
+        </member>
+    </members>
+</doc>

BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvmLib.dll


+ 751 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvmLib.xml

@@ -0,0 +1,751 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Kvaser.KvmLib</name>
+    </assembly>
+    <members>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.MAX_STRING_SIZE">
+            <summary>Maximum size of strings.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx">
+            <summary>A CAN message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx.id">
+            <summary>The message identifier.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx.timeStamp">
+            <summary>The timestamp in units of 1 nanosecond.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx.channel">
+            <summary>The device channel on which the message arrived, 0,1,... </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx.dlc">
+            <summary>  The length of the message. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx.flags">
+            <summary>Message flags.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogMsgEx.data">
+            <summary>Message data (64 bytes) </summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.KvmLibDLL.kvmLogRtcClockEx">
+            <summary>A RTC clock message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogRtcClockEx.calendarTime">
+            <summary>RTC date, seconds since 1970-01-01T00:00:00+00:00 (UTC) </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogRtcClockEx.timeStamp">
+            <summary>The timestamp in units of 1 nanosecond. </summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.KvmLibDLL.kvmLogTriggerEx">
+            <summary>A trigger message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogTriggerEx.type">
+            <summary>The type of trigger </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogTriggerEx.preTrigger">
+            <summary>Pretrigger time in milliseconds.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogTriggerEx.postTrigger">
+            <summary>Posttrigger time in milliseconds.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogTriggerEx.trigMask">
+            <summary>Bitmask with all active triggers. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogTriggerEx.timeStamp">
+            <summary>The timestamp in units of 1 nanosecond.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx">
+            <summary>A version message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.lioMajor">
+            <summary>lioMajor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.lioMinor">
+            <summary>lioMinor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.fwMajor">
+            <summary>fwMajor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.fwMinor">
+            <summary>fwMinor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.fwBuild">
+            <summary>fwBuild</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.serialNumber">
+            <summary>serialNumber</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.eanHi">
+            <summary>eanHi</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogVersionEx.eanLo">
+            <summary>eanLo</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx">
+            <summary>The union of events used by <see cref="M:Kvaser.KvmLib.KvmLibDLL.kvmKmeReadEvent(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx@)"/></summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx.type">
+            <summary>Event types in log </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx.msg">
+            <summary>A CAN message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx.rtc">
+            <summary>An RTC message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx.trig">
+            <summary>kvmLogTriggerEx</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx.ver">
+            <summary>A version message.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.KvmLibDLL.kvmLogEventEx.raw">
+            <summary>Raw data in a array.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib">
+            <summary>
+                The Kvmlib is a library for accessing Kvaser Memorator (2nd generation) devices.
+            </summary>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.Close(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Close the connection to the Memorator (device or file) opened with <see cref="M:Kvaser.KvmLib.Kvmlib.DeviceOpen(System.Int32,Kvaser.KvmLib.Kvmlib.Status@,Kvaser.KvmLib.Kvmlib.DeviceType)"/> or <see cref="M:Kvaser.KvmLib.Kvmlib.DeviceMountKmf(Kvaser.KvmLib.Kvmlib.Handle)"/>. The handle becomes invalid.</summary>
+            <param name="h">An open handle to a converter.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceDiskSize(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Get disk size, reported in number of (512 byte) sectors.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="diskSize">Disk size in number of (512 byte) sectors.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceDiskStatus(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Check if the SD memory card is present.
+            <para>&#160;</para>
+            Note. This function is not supported by all devices.
+            </summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="present">Non-zero means that SD memory card is present.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceFlashLeds(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Flash all LEDs on the opened Memorator device</summary>
+            <param name="h">An open kvmHandle.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceFormatDisk(Kvaser.KvmLib.Kvmlib.Handle,System.Int32,System.Int32,System.Int32)">
+            <summary>Format the SD memory card in a connected Memorator.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="filesystem">A filesystem code, <see cref="T:Kvaser.KvmLib.Kvmlib.KvmFS"/>, specifying the type of filesystem to format to.</param>
+            <param name="reserveSpace">Space to reserve for user files, in MB.</param>
+            <param name="dbaseSpace">Space to reserve for database files, in MB.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceGetRTC(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Get date and time from the RTC chip.  The time is returned in standard unix time(number of seconds since 1970-01-01T00:00:00+00:00).
+            Only for device handles.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="t">Time in Unix time.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceGetSerialNumber(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Get serial number related to the Memorator handle.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="serial">Serial number of connected device.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceGetSoftwareInfo(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.VersionInfo,System.Int32@,System.Int32@,System.Int32@,System.Int32@)">
+            <summary>Get serial number related to the Memorator handle.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="itemCode">An item code specifying the type of version to get. <see cref="T:Kvaser.KvmLib.Kvmlib.VersionInfo"/></param>
+            <param name="major">Major version number.</param>
+            <param name="minor">Minor version number.</param>
+            <param name="build">Build number.</param>
+            <param name="flags">For internal use only.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceMountKmf(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Mount the log area on the SD card on a connected Kvaser Memorator.
+            <para>&#160;</para>
+            Note.  Must be called after <see cref="M:Kvaser.KvmLib.Kvmlib.DeviceOpen(System.Int32,Kvaser.KvmLib.Kvmlib.Status@,Kvaser.KvmLib.Kvmlib.DeviceType)"/> before any subsequent log operations are called.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceMountKmfEx(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@,System.Int32@)">
+            <summary>Mount the log area on the SD card on a connected Kvaser Memorator and return the logger data format(LDF) version.
+            <para>&#160;</para>
+            Note. Must be called after <see cref="M:Kvaser.KvmLib.Kvmlib.DeviceOpen(System.Int32,Kvaser.KvmLib.Kvmlib.Status@,Kvaser.KvmLib.Kvmlib.DeviceType)"/> before any subsequent log operations are called.
+            </summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="ldfMajor">Major LDF version kvmLDF_MAJOR_xxx.</param>
+            <param name="ldfMinor">Minor LDF version.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceOpen(System.Int32,Kvaser.KvmLib.Kvmlib.Status@,Kvaser.KvmLib.Kvmlib.DeviceType)">
+            <summary>Connect to a Memorator device and obtain a handle for subsequent device operations.
+            The argument cardNr is the Card Number property (decreased by one) displayed in Kvaser Hardware.
+            </summary>
+            <param name="cardNr">Card number.</param>
+            <param name="status"><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</param>
+            <param name="deviceType"><see cref="T:Kvaser.KvmLib.Kvmlib.DeviceType"/></param>
+            <returns> Returns an open handle to a Memorator on success.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.DeviceSetRTC(Kvaser.KvmLib.Kvmlib.Handle,System.Int32)">
+            <summary>Set date and time in the RTC. The time is in standard Unix
+            time(number of seconds since 1970-01-01T00:00:00+00:00).
+            Only for device handles.
+            </summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="t">Time in Unix time.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.GetErrorText(Kvaser.KvmLib.Kvmlib.Status,System.String@)">
+            <summary>Convert a <see cref="T:Kvaser.KvmLib.Kvmlib.Status"/> error code to a text.
+            </summary>
+            <param name="error">The error code to convert. </param>
+            <param name="buf">Error Text.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.GetVersion(System.Int32@,System.Int32@,System.Int32@)">
+            <summary>Returns the version of the kvmlib DLL.</summary>
+            <param name="major">Major version number.</param>
+            <param name="minor">Minor version number.</param>
+            <param name="build">Build version number.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success else Status.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.GetUTF8Bytes(System.String)">
+            <summary>
+                Create a byte[] containing the utf-8 representation of string stringValue and a terminating'\0' character.
+            </summary>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.GetUTF8String(System.Byte[])">
+            <summary>
+                Convert byte[] contents to a string object using the utf-8 decoder.
+            </summary>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.Initialize">
+            <summary>This function must be called before any other functions are used. It will initialize the memolib library.
+            </summary>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeCloseFile(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Close an open KME file opened with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeOpenFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/> or created with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeCreateFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/>. The handle becomes invalid.
+            </summary>
+            <param name="h">An open handle to a KME file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeCountEvents(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Close an open KME file opened with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeOpenFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/> or created with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeCreateFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/>. The handle becomes invalid.
+            </summary>
+            <param name="h">An open handle to a KME file.</param>
+            <param name="eventCount">Approximate number of events in a KME file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeCountEventsEx(Kvaser.KvmLib.Kvmlib.Handle,System.Int64@)">
+            <summary>Close an open KME file opened with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeOpenFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/> or created with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeCreateFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/>. The handle becomes invalid.
+            </summary>
+            <param name="h">An open handle to a KME file.</param>
+            <param name="eventCount">Approximate number of events in a KME file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeCreateFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)">
+            <summary> Open a KME file for writing and obtain a handle for subsequent operations.
+             Note that <see cref="M:Kvaser.KvmLib.Kvmlib.KmeCreateFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/> will overwrite any existing file and that
+            <see cref="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME24"/> and <see cref="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME25"/> are deprecated formats. Please
+            use <see cref="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME40"/>.</summary>
+            <param name="filename">The full path and name of the KME file, e.g. C:\\temp\\myfile.kme</param>
+            <param name="status"><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</param>
+            <param name="filetype">FILE_TYPE_xxx</param>
+            <returns>Returns an open handle to a KME file on success.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeOpenFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)">
+            <summary>Open a KME file for reading and obtain a handle for subsequent operations.</summary>
+            <param name="filename">The full path and name of the KME file, e.g. C:\\temp\\myfile.kme</param>
+            <param name="status"><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</param>
+            <param name="filetype">FILE_TYPE_xxx</param>
+            <returns>Returns an open handle to a KME file on success.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeReadEvent(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.Log@)">
+            <summary>Read an event from a KME file opened with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeOpenFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/>.</summary>
+            <param name="h">An open handle to a KME file.</param>
+            <param name="e">Event from a KME file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success,
+            <see cref="F:Kvaser.KvmLib.Kvmlib.Status.ERR_NOLOGMSG"/> on EOF,
+             Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeScanFileType(System.String,System.Int32@)">
+            <summary> Open a KME file and obtain the file format type.</summary>
+            <param name="filename">The full path and name of the KME file, e.g. C:\\temp\\myfile.kme</param>
+            <param name="filetype">FILE_TYPE_xxx</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmeWriteEvent(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.Log)">
+            <summary>Write an event to a KME file created with <see cref="M:Kvaser.KvmLib.Kvmlib.KmeCreateFile(System.String,Kvaser.KvmLib.Kvmlib.Status@,System.Int32)"/>.</summary>
+            <param name="h">An open handle to a KME file.</param>
+            <param name="e">Event to write.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfEraseDbaseFile(Kvaser.KvmLib.Kvmlib.Handle,System.Int32)">
+            <summary>Erase the database file.</summary>
+            <param name="h">An open handle to a KME file.</param>
+            <param name="filenumber">Not Implemented</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfGetDbaseFile(Kvaser.KvmLib.Kvmlib.Handle,System.String,System.String@)">
+            <summary>Read the database file. The database will be extracted to path and the name of the created file copied to filenamebuf.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="path">The path where the database file will be stored.</param>
+            <param name="filenamebuf">The filename of the database.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfGetUsage(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@,System.Int32@)">
+            <summary>Get disk usage statistics, reported in number of (512 byte) sectors.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="totalSectorCount">Total number of sectors devoted for logging</param>
+            <param name="usedSectorCount">Number of logging sectors used.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfOpen(System.String,Kvaser.KvmLib.Kvmlib.Status@,Kvaser.KvmLib.Kvmlib.DeviceType)">
+            <summary>Open a KMF file on a hard disk or SD card reader and obtain a handle for subsequent operations and return
+            the logger data format(LDF) version. <see cref="T:Kvaser.KvmLib.Kvmlib.DeviceType"/> is the device type that generated the file.
+            <para>&#160;</para>
+            Note: Only the path of the argument filename is used. This function will then look for all relevantly
+            named files(e.g.LOG00000.KMF, LOG00001.KMF...) in the directory specified by this path. </summary>
+            <param name="filename">KMF filename.</param>
+            <param name="status"><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</param>
+            <param name="deviceType"><see cref="T:Kvaser.KvmLib.Kvmlib.DeviceType"/></param>
+            <returns>Returns an open handle to a Memorator on success, otherwise INVALID_HANDLE_VALUE.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfOpenEx(System.String,Kvaser.KvmLib.Kvmlib.Status@,Kvaser.KvmLib.Kvmlib.DeviceType,System.Int32@,System.Int32@)">
+            <summary>Open a KMF file on a hard disk or SD card reader and obtain a handle for subsequent operations and return
+            the logger data format(LDF) version. <see cref="T:Kvaser.KvmLib.Kvmlib.DeviceType"/> is the device type that generated the file.
+            <para>&#160;</para>
+            Note: Only the path of the argument filename is used. This function will then look for all relevantly
+            named files(e.g.LOG00000.KMF, LOG00001.KMF...) in the directory specified by this path. </summary>
+            <param name="filename">KMF filename.</param>
+            <param name="status"><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</param>
+            <param name="deviceType">kvmDEVICE_xxx</param>
+            <param name="ldfMajor">Major LDF version kvmLDF_MAJOR_xxx.</param>
+            <param name="ldfMinor">Minor LDF version.</param>
+            <returns>Returns an open handle to a Memorator on success, otherwise INVALID_HANDLE_VALUE.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfPutDbaseFile(Kvaser.KvmLib.Kvmlib.Handle,System.String)">
+            <summary>Write the database file.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="filename"> The full path and name of the file, e.g. C:\\temp\\myfile.data
+            Note that the filename will be truncated to an 8.3 filename.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfReadConfig(Kvaser.KvmLib.Kvmlib.Handle,System.Byte[]@)">
+            <summary>Read binary configuration data (param.lif) from a KMF file.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="buf"> The configuration (param.lif)</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfValidate(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Check for errors.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.KmfWriteConfig(Kvaser.KvmLib.Kvmlib.Handle,System.Byte[])">
+            <summary>Write binary configuration data (param.lif) to a KMF file.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="buf"> The configuration (param.lif) to be written</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileDeleteAll(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Delete all log files from a Memorator.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileDismount(Kvaser.KvmLib.Kvmlib.Handle)">
+            <summary>Dismount the log file opened with kvmLogFileMount(). The handle will stay valid.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileGetCount(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Count the number of log files</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="fileCount">The number of log files on disk.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileGetType(Kvaser.KvmLib.Kvmlib.Handle,System.Int32,Kvaser.KvmLib.Kvmlib.LogFileType@)">
+            <summary>Get type of log file</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="fileIndx">Index of the log file.</param>
+            <param name="logFileType"><see cref="F:Kvaser.KvmLib.Kvmlib.LogFileType.ERR"/></param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileGetCreatorSerial(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Get the serialnumber of the interface that created the log file.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="serialNumber">The serialnumber of the interface that created the log file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileGetEndTime(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Get the time of the last event in the log file. The time is returned in standard unix time format(number of seconds since 1970-01-01T00:00:00+00:00).</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="endTime">The time of the last event in the log file (UTC)</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileGetStartTime(Kvaser.KvmLib.Kvmlib.Handle,System.Int32@)">
+            <summary>Get the time of the first event in the log file. The time is returned in standard unix time format(number of seconds since 1970-01-01T00:00:00+00:00).</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="startTime">The time of the first event in the log file (UTC)</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileMount(Kvaser.KvmLib.Kvmlib.Handle,System.Int32,System.Int32@)">
+            <summary>Mount the log file with the specified index. The index starts at 0. The approximate number of events in the log file is returned.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="fileIndx">Index of the log file to open.</param>
+            <param name="eventCount">The approximate number of events in the log file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileMountEx(Kvaser.KvmLib.Kvmlib.Handle,System.Int32,System.Int64@)">
+            <summary>Mount the log file with the specified index. The index starts at 0. The approximate number of events in the log file is returned.</summary>
+            <param name="h">An open kvmHandle.</param>
+            <param name="fileIndx">Index of the log file to open.</param>
+            <param name="eventCount">The approximate number of events in the log file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogFileReadEvent(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.Log@)">
+            <summary>Read an event from a log file opened with <see cref="M:Kvaser.KvmLib.Kvmlib.LogFileMount(Kvaser.KvmLib.Kvmlib.Handle,System.Int32,System.Int32@)"/>. The next call to <see cref="M:Kvaser.KvmLib.Kvmlib.LogFileReadEvent(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.Log@)"/> will read the next event.</summary>
+            <param name="h">An open kvmHandle.</param>
+            /// <param name="e">Event from log file.</param>
+            <returns><see cref="F:Kvaser.KvmLib.Kvmlib.Status.OK"/> if success, Status.ERR_xxx (negative) if failure.</returns>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.Handle">
+            <summary>Kvm  Handle</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Handle.handle">
+            <summary>Kvm  Handle</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.Log">
+            <summary>Log</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.LogMsg">
+            <summary>LogMsg</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogMsg.id">
+            <summary>id</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogMsg.timeStamp">
+            <summary>timeStamp</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogMsg.channel">
+            <summary>channel</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogMsg.dlc">
+            <summary>dlc</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogMsg.flags">
+            <summary>flags</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogMsg.data">
+            <summary>data</summary>
+        </member>
+        <member name="M:Kvaser.KvmLib.Kvmlib.LogMsg.#ctor">
+            <summary>LogMsg</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.LogRtcClock">
+            <summary>LogRtcClock</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogRtcClock.calendarTime">
+            <summary>calendarTime</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogRtcClock.timeStamp">
+            <summary>timeStamp</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.LogTrigger">
+            <summary>LogTrigger</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogTrigger.type">
+            <summary>type</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogTrigger.preTrigger">
+            <summary>preTrigger</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogTrigger.postTrigger">
+            <summary>postTrigger</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogTrigger.trigMask">
+            <summary>trigMask</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogTrigger.timeStamp">
+            <summary>timeStamp</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.LogVersion">
+            <summary>LogVersion</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.lioMajor">
+            <summary>lioMajor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.lioMinor">
+            <summary>lioMinor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.fwMajor">
+            <summary>fwMajor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.fwMinor">
+            <summary>fwMinor</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.fwBuild">
+            <summary>fwBuild</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.serialNumber">
+            <summary>serialNumber</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.eanHi">
+            <summary>eanHi</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogVersion.eanLo">
+            <summary>eanLo</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.DeviceType">
+            <summary> Device type, used to connect to a Memorator device. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.DeviceType.kvmDEVICE_MHYDRA">
+            <summary> Kvaser Memorator (2nd generation) </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.DeviceType.kvmDEVICE_MHYDRA_EXT">
+            <summary> Kvaser Memorator (2nd generation) with extended data capabilities. </summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.KvmFS">
+            <summary>
+               File system used when formatting disk. Used with <see cref="M:Kvaser.KvmLib.Kvmlib.DeviceFormatDisk(Kvaser.KvmLib.Kvmlib.Handle,System.Int32,System.Int32,System.Int32)"/>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.KvmFS.FS_FAT16">
+            <summary>File system fat16.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.KvmFS.FS_FAT32">
+            <summary>File system fat32.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.Status">
+            <summary>
+                Status return codes
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.OK">
+            <summary>OK.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.Fail">
+            <summary>Generic error.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_PARAM">
+            <summary>Error in supplied parameters.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_LOGFILEOPEN">
+            <summary>Can't find/open log file. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_NOSTARTTIME">
+            <summary>Start time not found. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_NOLOGMSG">
+            <summary>No log message found. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_LOGFILEWRITE">
+            <summary>Error writing log file. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.EOF">
+            <summary>End of file found. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_NO_DISK">
+            <summary>No disk found. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_LOGFILEREAD">
+            <summary>Error while reading log file. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_QUEUE_FULL">
+            <summary>Queue is full. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_CRC_ERROR">
+            <summary>CRC check failed. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_SECTOR_ERASED">
+            <summary>Sector unexpectadly erased. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_FILE_ERROR">
+            <summary>File I/O error. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_DISK_ERROR">
+            <summary>General disk error. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_DISKFULL_DIR">
+            <summary>Disk full (directory). </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_DISKFULL_DATA">
+            <summary>Disk full (data). </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_SEQ_ERROR">
+            <summary>Unexpected sequence. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_FILE_SYSTEM_CORRUPT">
+            <summary>File system corrupt. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_UNSUPPORTED_VERSION">
+            <summary>Unsupported version. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_NOT_IMPLEMENTED">
+            <summary>Not implemented. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_FATAL_ERROR">
+            <summary>Fatal error. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_ILLEGAL_REQUEST">
+            <summary>Illegal request. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_FILE_NOT_FOUND">
+            <summary>File not found. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_NOT_FORMATTED">
+            <summary>Disk not formatted. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_WRONG_DISK_TYPE">
+            <summary>Wrong disk type. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_TIMEOUT">
+            <summary>Timeout. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_DEVICE_COMM_ERROR">
+            <summary>Device communication error. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_OCCUPIED">
+            <summary>Device occupied. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_USER_CANCEL">
+            <summary>User abort. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_FIRMWARE">
+            <summary>Firmware error. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_CONFIG_ERROR">
+            <summary>Configuration error. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_WRITE_PROT">
+            <summary>Disk is write protected. </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Status.ERR_RESULT_TOO_BIG">
+            <summary>Result is too big for an out-parameter. </summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.Type">
+            <summary>Log type</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Type.INVALID">
+            <summary>Invalid MEMOLOG type.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Type.CLOCK">
+            <summary>The type used in <see cref="T:Kvaser.KvmLib.Kvmlib.LogRtcClock"/>.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Type.MSG">
+            <summary>The type used in <see cref="T:Kvaser.KvmLib.Kvmlib.LogMsg"/>.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Type.TRIGGER">
+            <summary>The type used in <see cref="T:Kvaser.KvmLib.Kvmlib.LogTrigger"/>.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.Type.VERSION">
+            <summary>The type used in <see cref="T:Kvaser.KvmLib.Kvmlib.LogVersion"/>.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.LogFileType">
+            <summary>
+                Type of log file.
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogFileType.ERR">
+            <summary> A log file containing only error frames, and some frames before and after the error frame.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LogFileType.ALL">
+            <summary> A log file with all frames.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.VersionInfo">
+            <summary>
+               Different types of version information that can be extracted using <see cref="M:Kvaser.KvmLib.Kvmlib.DeviceGetSoftwareInfo(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.VersionInfo,System.Int32@,System.Int32@,System.Int32@,System.Int32@)"/>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.VersionInfo.KVMLIB">
+            <summary>Returns the version of kvmlib.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.VersionInfo.DRIVER">
+            <summary>Returns the used driver version information.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.VersionInfo.FIRMWARE">
+            <summary>Returns the device firmware version information.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.VersionInfo.DRIVER_PRODUCT">
+            <summary>Obsolete. Returns the product version information.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.VersionInfo.CONFIG_VERSION_NEEDED">
+            <summary>Returns the version of the binary format the device requires (param.lif).</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.VersionInfo.CPLD_VERSION">
+            <summary>Obsolete.</summary>
+        </member>
+        <member name="T:Kvaser.KvmLib.Kvmlib.MsgFlags">
+            <summary>
+            The following flags can be found in a <see cref="T:Kvaser.KvmLib.Kvmlib.LogMsg"/> message flags field
+            returned from <see cref="M:Kvaser.KvmLib.Kvmlib.KmeReadEvent(Kvaser.KvmLib.Kvmlib.Handle,Kvaser.KvmLib.Kvmlib.Log@)"/>. All flags and/or combinations of them are
+            meaningful for logged message.
+            </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.RTR">
+            <summary>Message is a remote request</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.STD">
+            <summary>Message has a standard ID</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.EXT">
+            <summary>Message has an extended ID</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.WAKEUP">
+            <summary>Message is a WAKEUP message (SWC hardware.) </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.NERR">
+            <summary>NERR was active during the message (TJA1054 hardware) </summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.ERROR_FRAME">
+            <summary>Message is an error frame</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.TXACK">
+            <summary>Message is a TX ACK (msg is really sent)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.TXRQ">
+            <summary>Message is a TX REQUEST (msg is transfered to the CAN controller chip)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.ERR_OVERRUN">
+            <summary> Message overrun condition occurred.</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.FDMSG_FDF">
+            <summary>Obsolete, use MSGFLAG_FDF instead</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.FDMSG_BRS">
+            <summary>Message is sent/received with bit rate switch (CAN FD)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.MsgFlags.FDMSG_ESI">
+            <summary>Sender of the message is in error passive mode (CAN FD)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME24">
+            <summary>KME file type, a binary file format representing log data.
+            Deprecated</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME25">
+            <summary>KME file type, a binary file format representing log data.
+            Deprecated</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME40">
+            <summary>KME file type, a binary file format representing log data.
+            Kvaser binary format (KME 4.0)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.FILE_TYPE_KME50">
+            <summary>KME file type, a binary file format representing log data.
+            Kvaser binary format (KME 5.0)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LDF_MAJOR_CAN">
+            <summary>Logged data format (LDF) version.
+            Used in Kvaser Memorator (2nd generation)</summary>
+        </member>
+        <member name="F:Kvaser.KvmLib.Kvmlib.LDF_MAJOR_CAN64">
+            <summary>Logged data format (LDF) version.
+            Used in Kvaser Memorator (2nd generation) with extended data capabilities.</summary>
+        </member>
+    </members>
+</doc>

BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvrLib.dll


Fichier diff supprimé car celui-ci est trop grand
+ 1002 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.KvrLib.xml


BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.LinLib.dll


+ 578 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.LinLib.xml

@@ -0,0 +1,578 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Kvaser.LinLib</name>
+    </assembly>
+    <members>
+        <member name="F:Kvaser.LinLib.LinLibDLL.MAX_STRING_SIZE">
+            <summary>Maximum size of strings.</summary>
+        </member>
+        <member name="T:Kvaser.LinLib.Linlib">
+            <summary>
+                The linlib DLL is a library for interacting with the LIN bus.
+            </summary>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linInitializeLibrary">
+            <summary>
+            This function initializes the LIN library and must be called before any other
+            LIN function is called. If this function isn't called, subsequent calls to
+            the other LIN functions will return <see cref="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOTINITIALIZED"/>.
+            <see cref="M:Kvaser.LinLib.Linlib.linOpenChannel(System.Int32,System.Int32)"/>
+            </summary>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linUnloadLibrary">
+            <summary>
+            This function de-initializes the LIN library. After this function is called
+            <see cref="M:Kvaser.LinLib.Linlib.linInitializeLibrary"/> must be called before any other
+            LIN function is called.
+            </summary>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linGetTransceiverData(System.Int32,System.Byte[],System.Byte[],System.Int32@)">
+             <summary>
+             Retrieves the transceiver information for a CAN channel. The application
+             typically uses this call to find out whether a particular CAN channel has a
+             LIN interface connected to it.
+             For a Kvaser LIN Leaf it retrieves the transceiver type and device information.
+            
+             This function call will open the CAN channel, but no CAN messages are transmitted on it.
+             In other words, it's risk-free to use even if no LIN interface is connected, or if
+             the channel is connected to a CAN system.
+            
+             Note: Attempts to use the channel for LIN communication will be meaningful
+             only if <see cref="M:Kvaser.LinLib.Linlib.linGetTransceiverData(System.Int32,System.Byte[],System.Byte[],System.Int32@)"/> stores <see cref="F:Kvaser.CanLib.Canlib.canTRANSCEIVER_TYPE_LIN"/> or
+             <see cref="F:Kvaser.CanLib.Canlib.canTRANSCEIVER_TYPE_CANFD_LIN"/> in ttype.
+            
+             Note A LIN interface need not be powered for this call to succeed.
+            
+             Note The information may not always be accurate. Especially after changing
+             transceiver on a running LAPcan card, you should go on-bus and off-bus again
+             to be sure the transceiver information is updated.
+             </summary>
+             <param name="channel">The number of a CAN channel for which the transceiver data will be retrieved.</param>
+             <param name="eanNo">A reference to an array of 8 bytes where the EAN number of the LIN interface will be stored.</param>
+             <param name="serNo">A reference to an array of 8 bytes where the serial number of the LIN interface will be stored.</param>
+             <param name="ttype">A reference to an integer where the transceiver type will be stored.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linOpenChannel(System.Int32,System.Int32)">
+             <summary>Open a channel to a LIN interface.
+            
+             Note: The device must be powered from the LIN side.
+             </summary>
+             <param name="channel">The number of the channel. Channel numbering is hardware dependent.
+             This is the same channel number as used by canOpenChannel.</param>
+             <param name="flags">Either one of <see cref="F:Kvaser.LinLib.Linlib.LIN_MASTER"/> or <see cref="F:Kvaser.LinLib.Linlib.LIN_SLAVE"/></param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linClose(System.Int32)">
+            <summary>Closes an open handle to a LIN channel. The handle becomes invalid and can not be used in subsequent calls to the LIN functions.</summary>
+            <param name="handle">A handle to an open LIN channel.</param>
+            <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linGetVersion(System.Int32@,System.Int32@,System.Int32@)">
+            <summary>
+            This function retrieves the LINLIB library version.
+            </summary>
+            <param name="major">A reference to where the major version number of the library is to be stored.</param>
+            <param name="minor">A reference to where the minor version number of the library is to be stored.</param>
+            <param name="built">A reference to where the build number of the library is to be stored.</param>
+            <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linGetFirmwareVersion(System.Int32,System.Byte@,System.Byte@,System.Byte@,System.Byte@,System.Byte@,System.Byte@)">
+             <summary>
+             This function retrieves the firmware version from the LIN interface.
+            
+             Note: For newer interfaces a call to this function will return <see cref="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOT_IMPLEMENTED"/>
+             Use <see cref="M:Kvaser.LinLib.Linlib.linGetChannelData(System.Int32,System.Int32,System.Byte[])"/> with <see cref="F:Kvaser.LinLib.Linlib.linCHANNELDATA_CARD_FIRMWARE_REV"/> instead.
+            
+             Note: The version numbers aren't valid until <see cref="M:Kvaser.LinLib.Linlib.linBusOn(System.Int32)"/> has been called.
+            
+             Note: The firmware in the LIN interface is divided into two parts, the boot
+             code and the application. The boot code is used only when reprogramming
+             (reflashing) the LIN interface. The application handles all LIN communication.
+            
+             Note: Version numbers are, since the precambric era, divided into a major
+             version number, a minor version number and a build number. These are usually
+             written like, for example, 3.2.12. Here the major number is 3, the minor
+             number 2 and the build number 12.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="bootVerMajor">A reference to a byte where the major version number of the boot code is stored.</param>
+             <param name="bootVerMinor">A reference to a byte where the minor version number of the boot code is stored.</param>
+             <param name="bootVerBuild">A reference to a byte where the build number of the boot code is stored.</param>
+             <param name="appVerMajor">A reference to a byte where the major version number of the application code is stored.</param>
+             <param name="appVerMinor">A reference to a byte where the minor version number of the application code is stored.</param>
+             <param name="appVerBuild">A reference to a byte where the build number of the application is stored.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linGetChannelData(System.Int32,System.Int32,System.Byte[])">
+             <summary>
+             This function can be used to retrieve certain pieces of information about a channel.
+            
+             Note: You must pass a channel number and not a channel handle.
+             </summary>
+             <param name="channel">The number of the channel you are interested in. Channel numbers are integers in the interval beginning at 0</param>
+             <param name="item">This parameter specifies what data to obtain for the specified channel. The value is one of the constants linCHANNELDATA_xxx.</param>
+             <param name="data">A reference to a byte buffer holding 8 bytes</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linSetBitrate(System.Int32,System.Int32)">
+             <summary>
+             This function sets the bit rate for a master, or the initial bit rate for a slave.
+            
+             Note: The handle shall be off-bus.
+            
+             Note: Supported bit rates are 1000 - 20000 bits per second.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="bps">Bit rate in bits per second.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linBusOn(System.Int32)">
+             <summary>
+             Takes the specified handle on-bus.
+            
+             Note: Settings and slave message buffers will be reset to the default if used on a channel that is already on-bus.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linBusOff(System.Int32)">
+             <summary>
+             Takes the specified handle off-bus.
+            
+             Note: Settings and slave message buffers will be reset to the default
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linReadTimer(System.Int32,System.Int64@)">
+            <summary>
+            Return the current timer value (used for timestamps)
+            </summary>
+            <param name="handle">A handle to an open LIN channel.</param>
+            <param name="time">Returned timer value</param>
+            <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linWriteMessage(System.Int32,System.Int32,System.Byte[],System.Int32)">
+             <summary>
+             Write a LIN message.
+             It is advisable to wait until the message is echoed by <see cref="M:Kvaser.LinLib.Linlib.linReadMessage(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo)"/>
+             before transmitting a new message, or in case of a schedule table being used,
+             transmit the next message when the previous one is known to be complete.
+            
+             Note: Only available in master mode.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="id">The identifier of the LIN message.</param>
+             <param name="msg">Buffer containing the data of the LIN message</param>
+             <param name="dlc">The length of the LIN message.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linRequestMessage(System.Int32,System.Int32)">
+             <summary>
+             This function writes a LIN message header to the LIN bus. A slave in the
+             system is then expected to fill in the header with data.
+            
+             Note: This call is only available in master mode.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="id">The identifier of the LIN message.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linReadMessage(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo)">
+             <summary>
+             Read a message from the LIN interface. If a message is available for reception,
+             <see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> is returned. This is a non-blocking call. If no message
+             is available in the LIN interface, an error code is returned.
+            
+             Note: This call will also return echoes of what the LIN interface is transmitting
+             with <see cref="M:Kvaser.LinLib.Linlib.linWriteMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/>. In other words, the LIN interface can hear itself.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="id">A reference to an integer where the identifier of the received LIN message will be stored.</param>
+             <param name="msg">A reference to buffer where the data of the LIN message will be stored.</param>
+             <param name="dlc">A reference to an integer where the length of the received LIN message will be stored.</param>
+             <param name="flags">A combination of zero or more of the LIN_xxx flags.</param>
+             <param name="msgInfo">A reference to a <see cref="T:Kvaser.LinLib.Linlib.LinMessageInfo"/> object where data about the received LIN message will be stored.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linReadMessageWait(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo,System.Int64)">
+             <summary>
+             Read a message from the LIN interface. If a message is available for reception,
+             <see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> is returned. This is a blocking call. It waits until a
+             message is received in the LIN interface, or the specified timeout period elapses.
+            
+             Note: This call will also return echoes of what the LIN interface is transmitting
+             with <see cref="M:Kvaser.LinLib.Linlib.linWriteMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/>. In other words, the LIN interface can hear itself.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="id">A reference to an integer where the identifier of the received LIN message will be stored.</param>
+             <param name="msg">A reference to buffer where the data of the LIN message will be stored.</param>
+             <param name="dlc">A reference to an integer where the length of the received LIN message will be stored.</param>
+             <param name="flags">A combination of zero or more of the LIN_xxx flags.</param>
+             <param name="msgInfo">A reference to a <see cref="T:Kvaser.LinLib.Linlib.LinMessageInfo"/> struct where data about the received LIN message will be stored.</param>
+             <param name="timeout">The maximum number of milliseconds to wait for a message to be received by the LIN interface.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linUpdateMessage(System.Int32,System.Int32,System.Byte[],System.Int32)">
+             <summary>
+             This function updates a message buffer in a slave. The contents of the
+             message buffer will be used the next time the slave is polled for the
+             specified LIN message id.
+            
+             Note: The handle shall be on-bus.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="id">The identifier of the LIN message.</param>
+             <param name="msg">A reference to buffer containing the data of the LIN message.</param>
+             <param name="dlc">The length of the LIN message.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linSetupIllegalMessage(System.Int32,System.Int32,System.Int32,System.Int32)">
+             <summary>
+             Using this function, it is possible to use the LIN interface to create
+             corrupted LIN messages. You call the function once for each LIN identifier
+             that should be affected.
+            
+             To return to normal mode, either restart the LIN interface (by going off bus
+             and on the bus again) or call the function with delay and cFlags set to zero.
+            
+             Note: The handle shall be on-bus.
+             Note: Not supported by all devices.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="id">The identifier of the LIN message.</param>
+             <param name="cFlags">One or more of the LIN_MSG_DISTURB_xxx flags.</param>
+             <param name="delay">The delay parameter will result in a delay of this many bittimes after the header and before the first data byte.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linSetupLIN(System.Int32,System.Int32,System.Int32)">
+             <summary>
+             This function changes various settings on a handle that is on-bus.
+             When going on-bus, the bit rate and the flag values listed below are set to
+             the default value (either as hard-coded in the firmware, or as stored in the
+             non-volatile memory of the LIN Interface).
+            
+             With this function, you can do one or more of the following things:
+             - Select checksum according to LIN 2.0
+             - Turn variable message length off. The message length then will depend on the message ID.
+            
+             In master mode it is also possible to change the bit rate without going off bus first.
+            
+             Note: The handle shall be on-bus.
+             Note: It is supported in firmware version 2.5.1 and later.
+             Note: For LIN 2.0 compliance, you must specify both <see cref="F:Kvaser.LinLib.Linlib.LIN_ENHANCED_CHECKSUM"/> and <see cref="F:Kvaser.LinLib.Linlib.LIN_VARIABLE_DLC"/>.
+             </summary>
+             <param name = "handle">A handle to an open LIN channel.</param>
+             <param name="lFlags">One or more of the following flags: <see cref="F:Kvaser.LinLib.Linlib.LIN_ENHANCED_CHECKSUM"/>, <see cref="F:Kvaser.LinLib.Linlib.LIN_VARIABLE_DLC"/></param>
+             <param name="bps">Specifies the bit rate in bits per second. This parameter can be used only in master mode. The bit rate is set without going off bus.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linWriteWakeup(System.Int32,System.Int32,System.Int32)">
+             <summary>
+             Write a wakeup frame.
+            
+             If count is zero, one single wakeup frame is transmitted. If count > 1,
+             several wakeup frames are transmitted spaced with 'interval' bittimes.
+             The LIN interface will interrupt the sequence when a LIN message or another
+             command is received. The stream of wakeups will be recived as incoming
+             messages with the LIN_RX flag bit set.
+            
+             Note: Maximum value of count is 255 (0xFF).
+             Note: Maximum value of interval is either 255 (0xFF) or 65535 (0xFFFF) depending on device.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="count">The number of wakeup frames to send.</param>
+             <param name="interval">The time, in bit times, between the wakeup frames.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linClearMessage(System.Int32,System.Int32)">
+            <summary>
+            Clear a message buffer for a LIN slave. The message buffer will not answer
+            next time it is polled.
+            </summary>
+            <param name="handle">A handle to an open LIN channel.</param>
+            <param name="id">The LIN message id for which the corresponding buffer will be cleared.</param>
+            <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linWriteSync(System.Int32,System.Int64)">
+             <summary>
+             Call this function to make sure all messages transmitted to the
+             LIN Interface has been received by it.
+            
+             When messages are transmitted to the LIN Interface, they are queued by
+             the driver before appearing on the LIN bus.
+            
+             The function returns <see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> if all writes are done, <see cref="F:Kvaser.LinLib.Linlib.LinStatus.linERR_TIMEOUT"/> in
+             case of timeout or possibly some other error code.
+            
+             If the LIN Interface is in master mode and a LIN message has been
+             transmitted with <see cref="M:Kvaser.LinLib.Linlib.linWriteMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/>, this function will return when
+             the LIN Interface has received the message. If another LIN message is being
+             received or transmitted, the message will not be transmitted on the
+             LIN bus at once. And even if the LIN Interface is idle, the header of the new
+             message will just have been started when <see cref="M:Kvaser.LinLib.Linlib.linWriteSync(System.Int32,System.Int64)"/> returns.
+            
+             After calling <see cref="M:Kvaser.LinLib.Linlib.linUpdateMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/> and <see cref="M:Kvaser.LinLib.Linlib.linClearMessage(System.Int32,System.Int32)"/> for a slave,
+             this function is enough to know that the LIN Interface is updated.
+            
+             After <see cref="M:Kvaser.LinLib.Linlib.linWriteMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/>, it is advisable to wait until the message is
+             echoed by <see cref="M:Kvaser.LinLib.Linlib.linReadMessage(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo)"/> before transmitting a new message, or in
+             case of a schedule table being used, transmit the next message when
+             the previous one is known to be complete.
+            
+             When, in master mode, a message should be transmitted after a poll
+             (reception) is done, it might be necessary to call <see cref="M:Kvaser.LinLib.Linlib.linWriteMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/>
+             before the result is received via <see cref="M:Kvaser.LinLib.Linlib.linReadMessage(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo)"/> as the LIN Interface waits
+             up to the maximum frame length before knowing a received message is complete.
+             A new message to transmit will force completion if the  currently received one.
+             </summary>
+             <param name="handle">A handle to an open LIN channel.</param>
+             <param name="timeout">The maximum number of milliseconds to wait for the queued messages to be transmitted by the LIN interface.</param>
+             <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.linGetCanHandle(System.Int32,System.Int32@)">
+            <summary>Return the CAN handle given an open LIN handle</summary>
+            <param name="handle">A handle to an open LIN channel.</param>
+            <param name="canHandle">A reference to an integer where the CAN handle will be stored.</param>
+            <returns><see cref="F:Kvaser.LinLib.Linlib.LinStatus.linOK"/> linOK (zero) if success else linERR_xxx (negative).</returns>
+        </member>
+        <member name="M:Kvaser.LinLib.Linlib.LINERROR(System.Int32)">
+            <summary>
+            Function for determining if a flag field contains a LIN error flag bit.
+            </summary>
+            <param name="X">Flag field to test for LIN error flags</param>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.linINVALID_HANDLE">
+            <summary>Indicates an invalid linHandle.</summary>
+        </member>
+        <member name="T:Kvaser.LinLib.Linlib.LinStatus">
+            <summary>Status Codes
+            Generally, a return code greater than or equal to zero means success. A value less than zero means failure.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linOK">
+            <summary>OK - no error</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOMSG">
+            <summary>No messages available</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOTRUNNING">
+            <summary>Handle not on-bus.
+            Some functions requires that the handle is on-bus before being called, i.e <see cref="M:Kvaser.LinLib.Linlib.linRequestMessage(System.Int32,System.Int32)"/>.
+            Call <see cref="M:Kvaser.LinLib.Linlib.linBusOn(System.Int32)"/> to go on-bus.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_RUNNING">
+            <summary>Handle not off-bus.
+            Some functions requires that the handle is off-bus before being called, i.e <see cref="M:Kvaser.LinLib.Linlib.linSetBitrate(System.Int32,System.Int32)"/>.
+            Call <see cref="M:Kvaser.LinLib.Linlib.linBusOff(System.Int32)"/> to go off-bus.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_MASTERONLY">
+            <summary>Only for a master.
+            A call to a function that only a master can execute, i.e <see cref="M:Kvaser.LinLib.Linlib.linRequestMessage(System.Int32,System.Int32)"/>.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_SLAVEONLY">
+            <summary>Only for a slave.
+            A call to a function that only a slave can execute, i.e <see cref="M:Kvaser.LinLib.Linlib.linUpdateMessage(System.Int32,System.Int32,System.Byte[],System.Int32)"/>.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_PARAM">
+            <summary>Error in parameter</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOTFOUND">
+            <summary>Specified hardware not found. This error is reported when the LIN transceiver isn't powered up</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOMEM">
+            <summary>Out of memory</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOCHANNELS">
+            <summary>No channels avaliable</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_TIMEOUT">
+            <summary>Timeout occurred</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOTINITIALIZED">
+            <summary>Library not initialized</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOHANDLES">
+            <summary>Can't get handle</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_INVHANDLE">
+            <summary>Handle is invalid</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_CANERROR">
+            <summary>Internal error in the driver</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_ERRRESP">
+            <summary>There was an error response from the LIN interface</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_WRONGRESP">
+            <summary>The LIN interface response wasn't the expected one</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_DRIVER">
+            <summary>LIN driver type not supported</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_DRIVERFAILED">
+            <summary>DeviceIOControl failed; use the Win32 GetLastError API to get the real (Win32) error code.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOCARD">
+            <summary>The card was removed or not inserted</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_LICENSE">
+            <summary>The license is not valid</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_INTERNAL">
+            <summary>Internal error in the driver</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NO_ACCESS">
+            <summary>Access denied</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_VERSION">
+            <summary>Function not supported in this version</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NO_REF_POWER">
+            <summary>Function not supported in this version</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinStatus.linERR_NOT_IMPLEMENTED">
+            <summary>The requested feature or function is not implemented in the device you are trying to use it on</summary>
+        </member>
+        <member name="T:Kvaser.LinLib.Linlib.LinMessageInfo">
+             <summary>
+             In certain LIN bus API calls, the following structure is used to provide more
+             information about the LIN messages.
+            
+             Note: The precision of the timing data given in us (microseconds) can be less
+             than one microsecond; for low bitrates the lowest bits might always be zero.
+            
+             Note: The min and max values listed inside [] of the message timing values
+             can be calculated from the LIN specification by using the shortest (0 bytes)
+             or longest (8 bytes) messages at the lowest or highest allowed bitrate.
+            
+             Note: The LIN interface will accept messages that are a bit out-of-bounds as well.</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.timestamp">
+             <summary>
+             Kvaser DRV Lin timestamp - Timestamp in milliseconds of the falling edge of
+             the synch break of the message. Uses the canlib CAN timer.
+            
+             Kvaser LIN Leaf timestamp - Timestamp in milliseconds of the falling edge
+             of the synch break of the message. Uses the canlib CAN timer.
+            
+             Note: All Kvaser Leaf with Kvaser MagiSync(tm); are synchronized (also with CAN channels).
+             </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.synchBreakLength">
+            <summary>
+            Length of the synch break in microseconds.
+            [650 .. 13000],  [400 .. 8000] for a wakeup signal.
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.frameLength">
+            <summary>
+            The total frame length in microseconds; from the synch break to the end of the crc. [2200 .. 173600]
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.bitrate">
+            <summary>
+            The bitrate of the message in bits per seconds. Range [1000 .. 20000] (plus some margin)
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.checkSum">
+            <summary>
+            The checksum as read from the LIN bus. Might not match the data in case of <see cref="F:Kvaser.LinLib.Linlib.LIN_CSUM_ERROR"/>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.idPar">
+            <summary>
+            The id with parity of the message as read from the LIN bus. Might be invalid in case of <see cref="F:Kvaser.LinLib.Linlib.LIN_PARITY_ERROR"/>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.synchEdgeTime">
+            <summary>
+            Time in microseconds of the falling edges in the synch byte relative the falling edge of the start bit.
+            Note: Not supported by all devices.
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LinMessageInfo.byteTime">
+            <summary>
+            Start time in microseconds of each data byte. In case of 8-byte messages,
+            the crc time isn't included (but can be deduced from frameLength).
+            Note: Not supported by all devices.
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_TX">
+            <summary>
+            LIN message flags
+            The following flags can be returned from <see cref="M:Kvaser.LinLib.Linlib.linReadMessage(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo)"/> and <see cref="M:Kvaser.LinLib.Linlib.linReadMessageWait(System.Int32,System.Int32@,System.Byte[],System.Int32@,System.Int32@,Kvaser.LinLib.Linlib.LinMessageInfo,System.Int64)"/>.
+            </summary>
+            <summary>The message was something we transmitted on the bus</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_RX">
+            <summary>The message was something we received from the bus</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_WAKEUP_FRAME">
+            <summary>A wake up frame was received. Id/msg/dlc are undefined</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_NODATA">
+            <summary>No data, only a header</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_CSUM_ERROR">
+            <summary>Checksum error</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_PARITY_ERROR">
+            <summary>ID parity error</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_SYNCH_ERROR">
+            <summary>A synch error</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_BIT_ERROR">
+            <summary>Bit error when transmitting</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.linCHANNELDATA_CARD_FIRMWARE_REV">
+            <summary>
+            This constant is used in <see cref="M:Kvaser.LinLib.Linlib.linGetChannelData(System.Int32,System.Int32,System.Byte[])"/>, buffer
+            mentioned below refers to this functions argument.
+            buffer points to a 64-bit (8 bytes) area which receives the firmware
+            revision number on the card. This number consists of four 16-bit words:
+            the major revision, the minor revision, the release number and the build
+            number, listed in order from the most significant to the least
+            significant.
+            </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_MASTER">
+            <summary>The LIN interface will be a LIN master</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_SLAVE">
+            <summary>The LIN interface will be a LIN slave</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_MSG_DISTURB_CSUM">
+            <summary>The checksum of transmitted messages will be inverted (and consequently illegal.)</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_MSG_DISTURB_PARITY">
+            <summary>Two parity bits will be inverted - Use only in master mode</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_MSG_USE_STANDARD_PARITY">
+            <summary>Use standard (1.x) parity for the specified msg</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_MSG_USE_ENHANCED_PARITY">
+            <summary>Use enhanced (2.x) parity for the specified msg</summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_ENHANCED_CHECKSUM">
+             <summary>
+             When specified, the LIN interface will use the "enhanced" checksum according
+             to LIN 2.0. Note that (as per the LIN 2.0 spec) the enhanced checksum is not
+             used on the diagnostic frames even if the <see cref="F:Kvaser.LinLib.Linlib.LIN_ENHANCED_CHECKSUM"/> setting
+             is in effect.
+            
+             The default value is OFF.
+             </summary>
+        </member>
+        <member name="F:Kvaser.LinLib.Linlib.LIN_VARIABLE_DLC">
+             <summary>
+             When specified, turns variable message length on, so the the message length
+             will depend on the message ID.
+            
+             The default value is ON.
+             </summary>
+        </member>
+    </members>
+</doc>

BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.MemoLibXML.dll


+ 280 - 0
src/YSAI.DAQ/YSAI.Can/lib/Kvaser.MemoLibXML.xml

@@ -0,0 +1,280 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Kvaser.MemoLibXML</name>
+    </assembly>
+    <members>
+        <member name="T:Kvaser.MemoLibXML.KvaXmlStatus">
+            <summary>
+                Generally, a return code greater than or equal to zero means success. A
+                value less than zero means failure.
+            </summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.OK">
+            <summary>OK.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.FAIL">
+            <summary>Generic error.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_ATTR_NOT_FOUND">
+            <summary>Failed to find an attribute in a node.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_ATTR_VALUE">
+            <summary>The attribute value is not correct, e.g. whitespace after a number.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_ELEM_NOT_FOUND">
+            <summary>Could not find a required element.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_VALUE_RANGE">
+            <summary>The value is outside the allowed range.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_VALUE_UNIQUE">
+            <summary>The value is not unique; usually idx attributes.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_VALUE_CONSECUTIVE">
+            <summary>The values are not consecutive; usually idx attributes.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_EXPRESSION">
+            <summary>The trigger expression could not be parsed.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_XML_PARSER">
+            <summary>The XML settings contain syntax errors.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_DTD_VALIDATION">
+            <summary>The XML settings do not follow the DTD.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_SCRIPT_ERROR">
+            <summary>t-script related errors, e.g. file not found.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlStatus.ERR_INTERNAL">
+            <summary>Internal errors, e.g. null pointers.</summary>
+        </member>
+        <member name="T:Kvaser.MemoLibXML.KvaXmlValidationStatus">
+            <summary>
+                Generally, a return code greater than or equal to zero means success. A
+                value less than zero means failure.
+            </summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.OK">
+            <summary>OK.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.FAIL">
+            <summary>Generic error.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_ABORT">
+            <summary>Too many errors, validation aborted.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_SILENT_TRANSMIT">
+            <summary>Transmit lists used in silent mode.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_UNDEFINED_TRIGGER">
+            <summary>An undefined trigger is used in an expression.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_MULTIPLE_EXT_TRIGGER">
+            <summary>There are more than one external trigger defined.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_MULTIPLE_START_TRIGGER">
+            <summary>There are more than one start up trigger defined.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_DISK_FULL_STARTS_LOG">
+            <summary>A trigger on disk full starts the logging.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_NUM_OUT_OF_RANGE">
+            <summary>A numerical value is out of range.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_SCRIPT_NOT_FOUND">
+            <summary>A t-script file could not be opened.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_SCRIPT_TOO_LARGE">
+            <summary>A t-script is too large for the configuration.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_SCRIPT_TOO_MANY">
+            <summary>Too many active t-scripts for selected device.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_SCRIPT_CONFLICT">
+            <summary>More than one active script is set as 'primary'.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_ELEMENT_COUNT">
+            <summary>Too many or too few elements of this type.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_PARSER">
+            <summary>A general error found during parsing.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_SCRIPT">
+            <summary>A general t-script error found during parsing.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.ERR_EXPRESSION">
+            <summary>A general trigger expression found during parsing.</summary>
+            <summary>A general trigger expression found during parsing.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.WARN_ABORT">
+            <summary>Too many warnings, validation aborted.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.WARN_NO_ACTIVE_LOG">
+            <summary>No active logging detected.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.WARN_DISK_FULL_AND_FIFO">
+            <summary>A trigger on disk full used with FIFO mode.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.WARN_IGNORED_ELEMENT">
+            <summary>This XML element was ignored.</summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaXmlValidationStatus.WARN_MULTIPLE_EXT_TRIGGER">
+            <summary>Using more than one external trigger requires firmware version 3.7 or better.</summary>
+        </member>
+        <member name="T:Kvaser.MemoLibXML.KvaMemoLibXML">
+            <summary>
+                The kvaMemoLibXML DLL is a library for converting XML logger settings into a
+                binary param.lif for Kvaser Memorator 2nd Generation devices.
+                The XML conversion results in a binary settings file, param.lif, that can be
+                downloaded to a Kvaser Memorator 2nd Generation with the KvmLib API call
+            </summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaMemoLibXML.XML_ERROR_MESSAGE_LENGTH">
+            <summary>
+                Maximum length of the xml error message string.
+                <see cref="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetLastError(System.String@,Kvaser.MemoLibXML.KvaXmlStatus@)" />
+                Defined in <i>common_inc/inc/memolib_mhydra/kvaMemoLibXML.h</i>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaMemoLibXML.XML_BUFFER_SIZE">
+            <summary>
+                Maximum length of generated xml.
+                Defined in <i>src\dll\memolibxml\memolibxml_mhydra\kvaMemoLibXML.cpp</i>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaMemoLibXML.PARAM_FILE_SIZE">
+            <summary>
+                Maximum size of parameter file.
+                Defined in <i>common_inc\inc\logger_config_file.h</i>.
+            </summary>
+        </member>
+        <member name="F:Kvaser.MemoLibXML.KvaMemoLibXML.MAX_ERROR_STRING_SIZE">
+            <summary>
+                Ad hoc maximum size of error message returned from.
+                <see cref="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetErrorText(Kvaser.MemoLibXML.KvaXmlStatus,System.String@)" />
+                <see cref="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetValidationText(Kvaser.MemoLibXML.KvaXmlValidationStatus,System.String@)" />
+            </summary>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.GetUTF8Bytes(System.String)">
+            <summary>
+                Create a byte[] containing the utf-8 representation of string s and a terminating'\0' character.
+            </summary>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.GetUTF8String(System.Byte[])">
+            <summary>
+                Convert byte[] contents to a string object using the utf-8 decoder.
+            </summary>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlInitialize">
+            <summary>
+                This function must be called before any other functions are used. It will initialize the native
+                kvamemolibxml library.
+            </summary>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetLastError(System.String@,Kvaser.MemoLibXML.KvaXmlStatus@)">
+            <summary>
+                Get the last conversion error message (if any) in human readable format.
+            </summary>
+            <param name="buf">Error message associated with err.</param>
+            <param name="err">Error code.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetVersion">
+            <summary>
+                Return the version of the kvaMemoLibXML DLL.  The most significant byte is
+                the major version number and the least significant byte is the
+                minor version number.
+            </summary>
+            <returns>Version of the kvaMemoLibXML DLL.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlToBuffer(System.String,System.Byte[]@,System.Int32@)">
+            <summary>
+                Convert XML settings to param.lif buffer.
+                The version of the XML settings is returned in version (Upper 16 bits: major, lower 16 bits: minor)
+            </summary>
+            <remarks>The version parameter isn't used.</remarks>
+            <param name="xmlbuf">XML settings to convert.</param>
+            <param name="outbuf">Buffer containing the param.lif settings</param>
+            <param name="version">XML version</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaBufferToXml(System.Byte[],System.String@,System.Int32@,System.String)">
+            <summary>
+                Convert a buffer containing param.lif to XML settings.
+                The version of the XML settings is returned in version (Upper 16 bits: major, lower 16 bits: minor).
+                Scripts from the param.lif will be written to scriptpath.
+            </summary>
+            <param name="inbuf">Buffer containing contents of a parameter file ('.lif').</param>
+            <param name="xmlbuf">Contains XML representation of parameters if successful else null.</param>
+            <param name="version">XML version.</param>
+            <param name="scriptpath">Path to destination of scripts.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlToFile(System.String,System.String)">
+            <summary>
+                Convert XML file to binary configuration file.
+            </summary>
+            <param name="infile">Filename of file containing the XML settings.</param>
+            <param name="outfile">Filename of binary configuration.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaFileToXml(System.String,System.String)">
+            <summary>
+                Convert the binary configuration file and write XML settings to xmlfile.
+            </summary>
+            <param name="parfile">Path and name of the file containing the param.lif settings.</param>
+            <param name="xmlfile">Path and name of the file to receive the XML settings.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlValidate(System.String)">
+            <summary>
+                Validate a buffer with XML settings.
+            </summary>
+            <param name="xmlbuf">String containing the XML settings to validate.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetErrorText(Kvaser.MemoLibXML.KvaXmlStatus,System.String@)">
+            <summary>
+                Get a human readable description of error with supplied error code.
+            </summary>
+            <param name="error">KvaXmlStatus error code.</param>
+            <param name="buf">Error message.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetValidationStatusCount(System.Int32@,System.Int32@)">
+            <summary>
+                Get the number of validation statuses (if any). Call after <see cref="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlValidate(System.String)" />
+            </summary>
+            <param name="countErr">Number of XML validation errors.</param>
+            <param name="countWarn">Number of XML validation warnings.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetValidationError(Kvaser.MemoLibXML.KvaXmlValidationStatus@,System.String@)">
+            <summary>
+                Get the validation errors (if any). Call after <see cref="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlValidate(System.String)" /> until KvaXmlValidationStatus.OK.
+            </summary>
+            <param name="status">Validation status code.</param>
+            <param name="buf">Validation error message.</param>
+            <returns>KvaXmlStatus.OK if success else KvaXmlStatus.ERR_XXX.</returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetValidationWarning(Kvaser.MemoLibXML.KvaXmlValidationStatus@,System.String@)">
+            <summary>
+                Get the validation warnings (if any). Call after <see cref="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlValidate(System.String)" /> until KvaXmlValidationStatus.OK.
+            </summary>
+            <param name="status">Valdiation status code.</param>
+            <param name="buf">Buffer containing the validation warning message.</param>
+            <returns></returns>
+        </member>
+        <member name="M:Kvaser.MemoLibXML.KvaMemoLibXML.KvaXmlGetValidationText(Kvaser.MemoLibXML.KvaXmlValidationStatus,System.String@)">
+            <summary>
+                Get a human readable description of validation error with supplied error
+                code.
+            </summary>
+            <param name="status">KvaXmlValidationStatus error code.</param>
+            <param name="buf">Error message</param>
+            <returns></returns>
+        </member>
+    </members>
+</doc>

BIN
src/YSAI.DAQ/YSAI.Can/lib/Kvaser_DriversSetup.exe


+ 30 - 0
src/YSAI.DAQ/YSAI.Core/interface/only/ICan.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using YSAI.Core.data;
+using YSAI.Core.@interface.unify;
+
+namespace YSAI.Core.@interface.only
+{
+    /// <summary>
+    /// can接口
+    /// </summary>
+    public interface ICan : IOn, IOff, IRead, IDisposable
+    {
+        /// <summary>
+        /// 异步写入
+        /// </summary>
+        /// <param name="Values">写入的数据点,与数据类型</param>
+        /// <returns>统一泛型结果</returns>
+        Task<OperateResult> WriteAsync(ConcurrentDictionary<int, byte[]> Values);
+        /// <summary>
+        /// 写入
+        /// </summary>
+        /// <param name="Values">写入的数据点,与数据类型</param>
+        /// <returns>统一泛型结果</returns>
+        OperateResult Write(ConcurrentDictionary<int, byte[]> Values);
+    }
+}

+ 7 - 0
src/YSAI.DAQ/YSAI.DAQ.sln

@@ -37,6 +37,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.Manage.Core", "YSAI.Ma
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wpf", "wpf", "{6F526F44-A5B0-49D5-8E04-DBFDB5F8E6C6}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.Can", "YSAI.Can\YSAI.Can.csproj", "{8B8BF505-7A00-4868-939F-EB5056083E49}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -103,6 +105,10 @@ Global
 		{57F9FF57-ADD3-40B0-AE20-C2F88A2784A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{57F9FF57-ADD3-40B0-AE20-C2F88A2784A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{57F9FF57-ADD3-40B0-AE20-C2F88A2784A0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8B8BF505-7A00-4868-939F-EB5056083E49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B8BF505-7A00-4868-939F-EB5056083E49}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B8BF505-7A00-4868-939F-EB5056083E49}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8B8BF505-7A00-4868-939F-EB5056083E49}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -116,6 +122,7 @@ Global
 		{2B2ED6D8-B498-4589-ADAB-4599B9EFFC70} = {0A264424-1AD7-49FA-B813-D96498066479}
 		{439C729E-C66D-492B-A481-0C7F73F04E76} = {0A264424-1AD7-49FA-B813-D96498066479}
 		{8CE7E64C-7A6A-4581-A9B3-C05214986B4F} = {0A264424-1AD7-49FA-B813-D96498066479}
+		{8B8BF505-7A00-4868-939F-EB5056083E49} = {0A264424-1AD7-49FA-B813-D96498066479}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {5D5D3927-6714-40C0-84EA-44C5BA4C5E87}