Commit Graph

13 Commits

Author SHA1 Message Date
Markus Hitter 8d7471d3a4 Display: display_clear() is a common command now.
Before control commands were queued up, this was different for
each display.
2016-05-30 10:50:41 +02:00
Markus Hitter 5b9e123e0e Display: queue up display clear commands. 2016-05-30 10:32:33 +02:00
Markus Hitter 12dc74fe62 Display: finally get rid of i2c_test.c.
Not without dubbing its remaining functionality in form of a
display_greeting(), of course.
2016-05-28 21:14:37 +02:00
Markus Hitter 3dd430de59 display_ssd1306.c: note current state and missing pieces.
A few days before being done with this display hardware decided
say good bye. Accordingly I can't continue with writing related
code. Writing down what already works and what's still missing is
probably a good idea, to make sure the next fellow doesn't have
to investigate from scratch.
2016-04-28 23:11:39 +02:00
Markus Hitter f091b1e316 display_ssd1306.c: note a possible error recovery strategy.
Currently not implemented because this costs additional binary
size and, well, with I2C being reliable now, it's difficult to
test it. And also because I'm lazy :-)
2016-04-27 23:54:15 +02:00
Markus Hitter a13312d9a9 Display: introduce display queue.
Now we shouldn't experience wait cycles in i2c_write() during
typical display writes any longer. It should also distribute CPU
load of display writes a lot better.

Previously writing a line of text to the display would take
almost as long as it took to actually send it to the display,
because the I2C queue could hold only one transmission, which
effectively meant only one character. This could hold the main
loop for several milliseconds.

Now we queue characters, send them one by one, and return to the
main loop in between.

This costs 160 bytes program memory. Only 18 bytes RAM, because
the I2C queue was reduced accordingly. Now:

  Program:  24456 bytes
     Data:   1543 bytes
   EEPROM:     32 bytes
2016-04-27 23:54:14 +02:00
Markus Hitter a47c4b40df Display: add a primitive status display.
This isn't pretty at all, but it shows the principle.
Unfortunately it also exploits a bug in the I2C sending mechanism,
I2C sending hangs a few seconds after reset.
2016-04-26 15:36:11 +02:00
Markus Hitter 6577578051 Display: introduce display_writechar().
You see where the journey is going? This is the equivalent to the
function to write a character to the serial line, so we can
basically swap these two in other functions.
2016-04-26 14:45:59 +02:00
Markus Hitter bb8d6e0ad2 Display: create and use display_set_cursor().
Having this in a seperate function will be helpful later.
2016-04-26 14:31:56 +02:00
Markus Hitter cec45a2fec Display: create infrastructure for distinct displays.
Dropped all the funtions for specific messages because plans on
how to handle this have changed.
2016-04-26 14:31:47 +02:00
Markus Hitter 9dd53a1722 display_ssd1306.c: support monospaced fonts.
Monospaced fonts require a bit less space, right now it saves a
nice 110 bytes binary size.

Actually, the distinction between monospaced and proportional
fonts was in font.h already, so not supporting them was a bug.
But so far we have no monospaced font, so nobody noticed.
2016-04-26 14:29:39 +02:00
Markus Hitter 455b07eb6e display_ssd1306.c: read symbol index only once.
Saves just 2 bytes, but more than nothing.
2016-04-26 14:29:39 +02:00
Ruslan Popov e3fd9eaea7 Display: first text on OLED.
Note by Traumflug: this code was written by Ruslan Popov a lot
earlier already. I picked it to i2c_test.c to get "something"
visible running. This is the commit finally adjusted to the new
display infrastructure.
2016-04-26 14:29:36 +02:00