135 lines
5.2 KiB
C#
135 lines
5.2 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, ushort bitlength, 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_processdata2(byte[] iomap, int size);
|
|
|
|
[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_sdo_read_ca(int slave, int index, int subindex, byte[] buffer, int size);
|
|
|
|
[DllImport("lib/libecmbind.so")]
|
|
public static extern int ecmbind_sdo_write_ca(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);
|
|
|
|
}
|
|
}
|