rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Data Structures | Functions
lua_hooks.h File Reference

Data Structures

struct  LuaOverrideSensor
 

Functions

void configureRusefiLuaHooks (lua_State *)
 
void luaDeInitPins ()
 
AirmassModelBasegetLuaAirmassModel ()
 
bool getAuxDigital (int index)
 
uint32_t getLuaArray (lua_State *l, int paramIndex, uint8_t *data, uint32_t size)
 
void startPwm (int index, float freq, float duty)
 
void setPwmDuty (int index, float duty)
 

Function Documentation

◆ configureRusefiLuaHooks()

void configureRusefiLuaHooks ( lua_State *  lState)

same exact could be accomplished via LuaSensor just with more API

Definition at line 642 of file lua_hooks.cpp.

642 {
644
645 tinymt32_init(&tinymt, 1534525); // todo: share instance with launch_control? probably not?
646 lua_register(lState, "random", [](lua_State* l) {
647 auto random = tinymt32_generate_float(&tinymt);
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()
674 .fun("filter", &LuaBiQuad::filter)
675 .fun("configureLowpass", &LuaBiQuad::configureLowpass);
676
677 LuaClass<LuaPid> luaPid(lState, "Pid");
678 luaPid
679 .ctor<float, float, float, float, float>()
680 .fun("get", &LuaPid::get)
681 .fun("setOffset", &LuaPid::setOffset)
682 .fun("reset", &LuaPid::reset);
683
684 LuaClass<LuaIndustrialPid> luaIndustrialPid(lState, "IndustrialPid");
685 luaIndustrialPid
686 .ctor<float, float, float, float, float>()
687 .fun("get", &LuaIndustrialPid::get)
688 .fun("setOffset", &LuaIndustrialPid::setOffset)
689 .fun("setDerivativeFilterLoss", &LuaIndustrialPid::setDerivativeFilterLoss)
690 .fun("setAntiwindupFreq", &LuaIndustrialPid::setAntiwindupFreq)
691 .fun("reset", &LuaIndustrialPid::reset);
692#endif
693
695
696 lua_register(lState, "readPin", lua_readpin);
697#if EFI_PROD_CODE && EFI_SHAFT_POSITION_INPUT
698 lua_register(lState, "startCrankingEngine", [](lua_State* l) {
700 return 0;
701 });
702#endif // EFI_PROD_CODE && EFI_SHAFT_POSITION_INPUT
703 lua_register(lState, "vin", lua_vin);
704
705 lua_register(lState, "getAuxAnalog", lua_getAuxAnalog);
706 lua_register(lState, "getSensorByIndex", lua_getSensorByIndex);
707 lua_register(lState, "getSensor", lua_getSensorByName);
708 lua_register(lState, "getSensorRaw", lua_getSensorRaw);
709 lua_register(lState, "hasSensor", lua_hasSensor);
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) {
717 lua_pushnumber(l, engine->module<TripOdometer>()->getConsumedGrams());
718 return 1;
719 });
720 lua_register(lState, "getConsumedGramsRemainder", [](lua_State* l) {
721 lua_pushnumber(l, engine->module<TripOdometer>()->getConsumedGramsRemainder());
722 return 1;
723 });
724 lua_register(lState, "getConsumptionGramPerSecond", [](lua_State* l) {
725 lua_pushnumber(l, engine->module<TripOdometer>()->getConsumptionGramPerSecond());
726 return 1;
727 });
728 lua_register(lState, "resetOdometer", [](lua_State*) {
729 engine->module<TripOdometer>()->reset();
730 return 0;
731 });
732#endif // EFI_VEHICLE_SPEED WITH_LUA_CONSUMPTION MODULE_ODOMETER
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 // index table, compute table lookup
739 auto result = getscriptTable(humanTableIdx - HUMAN_OFFSET)->getValue(x, y);
740
741 lua_pushnumber(l, result);
742 return 1;
743 });
744 // time since console or TunerStudio
745 lua_register(lState, "secondsSinceTsActivity", [](lua_State* l) {
746 lua_pushinteger(l, getSecondsSinceChannelsRequest());
747 return 1;
748 });
749
750 lua_register(lState, "curve", [](lua_State* l) {
751 // index starting from 1
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
762extern int luaCommandCounters[LUA_BUTTON_COUNT];
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 }
771 lua_pushinteger(l, luaCommandCounters[humanIndex - 1]);
772 return 1;
773 });
774#endif // EFI_PROD_CODE || EFI_SIMULATOR
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);
780 auto value = getSentValue(static_cast<SentInput>(humanIndex));
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);
790 /*auto ret = */getSentValues(static_cast<SentInput>(humanIndex), &sig0, &sig1);
791 lua_pushinteger(l, sig0);
792 lua_pushinteger(l, sig1);
793 return 2;
794 });
795#endif // EFI_SENT_SUPPORT
796
797#if EFI_LAUNCH_CONTROL
798 lua_register(lState, "setSparkSkipRatio", [](lua_State* l) {
799 auto targetSkipRatio = luaL_checknumber(l, 1);
800 engine->engineState.luaSoftSparkSkip = targetSkipRatio;
802 return 0;
803 });
804 lua_register(lState, "setSparkHardSkipRatio", [](lua_State* l) {
805 auto targetSkipRatio = luaL_checknumber(l, 1);
806 engine->engineState.luaHardSparkSkip = targetSkipRatio;
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 // EFI_LAUNCH_CONTROL
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 // EFI_ANTILAG_SYSTEM
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 // EFI_UNIT_TEST
838
839 /**
840 * same exact could be accomplished via LuaSensor just with more API
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;
847 extern StoredValueSensor luaGauges[LUA_GAUGE_COUNT];
848 luaGauges[index].setValidValue(value, getTimeNowNt());
849 return 0;
850 });
851
852 lua_register(lState, "enableCanTx", [](lua_State* l) {
853 engine->allowCanTx = lua_toboolean(l, 1);
854 return 0;
855 });
856
857 lua_register(lState, "enableCanRxWorkaround", [](lua_State*) {
858 // that's about global_can_data
860 return 0;
861 });
862// high-performance CANbus should be done on F7+, let's preserve couple of priceless bytes on F4
863#if !defined(STM32F4)
864#if EFI_CAN_SUPPORT
865 lua_register(lState, "getCanRxDropped", [](lua_State* l) {
866 auto count = getLuaCanRxDropped();
867 lua_pushinteger(l, count);
868 return 1;
869 });
870#endif // EFI_CAN_SUPPORT
871 lua_register(lState, "disableExtendedCanBroadcast", [](lua_State*) {
872 // that's about global_can_data
874 return 0;
875 });
876 lua_register(lState, "getCanBaudRate", [](lua_State* l) {
877 auto index = luaL_checkinteger(l, 1);
878 if (index == 1) {
879 lua_pushinteger(l, engineConfiguration->canBaudRate);
880 } else {
881 lua_pushinteger(l, engineConfiguration->can2BaudRate);
882 }
883 return 1;
884 });
885#endif // STM32F4
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 // this works due to updateGppwm being invoked from periodicSlowCallback
891 auto result = engine->outputChannels.gppwmOutput[index];
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) {
899 auto controller = engine->etbControllers[0];
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 // this is about Lua sensor acting in place of real analog PPS sensor
907 // todo: smarter implementation
908 doInitElectronicThrottle(true); // lame, we run with 'isStartupInit=true' in order to reset, NOT COOL
909 return 0;
910 });
911#endif // EFI_ELECTRONIC_THROTTLE_BODY
912
913 // checksum stuff
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) {
926 engine->module<BoostController>().unmock().luaTargetAdd = luaL_checknumber(l, 1);
927 return 0;
928 });
929 lua_register(lState, "setBoostTargetMult", [](lua_State* l) {
930 engine->module<BoostController>().unmock().luaTargetMult = luaL_checknumber(l, 1);
931 return 0;
932 });
933 lua_register(lState, "setBoostDutyAdd", [](lua_State* l) {
934 engine->module<BoostController>().unmock().luaOpenLoopAdd = luaL_checknumber(l, 1);
935 return 0;
936 });
937#endif // EFI_BOOST_CONTROL
938#if EFI_IDLE_CONTROL
939 lua_register(lState, "setIdleAdd", [](lua_State* l) {
940 engine->module<IdleController>().unmock().luaAdd = luaL_checknumber(l, 1);
941 return 0;
942 });
943 lua_register(lState, "setIdleRpm", [](lua_State* l) {
944 auto rpm = luaL_checknumber(l, 1);
945 setLinearCurve(config->cltIdleRpm, rpm, rpm, 1);
946 return 0;
947 });
948#endif
949 lua_register(lState, "setTimingAdd", [](lua_State* l) {
950 engine->ignitionState.luaTimingAdd = luaL_checknumber(l, 1);
951 return 0;
952 });
953#ifndef DISABLE_LUA_SET_TIMING_MULT
954 lua_register(lState, "setTimingMult", [](lua_State* l) {
955 engine->ignitionState.luaTimingMult = luaL_checknumber(l, 1);
956 return 0;
957 });
958#endif // !defined(DISABLE_LUA_SET_TIMING_MULT)
959#ifndef DISABLE_LUA_SET_FUEL_ADD
960 lua_register(lState, "setFuelAdd", [](lua_State* l) {
961 engine->engineState.lua.fuelAdd = luaL_checknumber(l, 1);
962 return 0;
963 });
964#endif // !defined(DISABLE_LUA_SET_FUEL_ADD)
965 lua_register(lState, "setFuelMult", [](lua_State* l) {
966 engine->engineState.lua.fuelMult = luaL_checknumber(l, 1);
967 return 0;
968 });
969#if EFI_ELECTRONIC_THROTTLE_BODY && EFI_PROD_CODE
970 lua_register(lState, "setEtbAdd", [](lua_State* l) {
971 auto luaAdjustment = luaL_checknumber(l, 1);
972
974
975 return 0;
976 });
977 lua_register(lState, "setEwgAdd", [](lua_State* l) {
978 auto luaAdjustment = luaL_checknumber(l, 1);
979
981
982 return 0;
983 });
984 lua_register(lState, "setEtbDisabled", [](lua_State* l) {
985 engine->engineState.lua.luaDisableEtb = lua_toboolean(l, 1);
986 return 0;
987 });
988#endif // EFI_ELECTRONIC_THROTTLE_BODY
989#if EFI_PROD_CODE
990 lua_register(lState, "setIgnDisabled", [](lua_State* l) {
991 engine->engineState.lua.luaIgnCut = lua_toboolean(l, 1);
992 return 0;
993 });
994 lua_register(lState, "setFuelDisabled", [](lua_State* l) {
995 engine->engineState.lua.luaFuelCut = lua_toboolean(l, 1);
996 return 0;
997 });
998 lua_register(lState, "setDfcoDisabled", [](lua_State* l) {
1000 return 0;
1001 });
1002#endif // EFI_PROD_CODE
1003
1004 lua_register(lState, "setClutchUpState", [](lua_State* l) {
1005 engine->engineState.lua.clutchUpState = lua_toboolean(l, 1);
1006 return 0;
1007 });
1008 lua_register(lState, "setClutchDownState", [](lua_State* l) {
1009 engine->engineState.lua.clutchDownState = lua_toboolean(l, 1);
1010 return 0;
1011 });
1012 lua_register(lState, "setBrakePedalState", [](lua_State* l) {
1013 engine->engineState.lua.brakePedalState = lua_toboolean(l, 1);
1014 return 0;
1015 });
1016
1017 lua_register(lState, "setAcRequestState", [](lua_State* l) {
1018 engine->engineState.lua.acRequestState = lua_toboolean(l, 1);
1019 return 0;
1020 });
1021
1022#if !defined(STM32F4)
1023 lua_register(lState, "getTorque", [](lua_State* l) {
1026
1027 auto result = interpolate3d(
1029 config->torqueLoadBins, tps,
1030 config->torqueRpmBins, rpm
1031 );
1032 lua_pushnumber(l, result);
1033 return 1;
1034 });
1035#endif
1036
1037 lua_register(lState, "setTorqueReductionState", [](lua_State* l) {
1038 engine->engineState.lua.torqueReductionState = lua_toboolean(l, 1);
1039 return 0;
1040 });
1041
1042 lua_register(lState, "getCalibration", [](lua_State* l) {
1043 auto propertyName = luaL_checklstring(l, 1, nullptr);
1044 auto result = getConfigValueByName(propertyName);
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 // fresh values need to be requested explicitly, there is no periodic invocation of that method
1054 auto result = getOutputValueByName(propertyName);
1055 lua_pushnumber(l, result);
1056 return 1;
1057 });
1058#endif // EFI_PROD_CODE || EFI_SIMULATOR
1059
1060#if EFI_SHAFT_POSITION_INPUT
1061 lua_register(lState, "getEngineState", [](lua_State* l) {
1063 int luaStateCode;
1064 if (state == STOPPED) {
1065 luaStateCode = 0;
1066 } else if (state == RUNNING) {
1067 luaStateCode = 2;
1068 } else {
1069 // spinning-up or cranking
1070 luaStateCode = 1;
1071 }
1072 lua_pushinteger(l, luaStateCode);
1073 return 1;
1074 });
1075#endif //EFI_SHAFT_POSITION_INPUT
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);
1081 bool isGoodName = setConfigValueByName(propertyName, value);
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*) {
1093 requestBurn();
1094 return 0;
1095 });
1096
1097 lua_register(lState, "getGlobalConfigurationVersion", [](lua_State* l) {
1098 lua_pushinteger(l, engine->getGlobalConfigurationVersion());
1099 return 1;
1100 });
1101
1102 lua_register(lState, "setAcDisabled", [](lua_State* l) {
1103 auto value = lua_toboolean(l, 1);
1104 engine->module<AcController>().unmock().isDisabledByLua = value;
1105 return 0;
1106 });
1107 lua_register(lState, "getTimeSinceAcToggleMs", [](lua_State* l) {
1108 float result = engine->module<AcController>().unmock().timeSinceStateChange.getElapsedSeconds() * 1000;
1109 lua_pushnumber(l, result);
1110 return 1;
1111 });
1112
1113#if !EFI_UNIT_TEST
1114 lua_register(lState, "startPwm", lua_startPwm);
1115 lua_register(lState, "setPwmDuty", lua_setPwmDuty);
1116 lua_register(lState, "setPwmFreq", lua_setPwmFreq);
1117 lua_register(lState, "getFan", [](lua_State* l) {
1118 lua_pushboolean(l, enginePins.fanRelay.getLogicValue());
1119 return 1;
1120 });
1121 lua_register(lState, "getFan2", [](lua_State* l) {
1122 lua_pushboolean(l, enginePins.fanRelay2.getLogicValue());
1123 return 1;
1124 });
1125 lua_register(lState, "getAcRelay", [](lua_State* l) {
1126 lua_pushboolean(l, enginePins.acRelay.getLogicValue());
1127 return 1;
1128 });
1129 lua_register(lState, "getDigital", lua_getDigital);
1130 lua_register(lState, "getAuxDigital", lua_getAuxDigital);
1131 lua_register(lState, "setDebug", lua_setDebug);
1132#if EFI_ENGINE_CONTROL
1133 lua_register(lState, "getAirmass", lua_getAirmass);
1134 lua_register(lState, "setAirmass", lua_setAirmass);
1135#endif // EFI_ENGINE_CONTROL
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) {
1158 int result = engine->triggerCentral.m_lastEventTimer.getElapsedUs() / 1000;
1159 lua_pushinteger(l, result);
1160 return 1;
1161 });
1162#endif // EFI_SHAFT_POSITION_INPUT
1163#endif // WITH_LUA_STOP_ENGINE
1164
1165#if EFI_CAN_SUPPORT
1166 lua_register(lState, "canRxAdd", lua_canRxAdd);
1167 lua_register(lState, "canRxAddMask", lua_canRxAddMask);
1168#endif // EFI_CAN_SUPPORT
1169#endif // not EFI_UNIT_TEST
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 /* todo: hasCriticalReportFile method #7291
1177 lua_register(lState, "hasCriticalReportFile", [](lua_State*) {
1178 // todo: actual method to scan SD card for error report files
1179 lua_pushinteger(l, hasCriticalReportFile());
1180 return 1;
1181 }
1182*/
1183#endif // EFI_PROD_CODE
1184
1185#if EFI_PROD_CODE && HW_HELLEN
1186 lua_register(lState, "hellenEnablePower", [](lua_State*) {
1187 hellenEnableEn("Lua");
1188 return 0;
1189 });
1190 lua_register(lState, "hellenDisablePower", [](lua_State*) {
1191 hellenDisableEn("Lua");
1192 return 0;
1193 });
1194#endif // HW_HELLEN
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);
1200 setDacVoltage(channel, voltage);
1201 return 0;
1202 });
1203#endif // EFI_DAC
1204
1205 LuaClass<SignalDebounce> luaDebounce(lState, "SignalDebounce");
1206 luaDebounce
1207 .ctor<float>()
1208 .fun("set", &SignalDebounce::set)
1209 .fun("get", &SignalDebounce::get);
1210
1211#if EFI_UNIT_TEST
1212 lua_register(lState, "advanceTimeUs", [](lua_State *l){
1213 auto us = luaL_checknumber(l, 1);
1214 advanceTimeUs(us);
1215 return 0;
1216 });
1217#endif // EFI_UNIT_TEST
1218}
uint16_t channel
Definition adc_inputs.h:104
int luaCommandCounters[LUA_BUTTON_COUNT]
Timer timeSinceStateChange
Definition ac_control.h:16
TriggerCentral triggerCentral
Definition engine.h:318
int getGlobalConfigurationVersion() const
Definition engine.cpp:289
IgnitionState ignitionState
Definition engine.h:239
bool allowCanTx
Definition engine.h:114
LaunchControlBase launchController
Definition engine.h:220
EngineState engineState
Definition engine.h:344
RpmCalculator rpmCalculator
Definition engine.h:306
AntilagSystemBase antilagController
Definition engine.h:228
IEtbController * etbControllers[ETB_COUNT]
Definition engine.h:126
TunerStudioOutputChannels outputChannels
Definition engine.h:109
constexpr auto & module()
Definition engine.h:200
RegisteredOutputPin fanRelay
Definition efi_gpio.h:86
RegisteredOutputPin fanRelay2
Definition efi_gpio.h:87
RegisteredOutputPin acRelay
Definition efi_gpio.h:90
void updateSparkSkip()
Definition engine2.cpp:137
ShutdownController shutdownController
bool getLogicValue() const
Definition efi_gpio.cpp:667
spinning_state_e getState() const
static float getOrZero(SensorType type)
Definition sensor.h:83
bool isEngineStop(efitick_t nowNt) const
void set(bool newState)
bool get() 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)
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)
Definition dac.cpp:59
EnginePins enginePins
Definition efi_gpio.cpp:24
efitick_t getTimeNowNt()
Definition efitime.cpp:19
void advanceTimeUs(int us)
void setEtbLuaAdjustment(percent_t pos)
void setEwgLuaAdjustment(percent_t pos)
void doInitElectronicThrottle(bool isStartupInit)
LimpManager * getLimpManager()
Definition engine.cpp:596
static EngineAccessor engine
Definition engine.h:413
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[]
Definition init_aux.cpp:21
size_t getLuaCanRxDropped()
static int lua_setPwmFreq(lua_State *l)
static int lua_readpin(lua_State *l)
Definition lua_hooks.cpp:60
PUBLIC_API_WEAK void boardConfigureLuaHooks(lua_State *lState)
int lua_canRxAddMask(lua_State *l)
static int lua_txCan(lua_State *l)
static tinymt32_t tinymt
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)
Definition lua_hooks.cpp:91
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)
Definition lua_hooks.cpp:49
void configureRusefiLuaUtilHooks(lua_State *lState)
float getOutputValueByName(const char *name)
spinning_state_e
@ RUNNING
@ STOPPED
SentInput
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)
Definition sent.cpp:135
int getSentValues(SentInput input, uint16_t *sig0, uint16_t *sig1)
Definition sent.cpp:153
void doScheduleStopEngine(StopRequestedReason reason)
void doStartCranking()
void configureLowpass(float samplingFrequency, float cutoffFrequency)
Definition lua_biquad.h:17
float filter(float input)
Definition lua_biquad.h:9
void setOffset(float offset)
Definition lua_pid.h:87
void setDerivativeFilterLoss(float derivativeFilterLoss)
Definition lua_pid.h:92
void setAntiwindupFreq(float antiwindupFreq)
Definition lua_pid.h:97
float get(float target, float input)
Definition lua_pid.h:76
float get(float target, float input)
Definition lua_pid.h:27
void reset()
Definition lua_pid.h:43
void setOffset(float offset)
Definition lua_pid.h:38
scaled_channel< int16_t, 2, 1 > luaTargetAdd
scaled_channel< uint8_t, 2, 1 > gppwmOutput[4]
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)
Definition tinymt32.c:62
static float tinymt32_generate_float(tinymt32_t *random)
Definition tinymt32.h:191
void disableTriggerStimulator()
void setTriggerEmulatorRPM(int rpm)
void enableTriggerStimulator(bool incGlobalConfiguration)
void requestBurn()
void updateTunerStudioState()
int getSecondsSinceChannelsRequest()
uint16_t count
Definition tunerstudio.h:1
bool setConfigValueByName(const char *name, float value)
float getConfigValueByName(const char *name)

