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 309 additions and 357 deletions

View File

@ -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

View File

@ -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

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.
* 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
```

View File

@ -0,0 +1,83 @@
From a17e644521b91d5f5fc35e567375ac5998f24b66 Mon Sep 17 00:00:00 2001
From: Bas Stottelaar <basstottelaar@gmail.com>
Date: Sun, 11 Mar 2018 22:13:10 +0100
Subject: [PATCH 1/1] add RIOT-OS interface.
---
csrc/u8g2.h | 3 +++
csrc/u8x8.h | 17 ++++++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/csrc/u8g2.h b/csrc/u8g2.h
index 48239709..c8934cf7 100644
--- a/csrc/u8g2.h
+++ b/csrc/u8g2.h
@@ -388,6 +388,9 @@ void u8g2_ClearDisplay(u8g2_t *u8g2);
#define u8g2_SetMenuDownPin(u8g2, val) u8x8_SetMenuDownPin(u8g2_GetU8x8(u8g2), (val))
#endif
+#define u8g2_SetPins(u8x8,pins,pins_enabled) u8x8_SetPins(u8g2_GetU8x8(&u8g2), pins, pins_enabled)
+#define u8g2_SetDevice(u8x8,device) u8x8_SetDevice(u8g2_GetU8x8(&u8g2), device)
+
/*==========================================*/
/* u8g2_setup.c */
diff --git a/csrc/u8x8.h b/csrc/u8x8.h
index bbeff59f..ae65bbb1 100644
--- a/csrc/u8x8.h
+++ b/csrc/u8x8.h
@@ -111,6 +111,8 @@
#include <stdint.h>
#include <stddef.h>
+#include "periph/gpio.h"
+
#if defined(__GNUC__) && defined(__AVR__)
#include <avr/pgmspace.h>
#endif
@@ -174,9 +176,9 @@ uint8_t u8x8_pgm_read_esp(const uint8_t * addr); /* u8x8_8x8.c */
# define U8X8_PROGMEM
#endif
-#ifdef ARDUINO
-#define U8X8_USE_PINS
-#endif
+//#ifdef ARDUINO
+//#define U8X8_USE_PINS
+//#endif
/*==========================================*/
/* U8X8 typedefs and data structures */
@@ -342,6 +344,10 @@ struct u8x8_struct
#ifdef U8X8_USE_PINS
uint8_t pins[U8X8_PIN_CNT]; /* defines a pinlist: Mainly a list of pins for the Arduino Envionment, use U8X8_PIN_xxx to access */
#endif
+
+gpio_t* pins;
+uint32_t pins_enabled;
+uint32_t dev;
};
#ifdef U8X8_WITH_USER_PTR
@@ -371,6 +377,8 @@ struct u8x8_struct
#define u8x8_SetMenuDownPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_DOWN,(val))
#endif
+#define u8x8_SetPins(u8x8,pins,pins_enabled) {(u8x8)->pins = (pins); (u8x8)->pins_enabled = (pins_enabled);}
+#define u8x8_SetDevice(u8x8,device) ((u8x8)->dev = device)
/*==========================================*/
@@ -973,6 +981,9 @@ extern const uint8_t u8x8_font_pxplustandynewtv_u[] U8X8_FONT_SECTION("u8x8_font
/* end font list */
+extern uint8_t u8x8_byte_riotos_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr);
+extern uint8_t u8x8_gpio_and_delay_riotos(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr);
+extern uint8_t u8x8_byte_riotos_hw_i2c(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr);
#ifdef __cplusplus
}
--
2.14.2

View File

@ -1,76 +0,0 @@
From 5c168fc6d96d8dc84907e667a70b3a85b8402270 Mon Sep 17 00:00:00 2001
From: Peter Kietzmann <peter.kietzmann@haw-hamburg.de>
Date: Wed, 6 Sep 2017 20:23:56 +0200
Subject: [PATCH 1/3] u8g2: add RIOT makefiles
---
Makefile | 22 ++++++++++++++++++++++
csrc/Makefile | 3 +++
sys/sdl/common/Makefile | 5 +++++
sys/utf8/common/Makefile | 3 +++
4 files changed, 33 insertions(+)
create mode 100644 Makefile
create mode 100644 csrc/Makefile
create mode 100644 sys/sdl/common/Makefile
create mode 100644 sys/utf8/common/Makefile
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ec64fab
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,22 @@
+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
diff --git a/csrc/Makefile b/csrc/Makefile
new file mode 100644
index 0000000..1023a87
--- /dev/null
+++ b/csrc/Makefile
@@ -0,0 +1,3 @@
+MODULE = u8g2
+
+include $(RIOTBASE)/Makefile.base
diff --git a/sys/sdl/common/Makefile b/sys/sdl/common/Makefile
new file mode 100644
index 0000000..ce8b90b
--- /dev/null
+++ b/sys/sdl/common/Makefile
@@ -0,0 +1,5 @@
+MODULE = u8g2_sdl
+
+CFLAGS += `sdl-config --cflags`
+
+include $(RIOTBASE)/Makefile.base
diff --git a/sys/utf8/common/Makefile b/sys/utf8/common/Makefile
new file mode 100644
index 0000000..32e7913
--- /dev/null
+++ b/sys/utf8/common/Makefile
@@ -0,0 +1,3 @@
+MODULE = u8g2_utf8
+
+include $(RIOTBASE)/Makefile.base
--
2.7.4

View File

@ -1,255 +0,0 @@
From 6a09e7bee194681f63781dd0af6c154f2f4e519c Mon Sep 17 00:00:00 2001
From: Peter Kietzmann <peter.kietzmann@haw-hamburg.de>
Date: Wed, 6 Sep 2017 20:26:46 +0200
Subject: [PATCH 2/3] add RIOT interface
---
csrc/u8g2.h | 3 +
csrc/u8g2_riotos.c | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++
csrc/u8x8.h | 17 +++++-
3 files changed, 181 insertions(+), 3 deletions(-)
create mode 100644 csrc/u8g2_riotos.c
diff --git a/csrc/u8g2.h b/csrc/u8g2.h
index 6ff3f91..d284619 100644
--- a/csrc/u8g2.h
+++ b/csrc/u8g2.h
@@ -387,6 +387,9 @@ void u8g2_ClearDisplay(u8g2_t *u8g2);
#define u8g2_SetMenuDownPin(u8g2, val) u8x8_SetMenuDownPin(u8g2_GetU8x8(u8g2), (val))
#endif
+#define u8g2_SetPins(u8x8,pins,pins_enabled) u8x8_SetPins(u8g2_GetU8x8(&u8g2), pins, pins_enabled)
+#define u8g2_SetDevice(u8x8,device) u8x8_SetDevice(u8g2_GetU8x8(&u8g2), device)
+
/*==========================================*/
/* u8g2_setup.c */
diff --git a/csrc/u8g2_riotos.c b/csrc/u8g2_riotos.c
new file mode 100644
index 0000000..bd06ccb
--- /dev/null
+++ b/csrc/u8g2_riotos.c
@@ -0,0 +1,164 @@
+#include "u8g2.h"
+
+#include "xtimer.h"
+
+#include "periph/spi.h"
+#include "periph/i2c.h"
+#include "periph/gpio.h"
+
+#include <stdio.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:
+ while (arg_int--) {
+ buffer[index++] = *((uint8_t *)arg_ptr++);
+ }
+ 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 */
diff --git a/csrc/u8x8.h b/csrc/u8x8.h
index a4a99b7..e508664 100644
--- a/csrc/u8x8.h
+++ b/csrc/u8x8.h
@@ -111,6 +111,8 @@
#include <stdint.h>
#include <stddef.h>
+#include "periph/gpio.h"
+
#if defined(__GNUC__) && defined(__AVR__)
#include <avr/pgmspace.h>
#endif
@@ -174,9 +176,9 @@ uint8_t u8x8_pgm_read_esp(const uint8_t * addr); /* u8x8_8x8.c */
# define U8X8_PROGMEM
#endif
-#ifdef ARDUINO
-#define U8X8_USE_PINS
-#endif
+//#ifdef ARDUINO
+//#define U8X8_USE_PINS
+//#endif
/*==========================================*/
/* U8X8 typedefs and data structures */
@@ -342,6 +344,10 @@ struct u8x8_struct
#ifdef U8X8_USE_PINS
uint8_t pins[U8X8_PIN_CNT]; /* defines a pinlist: Mainly a list of pins for the Arduino Envionment, use U8X8_PIN_xxx to access */
#endif
+
+gpio_t* pins;
+uint32_t pins_enabled;
+uint32_t dev;
};
#ifdef U8X8_WITH_USER_PTR
@@ -371,6 +377,8 @@ struct u8x8_struct
#define u8x8_SetMenuDownPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_DOWN,(val))
#endif
+#define u8x8_SetPins(u8x8,pins,pins_enabled) {(u8x8)->pins = (pins); (u8x8)->pins_enabled = (pins_enabled);}
+#define u8x8_SetDevice(u8x8,device) ((u8x8)->dev = device)
/*==========================================*/
@@ -943,6 +951,9 @@ extern const uint8_t u8x8_font_pxplustandynewtv_u[] U8X8_FONT_SECTION("u8x8_font
/* end font list */
+extern uint8_t u8x8_byte_riotos_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr);
+extern uint8_t u8x8_gpio_and_delay_riotos(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr);
+extern uint8_t u8x8_byte_riotos_hw_i2c(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr);
#ifdef __cplusplus
}
--
2.7.4

View File

@ -1,23 +0,0 @@
From 4783fcb666569eda64bbba7c4923fb0320ba7bcd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABtan=20Harter?= <gaetan.harter@fu-berlin.de>
Date: Tue, 7 Nov 2017 16:51:11 +0100
Subject: [PATCH 3/3] Change conflicting module name for pkg root directory
Root directory and csrc both had 'u8g2' module name.
---
Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Makefile b/Makefile
index ec64fab..419ebdb 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,5 @@
+MODULE = pkg-u8g2
+
DIRS += csrc
# SDL can be used as a virtual display, but is for native target only.
--
2.7.4

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