Openport 2.0 Bugs

Update: Bugs are confirmed, probably all Tactrix driver versions are affected. Forcing driver to behave according to J2534 specs resulted in Subaru reflash tool working perfectly.
We are looking into other devices, might have some alternatives soon.

Tactrix Openport 2.0 device/driver has some bugs. Got latest EcuFlash 1.43.3252 Beta from as it usually includes latest J2534 driver. After EcuFlash doing firmware update (without the app asking first + can’t go back?) PassThruReadVersion ( command yields:

Firmware = 1.11.3209
DLL = 1.00.3147 Sep  3 2010 00:17:29
API = 04.04

Wrote a little unit test, in C# because it’s less work than C/C++. See code comments.

using System;
using J2534;
using NUnit.Framework;

public class TestJ2534
	IPassThruV0404 ipt;
	PassThruStatus status;
	int deviceID;

	public void Setup ()
		ipt = new J2534.Device.OpenPort20Dll ();
		status = ipt.PassThruOpen (null, out deviceID);
		Assert.AreEqual (PassThruStatus.STATUS_NOERROR, status, "PassThruOpen");

	public void TearDown ()
		if (ipt != null)
			ipt.PassThruClose (deviceID);

	public void TestCase_INVALID_DEVICE_ID ()
		string firmwareVersion, dllVersion, apiVersion;

		// correct way
		status = ipt.PassThruReadVersion (deviceID, out firmwareVersion, out dllVersion, out apiVersion);
		Assert.AreEqual (PassThruStatus.STATUS_NOERROR, status, "PassThruReadVersion");

		// deliberately causing ERR_INVALID_DEVICE_ID
		int deviceID_wrong = 999;
		status = ipt.PassThruReadVersion (deviceID_wrong, out firmwareVersion, out dllVersion, out apiVersion);
		Assert.AreEqual (PassThruStatus.ERR_INVALID_DEVICE_ID, status, "PassThruReadVersion using wrong deviceID");
		// Expected: 0x1A = ERR_INVALID_DEVICE_ID
		// Tactrix Openport 2.0 --> PassThruStatus: 0x20 = (undefined) !!!

	public void TestCase_ERR_BUFFER_EMPTY ()
		int channelID;
		status = ipt.PassThruConnect (deviceID, PassThruProtocol.CAN, PassThruConnectFlags.None, PassThruBaudRate.Rate500000, out channelID);
		Assert.AreEqual (PassThruStatus.STATUS_NOERROR, status, "PassThruConnect");

		// deliberately trying to read
		PassThruMsg msg;
		status = ipt.PassThruReadMsg (channelID, out msg, 1000);
		Assert.AreEqual (PassThruStatus.ERR_BUFFER_EMPTY, status, "PassThruReadMsg");
		// Expected: 0x10 = ERR_BUFFER_EMPTY
		// Tactrix Openport 2.0 --> PassThruStatus: 0x9 = ERR_TIMEOUT !!!

Test result, MonoDevelop screenshot:

AFAIK none of our apps hit above bugs but others might! For example there are reports indicating official Subaru stock reflash tool FlashWrite (, see “J2534 Reprogramming”) won’t work using OP2.0 (CAN Subarus at least), while app works fine using other J2534 devices. Applications could hit any J2534 issue, especially the ERR_BUFFER_EMPTY one. With commercial software, such problems can be show-stoppers. AFAIK at least one of those bugs has been reported to Tactrix back in 2010, still not fixed…


One response to “Openport 2.0 Bugs

  1. I just read your blog today after someone pointed me to them – I’m sorry I hadn’t noticed these earlier.
    * The ERR_INVALID_DEVICE_ID was fixed on 9/6/2010 with DLL version 3159 (the enum definition had the wrong value)
    * The ERR_BUFFER_EMPTY bug is also now fixed at build 3427 (a check for empty buffers was examining a the wrong variable)

    contact me at the email address included in the reply data and I can give you a build to try out before I release it on the site.



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.