From d1729615777ae34c31c816c1e41d9a894471d756 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 13 Nov 2021 10:02:01 -0500 Subject: [PATCH] findTableIndex --- firmware/controllers/core/fsio_impl.cpp | 9 +++++++++ firmware/controllers/core/fsio_impl.h | 1 + firmware/controllers/lua/lua_hooks.cpp | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/firmware/controllers/core/fsio_impl.cpp b/firmware/controllers/core/fsio_impl.cpp index 33deb5da7a..13acb4a0b7 100644 --- a/firmware/controllers/core/fsio_impl.cpp +++ b/firmware/controllers/core/fsio_impl.cpp @@ -616,6 +616,15 @@ int getCurveIndexByName(const char *name DECLARE_ENGINE_PARAMETER_SUFFIX) { return EFI_ERROR_CODE; } +int getTableIndexByName(const char *name DECLARE_ENGINE_PARAMETER_SUFFIX) { + for (int i = 0;iscriptTableName[i])) { + return i; + } + } + return EFI_ERROR_CODE; +} + float getCurveValue(int index, float key DECLARE_ENGINE_PARAMETER_SUFFIX) { // not great code at all :( switch (index) { diff --git a/firmware/controllers/core/fsio_impl.h b/firmware/controllers/core/fsio_impl.h index 990cdf7322..81c934cc51 100644 --- a/firmware/controllers/core/fsio_impl.h +++ b/firmware/controllers/core/fsio_impl.h @@ -40,5 +40,6 @@ void runHardcodedFsio(DECLARE_ENGINE_PARAMETER_SIGNATURE); float getCurveValue(int index, float key DECLARE_ENGINE_PARAMETER_SUFFIX); int getCurveIndexByName(const char *name DECLARE_ENGINE_PARAMETER_SUFFIX); +int getTableIndexByName(const char *name DECLARE_ENGINE_PARAMETER_SUFFIX); ValueProvider3D *getFSIOTable(int index); diff --git a/firmware/controllers/lua/lua_hooks.cpp b/firmware/controllers/lua/lua_hooks.cpp index fb3718050c..26c0342d24 100644 --- a/firmware/controllers/lua/lua_hooks.cpp +++ b/firmware/controllers/lua/lua_hooks.cpp @@ -473,6 +473,24 @@ void configureRusefiLuaHooks(lua_State* l) { // used by unit tests lua_register(l, "txCan", lua_txCan); + lua_register(l, "findTableIndex", + [](lua_State* l) { +#if EFI_UNIT_TEST + Engine *engine = engineForLuaUnitTests; + EXPAND_Engine; +#endif + auto name = luaL_checklstring(l, 1, nullptr); + auto result = getTableIndexByName(name PASS_ENGINE_PARAMETER_SUFFIX); + if (result == EFI_ERROR_CODE) { + lua_pushnil(l); + } else { + // TS counts curve from 1 so convert indexing here + lua_pushnumber(l, result + HUMAN_OFFSET); + } + return 1; + }); + + #if !EFI_UNIT_TEST lua_register(l, "startPwm", lua_startPwm); lua_register(l, "setPwmDuty", lua_setPwmDuty);