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);
        }
示例#2
0
 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);
        }