public static S6xStructure GetFixedStructureTemplate(FixedStructures fixedStructure) { S6xStructure oRes = new S6xStructure(); switch (fixedStructure) { // For Routine Signature Internal Structure case FixedStructures.CORE_REG_INIT_ST1: oRes.ShortLabel = "CORE_REG_INIT_ST1"; oRes.Label = "Core Registers Initialization Structure 1"; oRes.Comments = oRes.ShortLabel + " - " + oRes.Label; oRes.Number = 0; // To be updated by processing oRes.StructDef = "\"Reg \", WordHex, \"Reg \", WordHex"; // To be updated by processing break; // For Routine Signature Internal Structure case FixedStructures.CORE_REG_INIT_ST2: oRes.ShortLabel = "CORE_REG_INIT_ST2"; oRes.Label = "Core Registers Initialization Structure 2"; oRes.Comments = oRes.ShortLabel + " - " + oRes.Label; oRes.Number = 0; // To be updated by processing oRes.StructDef = "\"Reg \", WordHex, \"Reg \", WordHex"; // To be updated by processing break; default: oRes.ShortLabel = fixedStructure.ToString(); oRes.Label = oRes.ShortLabel; break; } return(oRes); }
public static void updateStructureRow(ref SQLite806xDB db806x, ref SADS6x sadS6x, R_SAD806x_Def_Structures rRow, S6xStructure s6xObject) { SQLite806xToolsSAD806xV10.updateStructureRow(ref db806x, ref sadS6x, rRow, s6xObject); }
public static object addStructureRow(ref SQLite806xDB db806x, ref SADS6x sadS6x, ref List <R_SAD806x_Def_Structures> rList, S6xStructure s6xObject) { return(SQLite806xToolsSAD806xV10.addStructureRow(ref db806x, ref sadS6x, ref rList, s6xObject)); }
// Get Fixed Routines Definitions public static S6xSignature GetFixedRoutineSignatureTemplate(Fixed_Routines fixedRoutine) { S6xSignature oRes = null; S6xStructure s6xStruct = null; switch (fixedRoutine) { case Fixed_Routines.CORE_REG_INIT_8065: oRes = new S6xSignature(); oRes.for806x = Signature806xOptions.for8065Only.ToString(); oRes.ShortLabel = "CORE_REG_INIT"; oRes.Label = "Core Registers Initialization"; oRes.Comments = "CORE_REG_INIT - Core Registers Initialization"; oRes.InternalStructures = new S6xRoutineInternalStructure[2]; s6xStruct = SADFixedStructures.GetFixedStructureTemplate(SADFixedStructures.FixedStructures.CORE_REG_INIT_ST1); oRes.InternalStructures[0] = new S6xRoutineInternalStructure(); oRes.InternalStructures[0].VariableAddress = "#02##01#"; oRes.InternalStructures[0].VariableBankNum = "1"; // To be updated by processing oRes.InternalStructures[0].ShortLabel = s6xStruct.ShortLabel; oRes.InternalStructures[0].Label = s6xStruct.Label; oRes.InternalStructures[0].Comments = s6xStruct.Comments; oRes.InternalStructures[0].Number = s6xStruct.Number; // To be updated by processing oRes.InternalStructures[0].StructDef = s6xStruct.StructDef; // To be updated by processing s6xStruct = SADFixedStructures.GetFixedStructureTemplate(SADFixedStructures.FixedStructures.CORE_REG_INIT_ST2); oRes.InternalStructures[1] = new S6xRoutineInternalStructure(); oRes.InternalStructures[1].VariableAddress = "#04##03#"; oRes.InternalStructures[1].VariableBankNum = "1"; // To be updated by processing oRes.InternalStructures[1].ShortLabel = s6xStruct.ShortLabel; oRes.InternalStructures[1].Label = s6xStruct.Label; oRes.InternalStructures[1].Comments = s6xStruct.Comments; oRes.InternalStructures[1].Number = s6xStruct.Number; // To be updated by processing oRes.InternalStructures[1].StructDef = s6xStruct.StructDef; // To be updated by processing s6xStruct = null; break; case Fixed_Routines.OBDII_REG_INIT: oRes = new S6xSignature(); oRes.ShortLabel = "OBDII_REG_INIT"; oRes.Label = "OBDII Registers Initialization"; oRes.Comments = "OBDII_REG_INIT - OBDII Registers Initialization"; break; case Fixed_Routines.OBDII_REG_RESET: oRes = new S6xSignature(); oRes.ShortLabel = "OBDII_REG_RESET"; oRes.Label = "OBDII Registers Reset"; oRes.Comments = "OBDII_REG_RESET - OBDII Registers Reset"; break; case Fixed_Routines.OBDII_REG_FLAGS: oRes = new S6xSignature(); oRes.ShortLabel = "OBDII_REG_FLAGS"; oRes.Label = "OBDII Registers Flags"; oRes.Comments = "OBDII_REG_FLAGS - OBDII Registers Flags"; break; case Fixed_Routines.OBDI_COD_3D: oRes = new S6xSignature(); oRes.ShortLabel = "OBDI_CODES_3D"; oRes.Label = "OBDI Codes 3 Digits"; oRes.Comments = "OBDI_CODES_3D - OBDI Codes 3 Digits"; break; case Fixed_Routines.OBDI_CNT_3D: oRes = new S6xSignature(); oRes.ShortLabel = "OBDI_COUNT_3D"; oRes.Label = "OBDI Count 3 Digits"; oRes.Comments = "OBDI_COUNT_3D - OBDI Count 3 Digits"; break; case Fixed_Routines.OBDI_COD_2D: oRes = new S6xSignature(); oRes.ShortLabel = "OBDI_CODES_2D"; oRes.Label = "OBDI Codes 2 Digits"; oRes.Comments = "OBDI_CODES_2D - OBDI Codes 2 Digits"; break; case Fixed_Routines.OBDI_TIM_2D: oRes = new S6xSignature(); oRes.ShortLabel = "OBDI_TIMINGS_2D"; oRes.Label = "OBDI Timings 2 Digits"; oRes.Comments = "OBDI_TIMINGS_3D - OBDI Timings 2 Digits"; break; case Fixed_Routines.OBDI_MALFUNC: oRes = new S6xSignature(); oRes.ShortLabel = "MALFUNC"; oRes.Label = "Malfunction Routine"; oRes.Comments = "MALFUNC - Malfunction Routine"; oRes.Comments += "\r\n1st Param is OBD Error Code to be pushed."; oRes.InputArguments = new S6xRoutineInputArgument[1]; oRes.InputArguments[0] = new S6xRoutineInputArgument(); oRes.InputArguments[0].Position = 1; oRes.InputArguments[0].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[0].Position); oRes.InputArguments[0].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[0].Word = true; oRes.InputArguments[0].Pointer = false; break; case Fixed_Routines.OBDI_MALFUNC_LW: oRes = new S6xSignature(); oRes.ShortLabel = "MALFUNC_LW"; oRes.Label = "Malfunction Lower Routine"; oRes.Comments = "MALFUNC_LW - Malfunction Lower Routine"; oRes.Comments += "\r\n1st Param should be lower than 2nd value (scalar or register)"; oRes.Comments += "\r\n2nd Param should be higher than 1st value (scalar or register)"; oRes.Comments += "\r\n3rd Param is OBD Error Code to be pushed."; oRes.InputArguments = new S6xRoutineInputArgument[3]; oRes.InputArguments[0] = new S6xRoutineInputArgument(); oRes.InputArguments[0].Position = 1; oRes.InputArguments[0].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[0].Position); oRes.InputArguments[0].Encryption = (int)CallArgsMode.Mode3; oRes.InputArguments[0].Word = true; oRes.InputArguments[0].Pointer = true; oRes.InputArguments[1] = new S6xRoutineInputArgument(); oRes.InputArguments[1].Position = 2; oRes.InputArguments[1].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[1].Position); oRes.InputArguments[1].Encryption = (int)CallArgsMode.Mode3; oRes.InputArguments[1].Word = true; oRes.InputArguments[1].Pointer = true; oRes.InputArguments[2] = new S6xRoutineInputArgument(); oRes.InputArguments[2].Position = 3; oRes.InputArguments[2].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[2].Position); oRes.InputArguments[2].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[2].Word = true; oRes.InputArguments[2].Pointer = false; break; case Fixed_Routines.OBDI_MALFUNC_BT: oRes = new S6xSignature(); oRes.ShortLabel = "MALFUNC_BT"; oRes.Label = "Malfunction Between Routine"; oRes.Comments = "MALFUNC_BT - Malfunction Between Routine"; oRes.Comments += "\r\n1st Param should be between 2nd and 3rd values (scalar or register)"; oRes.Comments += "\r\n2nd Param should be the lowest value for comparison (scalar or register)"; oRes.Comments += "\r\n3rd Param should be the highest value for comparison (scalar or register)"; oRes.Comments += "\r\n4th Param is OBD Error Code to be pushed."; oRes.InputArguments = new S6xRoutineInputArgument[4]; oRes.InputArguments[0] = new S6xRoutineInputArgument(); oRes.InputArguments[0].Position = 1; oRes.InputArguments[0].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[0].Position); oRes.InputArguments[0].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[0].Word = true; oRes.InputArguments[0].Pointer = true; oRes.InputArguments[1] = new S6xRoutineInputArgument(); oRes.InputArguments[1].Position = 2; oRes.InputArguments[1].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[1].Position); oRes.InputArguments[1].Encryption = (int)CallArgsMode.Mode3; oRes.InputArguments[1].Word = true; oRes.InputArguments[1].Pointer = true; oRes.InputArguments[2] = new S6xRoutineInputArgument(); oRes.InputArguments[2].Position = 3; oRes.InputArguments[2].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[2].Position); oRes.InputArguments[2].Encryption = (int)CallArgsMode.Mode3; oRes.InputArguments[2].Word = true; oRes.InputArguments[2].Pointer = true; oRes.InputArguments[3] = new S6xRoutineInputArgument(); oRes.InputArguments[3].Position = 4; oRes.InputArguments[3].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[3].Position); oRes.InputArguments[3].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[3].Word = true; oRes.InputArguments[3].Pointer = false; break; case Fixed_Routines.OBDI_MALFUNC_SB: oRes = new S6xSignature(); oRes.ShortLabel = "MALFUNC_SB"; oRes.Label = "Malfunction Sub Routine"; oRes.Comments = "MALFUNC_SB - Malfunction Sub Routine"; oRes.Comments += "\r\nUsed to push an OBD Error Code into a rolling error register."; break; case Fixed_Routines.OBDI_MALFUNC_EX: oRes = new S6xSignature(); oRes.ShortLabel = "MALFUNC_EX"; oRes.Label = "Malfunction Extended Routine"; oRes.Comments = "MALFUNC_EX - Malfunction Extended Routine"; oRes.Comments += "\r\n1st Param should be higher than 2nd and 3rd values (scalar or register)"; oRes.Comments += "\r\n2nd Param should be the first lowest value for comparison (scalar or register)"; oRes.Comments += "\r\n3rd Param should be the second lowest value for comparison (scalar or register)"; oRes.Comments += "\r\n4th & 5th Params are OBD Error Code to be pushed."; oRes.InputArguments = new S6xRoutineInputArgument[5]; oRes.InputArguments[0] = new S6xRoutineInputArgument(); oRes.InputArguments[0].Position = 1; oRes.InputArguments[0].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[0].Position); oRes.InputArguments[0].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[0].Word = true; oRes.InputArguments[0].Pointer = true; oRes.InputArguments[1] = new S6xRoutineInputArgument(); oRes.InputArguments[1].Position = 2; oRes.InputArguments[1].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[1].Position); oRes.InputArguments[1].Encryption = (int)CallArgsMode.Mode3; oRes.InputArguments[1].Word = true; oRes.InputArguments[1].Pointer = true; oRes.InputArguments[2] = new S6xRoutineInputArgument(); oRes.InputArguments[2].Position = 3; oRes.InputArguments[2].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[2].Position); oRes.InputArguments[2].Encryption = (int)CallArgsMode.Mode3; oRes.InputArguments[2].Word = true; oRes.InputArguments[2].Pointer = true; oRes.InputArguments[3] = new S6xRoutineInputArgument(); oRes.InputArguments[3].Position = 4; oRes.InputArguments[3].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[3].Position); oRes.InputArguments[3].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[3].Word = true; oRes.InputArguments[3].Pointer = false; oRes.InputArguments[4] = new S6xRoutineInputArgument(); oRes.InputArguments[4].Position = 5; oRes.InputArguments[4].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[4].Position); oRes.InputArguments[4].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[4].Word = true; oRes.InputArguments[4].Pointer = false; break; case Fixed_Routines.OBDII_CLEAR_MALF: oRes = new S6xSignature(); oRes.ShortLabel = "CLEAR_MALF"; oRes.Label = "Clear Malfunction Routine"; oRes.Comments = "CLEAR_MALF - Clear Malfunction Routine"; oRes.Comments += "\r\n1st Param is OBD Error Code to be deleted."; oRes.InputArguments = new S6xRoutineInputArgument[1]; oRes.InputArguments[0] = new S6xRoutineInputArgument(); oRes.InputArguments[0].Position = 1; oRes.InputArguments[0].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[0].Position); oRes.InputArguments[0].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[0].Word = true; oRes.InputArguments[0].Pointer = false; break; case Fixed_Routines.OBDII_MALFUNCTION: oRes = new S6xSignature(); oRes.ShortLabel = "MALFUNCTION"; oRes.Label = "Malfunction Routine"; oRes.Comments = "MALFUNCTION - Malfunction Routine"; oRes.Comments += "\r\n1st Param is OBD Error Code to be pushed."; oRes.InputArguments = new S6xRoutineInputArgument[1]; oRes.InputArguments[0] = new S6xRoutineInputArgument(); oRes.InputArguments[0].Position = 1; oRes.InputArguments[0].UniqueKey = string.Format("Ra{0:d3}", oRes.InputArguments[0].Position); oRes.InputArguments[0].Encryption = (int)CallArgsMode.Standard; oRes.InputArguments[0].Word = true; oRes.InputArguments[0].Pointer = false; break; case Fixed_Routines.RPM_MNGT_8061_01: case Fixed_Routines.RPM_MNGT_8061_02: oRes = new S6xSignature(); oRes.ShortLabel = "RPM_MNGT"; oRes.Label = "RPM Management"; oRes.for806x = Signature806xOptions.for8061Only.ToString(); oRes.Comments = "RPM_MNGT - RPM Management"; break; case Fixed_Routines.RPM_MNGT_8065_01: case Fixed_Routines.RPM_MNGT_8065_02: case Fixed_Routines.RPM_MNGT_8065_03: oRes = new S6xSignature(); oRes.ShortLabel = "RPM_MNGT"; oRes.Label = "RPM Management"; oRes.for806x = Signature806xOptions.for8065Only.ToString(); oRes.Comments = "RPM_MNGT - RPM Management"; break; case Fixed_Routines.ECT_INIT_8061_01: oRes = new S6xSignature(); oRes.ShortLabel = "ECT_INIT"; oRes.Label = "ECT Initialization"; oRes.for806x = Signature806xOptions.for8061Only.ToString(); oRes.Comments = "ECT_INIT - ECT Initialization"; break; case Fixed_Routines.ECT_INIT_8061_02: oRes = new S6xSignature(); oRes.ShortLabel = "BASE_INIT"; oRes.Label = "Base Initialization"; oRes.for806x = Signature806xOptions.for8061Only.ToString(); oRes.Comments = "BASE_INIT - Base Initialization"; break; case Fixed_Routines.ECT_CLIP_8065_01: case Fixed_Routines.ECT_CLIP_8065_02: oRes = new S6xSignature(); oRes.ShortLabel = "ECT_CLIP"; oRes.Label = "ECT Clip"; oRes.for806x = Signature806xOptions.for8065Only.ToString(); oRes.Comments = "ECT_CLIP - ECT Clip"; break; case Fixed_Routines.ECT_CLIPW_8065_02: oRes = new S6xSignature(); oRes.ShortLabel = "ECT_CLIPW"; oRes.Label = "ECT Clip W"; oRes.for806x = Signature806xOptions.for8065Only.ToString(); oRes.Comments = "ECT_CLIPW - ECT Clip W"; break; case Fixed_Routines.CHT_CLIPW_8065_02: oRes = new S6xSignature(); oRes.ShortLabel = "CHT_CLIPW"; oRes.Label = "CHT Clip W"; oRes.for806x = Signature806xOptions.for8065Only.ToString(); oRes.Comments = "CHT_CLIPW - CHT Clip W"; break; default: break; } return(oRes); }
public static void addStructureRow(ref SQLite806xDB db806x, ref SADS6x sadS6x, ref List <R_806x_Def_Structures> rList, S6xStructure s6xObject) { if (db806x == null) { return; } if (sadS6x == null) { return; } if (rList == null) { return; } if (s6xObject == null) { return; } if (s6xObject.Skip || !s6xObject.Store) { return; } R_806x_Def_Structures rRow = db806x.newRow <R_806x_Def_Structures>(); rRow.Bank.Value = s6xObject.BankNum; rRow.Address.Value = s6xObject.AddressInt; rRow.UniqueAddCode.Value = s6xObject.DuplicateNum; rRow.Comments.Value = s6xObject.Comments; rRow.Label.Value = s6xObject.Label; rRow.Number.Value = s6xObject.Number; rRow.ShortLabel.Value = s6xObject.ShortLabel; rRow.StructureDefinition.Value = s6xObject.StructDef; rList.Add(rRow); }
public static bool showElemData(ref DataGridView elemDataGridView, ref SADBin sadBin, object s6xObject, bool dataDecimal, bool ignoreDefinedConversion, bool dataReversed, RepositoryConversionItem rcOutput, RepositoryConversionItem rcInput) { S6xScalar s6xScalar = null; S6xFunction s6xFunction = null; S6xTable s6xTable = null; S6xStructure s6xStruct = null; DataTable dtTable = null; Type dataType = null; string sValue = string.Empty; int iValue = 0; int iAddress = 0; string[] arrBytes = null; string[] arrCols = null; object[] arrRows = null; object[] arrRowsHeaders = null; object[] arrRow = null; bool failedScale = false; int iBfTop = -1; if (elemDataGridView == null) { return(false); } if (sadBin == null) { return(false); } if (s6xObject == null) { return(false); } if (dataDecimal) { dataType = typeof(double); } else { dataType = typeof(string); } elemDataGridView.DataSource = null; S6xNavHeaderCategory headerCategory = S6xNavHeaderCategory.UNDEFINED; if (s6xObject.GetType() == typeof(S6xScalar)) { headerCategory = S6xNavHeaderCategory.SCALARS; } else if (s6xObject.GetType() == typeof(S6xFunction)) { headerCategory = S6xNavHeaderCategory.FUNCTIONS; } else if (s6xObject.GetType() == typeof(S6xTable)) { headerCategory = S6xNavHeaderCategory.TABLES; } else if (s6xObject.GetType() == typeof(S6xStructure)) { headerCategory = S6xNavHeaderCategory.STRUCTURES; } switch (headerCategory) { case S6xNavHeaderCategory.SCALARS: s6xScalar = (S6xScalar)s6xObject; elemDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; s6xScalar.AddressBinInt = Tools.binAddressCorrected(s6xScalar.BankNum, s6xScalar.AddressInt, ref sadBin, s6xScalar.AddressBinInt); if (s6xScalar.isBitFlags) { dataType = typeof(string); arrCols = null; if (s6xScalar.BitFlags != null) { if (s6xScalar.BitFlags.Length > 0) { arrCols = new string[s6xScalar.BitFlags.Length + 1]; for (int iCol = 1; iCol < arrCols.Length; iCol++) { arrCols[iCol] = s6xScalar.BitFlags[arrCols.Length - iCol - 1].ShortLabel; } } } // Default BitFlags if (arrCols == null) { iBfTop = 15; if (s6xScalar.Byte) { iBfTop = 7; } for (int iBf = iBfTop; iBf >= 0; iBf--) { arrCols = new string[iBfTop + 2]; for (int iCol = 1; iCol < arrCols.Length; iCol++) { arrCols[iCol] = "B" + iBf.ToString(); } } } // For better output if (arrCols != null) { for (int iCol = 1; iCol < arrCols.Length; iCol++) { arrCols[iCol] = OutputTools.GetSpacesCenteredString(arrCols[iCol], 20); } } } else { arrCols = new string[1]; } if (s6xScalar.Byte) { arrCols[0] = "Byte"; arrBytes = sadBin.getBytesArray(s6xScalar.AddressBinInt, 1); try { sValue = arrBytes[0]; iValue = Tools.getByteInt(sValue, s6xScalar.Signed); } catch { sValue = string.Empty; iValue = 0; } } else { arrCols[0] = "Word"; arrBytes = sadBin.getBytesArray(s6xScalar.AddressBinInt, 2); try { sValue = Tools.LsbFirst(arrBytes); iValue = Tools.getWordInt(sValue, s6xScalar.Signed); } catch { sValue = string.Empty; iValue = 0; } } // For better output if (arrCols.Length == 1) { arrCols[0] = OutputTools.GetSpacesCenteredString(arrCols[0], 100); } else { arrCols[0] = OutputTools.GetSpacesCenteredString(arrCols[0], 50); } arrRow = new object[arrCols.Length]; if (s6xScalar.isBitFlags) { BitArray arrBit = new BitArray(new int[] { iValue }); for (int iCol = 1; iCol < arrRow.Length; iCol++) { if (arrBit[s6xScalar.BitFlags[arrRow.Length - iCol - 1].Position]) { arrRow[iCol] = s6xScalar.BitFlags[arrRow.Length - iCol - 1].SetValue; } else { arrRow[iCol] = s6xScalar.BitFlags[arrRow.Length - iCol - 1].NotSetValue; } } } if (dataDecimal) { if (failedScale) { arrRow[0] = iValue; } else { try { if (ignoreDefinedConversion) { if (rcOutput == null) { arrRow[0] = iValue; } else { arrRow[0] = Tools.ScaleValue(iValue, rcOutput.InternalFormula, 0, true); } } else { if (rcOutput == null) { arrRow[0] = Tools.ScaleValue(iValue, s6xScalar.ScaleExpression, s6xScalar.ScalePrecision, true); } else { arrRow[0] = Tools.ScaleValue(iValue, rcOutput.InternalFormula.ToUpper().Replace("X", "(" + s6xScalar.ScaleExpression + ")"), s6xScalar.ScalePrecision, true); } } } catch { failedScale = true; arrRow[0] = iValue; } } } else { arrRow[0] = sValue.ToUpper(); } arrRows = new object[] { arrRow }; s6xScalar = null; break; case S6xNavHeaderCategory.FUNCTIONS: s6xFunction = (S6xFunction)s6xObject; elemDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; s6xFunction.AddressBinInt = Tools.binAddressCorrected(s6xFunction.BankNum, s6xFunction.AddressInt, ref sadBin, s6xFunction.AddressBinInt); arrCols = new string[2]; arrCols[0] = "Word Input"; iValue = 2; if (s6xFunction.ByteInput) { arrCols[0] = "Byte Input"; iValue--; } arrCols[1] = "Word Output"; iValue += 2; if (s6xFunction.ByteOutput) { arrCols[1] = "Byte Output"; iValue--; } arrCols[0] = OutputTools.GetSpacesCenteredString(arrCols[0], 50); // For better output arrCols[1] = OutputTools.GetSpacesCenteredString(arrCols[1], 50); // For better output if (s6xFunction.RowsNumber <= 0) { arrRows = new object[] { }; } else { arrRows = new object[s6xFunction.RowsNumber]; arrBytes = sadBin.getBytesArray(s6xFunction.AddressBinInt, iValue * arrRows.Length); iAddress = 0; for (int iRow = 0; iRow < arrRows.Length; iRow++) { arrRow = new object[arrCols.Length]; for (int iCol = 0; iCol < arrRow.Length; iCol++) { if (iCol % 2 == 0) { if (s6xFunction.ByteInput) { try { sValue = arrBytes[iAddress]; iValue = Tools.getByteInt(sValue, s6xFunction.SignedInput); } catch { sValue = string.Empty; iValue = 0; } iAddress++; } else { try { sValue = arrBytes[iAddress + 1] + arrBytes[iAddress]; iValue = Tools.getWordInt(sValue, s6xFunction.SignedInput); } catch { sValue = string.Empty; iValue = 0; } iAddress += 2; } if (dataDecimal) { if (failedScale) { arrRow[iCol] = iValue; } else { try { if (ignoreDefinedConversion) { if (rcInput == null) { arrRow[iCol] = iValue; } else { arrRow[iCol] = Tools.ScaleValue(iValue, rcInput.InternalFormula, 0, true); } } else { if (rcInput == null) { arrRow[iCol] = Tools.ScaleValue(iValue, s6xFunction.InputScaleExpression, s6xFunction.InputScalePrecision, true); } else { arrRow[iCol] = Tools.ScaleValue(iValue, rcInput.InternalFormula.ToUpper().Replace("X", "(" + s6xFunction.InputScaleExpression + ")"), s6xFunction.InputScalePrecision, true); } } } catch { failedScale = true; arrRow[iCol] = iValue; } } } else { arrRow[iCol] = sValue.ToUpper(); } } else { if (s6xFunction.ByteOutput) { try { sValue = arrBytes[iAddress]; iValue = Tools.getByteInt(sValue, s6xFunction.SignedOutput); } catch { sValue = string.Empty; iValue = 0; } iAddress++; } else { try { sValue = arrBytes[iAddress + 1] + arrBytes[iAddress]; iValue = Tools.getWordInt(sValue, s6xFunction.SignedOutput); } catch { sValue = string.Empty; iValue = 0; } iAddress += 2; } if (dataDecimal) { if (failedScale) { arrRow[iCol] = iValue; } else { try { if (ignoreDefinedConversion) { if (rcOutput == null) { arrRow[iCol] = iValue; } else { arrRow[iCol] = Tools.ScaleValue(iValue, rcOutput.InternalFormula, 0, true); } } else { if (rcOutput == null) { arrRow[iCol] = Tools.ScaleValue(iValue, s6xFunction.OutputScaleExpression, s6xFunction.OutputScalePrecision, true); } else { arrRow[iCol] = Tools.ScaleValue(iValue, rcOutput.InternalFormula.ToUpper().Replace("X", "(" + s6xFunction.OutputScaleExpression + ")"), s6xFunction.OutputScalePrecision, true); } } } catch { failedScale = true; arrRow[iCol] = iValue; } } } else { arrRow[iCol] = sValue.ToUpper(); } } } arrRows[iRow] = arrRow; } } s6xFunction = null; break; case S6xNavHeaderCategory.TABLES: s6xTable = (S6xTable)s6xObject; if (s6xTable.ColsNumber <= 0) { return(false); } elemDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; s6xTable.AddressBinInt = Tools.binAddressCorrected(s6xTable.BankNum, s6xTable.AddressInt, ref sadBin, s6xTable.AddressBinInt); //arrCols = new string[s6xTable.ColsNumber]; //for (int iCol = 0; iCol < arrCols.Length; iCol++) arrCols[iCol] = (iCol + 1).ToString(); arrCols = getTableElemDataScale(ref sadBin, s6xTable.ColsScalerAddress, s6xTable.ColsNumber); // For better output if (arrCols != null) { for (int iCol = 0; iCol < arrCols.Length; iCol++) { arrCols[iCol] = OutputTools.GetSpacesCenteredString(arrCols[iCol], 10); } } if (s6xTable.RowsNumber <= 0) { arrRows = new object[] { }; } else { arrRows = new object[s6xTable.RowsNumber]; arrRowsHeaders = getTableElemDataScale(ref sadBin, s6xTable.RowsScalerAddress, s6xTable.RowsNumber); if (s6xTable.WordOutput) { arrBytes = sadBin.getBytesArray(s6xTable.AddressBinInt, arrCols.Length * arrRows.Length * 2); } else { arrBytes = sadBin.getBytesArray(s6xTable.AddressBinInt, arrCols.Length * arrRows.Length); } iAddress = 0; for (int iRow = 0; iRow < arrRows.Length; iRow++) { arrRow = new object[arrCols.Length]; for (int iCol = 0; iCol < arrRow.Length; iCol++) { try { if (s6xTable.WordOutput) { sValue = arrBytes[iAddress + 1] + arrBytes[iAddress]; iValue = Tools.getWordInt(sValue, s6xTable.SignedOutput); } else { sValue = arrBytes[iAddress]; iValue = Tools.getByteInt(sValue, s6xTable.SignedOutput); } } catch { sValue = string.Empty; iValue = 0; } iAddress++; if (s6xTable.WordOutput) { iAddress++; } if (dataDecimal) { if (failedScale) { arrRow[iCol] = iValue; } else { try { if (ignoreDefinedConversion) { if (rcOutput == null) { arrRow[iCol] = iValue; } else { arrRow[iCol] = Tools.ScaleValue(iValue, rcOutput.InternalFormula, 0, true); } } else { if (rcOutput == null) { arrRow[iCol] = Tools.ScaleValue(iValue, s6xTable.CellsScaleExpression, s6xTable.CellsScalePrecision, true); } else { arrRow[iCol] = Tools.ScaleValue(iValue, rcOutput.InternalFormula.ToUpper().Replace("X", "(" + s6xTable.CellsScaleExpression + ")"), s6xTable.CellsScalePrecision, true); } } } catch { failedScale = true; arrRow[iCol] = iValue; } } } else { arrRow[iCol] = sValue.ToUpper(); } } arrRows[iRow] = arrRow; } } s6xTable = null; break; case S6xNavHeaderCategory.STRUCTURES: s6xStruct = (S6xStructure)s6xObject; if (s6xStruct.Number <= 0) { return(false); } s6xStruct.Structure = new Structure(s6xStruct); if (!s6xStruct.Structure.isValid) { return(false); } if (s6xStruct.Structure.isEmpty) { return(false); } elemDataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; s6xStruct.Structure.AddressBinInt = Tools.binAddressCorrected(s6xStruct.Structure.BankNum, s6xStruct.Structure.AddressInt, ref sadBin, s6xStruct.Structure.AddressBinInt); arrBytes = sadBin.getBytesArray(s6xStruct.Structure.AddressBinInt, s6xStruct.Structure.MaxSizeSingle * s6xStruct.Number); s6xStruct.Structure.Read(ref arrBytes, s6xStruct.Number); arrBytes = null; arrCols = new string[s6xStruct.Structure.MaxLineItemsNum]; for (int iCol = 0; iCol < arrCols.Length; iCol++) { arrCols[iCol] = (iCol + 1).ToString(); } // For better output for (int iCol = 0; iCol < arrCols.Length; iCol++) { arrCols[iCol] = OutputTools.GetSpacesCenteredString(arrCols[iCol], 10); } dataType = typeof(string); if (s6xStruct.Structure.Lines.Count <= 0) { arrRows = new object[] { }; } else { arrRows = new object[s6xStruct.Structure.Lines.Count]; arrRowsHeaders = new object[s6xStruct.Structure.Lines.Count]; int iRow = 0; foreach (StructureLine structLine in s6xStruct.Structure.Lines) { arrRowsHeaders[iRow] = structLine.NumberInStructure.ToString(); arrRow = new object[arrCols.Length]; for (int iCol = 0; iCol < structLine.Items.Count; iCol++) { arrRow[iCol] = ((StructureItem)structLine.Items[iCol]).Value(structLine.NumberInStructure); } arrRows[iRow] = arrRow; iRow++; } } s6xStruct = null; break; default: return(false); } if (arrCols == null) { return(false); } if (dataReversed) { object[] arrReversedRows = new object[arrRows.Length]; for (int iRow = 0; iRow < arrReversedRows.Length; iRow++) { arrReversedRows[arrReversedRows.Length - 1 - iRow] = arrRows[iRow]; } arrRows = arrReversedRows; arrReversedRows = null; if (arrRowsHeaders != null) { arrReversedRows = new object[arrRowsHeaders.Length]; for (int iRow = 0; iRow < arrReversedRows.Length; iRow++) { arrReversedRows[arrReversedRows.Length - 1 - iRow] = arrRowsHeaders[iRow]; } arrRowsHeaders = arrReversedRows; arrReversedRows = null; } } dtTable = new DataTable(); //foreach (string colLabel in arrCols) dtTable.Columns.Add(new DataColumn(colLabel, dataType)); for (int iCol = 0; iCol < arrCols.Length; iCol++) { DataColumn dcDC = new DataColumn(iCol.ToString(), dataType); dcDC.Caption = arrCols[iCol]; dtTable.Columns.Add(dcDC); } foreach (object[] oRow in arrRows) { dtTable.Rows.Add(oRow); } arrRows = null; elemDataGridView.Tag = new object[] { arrCols, arrRowsHeaders }; // For Speed purpose elemDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; elemDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; elemDataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing; try { elemDataGridView.DataSource = dtTable; } catch { return(false); } // For Speed purpose switch (headerCategory) { case S6xNavHeaderCategory.SCALARS: case S6xNavHeaderCategory.FUNCTIONS: elemDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; break; case S6xNavHeaderCategory.TABLES: case S6xNavHeaderCategory.STRUCTURES: //elemDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; elemDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; break; } elemDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; elemDataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders; dtTable = null; arrCols = null; arrRowsHeaders = null; elemDataGridView.Visible = true; return(true); }