/// <summary>
        /// Utility method to return a human-readable OBD protocol type name.
        /// </summary>
        /// <param name="protocolType">The enumerated OBD protocol type.</param>
        /// <returns>The friendly English name for the type.</returns>
        private string GetFriendlyObdProtocolModeTypeName(ElmDriver.ElmObdProtocolType protocolType)
        {
            switch (protocolType)
            {
            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso14230_4_Kwp:
            {
                return("ISO 14230-4 KWP");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso14230_4_KwpFastInit:
            {
                return("ISO 14230-4 KWP Fast Init");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso15765_4_Can11Bit:
            {
                return("CAN 11 Bit 250kb");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso15765_4_Can11BitFast:
            {
                return("CAN 11 Bit 500kb");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso15765_4_Can29Bit:
            {
                return("CAN 29 Bit 250kb");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso15765_4_Can29BitFast:
            {
                return("CAN 29 Bit 500kb");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.Iso9141_2:
            {
                return("ISO 9141-2");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.SaeJ1850Pwm:
            {
                return("SAE J1850 PWM");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.SaeJ1850Vpw:
            {
                return("SAE J1850 VPW");
            }

            case Elm327.Core.ElmDriver.ElmObdProtocolType.SaeJ1939Can:
            {
                return("SAE J1939 CAN");
            }

            default:
            {
                return("Automatic");
            }
            }
        }
Beispiel #2
0
        /// <summary>Attempts to connect to the ECU.</summary>
        /// <param name="protocolType">The protocal type to use.</param>
        /// <param name="measurementUnitType">The measurement type to use.</param>
        public void Connect(ElmDriver.ElmObdProtocolType protocolType, ElmDriver.ElmMeasuringUnitType measurementUnitType)
        {
            this.elm = new ElmDriver(this.serialPortName, protocolType, measurementUnitType);

            switch (elm.Connect())
            {
            case ElmDriver.ElmConnectionResultType.NoConnectionToElm:
                throw new InvalidOperationException("Failed to connect to the ELM327.");

            case ElmDriver.ElmConnectionResultType.NoConnectionToObd:
                throw new InvalidOperationException("Failed to connect to the vehicle's ECU.");

            case ElmDriver.ElmConnectionResultType.Connected:
                this.connected    = true;
                this.protocalType = this.GetFriendlyObdProtocolModeTypeName(this.elm.ProtocolType);
                this.fuelType     = this.GetFriendlyFuelTypeName(this.elm.ObdMode01.FuelType);
                this.vin          = this.elm.ObdMode09.VehicleIdentificationNumber;

                break;
            }
        }
        /// <summary>
        /// Attempts to connect to the ECU. If successful, will retrieve one time information from the ECU.
        /// </summary>
        public void Connect(ElmDriver.ElmObdProtocolType protocolType = ElmDriver.ElmObdProtocolType.Automatic, ElmDriver.ElmMeasuringUnitType measurementUnitType = ElmDriver.ElmMeasuringUnitType.English)
        {
            elm = new ElmDriver(serialPortName, protocolType, measurementUnitType);

            ElmDriver.ElmConnectionResultType connectionResult = elm.Connect();

            if (connectionResult == ElmDriver.ElmConnectionResultType.NoConnectionToElm)
            {
                throw new Exception("Failed to connect to the ELM327");
            }
            else if (connectionResult == ElmDriver.ElmConnectionResultType.NoConnectionToObd)
            {
                throw new Exception("Failed to connect to the vehicle's ECU");
            }
            else
            {
                connected = true;

                // Get the currently used OBD protocol type
                OBDProtocolType = GetFriendlyObdProtocolModeTypeName(elm.ProtocolType);
                VehicleFuelType = GetFriendlyFuelTypeName(elm.ObdMode01.FuelType);
                VIN             = elm.ObdMode09.VehicleIdentificationNumber;
            }
        }