diff --git a/components/modules/u8g2.c b/components/modules/u8g2.c index dcfb8ccc..9bdf8496 100644 --- a/components/modules/u8g2.c +++ b/components/modules/u8g2.c @@ -1,4 +1,5 @@ // Module for binding the u8g2 library +// Note: This file is intended to be shared between esp8266 and esp32 platform #include "module.h" #include "lauxlib.h" @@ -10,9 +11,13 @@ #include "u8g2_displays.h" #include "u8g2_fonts.h" +#ifdef ESP_PLATFORM +// ESP32 #include "spi_common.h" #include "sdkconfig.h" +#endif + #ifndef CONFIG_LUA_MODULE_U8G2 // ignore unused functions if u8g2 module will be skipped anyhow #pragma GCC diagnostic ignored "-Wunused-function" @@ -616,6 +621,7 @@ static int ldisplay_i2c( lua_State *L, display_setup_fn_t setup_fn ) u8g2_t *u8g2 = (u8g2_t *)ext_u8g2; u8x8_t *u8x8 = (u8x8_t *)u8g2; + setup_fn( u8g2, U8G2_R0, u8x8_byte_nodemcu_i2c, u8x8_gpio_and_delay_nodemcu ); /* prepare overlay data */ @@ -653,24 +659,45 @@ static int ldisplay_spi( lua_State *L, display_setup_fn_t setup_fn ) { int stack = 0; +#ifndef ESP_PLATFORM + // ESP8266 + typedef struct { + int host; + } lspi_host_t; + lspi_host_t host_elem; + lspi_host_t *host = &host_elem; +#else + // ESP32 lspi_host_t *host = NULL; +#endif int host_ref = LUA_NOREF; int cs = -1; int dc = -1; int res = -1; int rfb_cb_ref = LUA_NOREF; + int get_spi_pins; - if (lua_type( L, ++stack) == LUA_TUSERDATA) { + + if (lua_type( L, ++stack ) == LUA_TUSERDATA) { host = (lspi_host_t *)luaL_checkudata( L, stack, "spi.master" ); /* reference host object to avoid automatic gc */ lua_pushvalue( L, stack ); host_ref = luaL_ref( L, LUA_REGISTRYINDEX ); + get_spi_pins = 1; + } else if (lua_type( L, stack ) == LUA_TNUMBER) { + host->host = luaL_checkint( L, stack ); + get_spi_pins = 1; + } else { + get_spi_pins = 0; + stack--; + } + if (get_spi_pins) { cs = luaL_checkint( L, ++stack ); dc = luaL_checkint( L, ++stack ); res = luaL_optint( L, ++stack, -1 ); - } else - stack--; + } + if (lua_isfunction( L, ++stack )) { lua_pushvalue( L, stack ); rfb_cb_ref = luaL_ref( L, LUA_REGISTRYINDEX ); @@ -687,6 +714,7 @@ static int ldisplay_spi( lua_State *L, display_setup_fn_t setup_fn ) u8g2_t *u8g2 = (u8g2_t *)ext_u8g2; u8x8_t *u8x8 = (u8x8_t *)u8g2; + setup_fn( u8g2, U8G2_R0, u8x8_byte_nodemcu_spi, u8x8_gpio_and_delay_nodemcu ); /* prepare overlay data */ diff --git a/components/platform/u8x8_nodemcu_hal.c b/components/platform/u8x8_nodemcu_hal.c index 6b16cd24..8cc036cd 100644 --- a/components/platform/u8x8_nodemcu_hal.c +++ b/components/platform/u8x8_nodemcu_hal.c @@ -28,7 +28,7 @@ uint8_t u8x8_gpio_and_delay_nodemcu(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, memset( (void *)&cfg, 0, sizeof( cfg ) ); cfg.pin_bit_mask = 1ULL << u8x8->pins[idx]; - if (idx == U8X8_PIN_I2C_CLOCK || idx == U8X8_PIN_I2C_CLOCK) { + if (idx == U8X8_PIN_I2C_CLOCK || idx == U8X8_PIN_I2C_DATA) { cfg.mode = GPIO_MODE_OUTPUT_OD; cfg.pull_up_en = GPIO_PULLUP_ENABLE; } else {