Handle impact of excluding pixbuf from build (#3398)

This commit is contained in:
Gregor Hartmann 2021-02-14 08:41:17 +01:00 committed by Nathaniel Wesley Filardo
parent c8f0ec8a92
commit 56c01fa5c8
10 changed files with 53 additions and 11 deletions

View File

@ -91,6 +91,7 @@ static int apa102_write(lua_State* L) {
nbr_frames = buf_len / 4; nbr_frames = buf_len / 4;
break; break;
} }
#ifdef LUA_USE_MODULES_PIXBUF
case LUA_TUSERDATA: { case LUA_TUSERDATA: {
pixbuf *buffer = pixbuf_from_lua_arg(L, 3); pixbuf *buffer = pixbuf_from_lua_arg(L, 3);
luaL_argcheck(L, buffer->nchan == 4, 3, "Pixbuf not 4-channel"); luaL_argcheck(L, buffer->nchan == 4, 3, "Pixbuf not 4-channel");
@ -98,6 +99,7 @@ static int apa102_write(lua_State* L) {
nbr_frames = buffer->npix; nbr_frames = buffer->npix;
break; break;
} }
#endif
default: default:
return luaL_argerror(L, 3, "String or pixbuf expected"); return luaL_argerror(L, 3, "String or pixbuf expected");
} }

View File

@ -77,6 +77,7 @@ static int ICACHE_FLASH_ATTR tm1829_write(lua_State* L)
pixels = luaL_checklstring(L, 2, &length); pixels = luaL_checklstring(L, 2, &length);
break; break;
} }
#ifdef LUA_USE_MODULES_PIXBUF
case LUA_TUSERDATA: { case LUA_TUSERDATA: {
pixbuf *buffer = pixbuf_from_lua_arg(L, 2); pixbuf *buffer = pixbuf_from_lua_arg(L, 2);
luaL_argcheck(L, pixbuf_channels(buffer) == 3, 2, "Bad pixbuf format"); luaL_argcheck(L, pixbuf_channels(buffer) == 3, 2, "Bad pixbuf format");
@ -84,6 +85,7 @@ static int ICACHE_FLASH_ATTR tm1829_write(lua_State* L)
length = 3 * buffer->npix; length = 3 * buffer->npix;
break; break;
} }
#endif
default: default:
return luaL_argerror(L, 2, "String or pixbuf expected"); return luaL_argerror(L, 2, "String or pixbuf expected");
} }

View File

@ -118,6 +118,7 @@ static int ICACHE_FLASH_ATTR ws2801_writergb(lua_State* L) {
case LUA_TSTRING: case LUA_TSTRING:
values = (const uint8_t*) luaL_checklstring(L, 1, &length); values = (const uint8_t*) luaL_checklstring(L, 1, &length);
break; break;
#ifdef LUA_USE_MODULES_PIXBUF
case LUA_TUSERDATA: { case LUA_TUSERDATA: {
pixbuf *buffer = pixbuf_from_lua_arg(L, 1); pixbuf *buffer = pixbuf_from_lua_arg(L, 1);
luaL_argcheck(L, buffer->nchan == 3, 1, "Pixbuf not 3-channel"); luaL_argcheck(L, buffer->nchan == 3, 1, "Pixbuf not 3-channel");
@ -125,6 +126,7 @@ static int ICACHE_FLASH_ATTR ws2801_writergb(lua_State* L) {
length = pixbuf_size(buffer); length = pixbuf_size(buffer);
break; break;
} }
#endif
default: default:
return luaL_argerror(L, 1, "pixbuf or string expected"); return luaL_argerror(L, 1, "pixbuf or string expected");
} }

View File

