Starting Over

If I was to start over I think the main difference I would have is that the source code would be written in C++ instead of C. Switching to a full object oriented language like C++ would allow inheritence, making sure each module conformed to a minimal interface, and the ability to use contructors and destructors within the code to provide initialization and deinitialization of each module would be very useful.

I would also entertain the idea of having a frontpanel controller earlier too, this has allowed me to abstract the frontpanel display and buttons away from the player code, this doesn't sound important, but it is a huge benefit to not have a separate process solely to poll the buttons to see if they have changed. The separate process increased the code size enough to require inventive measures to store the data in a place that initrd could find it. I believe it is these measures that are preventing maintenance mode from working correctly at the moment.

On the hardware front, there are a multitude of mini- and nano-atx motherboards out there these days, they are all of good performnce and non are astronomically expensive. I would choose to use one of these devices as the current device consumes excessive trunk capacity. A smaller device would allow more stuff to be in the trunk along side.