private void btn_Action_Click(object sender, RoutedEventArgs e) { if (!_action) { passThru = new J2534(); this.UpdateText("\n--- Session start " + DateTime.Now.ToString() + " --- "); //this.StatusBox.Dispatcher.Invoke(new UpdateTextCallback(this.UpdateText), new object[] { "\n---Session start " + DateTime.Now.ToString() + " ---" }); this.UpdateText(((J2534Device)InterfaceComboBox.SelectedItem).Name + " interface being used"); //this.StatusBox.Dispatcher.Invoke(new UpdateTextCallback(this.UpdateText), new object[] { ((J2534Device)InterfaceComboBox.SelectedItem).Name + " interface being used" }); if (!passThru.LoadLibrary((J2534Device)InterfaceComboBox.SelectedItem)) { this.UpdateText("Failed to load interface library!"); //this.StatusBox.Dispatcher.Invoke(new UpdateTextCallback(this.UpdateText), new object[] { "Failed to load interface library!" }); _action = false; } _action = true; } else { this.UpdateText(((J2534Device)InterfaceComboBox.SelectedItem).Name + " interface is released"); //this.StatusBox.Dispatcher.Invoke(new UpdateTextCallback(this.UpdateText), new object[] { ((J2534Device)InterfaceComboBox.SelectedItem).Name + " interface is released" }); if (!passThru.FreeLibrary()) { this.UpdateText("Failed to unload interface library!"); //this.StatusBox.Dispatcher.Invoke(new UpdateTextCallback(this.UpdateText), new object[] { "Failed to unload interface library!" }); } _action = false; } //if (!_action) { this.StatusBox.Dispatcher.Invoke(new UpdateTextCallback(this.UpdateText), new object[] { "---Session end " + DateTime.Now.ToString() + " ---" }); } if (!_action) { this.UpdateText("--- Session end " + DateTime.Now.ToString() + " ---"); } this.SetButtonState(); }
private void CmdReadVinClick(object sender, EventArgs e) { J2534 passThru = new J2534(); 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) { J2534 passThru = new J2534(); // Find all of the installed J2534 passthru devices List <J2534Device> availableJ2534Devices = J2534Detect.ListDevices(); // 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]); // Attempt to open a communication link with the pass thru device int deviceId = 0; passThru.Open(ref deviceId); // Open a new channel configured for ISO15765 (CAN) int channelId = 0; passThru.Connect(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 }); passThru.StartMsgFilter(channelId, FilterType.FLOW_CONTROL_FILTER, ref maskMsg, ref patternMsg, ref flowControlMsg, 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 }); int numMsgs = 1; passThru.WriteMsgs(channelId, ref txMsg, ref numMsgs, 50); // Read messages in a loop until we either timeout or we receive data List <PassThruMsg> rxMsgs = new List <PassThruMsg>(); J2534Err status = J2534Err.STATUS_NOERROR; numMsgs = 1; while (J2534Err.STATUS_NOERROR == status) { status = passThru.ReadMsgs(channelId, ref 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. List <byte> responseData; if ((J2534Err.ERR_BUFFER_EMPTY == status || J2534Err.ERR_TIMEOUT == status) && rxMsgs.Count > 1) { responseData = rxMsgs[rxMsgs.Count - 1].Data.ToList(); responseData.RemoveRange(0, txMsg.Data.Length); } // // // Now do something with the data! // // // Disconnect this channel passThru.Disconnect(channelId); // When we are done with the device, we can free the library. passThru.FreeLibrary(); }