- Raspberry Pi Model B
- Adafruit Ultimate GPS Breakout
- Generic DAB/DVB Tuner
- Mini WiFi router running in "Client Mode" for internet connection
- Chalkboard Electronics 7" LCD HD Touchscreen
- USB Adaptor for the car's Engine Management Computer for datalogging/diagnostics/etc.
- A powered USB Hub to plug all these things into
At this very early stage of the build, all I've been doing so far is trialling different OS/software configurations on the Pi to see what works best. From a purely functional perspective, I want to be able to sit behind the drivers seat and, with a single touch or gesture, access the following front-end applications:
- A media-centre type application with PVR capabilities; for music, movies, TV, radio, etc.
- A turn-by-turn GPS Sat-Nav application
- A basic web browser
- A real-time engine performance monitoring/tuning/diagnostic app
Ideally, I'd like to have all these things rolled up into a single, dedicated program with a nice consistent interface; but I'd also like to complete this project some time this decade, so I'll have to settle for choosing between the various open-source solutions out there and doing the minimum amount of coding/hacking necessary to get them to play nice together.
In terms of software requirements, I'm looking for speed and reliability above all other considerations. Once the hardware's installed in my car's centre console in place the existing DIN stereo unit; doing hard-resets if something crashes, or accessing the terminal for whatever reason won't be an option. And I don't want to have to wait around for 20 minutes for everything to boot up every time I start my car before I can just listen to some music or whatever.
So for these reasons, every bit of software on the thing has to be lightweight, streamlined, stable and very customisable. Hence the reason I chose Arch Linux as the OS without a second thought. I'm open to suggestions for everything else, though.
Xorg seems to be a necessary evil, so I've tried to minimise its impact on system performance by coupling it with the lightweight login and window managers SLiM and DWM, respectively. I especially like that DWM has a small enough codebase that I can practically re-write it to behave exactly how I want; which means fullscreen-only windows, quick task-switching and minimal UI intrusion.
I've got to the point now where I'm experimenting with media-centre solutions and the only real choice in that regard seems to be XBMC. It runs well and looks great, but it doesn't want to play ball with Xorg/DWM. Even running it in windowed-mode, XBMC captures all incoming events and won't let me, for instance, task-switch to another running application or even close it using DWM's keyboard shortcuts. Since quick and simple task-switching is core to this project, I'm at a loss here.
Although I'm pretty good with C, this is my first big project using Linux and the ARM architecture and I'm using it as much for a learning exercise as for the end result. So I don't really know enough about how the event chain works in getting keyboard/mouse/touchscreen events to the right place to know how to go about "fixing" XBMC's behaviour. Any pointers?
Also, if there's any interest, I can post photos and updates as the project goes on.
