fome-fw/firmware/controllers/settings.cpp

571 lines
17 KiB
C++
Raw Normal View History

2015-07-10 06:01:56 -07:00
/**
* @file settings.cpp
* @brief This file is about configuring engine via the human-readable protocol
*
* @date Dec 30, 2012
2020-01-13 18:57:43 -08:00
* @author Andrey Belomutskiy, (c) 2012-2020
2015-07-10 06:01:56 -07:00
*/
#include "pch.h"
#if ! EFI_UNIT_TEST
2022-09-07 12:56:45 -07:00
2015-07-10 06:01:56 -07:00
#include "eficonsole.h"
#include "trigger_decoder.h"
#include "console_io.h"
#include "trigger_emulator_algo.h"
#include "value_lookup.h"
#if EFI_RTC
#include "rtc_helper.h"
#endif // EFI_RTC
2015-07-10 06:01:56 -07:00
2019-04-12 19:07:03 -07:00
#if EFI_PROD_CODE
2017-01-11 18:04:22 -08:00
#include "can_hw.h"
2015-07-10 06:01:56 -07:00
#include "rusefi.h"
#include "hardware.h"
#endif // EFI_PROD_CODE
2015-07-10 06:01:56 -07:00
2019-11-19 23:18:17 -08:00
#if EFI_ELECTRONIC_THROTTLE_BODY
#include "electronic_throttle.h"
#endif // EFI_ELECTRONIC_THROTTLE_BODY
2019-11-19 23:18:17 -08:00
2019-04-12 19:07:03 -07:00
#if EFI_INTERNAL_FLASH
2015-07-10 06:01:56 -07:00
#include "flash_main.h"
#endif // EFI_INTERNAL_FLASH
2015-07-10 06:01:56 -07:00
2019-04-12 19:07:03 -07:00
#if EFI_ENGINE_SNIFFER
2015-07-15 18:01:45 -07:00
#include "engine_sniffer.h"
2015-07-10 06:01:56 -07:00
extern int waveChartUsedSize;
extern WaveChart waveChart;
#endif // EFI_ENGINE_SNIFFER
2015-07-10 06:01:56 -07:00
static void setTimingMode(int value) {
engineConfiguration->timingMode = (timing_mode_e) value;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setIdleSolenoidFrequency(int value) {
engineConfiguration->idle.solenoidFrequency = value;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setSensorChartMode(int value) {
engineConfiguration->sensorChartMode = (sensor_chart_e) value;
2015-07-10 06:01:56 -07:00
}
static void setCrankingRpm(int value) {
engineConfiguration->cranking.rpm = value;
}
/**
* this method is used in console - it also prints current configuration
*/
static void setAlgorithmInt(int value) {
setAlgorithm((engine_load_mode_e) value);
}
static void setFiringOrder(int value) {
2023-03-27 00:58:18 -07:00
engineConfiguration->firingOrder = (firing_order_e) value;
2015-07-10 06:01:56 -07:00
}
static void setRpmHardLimit(int value) {
engineConfiguration->rpmHardLimit = value;
}
2017-05-07 15:37:22 -07:00
static void setCrankingIACExtra(float percent) {
2017-05-16 19:13:40 -07:00
engineConfiguration->crankingIACposition = percent;
efiPrintf("cranking_iac %.2f", percent);
2017-05-07 15:37:22 -07:00
}
2015-07-10 06:01:56 -07:00
static void setGlobalTriggerAngleOffset(float value) {
engineConfiguration->globalTriggerAngleOffset = value;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setCrankingTimingAngle(float value) {
engineConfiguration->crankingTimingAngle = value;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setInjectionMode(int value) {
engineConfiguration->injectionMode = (injection_mode_e) value;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setIgnitionMode(int value) {
engineConfiguration->ignitionMode = (ignition_mode_e) value;
incrementGlobalConfigurationVersion();
prepareOutputSignals();
2015-07-10 06:01:56 -07:00
}
static void setIndividualCoilsIgnition() {
2015-12-18 14:02:31 -08:00
setIgnitionMode((int)IM_INDIVIDUAL_COILS);
}
2015-07-10 06:01:56 -07:00
static void setTriggerType(int value) {
engineConfiguration->trigger.type = (trigger_type_e) value;
incrementGlobalConfigurationVersion();
efiPrintf("Do you need to also invoke set operation_mode X?");
engine->resetEngineSnifferIfInTestMode();
2015-07-10 06:01:56 -07:00
}
2017-05-13 04:48:42 -07:00
static void setDebugMode(int value) {
engineConfiguration->debugMode = (debug_mode_e) value;
}
2015-07-10 06:01:56 -07:00
static void setWholeTimingMap(float value) {
2022-12-31 11:47:29 -08:00
setTable(config->ignitionTable, value);
2015-07-10 06:01:56 -07:00
}
static void setWholeTimingMapCmd(float value) {
efiPrintf("Setting whole timing advance map to %.2f", value);
2015-07-10 06:01:56 -07:00
setWholeTimingMap(value);
engine->resetEngineSnifferIfInTestMode();
2015-07-10 06:01:56 -07:00
}
#if EFI_PROD_CODE
2021-07-17 10:42:10 -07:00
static brain_pin_e parseBrainPinWithErrorMessage(const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName);
if (pin == Gpio::Invalid) {
2021-07-17 10:42:10 -07:00
efiPrintf("invalid pin name [%s]", pinName);
}
return pin;
}
2024-07-03 01:24:14 -07:00
/**
* For example:
* set_ignition_pin 1 PD7
* todo: this method counts index from 1 while at least 'set_trigger_input_pin' counts from 0.
* todo: make things consistent
*/
static void setIgnitionPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr) - 1; // convert from human index into software index
if (index < 0 || index >= MAX_CYLINDER_COUNT)
return;
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == Gpio::Invalid) {
return;
}
efiPrintf("setting ignition pin[%d] to %s please save&restart", index, hwPortname(pin));
engineConfiguration->ignitionPins[index] = pin;
incrementGlobalConfigurationVersion();
}
2015-07-10 06:01:56 -07:00
static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const char *name) {
2021-07-17 10:42:10 -07:00
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == Gpio::Invalid) {
2015-07-10 06:01:56 -07:00
return;
}
efiPrintf("setting %s pin to %s please save&restart", name, hwPortname(pin));
2015-07-10 06:01:56 -07:00
*targetPin = pin;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
// set vss_pin
static void setVssPin(const char *pinName) {
setIndividualPin(pinName, &engineConfiguration->vehicleSpeedSensorInputPin, "VSS");
}
2015-07-10 06:01:56 -07:00
// set_idle_pin none
static void setIdlePin(const char *pinName) {
setIndividualPin(pinName, &engineConfiguration->idle.solenoidPin, "idle");
2015-07-10 06:01:56 -07:00
}
static void setAlternatorPin(const char *pinName) {
setIndividualPin(pinName, &engineConfiguration->alternatorControlPin, "alternator");
2015-07-10 06:01:56 -07:00
}
2019-07-25 18:39:39 -07:00
/**
* For example:
* set_trigger_input_pin 0 PA5
* todo: this method counts index from 0 while at least 'set_ignition_pin' counts from 1.
* todo: make things consistent
*/
2015-07-10 06:01:56 -07:00
static void setTriggerInputPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr);
if (index < 0 || index > 2)
return;
2021-07-17 10:42:10 -07:00
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == Gpio::Invalid) {
2015-07-10 06:01:56 -07:00
return;
}
efiPrintf("setting trigger pin[%d] to %s please save&restart", index, hwPortname(pin));
engineConfiguration->triggerInputPins[index] = pin;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr);
if (index < 0 || index >= TRIGGER_SIMULATOR_PIN_COUNT)
2015-07-10 06:01:56 -07:00
return;
2021-07-17 10:42:10 -07:00
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == Gpio::Invalid) {
2015-07-10 06:01:56 -07:00
return;
}
efiPrintf("setting trigger simulator pin[%d] to %s please save&restart", index, hwPortname(pin));
engineConfiguration->triggerSimulatorPins[index] = pin;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
2019-04-12 19:07:03 -07:00
#if HAL_USE_ADC
2020-05-21 19:33:48 -07:00
// set_analog_input_pin pps pa4
// set_analog_input_pin afr none
2015-07-10 06:01:56 -07:00
static void setAnalogInputPin(const char *sensorStr, const char *pinName) {
2021-07-17 10:42:10 -07:00
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == Gpio::Invalid) {
2015-07-10 06:01:56 -07:00
return;
}
adc_channel_e channel = getAdcChannel(pin);
if (channel == EFI_ADC_ERROR) {
efiPrintf("Error with [%s]", pinName);
2015-07-10 06:01:56 -07:00
return;
}
if (strEqual("map", sensorStr)) {
engineConfiguration->map.sensor.hwChannel = channel;
efiPrintf("setting MAP to %s/%d", pinName, channel);
2019-08-17 14:33:44 -07:00
} else if (strEqual("pps", sensorStr)) {
engineConfiguration->throttlePedalPositionAdcChannel = channel;
efiPrintf("setting PPS to %s/%d", pinName, channel);
2020-05-21 19:33:48 -07:00
} else if (strEqual("afr", sensorStr)) {
engineConfiguration->afr.hwChannel = channel;
efiPrintf("setting AFR to %s/%d", pinName, channel);
2015-07-10 06:01:56 -07:00
} else if (strEqual("clt", sensorStr)) {
engineConfiguration->clt.adcChannel = channel;
efiPrintf("setting CLT to %s/%d", pinName, channel);
2015-07-10 06:01:56 -07:00
} else if (strEqual("iat", sensorStr)) {
engineConfiguration->iat.adcChannel = channel;
efiPrintf("setting IAT to %s/%d", pinName, channel);
2015-07-10 06:01:56 -07:00
} else if (strEqual("tps", sensorStr)) {
engineConfiguration->tps1_1AdcChannel = channel;
efiPrintf("setting TPS1 to %s/%d", pinName, channel);
2019-11-28 22:35:45 -08:00
} else if (strEqual("tps2", sensorStr)) {
engineConfiguration->tps2_1AdcChannel = channel;
efiPrintf("setting TPS2 to %s/%d", pinName, channel);
2015-07-10 06:01:56 -07:00
}
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
#endif // HAL_USE_ADC
2015-07-10 06:01:56 -07:00
static void setLogicInputPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr);
if (index < 0 || index > 2) {
return;
}
2021-07-17 10:42:10 -07:00
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == Gpio::Invalid) {
2015-07-10 06:01:56 -07:00
return;
}
efiPrintf("setting logic input pin[%d] to %s please save&restart", index, hwPortname(pin));
engineConfiguration->logicAnalyzerPins[index] = pin;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
#endif // EFI_PROD_CODE
2015-07-10 06:01:56 -07:00
static void enableOrDisable(const char *param, bool isEnabled) {
2022-12-17 11:58:10 -08:00
if (strEqualCaseInsensitive(param, "useTLE8888_cranking_hack")) {
engineConfiguration->useTLE8888_cranking_hack = isEnabled;
2022-12-17 11:58:10 -08:00
#if EFI_SHAFT_POSITION_INPUT
} else if (strEqualCaseInsensitive(param, CMD_TRIGGER_HW_INPUT)) {
getTriggerCentral()->hwTriggerInputEnabled = isEnabled;
#endif // EFI_SHAFT_POSITION_INPUT
2020-02-26 23:11:20 -08:00
} else if (strEqualCaseInsensitive(param, "verboseTLE8888")) {
engineConfiguration->verboseTLE8888 = isEnabled;
} else if (strEqualCaseInsensitive(param, "verboseCan")) {
engineConfiguration->verboseCan = isEnabled;
2022-08-10 21:17:03 -07:00
} else if (strEqualCaseInsensitive(param, "verboseIsoTp")) {
engineConfiguration->verboseIsoTp = isEnabled;
2021-09-06 08:10:11 -07:00
} else if (strEqualCaseInsensitive(param, "artificialMisfire")) {
engineConfiguration->artificialTestMisfire = isEnabled;
2020-03-31 13:49:19 -07:00
} else if (strEqualCaseInsensitive(param, "can_broadcast")) {
engineConfiguration->enableVerboseCanTx = isEnabled;
2017-09-17 19:05:03 -07:00
} else if (strEqualCaseInsensitive(param, "etb_auto")) {
engine->etbAutoTune = isEnabled;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "step1limimter")) {
engineConfiguration->enabledStep1Limiter = isEnabled;
2019-04-12 19:07:03 -07:00
#if EFI_PROD_CODE
2017-05-16 17:52:52 -07:00
} else if (strEqualCaseInsensitive(param, "auto_idle")) {
2019-04-12 19:07:03 -07:00
#if EFI_IDLE_CONTROL
2017-05-22 20:25:34 -07:00
setIdleMode(isEnabled ? IM_MANUAL : IM_AUTO);
#endif // EFI_IDLE_CONTROL
#endif // EFI_PROD_CODE
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "stepperidle")) {
engineConfiguration->useStepperIdle = isEnabled;
2022-01-16 07:05:24 -08:00
} else if (strEqualCaseInsensitive(param, "boardUseTempPullUp")) {
engineConfiguration->boardUseTempPullUp = isEnabled;
incrementGlobalConfigurationVersion();
} else if (strEqualCaseInsensitive(param, "boardUseTachPullUp")) {
engineConfiguration->boardUseTachPullUp = isEnabled;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "altcontrol")) {
engineConfiguration->isAlternatorControlEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "sd")) {
engineConfiguration->isSdCardEnabled = isEnabled;
2019-12-21 17:17:58 -08:00
} else if (strEqualCaseInsensitive(param, CMD_FUNCTIONAL_TEST_MODE)) {
engine->isFunctionalTestMode = isEnabled;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "can_read")) {
engineConfiguration->canReadEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "can_write")) {
engineConfiguration->canWriteEnabled = isEnabled;
2020-08-13 09:26:23 -07:00
} else if (strEqualCaseInsensitive(param, CMD_INJECTION)) {
2015-07-10 06:01:56 -07:00
engineConfiguration->isInjectionEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, CMD_PWM)) {
engine->isPwmEnabled = isEnabled;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "trigger_details")) {
engineConfiguration->verboseTriggerSynchDetails = isEnabled;
2020-08-29 14:05:54 -07:00
} else if (strEqualCaseInsensitive(param, "vvt_details")) {
engineConfiguration->verboseVVTDecoding = isEnabled;
2020-08-13 09:26:23 -07:00
} else if (strEqualCaseInsensitive(param, CMD_IGNITION)) {
2015-07-10 06:01:56 -07:00
engineConfiguration->isIgnitionEnabled = isEnabled;
#if EFI_EMULATE_POSITION_SENSORS
} else if (strEqualCaseInsensitive(param, CMD_SELF_STIMULATION)) {
if (isEnabled) {
enableTriggerStimulator();
} else {
disableTriggerStimulator();
}
} else if (strEqualCaseInsensitive(param, CMD_EXTERNAL_STIMULATION)) {
if (isEnabled) {
enableExternalTriggerStimulator();
} else {
disableTriggerStimulator();
}
#endif // EFI_EMULATE_POSITION_SENSORS
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "map_avg")) {
engineConfiguration->isMapAveragingEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "logic_analyzer")) {
2015-07-10 06:01:56 -07:00
engineConfiguration->isWaveAnalyzerEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "cylinder_cleanup")) {
engineConfiguration->isCylinderCleanupEnabled = isEnabled;
} else {
efiPrintf("unexpected [%s]", param);
2023-03-27 00:58:18 -07:00
return;
2015-07-10 06:01:56 -07:00
}
efiPrintf("[%s] %s", param, isEnabled ? "enabled" : "disabled");
2015-07-10 06:01:56 -07:00
}
static void enable(const char *param) {
enableOrDisable(param, true);
}
static void disable(const char *param) {
enableOrDisable(param, false);
}
2019-01-05 20:33:04 -08:00
/**
* See 'LimpManager::isEngineStop' for code which actually stops engine
2019-01-05 20:33:04 -08:00
*/
2023-10-26 12:52:56 -07:00
void scheduleStopEngine() {
doScheduleStopEngine();
2015-07-10 06:01:56 -07:00
}
static void getValue(const char *paramStr) {
{
float value = getConfigValueByName(paramStr);
if (value != EFI_ERROR_CODE) {
efiPrintf("%s value: %.2f", paramStr, value);
2017-05-12 03:19:47 -07:00
return;
}
}
if (strEqualCaseInsensitive(paramStr, CMD_DATE)) {
2015-07-10 06:01:56 -07:00
printDateTime();
} else {
efiPrintf("Invalid Parameter: %s", paramStr);
2018-01-04 15:45:25 -08:00
}
2015-07-10 06:01:56 -07:00
}
struct command_i_s {
2017-01-06 06:03:33 -08:00
const char *token;
VoidInt callback;
};
2017-01-06 06:03:33 -08:00
struct command_f_s {
2017-01-06 07:04:41 -08:00
const char *token;
VoidFloat callback;
};
2017-01-06 07:04:41 -08:00
2019-01-31 14:55:23 -08:00
const command_f_s commandsF[] = {
#if EFI_ENGINE_CONTROL
2017-01-06 07:04:41 -08:00
{"global_trigger_offset_angle", setGlobalTriggerAngleOffset},
2017-05-07 15:37:22 -07:00
{"cranking_iac", setCrankingIACExtra},
2017-01-06 07:04:41 -08:00
{"cranking_timing_angle", setCrankingTimingAngle},
#endif // EFI_ENGINE_CONTROL
2018-11-26 19:17:16 -08:00
#if EFI_ELECTRONIC_THROTTLE_BODY
2019-04-23 20:18:48 -07:00
{"etb", setThrottleDutyCycle},
#endif // EFI_ELECTRONIC_THROTTLE_BODY
2017-01-06 14:01:28 -08:00
2017-01-06 07:04:41 -08:00
};
2019-01-05 05:06:18 -08:00
const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode},
#if EFI_ENGINE_CONTROL
2017-01-06 06:03:33 -08:00
{"cranking_rpm", setCrankingRpm},
{"injection_mode", setInjectionMode},
2017-01-06 07:04:41 -08:00
{"sensor_chart_mode", setSensorChartMode},
{"timing_mode", setTimingMode},
2019-11-23 09:52:57 -08:00
{CMD_ENGINE_TYPE, setEngineType},
2017-01-06 07:04:41 -08:00
{"rpm_hard_limit", setRpmHardLimit},
{"firing_order", setFiringOrder},
{"algorithm", setAlgorithmInt},
2017-05-13 04:48:42 -07:00
{"debug_mode", setDebugMode},
2017-01-06 07:04:41 -08:00
{"trigger_type", setTriggerType},
{"idle_solenoid_freq", setIdleSolenoidFrequency},
#endif // EFI_ENGINE_CONTROL
2019-04-12 19:07:03 -07:00
#if EFI_PROD_CODE
#if EFI_CAN_SUPPORT
2017-01-11 18:04:22 -08:00
{"can_mode", setCanType},
{"can_vss", setCanVss},
#endif // EFI_CAN_SUPPORT
2019-04-12 19:07:03 -07:00
#if EFI_IDLE_CONTROL
{"idle_position", setManualIdleValvePosition},
2017-01-06 14:01:28 -08:00
{"idle_rpm", setTargetIdleRpm},
#endif // EFI_IDLE_CONTROL
#endif // EFI_PROD_CODE
2018-11-26 19:17:16 -08:00
2017-01-06 06:03:33 -08:00
};
2015-07-10 06:01:56 -07:00
static void setValue(const char *paramStr, const char *valueStr) {
float valueF = atoff(valueStr);
int valueI = atoi(valueStr);
2019-01-05 05:06:18 -08:00
const command_f_s *currentF = &commandsF[0];
2024-07-03 00:52:22 -07:00
while (currentF < commandsF + efi::size(commandsF)) {
2017-01-06 07:04:41 -08:00
if (strEqualCaseInsensitive(paramStr, currentF->token)) {
currentF->callback(valueF);
return;
}
currentF++;
}
2019-01-05 05:06:18 -08:00
const command_i_s *currentI = &commandsI[0];
2024-07-03 00:52:22 -07:00
while (currentI < commandsI + efi::size(commandsI)) {
2017-01-06 07:04:41 -08:00
if (strEqualCaseInsensitive(paramStr, currentI->token)) {
currentI->callback(valueI);
2017-01-06 06:03:33 -08:00
return;
}
2017-01-06 07:04:41 -08:00
currentI++;
2017-01-06 06:03:33 -08:00
}
2023-02-21 02:24:19 -08:00
if (strEqualCaseInsensitive(paramStr, "dwell")) {
setConstantDwell(valueF);
} else if (strEqualCaseInsensitive(paramStr, CMD_ENGINESNIFFERRPMTHRESHOLD)) {
2016-07-23 12:05:04 -07:00
engineConfiguration->engineSnifferRpmThreshold = valueI;
2019-04-12 19:07:03 -07:00
#if EFI_EMULATE_POSITION_SENSORS
} else if (strEqualCaseInsensitive(paramStr, CMD_RPM)) {
2019-03-11 10:51:03 -07:00
setTriggerEmulatorRPM(valueI);
#endif // EFI_EMULATE_POSITION_SENSORS
} else if (strEqualCaseInsensitive(paramStr, "wwaeTau")) {
engineConfiguration->wwaeTau = valueF;
} else if (strEqualCaseInsensitive(paramStr, "wwaeBeta")) {
engineConfiguration->wwaeBeta = valueF;
2016-10-28 19:03:00 -07:00
} else if (strEqualCaseInsensitive(paramStr, "cranking_dwell")) {
engineConfiguration->ignitionDwellForCrankingMs = valueF;
#if EFI_PROD_CODE
} else if (strEqualCaseInsensitive(paramStr, CMD_VSS_PIN)) {
setVssPin(valueStr);
#endif // EFI_PROD_CODE
} else if (strEqualCaseInsensitive(paramStr, CMD_DATE)) {
2017-08-22 21:46:34 -07:00
// rusEfi console invokes this method with timestamp in local timezone
2015-07-10 06:01:56 -07:00
setDateTime(valueStr);
}
2024-07-03 00:52:22 -07:00
engine->resetEngineSnifferIfInTestMode();
2015-07-10 06:01:56 -07:00
}
2023-10-26 12:52:56 -07:00
void initSettings() {
2018-01-30 11:56:24 -08:00
#if EFI_SIMULATOR
printf("initSettings\n");
#endif // EFI_SIMULATOR
2018-01-30 11:56:24 -08:00
2015-12-18 14:02:31 -08:00
addConsoleAction("set_individual_coils_ignition", setIndividualCoilsIgnition);
2015-07-10 06:01:56 -07:00
addConsoleActionF("set_whole_timing_map", setWholeTimingMapCmd);
2019-01-05 20:33:04 -08:00
addConsoleAction("stopengine", (Void) scheduleStopEngine);
2015-07-10 06:01:56 -07:00
addConsoleActionS(CMD_ENABLE, enable);
addConsoleActionS(CMD_DISABLE, disable);
2015-07-10 06:01:56 -07:00
2015-08-30 10:02:46 -07:00
addConsoleActionSS("set", setValue);
addConsoleActionS("get", getValue);
2019-04-12 19:07:03 -07:00
#if EFI_PROD_CODE
2024-07-03 01:24:14 -07:00
addConsoleActionSS(CMD_IGNITION_PIN, setIgnitionPin);
addConsoleActionSS(CMD_TRIGGER_PIN, setTriggerInputPin);
addConsoleActionSS(CMD_TRIGGER_SIMULATOR_PIN, setTriggerSimulatorPin);
2015-07-10 06:01:56 -07:00
addConsoleActionI(CMD_ECU_UNLOCK, unlockEcu);
2015-07-10 06:01:56 -07:00
addConsoleActionS(CMD_ALTERNATOR_PIN, setAlternatorPin);
addConsoleActionS(CMD_IDLE_PIN, setIdlePin);
2015-07-10 06:01:56 -07:00
2019-04-12 19:07:03 -07:00
#if HAL_USE_ADC
2015-07-10 06:01:56 -07:00
addConsoleActionSS("set_analog_input_pin", setAnalogInputPin);
#endif // HAL_USE_ADC
addConsoleActionSS(CMD_LOGIC_PIN, setLogicInputPin);
#endif // EFI_PROD_CODE
2015-07-10 06:01:56 -07:00
}
void printDateTime() {
#if EFI_RTC
printRtcDateTime();
#else // EFI_RTC
efiPrintf("Cannot print time: RTC not supported");
#endif // EFI_RTC
}
void setDateTime(const char * const isoDateTime) {
#if EFI_RTC
if (strlen(isoDateTime) >= 19 && isoDateTime[10] == 'T') {
efidatetime_t dateTime;
dateTime.year = atoi(isoDateTime);
dateTime.month = atoi(isoDateTime + 5);
dateTime.day = atoi(isoDateTime + 8);
dateTime.hour = atoi(isoDateTime + 11);
dateTime.minute = atoi(isoDateTime + 14);
dateTime.second = atoi(isoDateTime + 17);
if (dateTime.year != ATOI_ERROR_CODE &&
dateTime.month >= 1 && dateTime.month <= 12 &&
dateTime.day >= 1 && dateTime.day <= 31 &&
dateTime.hour <= 23 &&
dateTime.minute <= 59 &&
dateTime.second <= 59) {
// doesn't concern about leap years or seconds; ChibiOS doesn't support (added) leap seconds anyway
setRtcDateTime(&dateTime);
return;
}
}
efiPrintf("date_set Date parameter %s is wrong", isoDateTime);
#else // EFI_RTC
efiPrintf("Cannot set time: RTC not supported");
#endif // EFI_RTC
}
#endif // ! EFI_UNIT_TEST
2021-06-25 09:26:29 -07:00
void setEngineType(int value) {
setEngineType((engine_type_e)value);
}
void setEngineType(engine_type_e value) {
{
#if EFI_PROD_CODE
chibios_rt::CriticalSectionLocker csl;
#endif // EFI_PROD_CODE
engineConfiguration->engineType = value;
resetConfigurationExt(value);
engine->resetEngineSnifferIfInTestMode();
#if EFI_INTERNAL_FLASH
writeToFlashNow();
#endif // EFI_INTERNAL_FLASH
}
incrementGlobalConfigurationVersion();
#if ! EFI_UNIT_TEST
#endif // ! EFI_UNIT_TEST
}