Releases: bitbank2/OneBitDisplay
Removed experimental BLE code
I had begun adding the ability to work with remote displays over BLE. This code has now been moved into a new library (not released yet) named RemoteDisplay.
Added 12x16 font (stretched and smoothed from 6x8)
This latest release adds a new built-in font size of 12x16. The addition of the font doesn't increase the FLASH size because this font is derived from the 6x8 font and then a smoothing algorithm is applied which makes diagonal pixels look smoother (see readme for a photo of the effect). I also changed the font names to reflect the pixel sizes (e.g. FONT_SMALL -> FONT_6x8), but have retained the old constants to keep existing software working.
Sharp Memory LCD
This release adds support for the Sharp 2.7" 400x240 and 1.3" 144x168 memory LCDs. These LCDs are unique in that they use very little power, yet have a high refresh rate with no ghosting. A new function was added (obdWriteLCDLine) to support the unique memory layout of these displays. Please see the Wiki for more details.
Cached data fix
Fixes an issue with dumpBuffer() and fill() which were not always writing the memory contents correctly.
Fixed bug in obdDumpBuffer
The obdDumpBuffer function wasn't writing the cached memory contents correctly.
Added UC1609C 192x64 LCD
This release adds support for the UC1609C 192x64 LCD. I also modified the LoadBMP function so that it now allows direct display of a Windows BMP file without having a backbuffer.
Sharp Memory LCD
This release adds support for the SPI connected 144x168 Sharp Memory LCD. This device is a bit more challenging to control than other types of displays because it has a much simpler controller and must be updated a line at a time. To make use of the graphics functions in OneBitDisplay, I had to force the use of a back buffer (3K RAM) and drawing can only occur to that memory, followed by a obdDumpBuffer() to display the frame buffer. On the plus side, the display can be updated at > 100FPS and looks very good. It also uses less power than a traditional LCD.
Fractional font scaling
This release includes a few fixes for the menu code and adds the initial implementation of fractional font scaling for the built-in fixed spaced fonts. This feature is only available on the normal and small sized font (for now), but allows you to scale them larger or smaller by any amount. The fractional size is passed as two unsigned 16-bit integers (width and height scaling are separate) where the value 256 equals 1:1. So, if you would like to draw the normal font at 2.5x size, then you would pass the fractions 256x2.5 -> 640 to both the x and y scale values.
Added Virtual Display capability
The latest release adds the ability to define a virtual display of any size. This display can use any of the text and drawing features, then render portions of the display across multiple physical displays. For example, you can place 2 128x64 OLEDs side by side and treat them like a 256x64 display. The virtual display will only update the memory and copying the data to the physical displays must be explicitly defined in your code using obdDumpWindow(). See the virtual_display example sketch for more info.
Cached data optimization + remote display support
This release includes 2 new features that work together. The first is the ability to transmit the display commands over BLE or UART. This may not have practical applications at the moment, but seemed like a good idea to try. I also wrote a MacOS BLE virtual display app to receive and display the data. I'll release this shortly. The BLE code only runs on ESP32 and Nano 33 targets; the UART code works on all targets.
The second change for this release was to re-enable code I had written a while ago which speeds up text drawing by grouping the data into larger bunches before sending to the display. I'll use the small font as an example. Each 6x8 character would normally be transmitted individually over I2C. The transaction goes like this:
Begin I2C transaction to OLED display (send start signal and transmit display address)
Send 0x40 introducer byte to indicate graphics data
send 6 font bytes
End I2C transaction (send end signal)
This release includes code which caches up to a whole line (128 bytes) of font data so that it can be sent in a single transaction. This also helps speed up the remote display code quite a bit.