Simple, Clever, Effective


Day 1
To start off this project I looked at the RPI zero. It is a pretty good device and accessible. Currently running on raspbian lite (final target will be based on buildroot)

This will be the main unit of the device.
The display is a ILI9341 which is driven via SPI with the fbtft_device module.
modprobe fbtft_device custom name=fb_ili9341 gpios=reset:23,dc:24,led:18 speed=66000000 fps=50 bgr
After some work I finally managed to get the LCD going at about 50fps.I even managed to play a youtube video via omxplayer.

The fbtft_device basically creates a new framebuffer for the device, I started looking into it and will use it to display the gui via raw writes to the /dev/fbX device.

Day 2
After some raw writes to the fb device via dd and some conversions from png to rgb565 I decided to look into a library since I don't want to deal with the alpha channel.Maybe in the future I will look into writing a very simple library, but this is not the time nor the place.
Small preview, got the theme running.

Day 3
Quick update, I implemented the main interface in C, I had to move to a RPI3 for now since it compiles faster, I know, I know, I should've set up a cross compiler ... unfortunately I hit some bumps in the road and decided to focus on results.
I added a non blocking UDP server that will accept commands for now from a python script (reading volume, GPIO control, reading the IP, batery..etc) and then populating the data in the GUI.
Clock is working now, with the OSX-ish column flashing every second.
I had to rotate the screen since the view angles are horrid in landscape mode, the screen was made to be viewed in portrait mode. Will buy IPS ones next time, maybe even touchscreen.
Got a video going so I can check that all should be OK, next is moving the copying of fb from 0 to 1 to the main code.

Day 4
So, again a long struggle with loading PNG files into the library, I had to dig deep in the library and fix it...but hey...what is new... creating my own simple library starts to sound better and better.....
UI is starting to take shape, I opted for a simple flat style. Loaded a mp3 in there for shits and giggles, looking quite good I would say.

Day 5
A lot of work, created a python script to intercept the buttons in a thread, tried event based as recommended by RPI library, results are sketchy at best.Implemented Reset (full reset of the machine), volume up and down. Volume is configured in 10 step increments.
I has to create 4 new custom fonts, 2 normal ones for the UI and 2 for icons different sizes.
Added wired/wireless network detection, wired will override always if it has a connection. Added an animation (a loader) for the network detection.
Refactored the code, moved the fonts and definitions to a separate folder, ui changes to accomodate the new fonts

Day 6
More refactoring, more code, the interface is fully working. Interfaced with the player and reading the ID3 tags from the mp3s, some optimization to the communication mechanism.
Next step would be to implement a playlist mechanism. The first step is for the player to read media from a local path, a usb device, an internet stream.

Robert Dragutoiu