1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-18 12:52:44 +01:00

pkg: u8g2: update package structure + version

This commit is contained in:
Bas Stottelaar 2018-02-22 20:19:18 +01:00
parent 46938f6153
commit 5c9566264e
12 changed files with 226 additions and 3 deletions

View File

@ -1,11 +1,16 @@
PKG_NAME=u8g2 PKG_NAME=u8g2
PKG_URL=https://github.com/olikraus/u8g2 PKG_URL=https://github.com/olikraus/u8g2
PKG_VERSION=4dc79943020d9512207aea4cf914740556173793 PKG_VERSION=f08ff974c03e5c848bc5d2ae3fddb6a97897881a
PKG_LICENSE=BSD-2-Clause PKG_LICENSE=BSD-2-Clause
.PHONY: all .PHONY: all
all: git-download 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) "$(MAKE)" -C $(PKG_BUILDDIR)
include $(RIOTBASE)/pkg/pkg.mk include $(RIOTBASE)/pkg/pkg.mk

View File

@ -2,5 +2,5 @@ INCLUDES += -I$(PKGDIRBASE)/u8g2/csrc
# Link SDL if enabled. # Link SDL if enabled.
ifneq (,$(filter u8g2_sdl,$(USEMODULE))) ifneq (,$(filter u8g2_sdl,$(USEMODULE)))
LINKFLAGS += `sdl-config --libs` LINKFLAGS += `sdl2-config --libs`
endif endif

View File

@ -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. 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_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 ### Example
``` ```

Binary file not shown.

24
pkg/u8g2/src/Makefile Normal file
View 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

View File

@ -0,0 +1,3 @@
MODULE = u8g2
include $(RIOTBASE)/Makefile.base

View 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 */

View File

@ -0,0 +1,5 @@
MODULE = u8g2_sdl
CFLAGS += `sdl2-config --cflags`
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,3 @@
MODULE = u8g2_utf8
include $(RIOTBASE)/Makefile.base