public static ParamValue CreateParamValue(Param item) { ParamValue ret = new ParamValue { ByteValueList = new List <byte>(), TextValueList = new List <string>(), ParamDefinition = item }; return(ret); }
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); }
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); }
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); }