ln.ethercat/ln.ethercat/ECMBind.cs

127 lines
4.7 KiB
C#

using System;
using System.Runtime.InteropServices;
using System.Text;
namespace ln.ethercat
{
[StructLayout(LayoutKind.Sequential)]
public struct PDOEntry
{
public int slave;
public short index;
public byte subindex;
public int addr_offset;
public int addr_bit;
public int bitlength;
public int type;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public StringBuilder name;
public override string ToString()
{
return string.Format("PDOEntry(slave={0},index={1},subindex={2},addr_offset={3},addr_bit={4},bitlength={5},type={6})", slave,index,subindex,addr_offset,addr_bit,bitlength,type);
}
}
[StructLayout(LayoutKind.Sequential)]
public struct dto_servicedescriptor
{
public int slave;
public UInt16 index;
public UInt16 datatype;
public UInt16 objectcode;
public byte maxsub;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public StringBuilder name;
}
public delegate void cb_enum_indeces(int slave, int index);
public delegate void cb_enum_sdo_descriptors(int slave, int index, ECDataTypes dataType, ECObjectCodes objectCode, int maxsub, String name);
public delegate void cb_enum_pdo(UInt16 slave, UInt16 index, byte subindex, int addr_offset, int addr_bit, int bitlength);
public static class ECMBind
{
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_version(StringBuilder versionString);
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_initialize(String ifname);
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_config_init();
[DllImport("lib/libecmbind.so")]
public static extern IntPtr ecmbind_get_iomap();
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_get_expected_wkc_size();
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_config_map();
[DllImport("lib/libecmbind.so")]
public static extern ECSlaveState ecmbind_read_state();
[DllImport("lib/libecmbind.so")]
public static extern ECSlaveState ecmbind_get_slave_state(int slave);
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_write_slave_state(int slave, ECSlaveState state);
[DllImport("lib/libecmbind.so")]
public static extern ECSlaveState ecmbind_request_state(int slave, ECSlaveState reqState, int timeout);
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_processdata();
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_recover();
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecd_read_pdo_map(Int32 slave);
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_get_pdo_entries_length();
[DllImport("lib/libecmbind.so")]
public static extern Int32 ecmbind_get_pdo_entries(ref PDOEntry[] table, int length);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_pdo_read(int slave, int index, int subindex, byte[] buffer, int size);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_pdo_write(int slave, int index, int subindex, byte[] buffer, int size);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_sdo_read(int slave, int index, int subindex, byte[] buffer, int size);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_sdo_write(int slave, int index, int subindex, byte[] buffer, int size);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_enumerate_servicedescriptors(int Slave, cb_enum_indeces cb);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_read_objectdescription(int slave, int index, cb_enum_sdo_descriptors cb);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_read_objectdescription_entry(UInt16 slave, UInt16 index, UInt16 sub, cb_enum_sdo_descriptors cb);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_pdo_enumerate(cb_enum_pdo cb);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_iomap_get(int offset, byte[] buffer, int length);
[DllImport("lib/libecmbind.so")]
public static extern int ecmbind_iomap_set(int offset, byte[] buffer, int length);
}
}