Ejemplo n.º 1
0
        public static ParamValue CreateParamValue(Param item)
        {
            ParamValue ret = new ParamValue
            {
                ByteValueList   = new List <byte>(),
                TextValueList   = new List <string>(),
                ParamDefinition = item
            };

            return(ret);
        }
Ejemplo n.º 2
0
        private byte GetSize(string sizeRef, IList <ParamValue> vgParams)
        {
            byte ret = 0;

            string[] tokens   = sizeRef.Split('.');
            bool     inParent = false;

            if (sizeRef.StartsWith("Parent."))
            {
                tokens   = sizeRef.Substring(7).Split('.');
                inParent = true;
            }
            ParamValue p;

            if (vgParams == null || inParent)
            {
                p = ParamValues.FirstOrDefault(x => x.ParamDefinition.Name == tokens[0]);
            }
            else
            {
                p = vgParams.FirstOrDefault(x => x.ParamDefinition.Name == tokens[0]);
            }

            if (p != null)
            {
                if (tokens.Length == 2)
                {
                    ParamValue s = p.InnerValues.FirstOrDefault(x => x.ParamDefinition.Name == tokens[1]);
                    if (s != null)
                    {
                        ret = s.ByteValueList[0];
                    }
                }
                else
                {
                    ret = p.ByteValueList[0];
                }
            }
            return(ret);
        }
Ejemplo n.º 3
0
        private bool IsIncluded(string optRef)
        {
            bool ret = false;

            string[]   tokens = optRef.Split('.');
            ParamValue p      = ParamValues.FirstOrDefault(x => x.ParamDefinition.Name == tokens[0]);

            if (p != null)
            {
                if (tokens.Length == 2)
                {
                    ParamValue s = p.InnerValues.FirstOrDefault(x => x.ParamDefinition.Name == tokens[1]);
                    if (s != null)
                    {
                        ret = s.ByteValueList[0] > 0;
                    }
                }
                else
                {
                    ret = p.ByteValueList[0] > 0;
                }
            }
            return(ret);
        }
Ejemplo n.º 4
0
        private ParamValue ProcessParameter(byte[] data, ref byte index, Param item, IList <ParamValue> vgParams)
        {
            ParamValue ret = ParamValue.CreateParamValue(item);

            if (string.IsNullOrEmpty(item.OptRef) || IsIncluded(item.OptRef))
            {
                if (item.Param1 != null && item.Param1.Count > 0 && (item.Size > 1 || item.SizeRef != null))
                {
                    ret.InnerValues = new List <ParamValue>();
                    if (item.Size > 1)
                    {
                        for (int i = 0; i < item.Size; i++)
                        {
                            ParamValue vg = ParamValue.CreateParamValue(item);
                            vg.InnerValues = new List <ParamValue>();
                            foreach (var prm1 in item.Param1)
                            {
                                vg.InnerValues.Add(ProcessParameter(data, ref index, prm1, vg.InnerValues));
                            }
                            ret.InnerValues.Add(vg);
                        }
                    }
                    else if (item.SizeRef != null && item.SizeRef == MsgLength)
                    {
                        while (data.Length - GetTailSize(HeaderDefinition) > index)
                        {
                            ParamValue vg = ParamValue.CreateParamValue(item);
                            vg.InnerValues = new List <ParamValue>();
                            foreach (var prm1 in item.Param1)
                            {
                                vg.InnerValues.Add(ProcessParameter(data, ref index, prm1, vg.InnerValues));
                            }
                            ret.InnerValues.Add(vg);
                        }
                    }
                    else if (item.SizeRef != null)
                    {
                        for (int i = 0; i < GetSize(item.SizeRef, vgParams); i++)
                        {
                            ParamValue vg = ParamValue.CreateParamValue(item);
                            vg.InnerValues = new List <ParamValue>();
                            foreach (var prm1 in item.Param1)
                            {
                                vg.InnerValues.Add(ProcessParameter(data, ref index, prm1, vg.InnerValues));
                            }
                            ret.InnerValues.Add(vg);
                        }
                    }
                }
                else if (item.Param1 != null && item.Param1.Count > 0 && item.Bits == 8)
                {
                    ret.InnerValues = new List <ParamValue>();
                    byte bvalue    = data.Length > index ? data[index++] : (byte)0;
                    byte totalbits = 0;
                    foreach (var prm1 in item.Param1)
                    {
                        ParamValue sp = ParamValue.CreateParamValue(prm1);
                        sp.ByteValueList.Add((byte)(bvalue >> totalbits & Tools.GetMaskFromBits(prm1.Bits, 0)));
                        ret.InnerValues.Add(sp);
                        totalbits += prm1.Bits;
                    }
                }
                else
                {
                    byte bytesCount = GetParamValueBytes(item);
                    if (item.Size > 1)
                    {
                        for (int i = 0; i < item.Size; i++)
                        {
                            for (int j = 0; j < bytesCount; j++)
                            {
                                ret.ByteValueList.Add(data.Length > index ? data[index++] : (byte)0);
                            }
                        }
                    }
                    else if (item.SizeRef != null && item.SizeRef == MsgLength)
                    {
                        while (data.Length - GetTailSize(HeaderDefinition) > index)
                        {
                            for (int j = 0; j < bytesCount; j++)
                            {
                                ret.ByteValueList.Add(data.Length > index ? data[index++] : (byte)0);
                            }
                        }
                    }
                    else if (item.SizeRef != null)
                    {
                        for (int i = 0; i < GetSize(item.SizeRef, vgParams); i++)
                        {
                            for (int j = 0; j < bytesCount; j++)
                            {
                                ret.ByteValueList.Add(data.Length > index ? data[index++] : (byte)0);
                            }
                        }
                    }
                    else
                    {
                        for (int j = 0; j < bytesCount; j++)
                        {
                            ret.ByteValueList.Add(data.Length > index ? data[index++] : (byte)0);
                        }
                    }
                }
            }
            return(ret);
        }