Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
    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);
        }
    }
Ejemplo n.º 4
0
    public OBDParameter GetFreezeFrameCopy(int iFrame)
    {
        OBDParameter copy = GetCopy();

        copy.Service    = 2;
        copy.OBDRequest = "02" + copy.OBDRequest.Substring(2, 2) + iFrame.ToString("D2");
        return(copy);
    }
Ejemplo n.º 5
0
        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;
 }
Ejemplo n.º 7
0
        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;
            }
        }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
 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;
 }
Ejemplo n.º 10
0
 public abstract OBDResponseList query(OBDParameter param);
Ejemplo n.º 11
0
 public override OBDResponseList parse(OBDParameter param, string response)
 {
     return new OBDResponseList(response);
 }
Ejemplo n.º 12
0
 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;
     }
 }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
 public abstract OBDResponseList parse(OBDParameter param, string response);
Ejemplo n.º 15
0
 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();
         }
     }
 }
Ejemplo n.º 16
0
 public override OBDResponseList parse(OBDParameter param, string response)
 {
     return(new OBDResponseList(response));
 }
Ejemplo n.º 17
0
 public abstract OBDResponseList parse(OBDParameter param, string response);
Ejemplo n.º 18
0
 public abstract OBDResponseList query(OBDParameter param);
Ejemplo n.º 19
0
        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;
        }
Ejemplo n.º 20
0
 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;
         }
     }
 }
Ejemplo n.º 21
0
        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;
            }
        }
Ejemplo n.º 22
0
 public override OBDResponseList query(OBDParameter param)
 {
     string obdResponse = getOBDResponse(param.OBDRequest);
     return m_Parser.parse(param, obdResponse);
 }
Ejemplo n.º 23
0
 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;
 }
Ejemplo n.º 24
0
    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);
            }
        }
    }
Ejemplo n.º 25
0
    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;
    }