Referenced by setupLuaState().

Here is the caller graph for this function:

◆ getAuxDigital()

bool getAuxDigital ( int  index)

Definition at line 365 of file lua_hooks.cpp.

365 {
366#if EFI_PROD_CODE
368#else
369 UNUSED(index);
370 return false;
371#endif
372}
bool efiReadPin(brain_pin_e pin)
Definition io_pins.cpp:89
UNUSED(samplingTimeSeconds)
switch_input_pin_e luaDigitalInputPins[LUA_DIGITAL_INPUT_COUNT]

Referenced by lua_getAuxDigital(), pokeAuxDigital(), and runOneLua().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getLuaAirmassModel()

AirmassModelBase & getLuaAirmassModel ( )

Definition at line 251 of file lua_hooks.cpp.

251 {
252 return luaAirmass;
253}
static LuaAirmass luaAirmass

Referenced by getAirmassModel().

Here is the caller graph for this function:

◆ getLuaArray()

uint32_t getLuaArray ( lua_State *  l,
int  paramIndex,
uint8_t *  data,
uint32_t  size 
)
Returns
number of elements

Definition at line 140 of file lua_hooks.cpp.

140 {
141 uint32_t result = 0;
142
143 luaL_checktype(l, paramIndex, LUA_TTABLE);
144 while (true) {
145 lua_pushnumber(l, result + 1);
146 auto elementType = lua_gettable(l, paramIndex);
147 auto val = lua_tonumber(l, -1);
148 lua_pop(l, 1);
149
150 if (elementType == LUA_TNIL) {
151 // we're done, this is the end of the array.
152 break;
153 }
154
155 if (elementType != LUA_TNUMBER) {
156 // We're not at the end, but this isn't a number!
157 luaL_error(l, "Unexpected data at position %d: %s", result, lua_tostring(l, -1));
158 }
159
160 // This element is valid, increment DLC
161 result++;
162
163 if (result > size) {
164 luaL_error(l, "Input array longer than buffer");
165 }
166 else {
167 data[result - 1] = val;
168 }
169 }
170 return result;
171}
composite packet size

