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); }
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); }