private Loader() { AppDomain.CurrentDomain.UnhandledException -= CurrentDomain_UnhandledException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; j2534library = new J2534Extended(); var list = J2534Detect.ListDevices(); j2534Device = list.FirstOrDefault(d => d.Name == Config.Instance.DeviceName); if (j2534Device == null) { if (list.Count == 1) { j2534Device = list.Single(); } else { var sd = new SelectDevice(); if (sd.ShowDialog() == DialogResult.OK) { j2534Device = sd.Device; } } } j2534library.LoadLibrary(j2534Device); }
private Loader() { AppDomain.CurrentDomain.UnhandledException -= CurrentDomain_UnhandledException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; j2534library = new J2534Extended(); var list = J2534Detect.ListDevices(); if (list.Count == 1) { j2534Device = list.Single(); } else { var sd = new SelectDevice(); if (sd.ShowDialog() == DialogResult.OK) { j2534Device = sd.Device; } else { return; } } j2534library.LoadLibrary(j2534Device); }
public EsPassThruDevice(J2534Device j2534Device) { J2534Device = j2534Device; PassThruInterface = new J2534Extended(); if (!PassThruInterface.LoadLibrary(J2534Device)) { throw new Exception($"Error load pass thru library: {J2534Device.FunctionLibrary}. Error: {new Win32Exception(Marshal.GetLastWin32Error()).Message}"); } }
public bool Connect() { // Find all of the installed J2534 passthru devices List <J2534Device> availableJ2534Devices = J2534Detect.ListDevices(); J2534Device j2534Device; var sd = new SelectDevice(); if (sd.ShowDialog() == DialogResult.OK) { j2534Device = sd.Device; } else { return(false); } // We will always choose the first J2534 device in the list, if there are multiple devices // installed, you should do something more intelligent. m_j2534Interface.LoadLibrary(j2534Device); // Attempt to open a communication link with the pass thru device int deviceId = 0; m_status = m_j2534Interface.PassThruOpen(IntPtr.Zero, ref deviceId); if (m_status != J2534Err.STATUS_NOERROR) { return(false); } if (ConnectSWCan(deviceId, ref m_swChannelId) && ConnectDWCan(deviceId, ref m_dwChannelId)) { m_isConnected = true; SetNullFilters(m_swChannelId, m_dwChannelId); return(true); } return(false); }
private void CmdReadVinClick(object sender, EventArgs e) { J2534Extended passThru = new J2534Extended(); string vin = ""; // Find all of the installed J2534 passthru devices List <J2534Device> availableJ2534Devices = J2534Detect.ListDevices(); if (availableJ2534Devices.Count == 0) { MessageBox.Show("Could not find any installed J2534 devices."); return; } // We will always choose the first J2534 device in the list, if there are multiple devices // installed, you should do something more intelligent. passThru.LoadLibrary(availableJ2534Devices[0]); ObdComm comm = new ObdComm(passThru); if (!comm.DetectProtocol()) { MessageBox.Show(String.Format("Error connecting to device. Error: {0}", comm.GetLastError())); comm.Disconnect(); return; } if (!comm.GetVin(ref vin)) { MessageBox.Show(String.Format("Error reading VIN. Error: {0}", comm.GetLastError())); comm.Disconnect(); return; } comm.Disconnect(); // When we are done with the device, we can free the library. passThru.FreeLibrary(); txtReadVin.Text = vin; }
/* * * Example 2: * Use the J2534 protocol to send and receive a message (w/o error checking) * */ private void SendReceiveNoErrorChecking(object sender, EventArgs e) { J2534Extended passThru = new J2534Extended(); // Find all of the installed J2534 passthru devices List <J2534Device> availableJ2534Devices = J2534Detect.ListDevices(); J2534Device j2534Device; var sd = new SelectDevice(); if (sd.ShowDialog() == DialogResult.OK) { j2534Device = sd.Device; } else { return; } // We will always choose the first J2534 device in the list, if there are multiple devices // installed, you should do something more intelligent. passThru.LoadLibrary(j2534Device); // Attempt to open a communication link with the pass thru device int deviceId = 0; passThru.PassThruOpen(IntPtr.Zero, ref deviceId); // Open a new channel configured for ISO15765 (CAN) int channelId = 0; passThru.PassThruConnect(deviceId, ProtocolID.ISO15765, ConnectFlag.NONE, BaudRate.ISO15765, ref channelId); // Set up a message filter to watch for response messages int filterId = 0; PassThruMsg maskMsg = new PassThruMsg( ProtocolID.ISO15765, TxFlag.ISO15765_FRAME_PAD, new byte[] { 0xff, 0xff, 0xff, 0xff }); PassThruMsg patternMsg = new PassThruMsg( ProtocolID.ISO15765, TxFlag.ISO15765_FRAME_PAD, new byte[] { 0x00, 0x00, 0x07, 0xE8 }); PassThruMsg flowControlMsg = new PassThruMsg( ProtocolID.ISO15765, TxFlag.ISO15765_FRAME_PAD, new byte[] { 0x00, 0x00, 0x07, 0xE0 }); IntPtr maskMsgPtr = maskMsg.ToIntPtr(); IntPtr patternMsgPtr = patternMsg.ToIntPtr(); IntPtr flowControlMsgPtr = flowControlMsg.ToIntPtr(); passThru.PassThruStartMsgFilter(channelId, FilterType.FLOW_CONTROL_FILTER, maskMsgPtr, patternMsgPtr, flowControlMsgPtr, ref filterId); // Clear out the response buffer so we know we're getting the freshest possible data passThru.ClearRxBuffer(channelId); // Finally we can send the message! PassThruMsg txMsg = new PassThruMsg( ProtocolID.ISO15765, TxFlag.ISO15765_FRAME_PAD, new byte[] { 0x00, 0x00, 0x07, 0xdf, 0x01, 0x00 }); var txMsgPtr = txMsg.ToIntPtr(); int numMsgs = 1; passThru.PassThruWriteMsgs(channelId, txMsgPtr, ref numMsgs, 50); // Read messages in a loop until we either timeout or we receive data numMsgs = 1; IntPtr rxMsgs = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(PassThruMsg)) * numMsgs); J2534Err status = J2534Err.STATUS_NOERROR; while (J2534Err.STATUS_NOERROR == status) { status = passThru.PassThruReadMsgs(channelId, rxMsgs, ref numMsgs, 200); } // If we received data, we want to extract the data of interest. I'm removing the reflection of the transmitted message. if ((J2534Err.ERR_BUFFER_EMPTY == status || J2534Err.ERR_TIMEOUT == status) && numMsgs > 0) { foreach (PassThruMsg msg in rxMsgs.AsList <PassThruMsg>(numMsgs)) { // // // Now do something with the data! // // } } // Disconnect this channel passThru.PassThruDisconnect(channelId); // When we are done with the device, we can free the library. passThru.FreeLibrary(); }
public override void SetSelectedAdapter(string adapter) { J2534Device selected = availableJ2534Devices.Find(x => x.Name == adapter); passThru.LoadLibrary(selected); }
bool LoadJ2534() { if (_passThru == null) { _passThru = new J2534Extended(); } if (_passThru.IsLoaded) { return(true); } J2534Device j2534Device; // Find all of the installed J2534 passthru devices List <J2534Device> availableJ2534Devices = J2534Detect.ListDevices(); if (availableJ2534Devices.Count == 0) { MessageBox.Show("Could not find any installed J2534 devices in the Windows registry, have you installed the device drivers for your cable?"); _passThru.FreeLibrary(); return(false); } if (autoDetectCheckBox.Checked) { foreach (var lib in availableJ2534Devices) { if (Path.GetFileName(lib.FunctionLibrary).Contains("J2534DotNet.Logger.dll")) { continue; } try { j2534Device = new J2534Device(); if (!_passThru.LoadLibrary(lib)) { j2534Device = null; continue; } _comm = new UDSFord(_passThru); _comm.Connect(); //if we get this far then we have successfully connected _comm.Disconnect(); return(true); } catch { j2534Device = null; continue; } } _passThru.FreeLibrary(); return(false); } if (checkBoxLogJ2534.Checked) { j2534Device = new J2534Device(); j2534Device.FunctionLibrary = System.IO.Directory.GetCurrentDirectory() + "\\" + "J2534DotNet.Logger.dll"; Thread.Sleep(10); var loaded = _passThru.LoadLibrary(j2534Device); if (!loaded) { _passThru.FreeLibrary(); } return(loaded); } //If there is only one DLL to choose from then load it if (availableJ2534Devices.Count == 1) { return(_passThru.LoadLibrary(availableJ2534Devices[0])); } else { var sd = new SelectDevice(); if (sd.ShowDialog() == DialogResult.OK) { j2534Device = sd.Device; var loaded = _passThru.LoadLibrary(j2534Device); if (!loaded) { _passThru.FreeLibrary(); } return(loaded); } } return(false); }