namespace ln.ethercat { public class SDOAddr { public int Slave { get; private set; } public int Index { get; private set; } public int SubIndex { get; private set; } public long Linear { get; private set; } public int Compact { get; private set; } public SDOAddr(int slave, int index) : this(slave, index, 0) { } public SDOAddr(int slave, int index, int subindex) { Slave = slave; Index = index; SubIndex = subindex; Linear = ((long)(ulong)Slave << 32) | ((long)Index << 16) | (long)SubIndex; Compact = ((Slave << 24) | (Index << 8) | SubIndex) ^ ((Slave & 0xFF00) << 24); } public override bool Equals(object obj) => (obj is SDOAddr other) && (Linear == other.Linear); public override int GetHashCode() => Compact; public override string ToString() { return string.Format("[SDOAddr Slave={0} Index={1:X4}.{2} ]", Slave, Index, SubIndex); } } }