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