protected int getDataStartIndex(OBDParameter param) { switch (param.Service) { case 1: return(10); case 2: return(12); case 3: case 4: return(8); case 5: return(12); case 7: return(8); case 9: if (param.Parameter == 2) { return(12); } else { break; } } return(10); }
public Dictionary <string, string> GetPID0C() { Dictionary <string, string> dicRet = new Dictionary <string, string>(); string strVal = ""; OBDParameter param = new OBDParameter(); if (m_obd.OBDif.STDType == StandardType.ISO_27145) { param.OBDRequest = "22F40C"; param.Service = 0x22; param.Parameter = 0xF40C; param.SubParameter = 0; param.ValueTypes = (int)OBDParameter.EnumValueTypes.Double; } else if (m_obd.OBDif.STDType == StandardType.ISO_15031) { param.OBDRequest = "010C"; param.Service = 1; param.Parameter = 0x0C; param.SubParameter = 0; param.ValueTypes = (int)OBDParameter.EnumValueTypes.Double; } List <OBDParameterValue> valueList = m_obd.OBDif.GetValueList(param); foreach (OBDParameterValue value in valueList) { if (value.ErrorDetected) { continue; } if (m_obd.Mode01Support.ContainsKey(value.ECUResponseID) && m_obd.Mode01Support[value.ECUResponseID][(param.Parameter & 0x00FF) - 1]) { if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.Bool) != 0) { if (value.BoolValue) { strVal = "ON"; } else { strVal = "OFF"; } } else if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.Double) != 0) { strVal = value.DoubleValue.ToString(); } else if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.String) != 0) { strVal = value.StringValue; } else if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.ShortString) != 0) { strVal = value.ShortStringValue; } } dicRet.Add(value.ECUResponseID, strVal); } return(dicRet); }
protected int getDataStartIndex(OBDParameter param, bool bIsMultiline, bool bConsecutiveLine) { if (bConsecutiveLine) { return(5); } switch (param.Service) { case 1: return(9); case 2: return(11); case 3: case 7: return(!bIsMultiline ? 9 : 11); case 4: return(7); case 5: return(11); case 9: return(13); default: return(9); } }
public OBDParameter GetFreezeFrameCopy(int iFrame) { OBDParameter copy = GetCopy(); copy.Service = 2; copy.OBDRequest = "02" + copy.OBDRequest.Substring(2, 2) + iFrame.ToString("D2"); return(copy); }
static Dictionary <string, string> GetECUNAME(SH_OBD_Dll obd) { OBDInterface OBDIf = obd.GetOBDInterface(); Dictionary <string, string> dicRet = new Dictionary <string, string>(); OBDParameter param = new OBDParameter(); if (OBDIf.STDType == StandardType.ISO_27145) { param.OBDRequest = "22F80A"; param.Service = 0x22; param.Parameter = 0xF80A; param.ValueTypes = (int)OBDParameter.EnumValueTypes.ListString; } else if (OBDIf.STDType == StandardType.ISO_15031) { param.OBDRequest = "090A"; param.Service = 9; param.Parameter = 0xA; param.ValueTypes = (int)OBDParameter.EnumValueTypes.ListString; } List <OBDParameterValue> valueList = OBDIf.GetValueList(param); foreach (OBDParameterValue value in valueList) { if (value.ErrorDetected) { continue; } bool flag = obd.Mode09Support.ContainsKey(value.ECUResponseID) && obd.Mode09Support[value.ECUResponseID][(param.Parameter & 0x00FF) - 1]; if (flag) { if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.ListString) != 0) { if (value.ListStringValue.Count == 0 || value.ListStringValue[0].Length == 0) { dicRet.Add(value.ECUResponseID, ""); } else { string strVal = value.ListStringValue[0]; for (int i = 1; i < value.ListStringValue.Count; i++) { strVal += "," + value.ListStringValue[i]; } dicRet.Add(value.ECUResponseID, strVal); } } } } return(dicRet); }
protected int getDataStartIndex(OBDParameter param) { switch (param.Service) { case 1: return 10; case 2: return 12; case 3: case 4: return 8; case 5: return 12; case 7: return 8; case 9: if (param.Parameter == 2) return 12; else break; } return 10; }
public bool loadParameters(string fileName) { try { int lineNo = 0; string line; char[] chArray = new char[] { ',' }; using (StreamReader streamReader = new StreamReader(fileName)) while ((line = streamReader.ReadLine()) != null) { try { string[] strArray = line.Split(chArray); OBDParameter obdParameter = new OBDParameter(); obdParameter.PID = strArray[0]; obdParameter.Name = strArray[1]; obdParameter.OBDRequest = strArray[2]; obdParameter.Service = int.Parse(strArray[3]); obdParameter.Parameter = int.Parse(strArray[4]); obdParameter.SubParameter = int.Parse(strArray[5]); if (strArray[6].CompareTo("Airflow") == 0) obdParameter.Category = 0; else if (strArray[6].CompareTo("DTC") == 0) obdParameter.Category = 1; else if (strArray[6].CompareTo("Emissions") == 0) obdParameter.Category = 2; else if (strArray[6].CompareTo("Fuel") == 0) obdParameter.Category = 3; else if (strArray[6].CompareTo("General") == 0) obdParameter.Category = 4; else if (strArray[6].CompareTo("O2") == 0) obdParameter.Category = 5; else if (strArray[6].CompareTo("Powertrain") == 0) obdParameter.Category = 6; else if (strArray[6].CompareTo("Speed") == 0) obdParameter.Category = 7; else if (strArray[6].CompareTo("Temperature") == 0) obdParameter.Category = 8; if (strArray[7].CompareTo("Generic") == 0) obdParameter.Type = 0; else if (strArray[7].CompareTo("Manufacturer") == 0) obdParameter.Type = 1; else if (strArray[7].CompareTo("Scripted") == 0) obdParameter.Type = 2; if (strArray[8].CompareTo("SAE") == 0) obdParameter.Manufacturer = 0; else if (strArray[8].CompareTo("GM") == 0) obdParameter.Manufacturer = 1; else if (strArray[8].CompareTo("Ford") == 0) obdParameter.Manufacturer = 2; else if (strArray[8].CompareTo("ProScan") == 0) obdParameter.Manufacturer = 3; obdParameter.Priority = int.Parse(strArray[9]); obdParameter.EnglishUnitLabel = strArray[10]; obdParameter.MetricUnitLabel = strArray[11]; try { obdParameter.EnglishMinValue = double.Parse(strArray[12]); obdParameter.EnglishMaxValue = double.Parse(strArray[13]); obdParameter.MetricMinValue = double.Parse(strArray[14]); obdParameter.MetricMaxValue = double.Parse(strArray[15]); } catch { } int valueType = 0; if (int.Parse(strArray[16]) > 0) valueType = 1; if (int.Parse(strArray[17]) > 0) valueType |= 2; if (int.Parse(strArray[18]) > 0) valueType |= 4; if (int.Parse(strArray[19]) > 0) valueType |= 8; obdParameter.ValueTypes = valueType; m_listAllParameters.Add(obdParameter); ++lineNo; } catch (Exception) { m_commLog.AddItem(string.Format("Failed to load parameters from {0}", fileName)); return false; } } m_commLog.AddItem(string.Format("Loaded {0} parameters from {1}", lineNo.ToString(), fileName)); return true; } catch (Exception) { m_commLog.AddItem(string.Format("Failed to locate parameter file: {0}", fileName)); return false; } }
public bool isParameterSupported(OBDParameter param) { IEnumerator enumerator = m_listSupportedParameters.GetEnumerator(); if (enumerator.MoveNext()) { while ((OBDParameter)enumerator.Current != param) { if (!enumerator.MoveNext()) return false; } return true; } return false; }
public static OBDParameterValue getValue(OBDParameter param, OBDResponseList responses, bool bEnglishUnits) { if (responses.ResponseCount == 1) { return getValue(param, responses.GetOBDResponse(0), bEnglishUnits); } if ((param.Service == 1) || (param.Service == 2)) { if (((param.Parameter == 0) || (param.Parameter == 0x20)) || ((param.Parameter == 0x40) || (param.Parameter == 0x60))) { OBDParameterValue value7 = new OBDParameterValue(); int num2 = 0; if (0 < responses.ResponseCount) { do { OBDParameterValue value4 = getValue(param, responses.GetOBDResponse(num2), bEnglishUnits); if (value4.ErrorDetected) { return value4; } int num = 0; do { if (value4.getBitFlag(num)) { value7.setBitFlag(num, true); } num++; } while (num < 0x20); num2++; } while (num2 < responses.ResponseCount); } return value7; } if ((param.Parameter == 1) && (param.SubParameter == 0)) { OBDParameterValue value2 = new OBDParameterValue(); value2.BoolValue = false; int num5 = 0; if (0 < responses.ResponseCount) { do { OBDParameterValue value6 = getValue(param, responses.GetOBDResponse(num5), bEnglishUnits); if (value6.ErrorDetected) { return value6; } if (value6.BoolValue) { value2.BoolValue = true; } num5++; } while (num5 < responses.ResponseCount); } if (value2.BoolValue) { value2.DoubleValue = 1.0; value2.StringValue = "ON"; value2.ShortStringValue = "ON"; return value2; } value2.DoubleValue = 0.0; value2.StringValue = "OFF"; value2.ShortStringValue = "OFF"; return value2; } if ((param.Parameter == 1) && (param.SubParameter == 1)) { OBDParameterValue value3 = new OBDParameterValue(); value3.DoubleValue = 0.0; int num4 = 0; if (0 < responses.ResponseCount) { do { OBDParameterValue value5 = getValue(param, responses.GetOBDResponse(num4), bEnglishUnits); if (value5.ErrorDetected) { return value5; } value3.DoubleValue = value5.DoubleValue + value3.DoubleValue; num4++; } while (num4 < responses.ResponseCount); } return value3; } } if ((param.Service != 3) && (param.Service != 7)) { return getValue(param, responses.GetOBDResponse(0), bEnglishUnits); } OBDParameterValue value8 = new OBDParameterValue(); StringCollection strings = new StringCollection(); int index = 0; if (0 < responses.ResponseCount) { do { StringEnumerator enumerator = getValue(param, responses.GetOBDResponse(index), bEnglishUnits).StringCollectionValue.GetEnumerator(); if (enumerator.MoveNext()) { do { strings.Add(enumerator.Current); } while (enumerator.MoveNext()); } index++; } while (index < responses.ResponseCount); } value8.StringCollectionValue = strings; return value8; }
public abstract OBDResponseList query(OBDParameter param);
public override OBDResponseList parse(OBDParameter param, string response) { return new OBDResponseList(response); }
protected int getDataStartIndex(OBDParameter param, bool bIsMultiline, bool bConsecutiveLine) { if (bConsecutiveLine) return 5; switch (param.Service) { case 1: return 9; case 2: return 11; case 3: case 7: return !bIsMultiline ? 9 : 11; case 4: return 7; case 5: return 11; case 9: return 13; default: return 9; } }
static Dictionary <string, string> GetPID0C(SH_OBD_Dll obd) { OBDInterface OBDIf = obd.GetOBDInterface(); Dictionary <string, string> dicRet = new Dictionary <string, string>(); OBDParameter param = new OBDParameter(); if (OBDIf.STDType == StandardType.ISO_27145) { param.OBDRequest = "22F40C"; param.Service = 0x22; param.Parameter = 0xF40C; param.ValueTypes = (int)OBDParameter.EnumValueTypes.Double; } else if (OBDIf.STDType == StandardType.ISO_15031) { param.OBDRequest = "010C"; param.Service = 1; param.Parameter = 0x0C; param.ValueTypes = (int)OBDParameter.EnumValueTypes.Double; } else if (OBDIf.STDType == StandardType.SAE_J1939) { return(dicRet); } List <OBDParameterValue> valueList = OBDIf.GetValueList(param); foreach (OBDParameterValue value in valueList) { if (value.ErrorDetected) { continue; } if (obd.Mode01Support.ContainsKey(value.ECUResponseID) && obd.Mode01Support[value.ECUResponseID][(param.Parameter & 0x00FF) - 1]) { if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.Bool) != 0) { if (value.BoolValue) { dicRet.Add(value.ECUResponseID, "ON"); } else { dicRet.Add(value.ECUResponseID, "OFF"); } } else if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.Double) != 0) { dicRet.Add(value.ECUResponseID, value.DoubleValue.ToString()); } else if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.String) != 0) { dicRet.Add(value.ECUResponseID, value.StringValue); } else if ((param.ValueTypes & (int)OBDParameter.EnumValueTypes.ShortString) != 0) { dicRet.Add(value.ECUResponseID, value.ShortStringValue); } } } return(dicRet); }
public abstract OBDResponseList parse(OBDParameter param, string response);
private void ConnectThreadNew(object state) { ShowConnectingLabel(); if (m_obdInterface.GetCommSettings().AutoDetect) { if (m_obdInterface.initDeviceAuto()) { m_obdInterface.logItem("Connection Established!"); ShowConnectedLabel(); OBDParameter param = new OBDParameter(); param.OBDRequest = "0902"; param.Service = 9; param.Parameter = 2; param.ValueTypes = 4; m_obdInterface.getValue(param, true); } else { MessageBox.Show("ProScan failed to find a compatible OBD-II interface attached to this computer.\r\n\r\nPlease verify that no other application is currently using the required port.", "Auto Detection Failure", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); m_obdInterface.logItem("Failed to find a compatible OBD-II interface."); ShowDisconnectedLabel(); } } else { int baudRate = m_obdInterface.GetCommSettings().BaudRate; int comPort = m_obdInterface.GetCommSettings().ComPort; int protocolIndex = m_obdInterface.GetCommSettings().ProtocolIndex; int hardwareIndex = m_obdInterface.GetCommSettings().HardwareIndex; if (m_obdInterface.initDevice(hardwareIndex, comPort, baudRate, protocolIndex)) { m_obdInterface.logItem("Connection Established!"); ShowConnectedLabel(); } else { int num5 = m_obdInterface.GetCommSettings().BaudRate; MessageBox.Show(string.Format("ProScan failed to find a compatible OBD-II interface attached to {0} at baud rate {1} bps.\r\n\r\nPlease verify that no other application is currently using the required port and that the baud rate is correct.", m_obdInterface.GetCommSettings().ComPortName, num5.ToString()), "Connection Failure", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); m_obdInterface.logItem("Failed to find a compatible OBD-II interface."); ShowDisconnectedLabel(); } } }
public override OBDResponseList parse(OBDParameter param, string response) { return(new OBDResponseList(response)); }
public OBDParameterValue getSpecialValue(OBDParameter param, bool bEnglishUnits) { OBDParameterValue value = new OBDParameterValue(); if (param.Parameter != 0) return null; string s = getRawResponse("ATRV"); m_commLog.AddItem("Response: " + s); if (s != null) { s = s.Replace("V", ""); value.DoubleValue = double.Parse(s); } return value; }
public override OBDResponseList parse(OBDParameter param, string response) { if (response != null) { if (response.Length < 1) response = ""; } else response = ""; OBDResponseList obdResponseList = new OBDResponseList(response); response = strip(response); if (errorCheck(response)) { obdResponseList.ErrorDetected = true; return obdResponseList; } else { ArrayList arrayList1 = split(response); arrayList1.Sort(); ArrayList arrayList2 = new ArrayList(); ArrayList arrayList3 = new ArrayList(); arrayList3.Add(arrayList1[0]); arrayList2.Add((object)arrayList3); string str1 = (string)arrayList1[0]; if (str1.Length < OBDParser_ISO14230_4_KWP.HEADER_LENGTH) { obdResponseList.ErrorDetected = true; return obdResponseList; } else { string strB = str1.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH); int index1 = 1; if (1 < arrayList1.Count) { do { string str2 = (string)arrayList1[index1]; if (str2.Length >= OBDParser_ISO14230_4_KWP.HEADER_LENGTH) { if (str2.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH).CompareTo(strB) == 0) { arrayList3.Add((object)str2); } else { arrayList3 = new ArrayList(); arrayList3.Add(arrayList1[index1]); arrayList2.Add((object)arrayList3); strB = str2.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH); } ++index1; } else goto label_14; } while (index1 < arrayList1.Count); goto label_15; label_14: obdResponseList.ErrorDetected = true; return obdResponseList; } label_15: int index2 = 0; if (0 < arrayList2.Count) { do { OBDResponse response1 = new OBDResponse(); ArrayList arrayList4 = (ArrayList)arrayList2[index2]; int dataStartIndex = getDataStartIndex(param); string str2 = (string)arrayList4[0]; int num1 = -2 - dataStartIndex; int length1 = str2.Length + num1; response1.Header = str2.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH); response1.Data = length1 > 0 ? str2.Substring(dataStartIndex, length1) : ""; int index3 = 1; if (1 < arrayList4.Count) { int num2 = num1; do { string str3 = (string)arrayList4[index3]; int length2 = str3.Length + num2; string str4 = length2 > 0 ? str3.Substring(dataStartIndex, length2) : ""; response1.Data = response1.Data + str4; ++index3; } while (index3 < arrayList4.Count); } obdResponseList.AddOBDResponse(response1); ++index2; } while (index2 < arrayList2.Count); } return obdResponseList; } } }
public OBDParameterValue getValue(OBDParameter param, bool bEnglishUnits) { if (param.PID.Length > 0) m_commLog.AddItem("Requesting " + param.PID); else m_commLog.AddItem("Requesting " + param.OBDRequest); if (param.Service == 0) return getSpecialValue(param, bEnglishUnits); OBDResponseList responses = m_obdDevice.query(param); string strItem1 = "Responses: "; int index1 = 0; if (0 < responses.ResponseCount) { do { strItem1 = strItem1 + string.Format("[{0}] ", responses.GetOBDResponse(index1).Data); ++index1; } while (index1 < responses.ResponseCount); } m_commLog.AddItem(strItem1); OBDParameterValue obdParameterValue = OBDInterpretter.getValue(param, responses, bEnglishUnits); if (obdParameterValue.ErrorDetected) { m_commLog.AddItem("Error Detected!"); return obdParameterValue; } else { string strItem2 = "Values: "; if ((param.ValueTypes & 2) == 2) { bool num = obdParameterValue.BoolValue; strItem2 = strItem2 + string.Format("[Bool: {0}] ", num.ToString()); } if ((param.ValueTypes & 1) == 1) { double num = obdParameterValue.DoubleValue; strItem2 = strItem2 + string.Format("[Double: {0}] ", num.ToString()); } if ((param.ValueTypes & 4) == 4) strItem2 += string.Format("[String: {0} / {1}] ", obdParameterValue.StringValue, obdParameterValue.ShortStringValue); if ((param.ValueTypes & 8) == 8) { string str = strItem2 + "[StringCollection: "; StringEnumerator enumerator = obdParameterValue.StringCollectionValue.GetEnumerator(); if (enumerator.MoveNext()) { do { str = str + enumerator.Current + ", "; } while (enumerator.MoveNext()); } strItem2 = str + "]"; } if ((param.ValueTypes & 32) == 32) { string str = strItem2 + "[BitFlags: "; int index2 = 0; do { str += obdParameterValue.getBitFlag(index2) ? "T" : "F"; ++index2; } while (index2 < 32); strItem2 = str + " ]"; } m_commLog.AddItem(strItem2); return obdParameterValue; } }
public override OBDResponseList query(OBDParameter param) { string obdResponse = getOBDResponse(param.OBDRequest); return m_Parser.parse(param, obdResponse); }
public bool initOBD() { OBDParameter obdParameter1 = new OBDParameter(1, 0, 0); obdParameter1.ValueTypes = 32; OBDParameterValue obdParameterValue1 = getValue(obdParameter1, true); if (obdParameterValue1.ErrorDetected) return false; IEnumerator enumerator1 = m_listAllParameters.GetEnumerator(); if (enumerator1.MoveNext()) { do { OBDParameter obdParameter2 = (OBDParameter)enumerator1.Current; if (obdParameter2.Parameter > 0 && obdParameter2.Parameter <= 32 && obdParameterValue1.getBitFlag(obdParameter2.Parameter - 1)) m_listSupportedParameters.Add((object)obdParameter2); } while (enumerator1.MoveNext()); } if (!obdParameterValue1.getBitFlag(31)) return true; obdParameter1.Parameter = 32; OBDParameterValue obdParameterValue2 = getValue(obdParameter1, true); if (obdParameterValue2.ErrorDetected) return false; IEnumerator enumerator2 = m_listAllParameters.GetEnumerator(); if (enumerator2.MoveNext()) { do { OBDParameter obdParameter2 = (OBDParameter)enumerator2.Current; if (obdParameter2.Parameter > 32 && obdParameter2.Parameter <= 64 && obdParameterValue2.getBitFlag(obdParameter2.Parameter - 33)) m_listSupportedParameters.Add((object)obdParameter2); } while (enumerator2.MoveNext()); } return true; }
public override OBDResponseList parse(OBDParameter param, string response) { if (response != null) { if (response.Length < 1) { response = ""; } } else { response = ""; } OBDResponseList obdResponseList = new OBDResponseList(response); response = strip(response); if (errorCheck(response)) { obdResponseList.ErrorDetected = true; return(obdResponseList); } else { ArrayList arrayList1 = split(response); arrayList1.Sort(); ArrayList arrayList2 = new ArrayList(); ArrayList arrayList3 = new ArrayList(); arrayList3.Add(arrayList1[0]); arrayList2.Add((object)arrayList3); string str1 = (string)arrayList1[0]; if (str1.Length < OBDParser_ISO14230_4_KWP.HEADER_LENGTH) { obdResponseList.ErrorDetected = true; return(obdResponseList); } else { string strB = str1.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH); int index1 = 1; if (1 < arrayList1.Count) { do { string str2 = (string)arrayList1[index1]; if (str2.Length >= OBDParser_ISO14230_4_KWP.HEADER_LENGTH) { if (str2.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH).CompareTo(strB) == 0) { arrayList3.Add((object)str2); } else { arrayList3 = new ArrayList(); arrayList3.Add(arrayList1[index1]); arrayList2.Add((object)arrayList3); strB = str2.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH); } ++index1; } else { goto label_14; } }while (index1 < arrayList1.Count); goto label_15; label_14: obdResponseList.ErrorDetected = true; return(obdResponseList); } label_15: int index2 = 0; if (0 < arrayList2.Count) { do { OBDResponse response1 = new OBDResponse(); ArrayList arrayList4 = (ArrayList)arrayList2[index2]; int dataStartIndex = getDataStartIndex(param); string str2 = (string)arrayList4[0]; int num1 = -2 - dataStartIndex; int length1 = str2.Length + num1; response1.Header = str2.Substring(0, OBDParser_ISO14230_4_KWP.HEADER_LENGTH); response1.Data = length1 > 0 ? str2.Substring(dataStartIndex, length1) : ""; int index3 = 1; if (1 < arrayList4.Count) { int num2 = num1; do { string str3 = (string)arrayList4[index3]; int length2 = str3.Length + num2; string str4 = length2 > 0 ? str3.Substring(dataStartIndex, length2) : ""; response1.Data = response1.Data + str4; ++index3; }while (index3 < arrayList4.Count); } obdResponseList.AddOBDResponse(response1); ++index2; }while (index2 < arrayList2.Count); } return(obdResponseList); } } }
public static OBDParameterValue getValue(OBDParameter param, OBDResponse response, bool bEnglishUnits) { StringCollection strings; OBDParameterValue value2 = new OBDParameterValue(); if (response == null) { value2.ErrorDetected = true; return value2; } switch (param.Service) { case 0: case 1: case 2: switch (param.Parameter) { case 0: case 0x20: case 0x40: case 0x60: case 0x80: { if (response.getDataByteCount() < 4) { value2.ErrorDetected = true; return value2; } int num8 = HexByteToInt(response.getDataByte(0)); int num7 = HexByteToInt(response.getDataByte(1)); int num6 = HexByteToInt(response.getDataByte(2)); int num5 = HexByteToInt(response.getDataByte(3)); value2.setBitFlag(0, ((num8 >> 7) & 1) == 1 ? false : true); value2.setBitFlag(1, ((num8 >> 6) & 1) == 1 ? false : true); value2.setBitFlag(2, ((num8 >> 5) & 1) == 1 ? false : true); value2.setBitFlag(3, ((num8 >> 4) & 1) == 1 ? false : true); value2.setBitFlag(4, ((num8 >> 3) & 1) == 1 ? false : true); value2.setBitFlag(5, ((num8 >> 2) & 1) == 1 ? false : true); value2.setBitFlag(6, ((num8 >> 1) & 1) == 1 ? false : true); value2.setBitFlag(7, (num8 & 1) == 1 ? false : true); value2.setBitFlag(8, ((num7 >> 7) & 1) == 1 ? false : true); value2.setBitFlag(9, ((num7 >> 6) & 1) == 1 ? false : true); value2.setBitFlag(10, ((num7 >> 5) & 1) == 1 ? false : true); value2.setBitFlag(11, ((num7 >> 4) & 1) == 1 ? false : true); value2.setBitFlag(12, ((num7 >> 3) & 1) == 1 ? false : true); value2.setBitFlag(13, ((num7 >> 2) & 1) == 1 ? false : true); value2.setBitFlag(14, ((num7 >> 1) & 1) == 1 ? false : true); value2.setBitFlag(15, (num7 & 1) == 1 ? false : true); value2.setBitFlag(16, ((num6 >> 7) & 1) == 1 ? false : true); value2.setBitFlag(17, ((num6 >> 6) & 1) == 1 ? false : true); value2.setBitFlag(18, ((num6 >> 5) & 1) == 1 ? false : true); value2.setBitFlag(19, ((num6 >> 4) & 1) == 1 ? false : true); value2.setBitFlag(20, ((num6 >> 3) & 1) == 1 ? false : true); value2.setBitFlag(21, ((num6 >> 2) & 1) == 1 ? false : true); value2.setBitFlag(22, ((num6 >> 1) & 1) == 1 ? false : true); value2.setBitFlag(23, (num6 & 1) == 1 ? false : true); value2.setBitFlag(24, ((num5 >> 7) & 1) == 1 ? false : true); value2.setBitFlag(25, ((num5 >> 6) & 1) == 1 ? false : true); value2.setBitFlag(26, ((num5 >> 5) & 1) == 1 ? false : true); value2.setBitFlag(27, ((num5 >> 4) & 1) == 1 ? false : true); value2.setBitFlag(28, ((num5 >> 3) & 1) == 1 ? false : true); value2.setBitFlag(29, ((num5 >> 2) & 1) == 1 ? false : true); value2.setBitFlag(30, ((num5 >> 1) & 1) == 1 ? false : true); value2.setBitFlag(31, (num5 & 1) == 1 ? false : true); return value2; } case 1: if (response.getDataByteCount() < 4) { value2.ErrorDetected = true; return value2; } switch (param.SubParameter) { case 0: if ((HexByteToInt(response.getDataByte(0)) & 0x80) == 0) return new OBDParameterValue(false, 0.0, "OFF", "OFF"); return new OBDParameterValue(true, 1.0, "ON", "ON"); case 1: { int num12 = HexByteToInt(response.getDataByte(0)); if ((num12 & 0x80) != 0) { num12 -= 0x80; } value2.DoubleValue = num12; return value2; } case 2: if ((HexByteToInt(response.getDataByte(1)) & 1) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 3: if ((HexByteToInt(response.getDataByte(1)) & 2) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 4: if ((HexByteToInt(response.getDataByte(1)) & 4) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 5: if ((HexByteToInt(response.getDataByte(1)) & 0x10) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 6: if ((HexByteToInt(response.getDataByte(1)) & 0x20) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 7: if ((HexByteToInt(response.getDataByte(1)) & 0x40) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 8: if ((HexByteToInt(response.getDataByte(2)) & 1) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 9: if ((HexByteToInt(response.getDataByte(2)) & 2) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 10: if ((HexByteToInt(response.getDataByte(2)) & 4) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 11: if ((HexByteToInt(response.getDataByte(2)) & 8) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 12: if ((HexByteToInt(response.getDataByte(2)) & 0x10) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 13: if ((HexByteToInt(response.getDataByte(2)) & 0x20) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 14: if ((HexByteToInt(response.getDataByte(2)) & 0x40) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 15: if ((HexByteToInt(response.getDataByte(2)) & 0x80) == 0) return new OBDParameterValue(false, 0.0, "NO", "NO"); return new OBDParameterValue(true, 1.0, "YES", "YES"); case 0x10: if ((HexByteToInt(response.getDataByte(3)) & 1) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 0x11: if ((HexByteToInt(response.getDataByte(3)) & 2) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 0x12: if ((HexByteToInt(response.getDataByte(3)) & 4) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 0x13: if ((HexByteToInt(response.getDataByte(3)) & 8) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 20: if ((HexByteToInt(response.getDataByte(3)) & 0x10) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 0x15: if ((HexByteToInt(response.getDataByte(3)) & 0x20) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 0x16: if ((HexByteToInt(response.getDataByte(3)) & 0x40) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); case 0x17: if ((HexByteToInt(response.getDataByte(3)) & 0x80) == 0) return new OBDParameterValue(true, 1.0, "YES", "YES"); return new OBDParameterValue(false, 0.0, "NO", "NO"); } goto Label_10DD; case 2: goto Label_10DD; case 3: int num9; if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } if (param.SubParameter == 0) { num9 = HexByteToInt(response.getDataByte(0)); } else { num9 = HexByteToInt(response.getDataByte(1)); } if ((num9 & 1) != 0) { value2.StringValue = "Open Loop: Has not yet satisfied conditions to go closed loop."; value2.ShortStringValue = "OL"; return value2; } if ((num9 & 2) != 0) { value2.StringValue = "Closed Loop: Using oxygen sensor(s) as feedback for fuel control."; value2.ShortStringValue = "CL"; return value2; } if ((num9 & 4) != 0) { value2.StringValue = "OL-Drive: Open loop due to driving conditions. (e.g., power enrichment, deceleration enleanment)"; value2.ShortStringValue = "OL-Drive"; return value2; } if ((num9 & 8) != 0) { value2.StringValue = "OL-Fault: Open loop due to detected system fault."; value2.ShortStringValue = "OL-Fault"; return value2; } if ((num9 & 0x10) != 0) { value2.StringValue = "CL-Fault: Closed loop, but fault with at least one oxygen sensor. May be using single oxygen sensor for fuel control."; value2.ShortStringValue = "CL-Fault"; return value2; } value2.StringValue = "Not Supported"; value2.ShortStringValue = value2.StringValue; return value2; case 4: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } value2.DoubleValue = HexByteToInt(response.getDataByte(0)) * 0.39215686274509803; return value2; case 5: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } value2.DoubleValue = HexByteToInt(response.getDataByte(0)) - 40.0; if (bEnglishUnits) { value2.DoubleValue = (value2.DoubleValue * 1.8) + 32.0; } return value2; case 6: case 7: case 8: case 9: int num16; if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } if (param.SubParameter == 0) { num16 = HexByteToInt(response.getDataByte(0)); } else { num16 = HexByteToInt(response.getDataByte(1)); } value2.DoubleValue = (num16 * 0.78125) - 100.0; return value2; case 10: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } value2.DoubleValue = HexByteToInt(response.getDataByte(0)) * 3.0; if (bEnglishUnits) { value2.DoubleValue *= 0.145037738; } return value2; case 11: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } value2.DoubleValue = HexByteToInt(response.getDataByte(0)); if (bEnglishUnits) { value2.DoubleValue *= 0.145037738; } return value2; case 12: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } int num66 = HexByteToInt(response.getDataByte(0)); int num65 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num66 * 0x100) + num65) * 0.25; return value2; } case 13: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } int num64 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num64; if (bEnglishUnits) { value2.DoubleValue *= 0.621371192; } return value2; } case 14: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num63 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num63 * 0.5) - 64.0; return value2; } case 15: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } value2.DoubleValue = HexByteToInt(response.getDataByte(0)) - 40.0; if (bEnglishUnits) { value2.DoubleValue = (value2.DoubleValue * 1.8) + 32.0; } return value2; case 0x10: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num62 = HexByteToInt(response.getDataByte(0)); double num61 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num62 * 256.0) + num61) * 0.01; if (bEnglishUnits) { value2.DoubleValue *= 0.13227735731092655; } return value2; } case 0x11: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num60 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num60 * 0.39215686274509803; return value2; } case 0x12: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } int num13 = HexByteToInt(response.getDataByte(0)); if ((num13 & 1) != 0) { value2.StringValue = "Upstream of first catalytic converter."; value2.ShortStringValue = "UPS"; return value2; } if ((num13 & 2) != 0) { value2.StringValue = "Downstream of first catalytic converter inlet."; value2.ShortStringValue = "DNS"; return value2; } if ((num13 & 4) != 0) { value2.StringValue = "Atmosphere / Off"; value2.ShortStringValue = "OFF"; } return value2; } case 0x13: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } int num4 = HexByteToInt(response.getDataByte(0)); switch (param.SubParameter) { case 0: if ((num4 & 1) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 1: if ((num4 & 2) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 2: if ((num4 & 4) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 3: if ((num4 & 8) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 4: if ((num4 & 0x10) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 5: if ((num4 & 0x20) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 6: if ((num4 & 0x40) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 7: if ((num4 & 0x80) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } goto Label_1A00; } case 20: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1a: case 0x1b: goto Label_1A00; case 0x1c: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } switch (HexByteToInt(response.getDataByte(0))) { case 1: value2.StringValue = "OBD II (California ARB)"; value2.ShortStringValue = "OBDII CARB"; return value2; case 2: value2.StringValue = "OBD (Federal EPA)"; value2.ShortStringValue = "OBD (Fed)"; return value2; case 3: value2.StringValue = "OBD and OBD II"; value2.ShortStringValue = "OBD/OBDII"; return value2; case 4: value2.StringValue = "OBD I"; value2.ShortStringValue = "OBDI"; return value2; case 5: value2.StringValue = "Not OBD Compliant"; value2.ShortStringValue = "NO OBD"; return value2; case 6: value2.StringValue = "EOBD"; value2.ShortStringValue = "EOBD"; return value2; case 7: value2.StringValue = "EOBD and OBD II"; value2.ShortStringValue = "EOBD/OBDII"; return value2; case 8: value2.StringValue = "EOBD and OBD"; value2.ShortStringValue = "EOBD/OBD"; return value2; case 9: value2.StringValue = "EOBD, OBD and OBD II"; value2.ShortStringValue = "EOBD/OBD/OBDII"; return value2; case 10: value2.StringValue = "JOBD"; value2.ShortStringValue = "JOBD"; return value2; case 11: value2.StringValue = "JOBD and OBD II"; value2.ShortStringValue = "JOBD/OBDII"; return value2; case 12: value2.StringValue = "JOBD and EOBD"; value2.ShortStringValue = "JOBD/EOBD"; return value2; case 13: value2.StringValue = "JOBD, EOBD, and OBD II"; value2.ShortStringValue = "JOBD/EOBD/OBDII"; return value2; } return value2; case 0x1d: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } int num3 = HexByteToInt(response.getDataByte(0)); switch (param.SubParameter) { case 0: if ((num3 & 1) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 1: if ((num3 & 2) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 2: if ((num3 & 4) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 3: if ((num3 & 8) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 4: if ((num3 & 0x10) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 5: if ((num3 & 0x20) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 6: if ((num3 & 0x40) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 7: if ((num3 & 0x80) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } goto Label_20B7; } case 30: goto Label_20B7; case 0x1f: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num58 = HexByteToInt(response.getDataByte(0)); double num57 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (num58 * 256.0) + num57; return value2; } case 0x21: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num56 = HexByteToInt(response.getDataByte(0)); double num55 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (num56 * 256.0) + num55; if (bEnglishUnits) { value2.DoubleValue *= 0.621371192; } return value2; } case 0x22: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num54 = HexByteToInt(response.getDataByte(0)); double num53 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (((num54 * 256.0) + num53) * 10.0) * 0.0078125; if (bEnglishUnits) { value2.DoubleValue *= 0.145037738; } return value2; } case 0x23: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num52 = HexByteToInt(response.getDataByte(0)); double num51 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (((num52 * 256.0) + num51) * 10.0) * 0.0078125; if (bEnglishUnits) { value2.DoubleValue *= 0.145037738; } return value2; } case 0x24: case 0x25: case 0x26: case 0x27: case 40: case 0x29: case 0x2a: case 0x2b: { if (response.getDataByteCount() < 4) { value2.ErrorDetected = true; return value2; } if (param.SubParameter == 0) { double num50 = HexByteToInt(response.getDataByte(0)); double num49 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num50 * 256.0) + num49) * 3.0517578125E-05; return value2; } double num48 = HexByteToInt(response.getDataByte(2)); double num47 = HexByteToInt(response.getDataByte(3)); value2.DoubleValue = ((num48 * 256.0) + num47) * 0.0001220703125; return value2; } case 0x2c: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num46 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num46 * 100.0) * 0.00392156862745098; return value2; } case 0x2d: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num45 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num45 - 128.0) * 0.78125; return value2; } case 0x2e: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num44 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num44 * 100.0) * 0.00392156862745098; return value2; } case 0x2f: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num43 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num43 * 100.0) * 0.00392156862745098; return value2; } case 0x30: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num42 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num42; return value2; } case 0x31: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num41 = HexByteToInt(response.getDataByte(0)); double num40 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (num41 * 256.0) + num40; if (bEnglishUnits) { value2.DoubleValue *= 0.621371192; } return value2; } case 50: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num11 = HexByteToInt(response.getDataByte(0)); double num39 = HexByteToInt(response.getDataByte(1)); if (num11 > 127.0) { num11 = (num11 - 128.0) * -1.0; } value2.DoubleValue = ((num11 * 256.0) + num39) * 0.25; if (bEnglishUnits) { value2.DoubleValue *= 0.000145037738; } return value2; } case 0x33: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num38 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num38; if (bEnglishUnits) { value2.DoubleValue *= 0.145037738; } return value2; } case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3a: case 0x3b: { if (response.getDataByteCount() < 4) { value2.ErrorDetected = true; return value2; } if (param.SubParameter == 0) { double num37 = HexByteToInt(response.getDataByte(0)); double num36 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num37 * 256.0) + num36) * 3.0517578125E-05; return value2; } double num35 = HexByteToInt(response.getDataByte(2)); double num34 = HexByteToInt(response.getDataByte(3)); value2.DoubleValue = (((num35 * 256.0) + num34) * 0.00390625) - 128.0; return value2; } case 60: case 0x3d: case 0x3e: case 0x3f: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num33 = HexByteToInt(response.getDataByte(0)); double num32 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (((num33 * 256.0) + num32) * 0.1) - 40.0; if (bEnglishUnits) { value2.DoubleValue = (value2.DoubleValue * 1.8) + 32.0; } return value2; } case 0x41: if (response.getDataByteCount() < 4) { value2.ErrorDetected = true; return value2; } switch (param.SubParameter) { case 0: if ((HexByteToInt(response.getDataByte(1)) & 1) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 1: if ((HexByteToInt(response.getDataByte(1)) & 2) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 2: if ((HexByteToInt(response.getDataByte(1)) & 4) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 3: if ((HexByteToInt(response.getDataByte(1)) & 0x10) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 4: if ((HexByteToInt(response.getDataByte(1)) & 0x20) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 5: if ((HexByteToInt(response.getDataByte(1)) & 0x40) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 6: if ((HexByteToInt(response.getDataByte(2)) & 1) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 7: if ((HexByteToInt(response.getDataByte(2)) & 2) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 8: if ((HexByteToInt(response.getDataByte(2)) & 4) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 9: if ((HexByteToInt(response.getDataByte(2)) & 8) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 10: if ((HexByteToInt(response.getDataByte(2)) & 0x10) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 11: if ((HexByteToInt(response.getDataByte(2)) & 0x20) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 12: if ((HexByteToInt(response.getDataByte(2)) & 0x40) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 13: if ((HexByteToInt(response.getDataByte(2)) & 0x80) == 0) { value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; case 14: if ((HexByteToInt(response.getDataByte(3)) & 1) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 15: if ((HexByteToInt(response.getDataByte(3)) & 2) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 0x10: if ((HexByteToInt(response.getDataByte(3)) & 4) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 0x11: if ((HexByteToInt(response.getDataByte(3)) & 8) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 0x12: if ((HexByteToInt(response.getDataByte(3)) & 0x10) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 0x13: if ((HexByteToInt(response.getDataByte(3)) & 0x20) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 20: if ((HexByteToInt(response.getDataByte(3)) & 0x40) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; case 0x15: if ((HexByteToInt(response.getDataByte(3)) & 0x80) == 0) { value2.BoolValue = true; value2.DoubleValue = 1.0; value2.StringValue = "YES"; value2.ShortStringValue = "YES"; return value2; } value2.BoolValue = false; value2.DoubleValue = 0.0; value2.StringValue = "NO"; value2.ShortStringValue = "NO"; return value2; } goto Label_32A8; case 0x42: goto Label_32A8; case 0x43: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num29 = HexByteToInt(response.getDataByte(0)); double num28 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num29 * 256.0) + num28) * 0.39215686274509803; return value2; } case 0x44: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num27 = HexByteToInt(response.getDataByte(0)); double num26 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num27 * 256.0) + num26) * 3.0517578125E-05; return value2; } case 0x45: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num25 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num25 * 100.0) * 0.00392156862745098; return value2; } case 70: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num24 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num24 - 40.0; if (bEnglishUnits) { value2.DoubleValue = (value2.DoubleValue * 1.8) + 32.0; } return value2; } case 0x47: case 0x48: case 0x49: case 0x4a: case 0x4b: case 0x4c: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num23 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num23 * 100.0) * 0.00392156862745098; return value2; } case 0x4d: case 0x4e: { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num22 = HexByteToInt(response.getDataByte(0)); double num21 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = (num22 * 256.0) + num21; return value2; } case 0x51: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } switch (HexByteToInt(response.getDataByte(0))) { case 1: value2.StringValue = "Gasoline"; break; case 2: value2.StringValue = "Methanol"; break; case 3: value2.StringValue = "Ethanol"; break; case 4: value2.StringValue = "Diesel"; break; case 5: value2.StringValue = "LPG"; break; case 6: value2.StringValue = "CNG"; break; case 7: value2.StringValue = "Propane"; break; case 8: value2.StringValue = "Electric"; break; case 9: value2.StringValue = "Bifuel running Gasoline"; break; case 10: value2.StringValue = "Bifuel running Methanol"; break; case 11: value2.StringValue = "Bifuel running Ethanol"; break; case 12: value2.StringValue = "Bifuel running LPG"; break; case 13: value2.StringValue = "Bifuel running CNG"; break; case 14: value2.StringValue = "Bifuel running Propane"; break; case 15: value2.StringValue = "Bifuel running Electric"; break; case 16: value2.StringValue = "Bifuel mixed Gas/Electric"; break; case 17: value2.StringValue = "Hybrid Gasoline"; break; case 18: value2.StringValue = "Hybrid Ethanol"; break; case 19: value2.StringValue = "Hybrid Diesel"; break; case 20: value2.StringValue = "Hybrid Electric"; break; case 21: value2.StringValue = "Hybrid Mixed Fuel"; break; case 22: value2.StringValue = "Hybrid Regenerative"; break; } value2.ShortStringValue = value2.StringValue; return value2; case 0x52: { if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } double num20 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = (num20 * 100.0) * 0.00392156862745098; return value2; } } goto Label_379A; case 3: case 7: case 10: goto Label_379A; case 5: { int parameter = param.Parameter; if ((parameter <= 0) || (parameter > 10)) { goto Label_38E3; } if (param.SubParameter != 0) { if (param.SubParameter == 1) { if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } int num18 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = num18 * 0.005; return value2; } if (param.SubParameter == 2) { if (response.getDataByteCount() < 3) { value2.ErrorDetected = true; return value2; } int num17 = HexByteToInt(response.getDataByte(2)); value2.DoubleValue = num17 * 0.005; return value2; } value2.ErrorDetected = true; return value2; } if (response.getDataByteCount() >= 1) { int num19 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num19 * 0.005; return value2; } value2.ErrorDetected = true; return value2; } case 9: goto Label_38E3; } goto Label_390C; Label_10DD: if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } value2.StringValue = OBD2.getDTCName(response.Data); return value2; Label_1A00: if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } if (param.SubParameter == 0) { double num59 = HexByteToInt(response.getDataByte(0)); value2.DoubleValue = num59 * 0.005; return value2; } double num15 = HexByteToInt(response.getDataByte(1)); if (num15 == 255.0) { value2.DoubleValue = 0.0; return value2; } value2.DoubleValue = (num15 - 128.0) * 0.78125; return value2; Label_20B7: if (response.getDataByteCount() < 1) { value2.ErrorDetected = true; return value2; } if ((HexByteToInt(response.getDataByte(0)) & 1) != 0) { value2.DoubleValue = 1.0; value2.BoolValue = true; value2.StringValue = "ON"; value2.ShortStringValue = "ON"; return value2; } value2.DoubleValue = 0.0; value2.BoolValue = false; value2.StringValue = "OFF"; value2.ShortStringValue = "OFF"; return value2; Label_32A8: if (response.getDataByteCount() < 2) { value2.ErrorDetected = true; return value2; } double num31 = HexByteToInt(response.getDataByte(0)); double num30 = HexByteToInt(response.getDataByte(1)); value2.DoubleValue = ((num31 * 256.0) + num30) * 0.001; return value2; Label_379A: strings = new StringCollection(); int startIndex = 0; if (4 <= response.Data.Length) { do { string str = OBD2.getDTCName(response.Data.Substring(startIndex, 4)); if (str.CompareTo("P0000") != 0) { strings.Add(str); } startIndex += 4; } while ((startIndex + 4) <= response.Data.Length); } value2.StringCollectionValue = strings; return value2; Label_38E3: if (param.Parameter == 2) { value2.StringValue = HexStringToASCIIString(response.Data); value2.ShortStringValue = value2.StringValue; return value2; } Label_390C: value2.ErrorDetected = true; return value2; }