642 {
644
646 lua_register(lState, "random", [](lua_State* l) {
648 lua_pushnumber(l, random);
649 return 1;
650 });
651
652 LuaClass<Timer> luaTimer(lState, "Timer");
653 luaTimer
654 .ctor()
655 .fun("reset", static_cast<void (Timer::*)() >(&Timer::reset ))
656 .fun("getElapsedSeconds", static_cast<float(Timer::*)()const>(&Timer::getElapsedSeconds));
657
658 LuaClass<LuaSensor> luaSensor(lState, "Sensor");
659 luaSensor
660 .ctor<lua_State*, const char*>()
661 .fun("set", &LuaSensor::set)
662 .fun("setRedundant", &LuaSensor::setRedundant)
663 .fun("setTimeout", &LuaSensor::setTimeout)
664 .fun("invalidate", &LuaSensor::invalidate);
665
666#ifndef WITH_LUA_PID
667#define WITH_LUA_PID TRUE
668#endif
669
670#if WITH_LUA_PID
671 LuaClass<LuaBiQuad> biQuard(lState, "Biquad");
672 biQuard
673 .ctor()
676
677 LuaClass<LuaPid> luaPid(lState, "Pid");
678 luaPid
683
684 LuaClass<LuaIndustrialPid> luaIndustrialPid(lState, "IndustrialPid");
685 luaIndustrialPid
692#endif
693
695
697#if EFI_PROD_CODE && EFI_SHAFT_POSITION_INPUT
698 lua_register(lState, "startCrankingEngine", [](lua_State* l) {
700 return 0;
701 });
702#endif
703 lua_register(lState,
"vin",
lua_vin);
704
710
711#ifndef WITH_LUA_CONSUMPTION
712#define WITH_LUA_CONSUMPTION TRUE
713#endif
714
715#if EFI_VEHICLE_SPEED && WITH_LUA_CONSUMPTION && defined (MODULE_ODOMETER)
716 lua_register(lState, "getConsumedGrams", [](lua_State* l) {
718 return 1;
719 });
720 lua_register(lState, "getConsumedGramsRemainder", [](lua_State* l) {
722 return 1;
723 });
724 lua_register(lState, "getConsumptionGramPerSecond", [](lua_State* l) {
726 return 1;
727 });
728 lua_register(lState, "resetOdometer", [](lua_State*) {
730 return 0;
731 });
732#endif
733 lua_register(lState, "table3d", [](lua_State* l) {
734 auto humanTableIdx = luaL_checkinteger(l, 1);
735 auto x = luaL_checknumber(l, 2);
736 auto y = luaL_checknumber(l, 3);
737
738
740
741 lua_pushnumber(l, result);
742 return 1;
743 });
744
745 lua_register(lState, "secondsSinceTsActivity", [](lua_State* l) {
747 return 1;
748 });
749
750 lua_register(lState, "curve", [](lua_State* l) {
751
752 auto humanCurveIdx = luaL_checkinteger(l, 1);
753 auto x = luaL_checknumber(l, 2);
754
755 auto result =
getCurveValue(humanCurveIdx - HUMAN_OFFSET, x);
756
757 lua_pushnumber(l, result);
758 return 1;
759 });
760
761#if EFI_PROD_CODE || EFI_SIMULATOR
763
764 lua_register(lState, "getTsButtonCount",
765 [](lua_State* l) {
766 auto humanIndex = luaL_checkinteger(l, 1);
767 if (humanIndex < 1 || humanIndex > LUA_BUTTON_COUNT) {
768 luaL_error(l, "Invalid button index: %d", humanIndex);
769 return 0;
770 }
772 return 1;
773 });
774#endif
775
776#if EFI_PROD_CODE && EFI_SENT_SUPPORT
777 lua_register(lState, "getSentValue",
778 [](lua_State* l) {
779 auto humanIndex = luaL_checkinteger(l, 1);
781 lua_pushnumber(l, value);
782 return 1;
783 });
784
785 lua_register(lState, "getSentValues",
786 [](lua_State* l) {
787 uint16_t sig0;
788 uint16_t sig1;
789 auto humanIndex = luaL_checkinteger(l, 1);
791 lua_pushinteger(l, sig0);
792 lua_pushinteger(l, sig1);
793 return 2;
794 });
795#endif
796
797#if EFI_LAUNCH_CONTROL
798 lua_register(lState, "setSparkSkipRatio", [](lua_State* l) {
799 auto targetSkipRatio = luaL_checknumber(l, 1);
802 return 0;
803 });
804 lua_register(lState, "setSparkHardSkipRatio", [](lua_State* l) {
805 auto targetSkipRatio = luaL_checknumber(l, 1);
808 return 0;
809 });
810 lua_register(lState, "setLaunchTrigger", [](lua_State* l) {
811 auto value = luaL_checkinteger(l, 1);
813 return 0;
814 });
815#endif
816#if EFI_ANTILAG_SYSTEM
817 lua_register(lState, "setRollingIdleTrigger", [](lua_State* l) {
818 auto value = luaL_checkinteger(l, 1);
820 return 0;
821 });
822#endif
823
824#if EFI_EMULATE_POSITION_SENSORS && !EFI_UNIT_TEST
825 lua_register(lState, "selfStimulateRPM", [](lua_State* l) {
826 auto rpm = luaL_checkinteger(l, 1);
827 if (rpm < 1) {
829 return 0;
830 }
833 }
835 return 0;
836 });
837#endif
838
839
840
841
842 lua_register(lState, "setLuaGauge", [](lua_State* l) {
843 auto index = luaL_checkinteger(l, 1) - 1;
844 auto value = luaL_checknumber(l, 2);
845 if (index < 0 || index >= LUA_GAUGE_COUNT)
846 return 0;
849 return 0;
850 });
851
852 lua_register(lState, "enableCanTx", [](lua_State* l) {
854 return 0;
855 });
856
857 lua_register(lState, "enableCanRxWorkaround", [](lua_State*) {
858
860 return 0;
861 });
862
863#if !defined(STM32F4)
864#if EFI_CAN_SUPPORT
865 lua_register(lState, "getCanRxDropped", [](lua_State* l) {
867 lua_pushinteger(l,
count);
868 return 1;
869 });
870#endif
871 lua_register(lState, "disableExtendedCanBroadcast", [](lua_State*) {
872
874 return 0;
875 });
876 lua_register(lState, "getCanBaudRate", [](lua_State* l) {
877 auto index = luaL_checkinteger(l, 1);
878 if (index == 1) {
880 } else {
882 }
883 return 1;
884 });
885#endif
886
887#if !defined(STM32F4) || defined(WITH_LUA_GET_GPPWM_STATE)
888 lua_register(lState, "getGpPwm", [](lua_State* l) {
889 auto index = luaL_checkinteger(l, 1);
890
892 lua_pushnumber(l, result);
893 return 1;
894 });
895#endif
896
897#if EFI_ELECTRONIC_THROTTLE_BODY && EFI_PROD_CODE
898 lua_register(lState, "getEtbTarget", [](lua_State* l) {
900 assertNotNull(controller, 0);
901 auto result = controller->getCurrentTarget();
902 lua_pushnumber(l, result);
903 return 1;
904 });
905 lua_register(lState, "restartEtb", [](lua_State*) {
906
907
909 return 0;
910 });
911#endif
912
913
914 lua_register(lState, "crc8_j1850", [](lua_State* l) {
915 uint8_t data[8];
916 uint32_t length =
getLuaArray(l, 1, data,
sizeof(data));
917 auto trimLength = luaL_checkinteger(l, 2);
918 int crc = crc8(data, minI(length, trimLength));
919
920 lua_pushinteger(l, crc);
921 return 1;
922 });
923
924#if EFI_BOOST_CONTROL
925 lua_register(lState, "setBoostTargetAdd", [](lua_State* l) {
927 return 0;
928 });
929 lua_register(lState, "setBoostTargetMult", [](lua_State* l) {
931 return 0;
932 });
933 lua_register(lState, "setBoostDutyAdd", [](lua_State* l) {
935 return 0;
936 });
937#endif
938#if EFI_IDLE_CONTROL
939 lua_register(lState, "setIdleAdd", [](lua_State* l) {
941 return 0;
942 });
943 lua_register(lState, "setIdleRpm", [](lua_State* l) {
944 auto rpm = luaL_checknumber(l, 1);
946 return 0;
947 });
948#endif
949 lua_register(lState, "setTimingAdd", [](lua_State* l) {
951 return 0;
952 });
953#ifndef DISABLE_LUA_SET_TIMING_MULT
954 lua_register(lState, "setTimingMult", [](lua_State* l) {
956 return 0;
957 });
958#endif
959#ifndef DISABLE_LUA_SET_FUEL_ADD
960 lua_register(lState, "setFuelAdd", [](lua_State* l) {
962 return 0;
963 });
964#endif
965 lua_register(lState, "setFuelMult", [](lua_State* l) {
967 return 0;
968 });
969#if EFI_ELECTRONIC_THROTTLE_BODY && EFI_PROD_CODE
970 lua_register(lState, "setEtbAdd", [](lua_State* l) {
972
974
975 return 0;
976 });
977 lua_register(lState, "setEwgAdd", [](lua_State* l) {
979
981
982 return 0;
983 });
984 lua_register(lState, "setEtbDisabled", [](lua_State* l) {
986 return 0;
987 });
988#endif
989#if EFI_PROD_CODE
990 lua_register(lState, "setIgnDisabled", [](lua_State* l) {
992 return 0;
993 });
994 lua_register(lState, "setFuelDisabled", [](lua_State* l) {
996 return 0;
997 });
998 lua_register(lState, "setDfcoDisabled", [](lua_State* l) {
1000 return 0;
1001 });
1002#endif
1003
1004 lua_register(lState, "setClutchUpState", [](lua_State* l) {
1006 return 0;
1007 });
1008 lua_register(lState, "setClutchDownState", [](lua_State* l) {
1010 return 0;
1011 });
1012 lua_register(lState, "setBrakePedalState", [](lua_State* l) {
1014 return 0;
1015 });
1016
1017 lua_register(lState, "setAcRequestState", [](lua_State* l) {
1019 return 0;
1020 });
1021
1022#if !defined(STM32F4)
1023 lua_register(lState, "getTorque", [](lua_State* l) {
1026
1027 auto result = interpolate3d(
1031 );
1032 lua_pushnumber(l, result);
1033 return 1;
1034 });
1035#endif
1036
1037 lua_register(lState, "setTorqueReductionState", [](lua_State* l) {
1039 return 0;
1040 });
1041
1042 lua_register(lState, "getCalibration", [](lua_State* l) {
1043 auto propertyName = luaL_checklstring(l, 1, nullptr);
1045 lua_pushnumber(l, result);
1046 return 1;
1047 });
1048
1049#if EFI_TUNER_STUDIO && (EFI_PROD_CODE || EFI_SIMULATOR)
1050 lua_register(lState, "getOutput", [](lua_State* l) {
1051 auto propertyName = luaL_checklstring(l, 1, nullptr);
1052
1055 lua_pushnumber(l, result);
1056 return 1;
1057 });
1058#endif
1059
1060#if EFI_SHAFT_POSITION_INPUT
1061 lua_register(lState, "getEngineState", [](lua_State* l) {
1063 int luaStateCode;
1065 luaStateCode = 0;
1067 luaStateCode = 2;
1068 } else {
1069
1070 luaStateCode = 1;
1071 }
1072 lua_pushinteger(l, luaStateCode);
1073 return 1;
1074 });
1075#endif
1076
1077 lua_register(lState, "setCalibration", [](lua_State* l) {
1078 auto propertyName = luaL_checklstring(l, 1, nullptr);
1079 auto value = luaL_checknumber(l, 2);
1080 auto incrementVersion = lua_toboolean(l, 3);
1082 if (isGoodName) {
1083 efiPrintf("LUA: applying [%s][%f]", propertyName, value);
1084 } else {
1085 efiPrintf("LUA: invalid calibration key [%s]", propertyName);
1086 }
1087 if (incrementVersion) {
1089 }
1090 return 0;
1091 });
1092 lua_register(lState, CMD_BURNCONFIG, [](lua_State*) {
1094 return 0;
1095 });
1096
1097 lua_register(lState, "getGlobalConfigurationVersion", [](lua_State* l) {
1099 return 1;
1100 });
1101
1102 lua_register(lState, "setAcDisabled", [](lua_State* l) {
1103 auto value = lua_toboolean(l, 1);
1105 return 0;
1106 });
1107 lua_register(lState, "getTimeSinceAcToggleMs", [](lua_State* l) {
1109 lua_pushnumber(l, result);
1110 return 1;
1111 });
1112
1113#if !EFI_UNIT_TEST
1117 lua_register(lState, "getFan", [](lua_State* l) {
1119 return 1;
1120 });
1121 lua_register(lState, "getFan2", [](lua_State* l) {
1123 return 1;
1124 });
1125 lua_register(lState, "getAcRelay", [](lua_State* l) {
1127 return 1;
1128 });
1132#if EFI_ENGINE_CONTROL
1135#endif
1136
1137
1138#ifndef WITH_LUA_STOP_ENGINE
1139#define WITH_LUA_STOP_ENGINE TRUE
1140#endif
1141
1142#if WITH_LUA_STOP_ENGINE
1143 lua_register(lState, "isFirmwareError", [](lua_State* l) {
1144 lua_pushboolean(l, hasFirmwareError());
1145 return 1;
1146 });
1147#if EFI_SHAFT_POSITION_INPUT
1148 lua_register(lState, "stopEngine", [](lua_State*) {
1150 return 0;
1151 });
1152 lua_register(lState, "isEngineStopRequested", [](lua_State* l) {
1154 lua_pushboolean(l, result);
1155 return 1;
1156 });
1157 lua_register(lState, "getTimeSinceTriggerEventMs", [](lua_State* l) {
1159 lua_pushinteger(l, result);
1160 return 1;
1161 });
1162#endif
1163#endif
1164
1165#if EFI_CAN_SUPPORT
1168#endif
1169#endif
1170
1171#if EFI_CAN_SUPPORT || EFI_UNIT_TEST
1172 lua_register(lState,
"txCan",
lua_txCan);
1173#endif
1174
1175#if EFI_PROD_CODE
1176
1177
1178
1179
1180
1181
1182
1183#endif
1184
1185#if EFI_PROD_CODE && HW_HELLEN
1186 lua_register(lState, "hellenEnablePower", [](lua_State*) {
1188 return 0;
1189 });
1190 lua_register(lState, "hellenDisablePower", [](lua_State*) {
1192 return 0;
1193 });
1194#endif
1195
1196#if EFI_DAC
1197 lua_register(lState, "setDacVoltage", [](lua_State* l) {
1198 auto channel = luaL_checkinteger(l, 1);
1199 auto voltage = luaL_checknumber(l, 2);
1201 return 0;
1202 });
1203#endif
1204
1205 LuaClass<SignalDebounce> luaDebounce(lState, "SignalDebounce");
1206 luaDebounce
1207 .ctor<float>()
1210
1211#if EFI_UNIT_TEST
1212 lua_register(lState, "advanceTimeUs", [](lua_State *l){
1213 auto us = luaL_checknumber(l, 1);
1215 return 0;
1216 });
1217#endif
1218}
int luaCommandCounters[LUA_BUTTON_COUNT]
Timer timeSinceStateChange
TriggerCentral triggerCentral
int getGlobalConfigurationVersion() const
IgnitionState ignitionState
LaunchControlBase launchController
RpmCalculator rpmCalculator
AntilagSystemBase antilagController
IEtbController * etbControllers[ETB_COUNT]
TunerStudioOutputChannels outputChannels
constexpr auto & module()
RegisteredOutputPin fanRelay
RegisteredOutputPin fanRelay2
RegisteredOutputPin acRelay
ShutdownController shutdownController
bool getLogicValue() const
spinning_state_e getState() const
static float getOrZero(SensorType type)
bool isEngineStop(efitick_t nowNt) const
Base class for sensors that compute a value on one thread, and want to make it available to consumers...
void setValidValue(float value, efitick_t timestamp)
bool directSelfStimulation
float getConsumedGramsRemainder() const
float getConsumptionGramPerSecond() const
uint32_t getConsumedGrams() const
virtual float getValue(float xColumn, float yRow) const =0
void setDacVoltage(int channel, float voltage)
void advanceTimeUs(int us)
void setEtbLuaAdjustment(percent_t pos)
void setEwgLuaAdjustment(percent_t pos)
void doInitElectronicThrottle(bool isStartupInit)
LimpManager * getLimpManager()
static EngineAccessor engine
void incrementGlobalConfigurationVersion(const char *msg)
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
void hellenEnableEn(const char *msg)
void hellenDisableEn(const char *msg)
StoredValueSensor luaGauges[]
size_t getLuaCanRxDropped()
static int lua_setPwmFreq(lua_State *l)
static int lua_readpin(lua_State *l)
PUBLIC_API_WEAK void boardConfigureLuaHooks(lua_State *lState)
int lua_canRxAddMask(lua_State *l)
static int lua_txCan(lua_State *l)
uint32_t getLuaArray(lua_State *l, int paramIndex, uint8_t *data, uint32_t size)
static int lua_setAirmass(lua_State *l)
static int lua_getDigital(lua_State *l)
static int lua_getAuxDigital(lua_State *l)
static int lua_getAuxAnalog(lua_State *l)
static int lua_getSensorByIndex(lua_State *l)
static int lua_hasSensor(lua_State *l)
static int lua_getSensorByName(lua_State *l)
static int lua_getAirmass(lua_State *l)
static int lua_setPwmDuty(lua_State *l)
static int lua_getSensorRaw(lua_State *l)
int lua_canRxAdd(lua_State *l)
static int lua_setDebug(lua_State *l)
static int lua_startPwm(lua_State *l)
static int lua_vin(lua_State *l)
void configureRusefiLuaUtilHooks(lua_State *lState)
float getOutputValueByName(const char *name)
float getCurveValue(int index, float key)
ValueProvider3D * getscriptTable(int index)
luaAdjustment("ETB: luaAdjustment", SensorCategory.SENSOR_INPUTS, FieldType.INT, 1828, 1.0, 0.0, 3.0, "%")
state("state", SensorCategory.SENSOR_INPUTS, FieldType.INT8, 1871, 1.0, -1.0, -1.0, "")
float getSentValue(SentInput input)
int getSentValues(SentInput input, uint16_t *sig0, uint16_t *sig1)
void doScheduleStopEngine(StopRequestedReason reason)
bool disableDecelerationFuelCutOff
bool torqueReductionState
void configureLowpass(float samplingFrequency, float cutoffFrequency)
float filter(float input)
void setOffset(float offset)
void setDerivativeFilterLoss(float derivativeFilterLoss)
void setAntiwindupFreq(float antiwindupFreq)
float get(float target, float input)
float get(float target, float input)
void setOffset(float offset)
scaled_channel< int16_t, 2, 1 > luaTargetAdd
can_baudrate_e canBaudRate
can_baudrate_e can2BaudRate
bool enableExtendedCanBroadcast
scaled_channel< uint8_t, 2, 1 > gppwmOutput[4]
uint16_t torqueLoadBins[TORQUE_CURVE_SIZE]
uint16_t torqueRpmBins[TORQUE_CURVE_RPM_SIZE]
scaled_channel< uint8_t, 1, 10 > torqueTable[TORQUE_CURVE_SIZE][TORQUE_CURVE_RPM_SIZE]
scaled_channel< uint8_t, 1, 20 > cltIdleRpm[CLT_CURVE_SIZE]
void setLinearCurve(TValue(&array)[TSize], float from, float to, float precision=0.01f)
void tinymt32_init(tinymt32_t *random, uint32_t seed)
static float tinymt32_generate_float(tinymt32_t *random)
void disableTriggerStimulator()
void setTriggerEmulatorRPM(int rpm)
void enableTriggerStimulator(bool incGlobalConfiguration)
void updateTunerStudioState()
int getSecondsSinceChannelsRequest()
bool setConfigValueByName(const char *name, float value)
float getConfigValueByName(const char *name)