示例#1
0
        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();
        }
示例#2
0
        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;
        }
示例#3
0
        /*
         *
         *  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();
        }