IPSECOS Telematics

Cardix Programming


An easier way to write software that interacts with your vehicle ...

If you are writing software to interact with your car (e.g. read OBD data, read non-OBD data, actuate devices on your car, etc.),
then you know the complexity involved in dealing with the idiosyncracies of various vehicle connection hardware devices
(e.g. J2534 devices, ELM, A2D devices, etc.) as well as the "message diversity" among vehicles.

If you would instead like to focus on the neat stuff your software can do with easy vehicle interaction, rather than spending time
solving the messy infrastructure problems described above, then you might be interested in looking at the Cardix vehicle interaction
programming model.

What does "vehicle interaction" mean? It means reading standard legislated OBD data, as well as sensing events and states such as
door ajar, gear selection, seat occupants, wheel speed, steering wheel angle, etc. It also means actuating things like door locks,
windows, entertainment & HVAC controls, side-view mirrors, etc.

Here's how easy is it to get OBD data with Cardix on any consumer vehicle with any vehicle connection device:

public void method()
{
ICardix iVehicle = null;
IVehicleOBD iobd = null;
iVehicle = CardixLoader.LoadCardix();
iVehicle.InitializeAndConnect(null);
iobd = iVehicle.VehicleInterface as IVehicleOBD;
iobd.OnOBDPowertrainDataReceived += new OBDPowertrainDataReceived(handlePTData);
iobd.RequestPowertrainData(new OBD_SVCID_01_02_ParameterID[] { OBD_SVCID_01_02_ParameterID.EngineRPM });
}
...
// This method handles incoming OBD data from the vehicle
private void handlePTData(byte sourceECU, OBD_SVCID_01_02_ParameterID pid, object data, ulong timestamp)
{
Trace.WriteLine("From ECU=0x" + sourceECU.ToString("x2") + " with timestamp=" + timestamp.ToString() + ": PID=" + pid.ToString() + ", data=" + data.ToString());
} // end-method

 ...

// And to do something such as unlock the doors, you would do this:

IConvenience iconv = null;
iconv = iVehicle.VehicleInterface as IConvenience;
iconv.Actuate_DoorLock(IVSDoorID.FrontLeft, false);

==========================================================

Cardix is a .NET-based SDK and runtime that allows you to write your application once and have it work on a variety of vehicles
with a range of vehicle connection hardware. Cardix runs in both the "desktop" .NET and the .NET compact framework environments
(i.e. on WindowsCE devices). The Cardix runtime provides standard OBD, J1939*, J2178* and J1587* decoding, while all other
proprietary per-vehicle-model variability is encapsulated in "vehicle adapter" components. In addition, the Cardix runtime provides
"vehicle connector" components which currently support J2534-compliant vehicle connection devices (e.g. Mongoose, ValueCAN, etc.),
as well as other such devices (e.g. ELM327*, OBDKey*, SenseNet class devices, the DataQ DI-148U A2D device).  The Cardix
"vehicle connector" model accommodates A2D devices, as well as these vehicle networks: CAN (+ISO15765), J1850VPW,
J1850PWM, ISO-9141, ISO-14230, J1708*, AVC*.

* - J1939, J2178 and J1587 decoding does not yet provide complete coverage. J1708 and AVC are currently only partially
implemented.  ELM327 and OBDKey connectors are currently only partially implemented.

Cardix not only supports vehicle interaction programming with consumer vehicles, but through its provided J1939 and J1708 support,
it also enables vehicle interaction programming with commercial vehicles (e.g. heavy trucks, RVs, heavy equipment, etc.).  By providing
this wide range of support, it enables development of in-vehicle applications which can run in a wide variety of vehicles.

The Cardix architecture is also extensible with provision for writing new "vehicle adapter" components to extend support to new vehicle
models. The architecture also provides for writing new "vehicle connector" components to extend support to additional vehicle-connection
devices (e.g. VMSpc devices, other A2D devices, etc.).

To support the writing of new "vehicle adapter" components, the Cardix SDK also includes a data discovery (reverse engineering) tool which
helps in the process of discovering what vehicle messages correspond to what events on the vehicle -- both sensing and actuating. If you already
know the codes for a given vehicle model (+ model year), you can encapsulate them in a "vehicle adapter" component for that vehicle.  You
can download and experiment with the data discovery tool here:  IPSECOSMsgMon Utility

Experiment with Cardix to see how much easier it can be to write vehicle interaction software:  Cardix Eval Download

The Cardix SDK includes samples illustrating how to use Cardix from a StreetDeck add-in, as well as samples showing how to get
OBD and J1939 data, and how to do non-OBD things.

Also included in the Cardix SDK is a sample vehicle adapter for a 2007 Toyota Camry (as a VS.NET C# project). This includes a
text file with some already-discovered vehicle messages. This adapter shows how non-OBD support can be extended to different
vehicles (OBD support itself is already provided for all consumer vehicles by the Cardix runtime).

Feel free to send questions and inquiries to ipsecosTelematics@comcast.net
A single-vehicle runtime license for Cardix can be obtained here: