feat(radio): refactor of switch handling to better support customisable switches (#6095)
Co-authored-by: philmoz <phil.a.mitchell@gmail.com> Co-authored-by: 3djc <3djc@gh.com> Co-authored-by: elecpower <elecpower@users.noreply.github.com>
This commit is contained in:
co-authored by
philmoz
3djc
elecpower
parent
28833f42e6
commit
0c8c39b134
@@ -34,6 +34,7 @@
|
||||
#include "input_mapping.h"
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
#include "boards/generic_stm32/rgb_leds.h"
|
||||
#include "hal/rgbleds.h"
|
||||
#endif
|
||||
|
||||
|
||||
@@ -2843,7 +2844,15 @@ static int luaGetTrainerStatus(lua_State * L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
// To simplify code below
|
||||
#if !defined(BLING_LED_STRIP_LENGTH)
|
||||
#define BLING_LED_STRIP_LENGTH 0
|
||||
#endif
|
||||
#if !defined(CFS_LED_STRIP_LENGTH)
|
||||
#define CFS_LED_STRIP_LENGTH 0
|
||||
#endif
|
||||
|
||||
#if (BLING_LED_STRIP_LENGTH > 0) || (CFS_LED_STRIP_LENGTH > 0)
|
||||
/*luadoc
|
||||
@function setRGBLedColor(id, rvalue, bvalue, cvalue)
|
||||
|
||||
@@ -2855,28 +2864,101 @@ static int luaGetTrainerStatus(lua_State * L)
|
||||
|
||||
@param bvalue: interger, value of blue channel
|
||||
|
||||
@retval: true if LED index is valid, false otherwise
|
||||
|
||||
@status current Introduced in 2.10
|
||||
*/
|
||||
|
||||
static int luaSetRgbLedColor(lua_State * L)
|
||||
{
|
||||
uint8_t id = luaL_checkunsigned(L, 1);
|
||||
|
||||
if (id >= (BLING_LED_STRIP_LENGTH + CFS_LED_STRIP_LENGTH)) {
|
||||
lua_pushboolean(L, false);
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t r = luaL_checkunsigned(L, 2);
|
||||
uint8_t g = luaL_checkunsigned(L, 3);
|
||||
uint8_t b = luaL_checkunsigned(L, 4);
|
||||
|
||||
#if defined(LED_STRIP_RESERVED_AT_END)
|
||||
if (id >= LED_STRIP_LENGTH - LED_STRIP_RESERVED_AT_END) {
|
||||
#if CFS_LED_STRIP_LENGTH > 0
|
||||
if (id >= BLING_LED_STRIP_LENGTH) {
|
||||
id -= BLING_LED_STRIP_LENGTH;
|
||||
uint8_t swIdx = switchGetSwitchFromCustomIdx(id / CFS_LEDS_PER_SWITCH);
|
||||
if (g_model.getSwitchType(swIdx) == SWITCH_NONE) {
|
||||
rgbSetLedColor(id + CFS_LED_STRIP_START, r, g, b);
|
||||
} else {
|
||||
lua_pushboolean(L, false);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
rgbSetLedColor(id, r, g, b);
|
||||
} else {
|
||||
rgbSetLedColor(id + BLING_LED_STRIP_START, r, g, b);
|
||||
}
|
||||
#else
|
||||
rgbSetLedColor(id + BLING_LED_STRIP_START, r, g, b);
|
||||
#endif
|
||||
|
||||
lua_pushboolean(L, true);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (CFS_LED_STRIP_LENGTH > 0)
|
||||
/*luadoc
|
||||
@function setCFSLedColor(id, rvalue, bvalue, cvalue)
|
||||
|
||||
Overrides the LED color for a custom function switch
|
||||
- if passed 4 arguments (id, r, g, b) then sets override color
|
||||
- if passed 1 argument (id) then cancels override color
|
||||
|
||||
@param id: string identifying a custom function switch name
|
||||
|
||||
@param rvalue: interger, value of red channel
|
||||
|
||||
@param gvalue: interger, value of green channel
|
||||
|
||||
@param bvalue: interger, value of blue channel
|
||||
|
||||
@retval: true if LED index is valid, false otherwise
|
||||
|
||||
@status current Introduced in ???
|
||||
*/
|
||||
|
||||
static int luaSetCFSLedColor(lua_State * L)
|
||||
{
|
||||
uint8_t r = 0, g = 0, b = 0;
|
||||
int n = lua_gettop(L);
|
||||
const char* nm = luaL_checkstring(L, 1);
|
||||
|
||||
int8_t id = switchGetIndexFromName(nm);
|
||||
|
||||
if (id < 0) {
|
||||
lua_pushboolean(L, false);
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t cfsIdx = switchGetCustomSwitchIdx(id);
|
||||
|
||||
if (cfsIdx >= CFS_LED_STRIP_LENGTH / CFS_LEDS_PER_SWITCH) {
|
||||
lua_pushboolean(L, false);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (n > 1) {
|
||||
r = luaL_checkunsigned(L, 2);
|
||||
g = luaL_checkunsigned(L, 3);
|
||||
b = luaL_checkunsigned(L, 4);
|
||||
}
|
||||
|
||||
setFSLedOverride(cfsIdx, n > 1, r, g, b);
|
||||
|
||||
lua_pushboolean(L, true);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(LED_STRIP_LENGTH)
|
||||
/*luadoc
|
||||
@function applyRGBLedColors()
|
||||
|
||||
@@ -2892,7 +2974,6 @@ static int luaApplyRGBLedColors(lua_State * L)
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -2997,9 +3078,12 @@ LROT_BEGIN(etxlib, NULL, 0)
|
||||
LROT_FUNCENTRY( getSourceIndex, luaGetSourceIndex )
|
||||
LROT_FUNCENTRY( getSourceName, luaGetSourceName )
|
||||
LROT_FUNCENTRY( sources, luaSources )
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
LROT_FUNCENTRY(setRGBLedColor, luaSetRgbLedColor )
|
||||
LROT_FUNCENTRY(applyRGBLedColors, luaApplyRGBLedColors )
|
||||
#if (BLING_LED_STRIP_LENGTH > 0) || (CFS_LED_STRIP_LENGTH > 0)
|
||||
LROT_FUNCENTRY( setRGBLedColor, luaSetRgbLedColor )
|
||||
LROT_FUNCENTRY( applyRGBLedColors, luaApplyRGBLedColors )
|
||||
#endif
|
||||
#if (CFS_LED_STRIP_LENGTH > 0)
|
||||
LROT_FUNCENTRY( setCFSLedColor, luaSetCFSLedColor )
|
||||
#endif
|
||||
LROT_FUNCENTRY( getStickMode, luaGetStickMode )
|
||||
LROT_END(etxlib, NULL, 0)
|
||||
@@ -3144,18 +3228,8 @@ LROT_BEGIN(etxcst, NULL, 0)
|
||||
LROT_NUMENTRY( PLAY_NOW, PLAY_NOW )
|
||||
LROT_NUMENTRY( PLAY_BACKGROUND, PLAY_BACKGROUND )
|
||||
LROT_NUMENTRY( TIMEHOUR, TIMEHOUR )
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
#if defined(RADIO_V16)
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH - 6 )
|
||||
#elif defined(RGB_LED_OFFSET)
|
||||
// Exclude function switch LEDs
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH - RGB_LED_OFFSET )
|
||||
#elif defined(LED_STRIP_RESERVED_AT_END)
|
||||
// Exclude leds at the end of the strip
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH - LED_STRIP_RESERVED_AT_END )
|
||||
#else
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH )
|
||||
#endif
|
||||
#if (BLING_LED_STRIP_LENGTH > 0) || (CFS_LED_STRIP_LENGTH > 0)
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, BLING_LED_STRIP_LENGTH + CFS_LED_STRIP_LENGTH )
|
||||
#endif
|
||||
LROT_NUMENTRY( UNIT_RAW, UNIT_RAW )
|
||||
LROT_NUMENTRY( UNIT_VOLTS, UNIT_VOLTS )
|
||||
|
||||
Reference in New Issue
Block a user