internal override void Decode(EpicsChannel channel, uint nbElements) { Status = (Status)channel.DecodeData <ushort>(1, 0); Severity = (Severity)channel.DecodeData <ushort>(1, 2); Time = channel.DecodeData <DateTime>(1, 4); int pos = 12; Type t = typeof(TType); if (t.IsArray) { t = t.GetElementType(); } if (t == typeof(object)) { t = channel.ChannelDefinedType; } // padding for "RISC alignment" if (t == typeof(byte)) { pos += 3; } else if (t == typeof(double)) { pos += 4; } else if (t == typeof(short)) { pos += 2; } Value = channel.DecodeData <TType>(nbElements, pos); }
internal override void Decode(EpicsChannel channel, uint nbElements) { Status = (Status)channel.DecodeData <ushort>(1, 0); Severity = (Severity)channel.DecodeData <ushort>(1, 2); NbStates = channel.DecodeData <ushort>(1, 4); States = new string[NbStates]; Value = channel.DecodeData <ushort>(1, 422); for (int i = 0; i < NbStates; i++) { States[i] = channel.DecodeData <string>(1, 6 + i * 26, 26); } }
internal override void Decode(EpicsChannel channel, uint nbElements) { Status = (Status)channel.DecodeData <ushort>(1, 0); Severity = (Severity)channel.DecodeData <ushort>(1, 2); int pos = 4; Type t = typeof(TType); if (t.IsArray) { t = t.GetElementType(); } if (t == typeof(object)) { t = channel.ChannelDefinedType; } if (t == typeof(double) || t == typeof(float)) { Precision = channel.DecodeData <short>(1, pos); pos += 4; // 2 for precision field + 2 padding for "RISC alignment" } if (t != typeof(string)) { EGU = channel.DecodeData <string>(1, pos, 8); pos += 8; int tSize = TypeHandling.EpicsSize(t); //HighDisplayLimit = channel.DecodeData<TType>(1, pos); HighDisplayLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; //LowDisplayLimit = channel.DecodeData<TType>(1, pos); LowDisplayLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; //HighAlertLimit = channel.DecodeData<TType>(1, pos); HighAlertLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; //HighWarnLimit = channel.DecodeData<TType>(1, pos); HighWarnLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; //LowWarnLimit = channel.DecodeData<TType>(1, pos); LowWarnLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; //LowAlertLimit = channel.DecodeData<TType>(1, pos); LowAlertLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; LowControlLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; //HighControlLimit = channel.DecodeData<TType>(1, pos); HighControlLimit = Convert.ToDouble(channel.DecodeData(t, 1, pos)); pos += tSize; } else { EGU = ""; } if (t == typeof(byte)) { pos++; // 1 padding for "RISC alignment" } Value = channel.DecodeData <TType>(nbElements, pos); }