Exemplo n.º 1
0
 public static bool InterfaceSendData(byte[] sendData, int length, bool setDtr, double dtrTimeCorr)
 {
     if (TcpElmStream == null)
     {
         return(false);
     }
     if (_edElmInterface == null)
     {
         return(false);
     }
     if (_edElmInterface.StreamFailure)
     {
         if (Ediabas != null)
         {
             Ediabas.LogString(EdiabasNet.EdLogLevel.Ifh, "Reconnecting");
         }
         InterfaceDisconnect();
         if (!InterfaceConnect(ConnectPort, ConnectParameter))
         {
             _edElmInterface.StreamFailure = true;
             return(false);
         }
     }
     if (!_edElmInterface.InterfaceSendData(sendData, length, setDtr, dtrTimeCorr))
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 2
0
        public static bool InterfaceSendData(byte[] sendData, int length, bool setDtr, double dtrTimeCorr)
        {
            ConvertBaudResponse = false;
            AutoKeyByteResponse = false;
            if ((_bluetoothSocket == null) || (_bluetoothOutStream == null))
            {
                return(false);
            }
            if (_elm327Device)
            {
                if ((CurrentProtocol != EdInterfaceObd.Protocol.Uart) ||
                    (CurrentBaudRate != 115200) || (CurrentWordLength != 8) || (CurrentParity != EdInterfaceObd.SerialParity.None))
                {
                    return(false);
                }
                if (_edElmInterface == null)
                {
                    return(false);
                }
                if (_edElmInterface.StreamFailure)
                {
                    Ediabas?.LogString(EdiabasNet.EdLogLevel.Ifh, "Reconnecting");
                    InterfaceDisconnect();
                    if (!InterfaceConnect(_connectPort, null))
                    {
                        _edElmInterface.StreamFailure = true;
                        return(false);
                    }
                }
                return(_edElmInterface.InterfaceSendData(sendData, length, setDtr, dtrTimeCorr));
            }
            if (_reconnectRequired)
            {
                Ediabas?.LogString(EdiabasNet.EdLogLevel.Ifh, "Reconnecting");
                InterfaceDisconnect();
                if (!InterfaceConnect(_connectPort, null))
                {
                    _reconnectRequired = true;
                    return(false);
                }
                _reconnectRequired = false;
            }
            try
            {
                if ((CurrentProtocol == EdInterfaceObd.Protocol.Tp20) ||
                    (CurrentProtocol == EdInterfaceObd.Protocol.IsoTp))
                {
                    UpdateAdapterInfo();
                    byte[] adapterTel = CreateCanTelegram(sendData, length);
                    if (adapterTel == null)
                    {
                        return(false);
                    }
                    _bluetoothOutStream.Write(adapterTel, 0, adapterTel.Length);
                    LastCommTick = Stopwatch.GetTimestamp();
                    UpdateActiveSettings();
                    return(true);
                }
                if (_rawMode || (CurrentBaudRate == 115200))
                {
                    // BMW-FAST
                    if (sendData.Length >= 5 && sendData[1] == 0xF1 && sendData[2] == 0xF1 && sendData[3] == 0xFA && sendData[4] == 0xFA)
                    {   // read clamp status
                        UpdateAdapterInfo();
                        if (AdapterVersion < 0x000A)
                        {
                            Ediabas?.LogString(EdiabasNet.EdLogLevel.Ifh, "*** Read clamp status not supported");
                            return(false);
                        }
                    }

                    _bluetoothOutStream.Write(sendData, 0, length);
                    LastCommTick = Stopwatch.GetTimestamp();
                    // remove echo
                    byte[] receiveData = new byte[length];
                    if (!InterfaceReceiveData(receiveData, 0, length, EchoTimeout, EchoTimeout, null))
                    {
                        return(false);
                    }
                    for (int i = 0; i < length; i++)
                    {
                        if (receiveData[i] != sendData[i])
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    UpdateAdapterInfo();
                    byte[] adapterTel = CreateAdapterTelegram(sendData, length, setDtr);
                    FastInit = false;
                    if (adapterTel == null)
                    {
                        return(false);
                    }
                    _bluetoothOutStream.Write(adapterTel, 0, adapterTel.Length);
                    LastCommTick = Stopwatch.GetTimestamp();
                    UpdateActiveSettings();
                }
            }
            catch (Exception ex)
            {
                Ediabas?.LogFormat(EdiabasNet.EdLogLevel.Ifh, "*** Stream failure: {0}", ex.Message);
                _reconnectRequired = true;
                return(false);
            }
            return(true);
        }