Referenced by configureRusefiLuaHooks().

Here is the caller graph for this function:

◆ luaDeInitPins()

void luaDeInitPins ( )

Definition at line 311 of file lua_hooks.cpp.

311 {
312 // Simply de-init all pins - when the script runs again, they will be re-init'd
313 for (size_t i = 0; i < efi::size(enginePins.luaOutputPins); i++) {
315 }
316}
OutputPin luaOutputPins[LUA_PWM_COUNT]
Definition efi_gpio.h:100
void deInit()
Definition efi_gpio.cpp:802

Referenced by resetLua().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setPwmDuty()

void setPwmDuty ( int  index,
float  duty 
)

Definition at line 318 of file lua_hooks.cpp.

318 {
319 // clamp to 0..1
320 duty = clampF(0, duty, 1);
321
323}
void setSimplePwmDutyCycle(float dutyCycle) override
static SimplePwm pwms[LUA_PWM_COUNT]
static float duty

Referenced by lua_setPwmDuty().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ startPwm()

void startPwm ( int  index,
float  freq,
float  duty 
)

Definition at line 279 of file lua_hooks.cpp.

279 {
280 // clamp to 1..1000 hz, this line would turn 0hz on/off PWM into 1hz behind the scenes
281 freq = clampF(1, freq, 1000);
282
284
286 &pwms[index], "lua", &engine->scheduler,
287 pwmPin, &enginePins.luaOutputPins[index],
288 freq, duty
289 );
290
291 efiPrintf("LUA PWM on %s at %f initial duty",
292 hwPortname(pwmPin),
293 PERCENT_MULT * duty);
294}
SingleTimerExecutor scheduler
Definition engine.h:271
const char * hwPortname(brain_pin_e brainPin)
void startSimplePwmExt(SimplePwm *state, const char *msg, Scheduler *executor, brain_pin_e brainPin, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *callback)

Referenced by lua_startPwm().

Here is the call graph for this function:
Here is the caller graph for this function:

Go to the source code of this file.