mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
pkg: u8g2: update package structure + version
This commit is contained in:
parent
46938f6153
commit
5c9566264e
@ -1,11 +1,16 @@
|
||||
PKG_NAME=u8g2
|
||||
PKG_URL=https://github.com/olikraus/u8g2
|
||||
PKG_VERSION=4dc79943020d9512207aea4cf914740556173793
|
||||
PKG_VERSION=f08ff974c03e5c848bc5d2ae3fddb6a97897881a
|
||||
PKG_LICENSE=BSD-2-Clause
|
||||
|
||||
.PHONY: all
|
||||
|
||||
all: git-download
|
||||
cp $(RIOTBASE)/pkg/u8g2/src/Makefile $(PKG_BUILDDIR)/Makefile
|
||||
cp $(RIOTBASE)/pkg/u8g2/src/csrc/Makefile $(PKG_BUILDDIR)/csrc/Makefile
|
||||
cp $(RIOTBASE)/pkg/u8g2/src/csrc/u8g2_riotos.c $(PKG_BUILDDIR)/csrc/u8g2_riotos.c
|
||||
cp $(RIOTBASE)/pkg/u8g2/src/sys/sdl/common/Makefile $(PKG_BUILDDIR)/sys/sdl/common/Makefile
|
||||
cp $(RIOTBASE)/pkg/u8g2/src/sys/utf8/common/Makefile $(PKG_BUILDDIR)/sys/utf8/common/Makefile
|
||||
"$(MAKE)" -C $(PKG_BUILDDIR)
|
||||
|
||||
include $(RIOTBASE)/pkg/pkg.mk
|
||||
|
@ -2,5 +2,5 @@ INCLUDES += -I$(PKGDIRBASE)/u8g2/csrc
|
||||
|
||||
# Link SDL if enabled.
|
||||
ifneq (,$(filter u8g2_sdl,$(USEMODULE)))
|
||||
LINKFLAGS += `sdl-config --libs`
|
||||
LINKFLAGS += `sdl2-config --libs`
|
||||
endif
|
||||
|
@ -53,7 +53,7 @@ u8g2_SetDevice(&u8g2, SPI_DEV(0));
|
||||
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, using UTF8 block characters that are printed to stdout.
|
||||
* By adding `USEMODULE += u8g2_sdl`, a SDL virtual display will be used. This is only available on native targets that have SDL installed. It uses `sdl-config` to find the headers and libraries. Note that RIOT-OS builds 32-bit binaries and requires 32-bit SDL libraries.
|
||||
* By adding `USEMODULE += u8g2_sdl`, a SDL virtual display will be used. This is only available on native targets that have SDL installed. It uses `sdl2-config` to find the headers and libraries. Note that RIOT-OS builds 32-bit binaries and requires 32-bit SDL libraries.
|
||||
|
||||
### Example
|
||||
```
|
||||
|
BIN
pkg/u8g2/patches/0001-add-RIOT-OS-interface.patch
Normal file
BIN
pkg/u8g2/patches/0001-add-RIOT-OS-interface.patch
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
24
pkg/u8g2/src/Makefile
Normal file
24
pkg/u8g2/src/Makefile
Normal file
@ -0,0 +1,24 @@
|
||||
MODULE = pkg-u8g2
|
||||
|
||||
DIRS += csrc
|
||||
|
||||
# SDL can be used as a virtual display, but is for native target only.
|
||||
ifneq (,$(filter u8g2_sdl,$(USEMODULE)))
|
||||
DIRS += sys/sdl/common
|
||||
endif
|
||||
|
||||
# UTF8 virtual display is not part of core. Therefore it is a separate module.
|
||||
ifneq (,$(filter u8g2_utf8,$(USEMODULE)))
|
||||
DIRS += sys/utf8/common
|
||||
endif
|
||||
|
||||
# Compiling U8g2 will generate a lot of compiler warnings, which are treated
|
||||
# as errors. For the sake of simplicity, ignore them.
|
||||
CFLAGS += -Wno-empty-translation-unit \
|
||||
-Wno-newline-eof \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-unused \
|
||||
-Wno-overlength-strings \
|
||||
-Wno-pointer-arith
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
3
pkg/u8g2/src/csrc/Makefile
Normal file
3
pkg/u8g2/src/csrc/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
MODULE = u8g2
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
183
pkg/u8g2/src/csrc/u8g2_riotos.c
Normal file
183
pkg/u8g2/src/csrc/u8g2_riotos.c
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Copyright (C) 2016-2018 Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup pkg_u8g2
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief U8g2 driver for interacting with RIOT-OS drivers
|
||||
*
|
||||
* @author Bas Stottelaar <basstottelaar@gmail.com>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "u8g2.h"
|
||||
|
||||
#include "xtimer.h"
|
||||
#include "periph/spi.h"
|
||||
#include "periph/i2c.h"
|
||||
#include "periph/gpio.h"
|
||||
|
||||
#ifdef SPI_NUMOF
|
||||
static spi_clk_t u8x8_pulse_width_to_spi_speed(uint32_t pulse_width)
|
||||
{
|
||||
uint32_t cycle_time = 2 * pulse_width;
|
||||
|
||||
if (cycle_time < 100) {
|
||||
return SPI_CLK_10MHZ;
|
||||
} else if (cycle_time < 200) {
|
||||
return SPI_CLK_5MHZ;
|
||||
} else if (cycle_time < 1000) {
|
||||
return SPI_CLK_1MHZ;
|
||||
} else if (cycle_time < 2500) {
|
||||
return SPI_CLK_400KHZ;
|
||||
}
|
||||
|
||||
return SPI_CLK_100KHZ;
|
||||
}
|
||||
#endif /* SPI_NUMOF */
|
||||
|
||||
#ifdef SPI_NUMOF
|
||||
static spi_mode_t u8x8_spi_mode_to_spi_conf(uint32_t spi_mode)
|
||||
{
|
||||
return (spi_mode_t) spi_mode;
|
||||
}
|
||||
#endif /* SPI_NUMOF */
|
||||
|
||||
static void u8x8_enable_pins(gpio_t* pins, uint32_t pins_enabled)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
if (pins_enabled & (1 << i)) {
|
||||
if (pins[i] != GPIO_UNDEF) {
|
||||
if (i < U8X8_PIN_OUTPUT_CNT) {
|
||||
gpio_init(pins[i], GPIO_OUT);
|
||||
} else {
|
||||
gpio_init(pins[i], GPIO_IN);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t u8x8_gpio_and_delay_riotos(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
(void) arg_ptr;
|
||||
|
||||
switch (msg) {
|
||||
case U8X8_MSG_GPIO_AND_DELAY_INIT:
|
||||
u8x8_enable_pins(u8g2->pins, u8g2->pins_enabled);
|
||||
break;
|
||||
case U8X8_MSG_DELAY_MILLI:
|
||||
xtimer_usleep(arg_int * 1000);
|
||||
break;
|
||||
case U8X8_MSG_DELAY_10MICRO:
|
||||
xtimer_usleep(arg_int * 10);
|
||||
break;
|
||||
case U8X8_MSG_DELAY_100NANO:
|
||||
xtimer_nanosleep(arg_int * 100);
|
||||
break;
|
||||
case U8X8_MSG_GPIO_CS:
|
||||
if (u8g2->pins_enabled & (1 << U8X8_PIN_CS)) {
|
||||
gpio_write(u8g2->pins[U8X8_PIN_CS], arg_int);
|
||||
}
|
||||
break;
|
||||
case U8X8_MSG_GPIO_DC:
|
||||
if (u8g2->pins_enabled & (1 << U8X8_PIN_DC)) {
|
||||
gpio_write(u8g2->pins[U8X8_PIN_DC], arg_int);
|
||||
}
|
||||
break;
|
||||
case U8X8_MSG_GPIO_RESET:
|
||||
if (u8g2->pins_enabled & (1 << U8X8_PIN_RESET)) {
|
||||
gpio_write(u8g2->pins[U8X8_PIN_RESET], arg_int);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef SPI_NUMOF
|
||||
uint8_t u8x8_byte_riotos_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
spi_t dev = (spi_t) u8g2->dev;
|
||||
|
||||
switch (msg) {
|
||||
case U8X8_MSG_BYTE_SEND:
|
||||
spi_transfer_bytes(dev, GPIO_UNDEF, true,
|
||||
arg_ptr, NULL, (size_t)arg_int);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_INIT:
|
||||
spi_init_pins(dev);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_SET_DC:
|
||||
u8x8_gpio_SetDC(u8g2, arg_int);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_START_TRANSFER:
|
||||
spi_acquire(dev, GPIO_UNDEF,
|
||||
u8x8_spi_mode_to_spi_conf(u8g2->display_info->spi_mode),
|
||||
u8x8_pulse_width_to_spi_speed(u8g2->display_info->sck_pulse_width_ns));
|
||||
|
||||
u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_enable_level);
|
||||
u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->post_chip_enable_wait_ns, NULL);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_END_TRANSFER:
|
||||
u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->pre_chip_disable_wait_ns, NULL);
|
||||
u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_disable_level);
|
||||
|
||||
spi_release(dev);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif /* SPI_NUMOF */
|
||||
|
||||
#ifdef I2C_NUMOF
|
||||
uint8_t u8x8_byte_riotos_hw_i2c(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
static uint8_t buffer[255];
|
||||
static uint8_t index;
|
||||
|
||||
i2c_t dev = (i2c_t) u8g2->dev;
|
||||
|
||||
switch (msg) {
|
||||
case U8X8_MSG_BYTE_SEND:
|
||||
memcpy(&buffer[index], arg_ptr, arg_int);
|
||||
index += arg_int;
|
||||
break;
|
||||
case U8X8_MSG_BYTE_INIT:
|
||||
i2c_init_master(dev, I2C_SPEED_FAST);
|
||||
break;
|
||||
case U8X8_MSG_BYTE_SET_DC:
|
||||
break;
|
||||
case U8X8_MSG_BYTE_START_TRANSFER:
|
||||
i2c_acquire(dev);
|
||||
index = 0;
|
||||
break;
|
||||
case U8X8_MSG_BYTE_END_TRANSFER:
|
||||
i2c_write_bytes(dev, u8x8_GetI2CAddress(u8g2), buffer, index);
|
||||
i2c_release(dev);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif /* I2C_NUMOF */
|
5
pkg/u8g2/src/sys/sdl/common/Makefile
Normal file
5
pkg/u8g2/src/sys/sdl/common/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
MODULE = u8g2_sdl
|
||||
|
||||
CFLAGS += `sdl2-config --cflags`
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
3
pkg/u8g2/src/sys/utf8/common/Makefile
Normal file
3
pkg/u8g2/src/sys/utf8/common/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
MODULE = u8g2_utf8
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
Loading…
Reference in New Issue
Block a user