diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 50d699be95..494dd84da3 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -16,6 +16,7 @@ #include "advance_map.h" #include "speed_density.h" #include "advance_map.h" +#include "init.h" #include "aux_valves.h" #include "map_averaging.h" @@ -268,6 +269,7 @@ extern bool kAcRequestState; #endif // EFI_IDLE_CONTROL engine->brakePedalSwitchedState.update(getBrakePedalState()); + pokeAuxDigital(); #endif // EFI_GPIO_HARDWARE } diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 5f7482b392..db8f03df19 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -190,6 +190,7 @@ public: SwitchedState clutchUpSwitchedState; SwitchedState brakePedalSwitchedState; SwitchedState acButtonSwitchedState; + SimpleSwitchedState luaDigitalInputState[LUA_DIGITAL_INPUT_COUNT]; #if EFI_LAUNCH_CONTROL LaunchControlBase launchController; diff --git a/firmware/controllers/can/can_bench_test.cpp b/firmware/controllers/can/can_bench_test.cpp index d8da1c765f..d55debfe5c 100644 --- a/firmware/controllers/can/can_bench_test.cpp +++ b/firmware/controllers/can/can_bench_test.cpp @@ -100,6 +100,13 @@ void sendButtonCounters() { // todo: start button } +void sendAuxDigitalCounters() { + CanTxMessage msg(CanCategory::BENCH_TEST, (int)bench_test_packet_ids_e::BUTTON_COUNTERS, 8, /*bus*/0, /*isExtended*/true); + for (int i =0;iluaDigitalInputState[i].state.getCounter()); + } +} + void sendRawAnalogValues() { const float values_1[] = { Sensor::getRaw(SensorType::Tps1Primary), diff --git a/firmware/controllers/can/can_bench_test.h b/firmware/controllers/can/can_bench_test.h index d13a1b52bc..21965fc430 100644 --- a/firmware/controllers/can/can_bench_test.h +++ b/firmware/controllers/can/can_bench_test.h @@ -8,6 +8,7 @@ void processCanBenchTest(const CANRxFrame& frame); void sendEventCounters(); void sendButtonCounters(); +void sendAuxDigitalCounters(); void sendRawAnalogValues(); void sendBoardStatus(); void initQcControls(); diff --git a/firmware/controllers/can/can_tx.cpp b/firmware/controllers/can/can_tx.cpp index 28110b5503..cbb22f1319 100644 --- a/firmware/controllers/can/can_tx.cpp +++ b/firmware/controllers/can/can_tx.cpp @@ -63,6 +63,7 @@ void CanWrite::PeriodicTask(efitick_t nowNt) { if (cycle.isInterval(CI::_250ms)) { sendBoardStatus(); sendButtonCounters(); + sendAuxDigitalCounters(); } #if EFI_WIDEBAND_FIRMWARE_UPDATE diff --git a/firmware/controllers/system/efi_output.h b/firmware/controllers/system/efi_output.h index 0322d6af5a..7a20564970 100644 --- a/firmware/controllers/system/efi_output.h +++ b/firmware/controllers/system/efi_output.h @@ -29,6 +29,14 @@ private: uint16_t counter = 0; }; +class SimpleSwitchedState { +public: + SimpleSwitchedState() : state(&value) { + } + int8_t value = 0; + SwitchedState state; +}; + // Used if you want a function to be virtual only for unit testing purposes #if EFI_UNIT_TEST #define TEST_VIRTUAL virtual diff --git a/firmware/init/init.h b/firmware/init/init.h index c18b221427..27b69b6849 100644 --- a/firmware/init/init.h +++ b/firmware/init/init.h @@ -46,3 +46,5 @@ void deinitTurbochargerSpeedSensor(); void deinitMap(); void deinitAuxSpeedSensors(); void deinitInputShaftSpeedSensor(); + +void pokeAuxDigital(); diff --git a/firmware/init/sensor/init_sensors.cpp b/firmware/init/sensor/init_sensors.cpp index 85ad590dee..432db82ba5 100644 --- a/firmware/init/sensor/init_sensors.cpp +++ b/firmware/init/sensor/init_sensors.cpp @@ -7,6 +7,7 @@ #include "init.h" #include "cli_registry.h" #include "io_pins.h" +#include "lua_hooks.h" static void initSensorCli(); @@ -61,6 +62,14 @@ static void initAuxDigital() { #endif // EFI_PROD_CODE } +void pokeAuxDigital() { +#if EFI_PROD_CODE + for (size_t i = 0;iluaDigitalInputPins);i++) { + engine->luaDigitalInputState[i].state.update(getAuxDigital(i)); + } +#endif // EFI_PROD_CODE +} + static void deInitAuxDigital() { for (size_t i = 0;i