will meyer

Nerd of multiple disciplines. Father of boys. Employee of Spotify.


[Part of my Car Hacking project series]

What is DashCommand?

DashCommand is a commercial, real-time OBDII application for Windows. Its designed for virtual instruments on touchscreens and in full-screen mode; basically for in-car gauge applications. I use it as part of my Car PC for my digital gauges (with my PC hooked into the car via a USB OBDII reader).

dashcommand_dash_factory.cropped dashcommand_dash_fighter.cropped

DashCommand, itself a cheap app, is part of a product suite that also includes some higher-end packages for in-shop and tuning use. I picked it, and still use it, because:

There are frankly also some less awesome things about it:

All of that said, I still think its pretty much the best option for building highly custom virtual dashboards for in-car Windows Car PC systems. I had toyed with the idea of building a daemon (likely in Java) to read OBDII parameters and present them on the network, then building a Flash or Flex front-end to display those (since there are a lot of nice Flash gauges out on the web). In the end, though, I wanted something that wouldn't require so much time and energy to get working. So with that, I'd recommend DashCommand to others with the same constraints.

My Customizations

My MAZDASPEED 3 has all-amber interior/dash lighting, so my whole Car PC setup matches that. That involved skinning DashCommand along with everything else. I made both a DashCommand "skin", which controls the main buttons and options in the non-dashboard part of the interface, as well as two different "dashboards" (the things with the actual gauges). Both are pretty simple once you get the hang of them, though the customization can be overly tedious with the provided editor, as noted above.

My Skin looks like this:


The skin asset is just a ZIP archive of individual DashXL files (.dxl), one for each of the main UI elements. I just pulled apart the example skins to see how that worked. Drop the ZIP in your skins directory and then load it up through the app's settings interface.

For the Dashboards, here's my "Mazda Factory" dashboard, which I made to look mostly harmonious with the actual factory gauges in my car:


And the DashXL file...

And lastly, this is what I actually drive around with most of the time -- its not the most readable but I like it aesthetically. I was going for a simple aircraft-style style display, with the linear-scrolling speedometer on the left:


And the DashXL file...note that you should have the Monaco font on your system for this to look like the screenshot above:

Feel free to download and customize, any feedback's welcome of course. I am still debugging these a bit, so there may certainly be issues here and there. Let me know in the comments if you do try to use these and how it goes.

Embedding in Centrafuse

Since I use Centrafuse for my front-end, getting my virtual gauges integrated was a simple manner of adding DashCommand as an external application, launching in fullscreen mode, and setting the app itself to launch in fullscreen, hidden-mouse mode (DashCommand has command-line flags available for this). The only moderately non-trivial aspect of the whole thing was designing my dashboards to have an aspect ratio that maps to the dimensions of my screen with Centrafuse title bars and nav controls. In other words, though DashCommand can scale the UI to the appropriate rectangle when its loaded, I set my dashboards to have fixed aspect ratios to ensure that my gauge display always looks optimal when running inside Centrafuse's frame.