1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

pkg: u8g2: updated U8g2, improved patches and documentation.

This commit is contained in:
Bas Stottelaar 2016-06-22 18:38:49 +02:00
parent 4b2fca6f1a
commit 746b586feb
4 changed files with 50 additions and 15 deletions

View File

@ -1,6 +1,6 @@
PKG_NAME=u8g2
PKG_URL=https://github.com/olikraus/u8g2
PKG_VERSION=94dacdb84e06a6088b9d17a1e7ba009dbd3618be
PKG_VERSION=4c7ecf099e766b9c678d3453d6b932c8290bdb6b
.PHONY: all

View File

@ -3,26 +3,61 @@
## Introduction
[U8g2](https://github.com/olikraus/u8g2) is a monochrome graphics library for LCDs and OLEDs. It contains both drivers and high-level drawing routines.
The library is originally written for Arduino's, but it runs fine on other platforms if the right drivers are available.
The library is originally written for Arduino boards, but it runs just fine on other platforms, as long as the right drivers are available.
## Usage
Just put `USEPKG += u8g2` in your Makefile and `#include "u8g.h"` to your code.
Just put `USEPKG += u8g2` in your Makefile and `#include "u8g2.h"` to your code. Refer to the [U8g2 wiki](https://github.com/olikraus/u8g2/wiki) for more information on the API.
## API
This package patches the original source to add an interface for RIOT-OS peripherals and removing most of the device/platform specific code.
## RIOT-OS interface
This package patches the original source to add an interface for RIOT-OS.
The following two interfaces add add support for the included drivers via I2C and SPI peripherals:
The following two callbacks add support for the included drivers via I2C and SPI peripherals:
* `u8g_com_riotos_hw_spi_init` — Interface for U8g2 included SPI displays.
* `u8g_com_riotos_ssd_i2c_init` — Interface for U8g2 included I2C SSD displays.
* `u8x8_byte_riotos_hw_spi`
* `u8x8_byte_riotos_hw_i2c`
In addition, the following three drivers are general-purpose interfaces to write your own display driver:
For timing and GPIO related operations, the following callback is available.
* `u8g_com_riotos_i2c_init` — Generic I2C display driver interface.
* `u8g_com_riotos_spi_init` — Generic SPI display driver interface.
* `u8g_com_riotos_init` — General-purpose interface that accepts a void pointer argument.
* `u8x8_gpio_and_delay_riotos`
For targets without an I2C or SPI, the following two interfaces emulate a display:
U8g2 needs to map pin numbers to RIOT-OS pin numbers. It also needs to know which peripheral to use. The following two methods can be used to set this information.
* `u8g_dev_riotos_stdout_init` — Virtual display via stdout.
* `u8g_dev_riotos_stdout_ansi_init` — Virtual display via stdout using ANSI control characters.
* `u8g2_SetPins(u8g2_dev, pins, bitmap)`
* `u8g2_SetDevice(u8g2_dev, dev)`
Note: `pins` should point to `gpio_t` array of U8g2 pin numbers to RIOT-OS pins. Due to this, `pins` can take up an additional 100 bytes, because it will use memory for the pins you do not map. You can overcome this limitation by implementing `u8x8_gpio_and_delay_riotos` yourself and hardcode the pins.
### Example
```
u8g2_t u8g2;
gpio_t pins[] = {
[U8X8_PIN_CS] = GPIO(PA, 0),
[U8X8_PIN_DC] = GPIO(PA, 1),
[U8X8_PIN_RESET] = GPIO(PA, 2)
};
uint32_t bitmap = (
(1 << U8X8_PIN_CS) +
(1 << U8X8_PIN_DC) +
(1 << U8X8_PIN_RESET)
);
u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, U8G2_R0, u8x8_byte_riotos_hw_spi, u8x8_gpio_and_delay_riotos);
u8g2_SetPins(&u8g2, pins, bitmap);
u8g2_SetDevice(&u8g2, SPI_0);
```
## Virtual displays
For targets without an I2C or SPI, virtual displays are available. These displays are part of U8g2, but are not compiled by default.
* By adding `USEMODULE += u8g2_utf8`, a terminal display is used as virtual display.
* By adding `USEMODULE += u8g2_sdl`, a SDL virtual display will be used. This is only available on native targets that have SDL installed.
### Example
```
u8g2_t u8g2;
u8g2_SetupBuffer_Utf8(&u8g2, U8G2_R0);
```