@ -134,6 +134,7 @@ static int ws2812_write(lua_State* L) {
{ {
buffer1 = lua_tolstring(L, 1, &length1); buffer1 = lua_tolstring(L, 1, &length1);
} }
#ifdef LUA_USE_MODULES_PIXBUF
else if (type == LUA_TUSERDATA) else if (type == LUA_TUSERDATA)
{ {
pixbuf *buffer = pixbuf_from_lua_arg(L, 1); pixbuf *buffer = pixbuf_from_lua_arg(L, 1);
@ -141,6 +142,7 @@ static int ws2812_write(lua_State* L) {
buffer1 = buffer->values; buffer1 = buffer->values;
length1 = pixbuf_size(buffer); length1 = pixbuf_size(buffer);
} }
#endif
else else
{ {
luaL_argerror(L, 1, "pixbuf or string expected"); luaL_argerror(L, 1, "pixbuf or string expected");
@ -157,6 +159,7 @@ static int ws2812_write(lua_State* L) {
{ {
buffer2 = lua_tolstring(L, 2, &length2); buffer2 = lua_tolstring(L, 2, &length2);
} }
#ifdef LUA_USE_MODULES_PIXBUF
else if (type == LUA_TUSERDATA) else if (type == LUA_TUSERDATA)
{ {
pixbuf *buffer = pixbuf_from_lua_arg(L, 2); pixbuf *buffer = pixbuf_from_lua_arg(L, 2);
@ -164,6 +167,7 @@ static int ws2812_write(lua_State* L) {
buffer2 = buffer->values; buffer2 = buffer->values;
length2 = pixbuf_size(buffer); length2 = pixbuf_size(buffer);
} }
#endif
else else
{ {
luaL_argerror(L, 2, "pixbuf or string expected"); luaL_argerror(L, 2, "pixbuf or string expected");
@ -177,14 +181,16 @@ static int ws2812_write(lua_State* L) {
LROT_BEGIN(ws2812, NULL, 0) LROT_BEGIN(ws2812, NULL, 0)
LROT_FUNCENTRY( init, ws2812_init ) LROT_FUNCENTRY( init, ws2812_init )
#ifdef LUA_USE_MODULES_PIXBUF
LROT_FUNCENTRY( newBuffer, pixbuf_new_lua ) // backwards compatibility LROT_FUNCENTRY( newBuffer, pixbuf_new_lua ) // backwards compatibility
LROT_FUNCENTRY( write, ws2812_write )
LROT_NUMENTRY( FADE_IN, PIXBUF_FADE_IN ) // BC LROT_NUMENTRY( FADE_IN, PIXBUF_FADE_IN ) // BC
LROT_NUMENTRY( FADE_OUT, PIXBUF_FADE_OUT ) // BC LROT_NUMENTRY( FADE_OUT, PIXBUF_FADE_OUT ) // BC
LROT_NUMENTRY( MODE_SINGLE, MODE_SINGLE )
LROT_NUMENTRY( MODE_DUAL, MODE_DUAL )
LROT_NUMENTRY( SHIFT_LOGICAL, PIXBUF_SHIFT_LOGICAL ) // BC LROT_NUMENTRY( SHIFT_LOGICAL, PIXBUF_SHIFT_LOGICAL ) // BC
LROT_NUMENTRY( SHIFT_CIRCULAR, PIXBUF_SHIFT_CIRCULAR ) // BC LROT_NUMENTRY( SHIFT_CIRCULAR, PIXBUF_SHIFT_CIRCULAR ) // BC
#endif
LROT_FUNCENTRY( write, ws2812_write )
LROT_NUMENTRY( MODE_SINGLE, MODE_SINGLE )
LROT_NUMENTRY( MODE_DUAL, MODE_DUAL )
LROT_END(ws2812, NULL, 0) LROT_END(ws2812, NULL, 0)
static int luaopen_ws2812(lua_State *L) { static int luaopen_ws2812(lua_State *L) {

View File

@ -13,6 +13,15 @@
#include "pixbuf.h" #include "pixbuf.h"
#include "color_utils.h" #include "color_utils.h"
#ifdef LUA_USE_MODULES_WS2812_EFFECTS
#ifndef LUA_USE_MODULES_PIXBUF
# error module pixbuf is required for ws2812_effects
#endif
#ifndef LUA_USE_MODULES_COLOR_UTILS
# error module color_utilsf is required for ws2812_effects
#endif
#endif
#define CANARY_VALUE 0x32372132 #define CANARY_VALUE 0x32372132
#define DEFAULT_MODE 0 #define DEFAULT_MODE 0

View File

@ -9,6 +9,10 @@ This module provides Lua access to [APA102 RGB LEDs](https://youtu.be/UYvC-hukz-
source: [Adafruit](https://www.adafruit.com/products/2343) source: [Adafruit](https://www.adafruit.com/products/2343)
!!! caution
This module has an _optional_ dependency to the [pixbuf module](pixbuf.md) i.e. it can work without. However, if you compile the firmware without pixbuf the respective features will be missing from this module.
## apa102.write() ## apa102.write()
Send ABGR data in 8 bits to a APA102 chain. Send ABGR data in 8 bits to a APA102 chain.
@ -18,7 +22,7 @@ Send ABGR data in 8 bits to a APA102 chain.
#### Parameters #### Parameters
- `data_pin` any GPIO pin 0, 1, 2, ... - `data_pin` any GPIO pin 0, 1, 2, ...
- `clock_pin` any GPIO pin 0, 1, 2, ... - `clock_pin` any GPIO pin 0, 1, 2, ...
- `string` payload to be sent to one or more APA102 LEDs. - `data` payload to be sent to one or more APA102 LEDs.
It may be a [pixbuf](pixbuf) with four channels or a string, It may be a [pixbuf](pixbuf) with four channels or a string,
composed from a ABGR quadruplet per element: composed from a ABGR quadruplet per element:

View File

@ -8,14 +8,18 @@ led controller.
The library uses any GPIO to bitstream the led control commands. The library uses any GPIO to bitstream the led control commands.
!!! caution
This module has an _optional_ dependency to the [pixbuf module](pixbuf.md) i.e. it can work without. However, if you compile the firmware without pixbuf the respective features will be missing from this module.
## tm1829.write() ## tm1829.write()
Send data to a led strip using native chip format. Send data to a led strip using native chip format.
#### Syntax #### Syntax
`tm1829.write(string)` `tm1829.write(data)`
#### Parameters #### Parameters
- `string` payload to be sent to one or more TM1829 leds. It is either - `data` payload to be sent to one or more TM1829 leds. It is either
a 3-channel [pixbuf](pixbuf) (e.g., `pixbuf.TYPE_RGB`) or a string of a 3-channel [pixbuf](pixbuf) (e.g., `pixbuf.TYPE_RGB`) or a string of
raw byte values to be sent. raw byte values to be sent.

View File

@ -3,6 +3,9 @@
| :----- | :-------------------- | :---------- | :------ | | :----- | :-------------------- | :---------- | :------ |
| 2015-07-12 | [Espressif example](https://github.com/CHERTS/esp8266-devkit/blob/master/Espressif/examples/ESP8266/EspLightNode/user/ws2801.c), [Konrad Beckmann](https://github.com/kbeckmann) | [Konrad Beckmann](https://github.com/kbeckmann) | [ws2801.c](../../app/modules/ws2801.c)| | 2015-07-12 | [Espressif example](https://github.com/CHERTS/esp8266-devkit/blob/master/Espressif/examples/ESP8266/EspLightNode/user/ws2801.c), [Konrad Beckmann](https://github.com/kbeckmann) | [Konrad Beckmann](https://github.com/kbeckmann) | [ws2801.c](../../app/modules/ws2801.c)|
!!! caution
This module has an _optional_ dependency to the [pixbuf module](pixbuf.md) i.e. it can work without. However, if you compile the firmware without pixbuf the respective features will be missing from this module.
## ws2801.init() ## ws2801.init()
Initializes the module and sets the pin configuration. Initializes the module and sets the pin configuration.
@ -18,19 +21,24 @@ Initializes the module and sets the pin configuration.
`nil` `nil`
## ws2801.write() ## ws2801.write()
Sends a string of RGB Data in 24 bits to WS2801. Don't forget to call `ws2801.init()` before. Sends data of RGB Data in 24 bits to WS2801. Don't forget to call `ws2801.init()` before.
#### Syntax #### Syntax
`ws2801.write(string)` `ws2801.write(data)`
####Parameters ####Parameters
- `string` payload to be sent to one or more WS2801. - `data` payload to be sent to one or more WS2801.
Payload type could be:
- `string` representing bytes to send
It should be composed from an RGB triplet per element. It should be composed from an RGB triplet per element.
- `R1` the first pixel's red channel value (0-255) - `R1` the first pixel's red channel value (0-255)
- `G1` the first pixel's green channel value (0-255) - `G1` the first pixel's green channel value (0-255)
- `B1` the first pixel's blue channel value (0-255)<br /> - `B1` the first pixel's blue channel value (0-255)<br />
... You can connect a lot of WS2801... ... You can connect a lot of WS2801...
- `R2`, `G2`, `B2` are the next WS2801's Red, Green, and Blue channel values - `R2`, `G2`, `B2` are the next WS2801's Red, Green, and Blue channel values
- a [pixbuf](pixbuf) object containing the bytes to send. The pixbuf's type is not checked!
#### Returns #### Returns
`nil` `nil`

View File

@ -15,7 +15,7 @@ Note that dual mode is currently not supported for effects.
!!! caution !!! caution
This module depends on the [color utils module](color-utils.md). Things **will** fail if that module is missing in the firmware! This module depends on the [color utils module](color-utils.md) and [pixbuf module](pixbuf.md). Things **will** fail if those modules are missing in the firmware!
#### Example usage #### Example usage
```lua ```lua

View File

@ -15,6 +15,10 @@ through the serial port (it will be reconfigured to support WS2812-like
protocol). If you want to keep access to Lua's console, you will have to protocol). If you want to keep access to Lua's console, you will have to
use an other input channel like a TCP server (see [example](https://github.com/nodemcu/nodemcu-firmware/blob/release/lua_modules/telnet/telnet.lua)) use an other input channel like a TCP server (see [example](https://github.com/nodemcu/nodemcu-firmware/blob/release/lua_modules/telnet/telnet.lua))
!!! caution
This module has an _optional_ dependency to the [pixbuf module](pixbuf.md) i.e. it can work without. However, if you compile the firmware without pixbuf the respective features will be missing from this module.
## ws2812.init() ## ws2812.init()
Initialize UART1 and GPIO2, should be called once and before write(). Initialize UART1 and GPIO2, should be called once and before write().
Initialize UART0 (TXD0) too if `ws2812.MODE_DUAL` is set. Initialize UART0 (TXD0) too if `ws2812.MODE_DUAL` is set.
@ -54,6 +58,7 @@ and the next invocation thereof.
- `data2` (optional) payload to be sent to one or more WS2812 like leds through TXD0 (`ws2812.MODE_DUAL` mode required) - `data2` (optional) payload to be sent to one or more WS2812 like leds through TXD0 (`ws2812.MODE_DUAL` mode required)
Payload type could be: Payload type could be:
- `nil` nothing is done - `nil` nothing is done
- `string` representing bytes to send - `string` representing bytes to send
- a [pixbuf](pixbuf) object containing the bytes to send. The pixbuf's type is not checked! - a [pixbuf](pixbuf) object containing the bytes to send. The pixbuf's type is not checked!
@ -90,7 +95,7 @@ For this purpose, the [pixbuf](pixbuf) library offers a read/write buffer and
convenient functions for pixel value manipulation. convenient functions for pixel value manipulation.
For backwards-compatibility, `pixbuf.newBuffer()` is aliased as For backwards-compatibility, `pixbuf.newBuffer()` is aliased as
`ws2812.newBuffer`, but this will be removed in the next nodemcu-firmware `ws2812.newBuffer()`, but this will be removed in the next nodemcu-firmware
release. release.
#### Example #### Example