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); } }