rusefi/firmware/controllers/settings.cpp

1389 lines
49 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
2018-01-20 17:55:31 -08:00
* @author Andrey Belomutskiy, (c) 2012-2018
2015-07-10 06:01:56 -07:00
*/
2018-09-16 19:26:57 -07:00
#include "global.h"
2015-07-10 06:01:56 -07:00
#include "settings.h"
#include "eficonsole.h"
#include "engine_configuration.h"
#include "adc_inputs.h"
#include "engine_controller.h"
#include "thermistors.h"
#include "adc_inputs.h"
#include "interpolation.h"
#include "tps.h"
#include "map.h"
#include "trigger_decoder.h"
#include "console_io.h"
#include "engine.h"
#include "efiGpio.h"
#include "engine_math.h"
#include "alternatorController.h"
2017-01-06 13:03:41 -08:00
#include "idle_thread.h"
2017-11-24 16:16:00 -08:00
#include "allsensors.h"
2015-07-10 06:01:56 -07:00
#if EFI_PROD_CODE || defined(__DOXYGEN__)
2017-01-16 13:03:37 -08:00
#include "vehicle_speed.h"
2017-01-06 14:01:28 -08:00
#include "electronic_throttle.h"
2015-07-10 06:01:56 -07:00
#include "rtc_helper.h"
2017-01-11 18:04:22 -08:00
#include "can_hw.h"
2015-07-10 06:01:56 -07:00
#include "rusefi.h"
#include "pin_repository.h"
#include "hardware.h"
#endif /* EFI_PROD_CODE */
#if EFI_INTERNAL_FLASH || defined(__DOXYGEN__)
#include "flash_main.h"
#endif /* EFI_INTERNAL_FLASH */
2015-07-15 18:01:45 -07:00
#if EFI_ENGINE_SNIFFER || defined(__DOXYGEN__)
#include "engine_sniffer.h"
2015-07-10 06:01:56 -07:00
extern int waveChartUsedSize;
extern WaveChart waveChart;
2015-07-15 18:01:45 -07:00
#endif /* EFI_ENGINE_SNIFFER */
2015-07-10 06:01:56 -07:00
static char LOGGING_BUFFER[1000];
static Logging logger("settings control", LOGGING_BUFFER, sizeof(LOGGING_BUFFER));
extern int maxNesting;
2016-09-27 09:02:15 -07:00
EXTERN_ENGINE
;
2015-07-10 06:01:56 -07:00
/*
static void printIntArray(int array[], int size) {
for (int j = 0; j < size; j++) {
print("%d ", array[j]);
}
print("\r\n");
}
*/
void printFloatArray(const char *prefix, float array[], int size) {
appendMsgPrefix(&logger);
appendPrintf(&logger, prefix);
for (int j = 0; j < size; j++) {
2018-01-23 09:05:14 -08:00
appendPrintf(&logger, "%.2f ", array[j]);
2015-07-10 06:01:56 -07:00
}
appendMsgPostfix(&logger);
scheduleLogging(&logger);
}
void printSpiState(Logging *logger, board_configuration_s *boardConfiguration) {
scheduleMsg(logger, "spi 1=%s/2=%s/3=%s", boolToString(boardConfiguration->is_enabled_spi_1),
boolToString(boardConfiguration->is_enabled_spi_2), boolToString(boardConfiguration->is_enabled_spi_3));
}
extern board_configuration_s *boardConfiguration;
2017-03-19 15:39:48 -07:00
static void printOutputs(const engine_configuration_s *engineConfiguration) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "injectionPins: mode %s", getPin_output_mode_e(boardConfiguration->injectionPinMode));
for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
brain_pin_e brainPin = boardConfiguration->injectionPins[i];
scheduleMsg(&logger, "injection #%d @ %s", (1 + i), hwPortname(brainPin));
}
scheduleMsg(&logger, "ignitionPins: mode %s", getPin_output_mode_e(boardConfiguration->ignitionPinMode));
for (int i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
brain_pin_e brainPin = boardConfiguration->ignitionPins[i];
scheduleMsg(&logger, "ignition #%d @ %s", (1 + i), hwPortname(brainPin));
}
scheduleMsg(&logger, "idlePin: mode %s @ %s freq=%d", getPin_output_mode_e(boardConfiguration->idle.solenoidPinMode),
hwPortname(boardConfiguration->idle.solenoidPin), boardConfiguration->idle.solenoidFrequency);
scheduleMsg(&logger, "malfunctionIndicatorn: %s mode=%s", hwPortname(boardConfiguration->malfunctionIndicatorPin),
getPin_output_mode_e(boardConfiguration->malfunctionIndicatorPinMode));
scheduleMsg(&logger, "fuelPumpPin: mode %s @ %s", getPin_output_mode_e(boardConfiguration->fuelPumpPinMode),
hwPortname(boardConfiguration->fuelPumpPin));
scheduleMsg(&logger, "fanPin: mode %s @ %s", getPin_output_mode_e(boardConfiguration->fanPinMode),
hwPortname(boardConfiguration->fanPin));
scheduleMsg(&logger, "mainRelay: mode %s @ %s", getPin_output_mode_e(boardConfiguration->mainRelayPinMode),
hwPortname(boardConfiguration->mainRelayPin));
scheduleMsg(&logger, "alternator field: mode %s @ %s",
getPin_output_mode_e(boardConfiguration->alternatorControlPinMode),
hwPortname(boardConfiguration->alternatorControlPin));
}
/**
* These should be not very long because these are displayed on the LCD as is
*/
const char* getConfigurationName(engine_type_e engineType) {
switch (engineType) {
case CUSTOM_ENGINE:
return "CUSTOM";
#if EFI_SUPPORT_DODGE_NEON
case DODGE_NEON_1995:
return "Neon95";
#endif /* EFI_SUPPORT_DODGE_NEON */
#if EFI_SUPPORT_FORD_ASPIRE
case FORD_ASPIRE_1996:
return "Aspire";
#endif /* EFI_SUPPORT_FORD_ASPIRE */
#if EFI_SUPPORT_FORD_FIESTA
case FORD_FIESTA:
return "Fiesta";
#endif /* EFI_SUPPORT_FORD_FIESTA */
#if EFI_SUPPORT_NISSAN_PRIMERA
case NISSAN_PRIMERA:
return "Primera";
#endif /* EFI_SUPPORT_NISSAN_PRIMERA */
case HONDA_ACCORD_CD:
return "Accord3";
case HONDA_ACCORD_CD_TWO_WIRES:
return "Accord2";
2016-10-15 20:03:28 -07:00
case HONDA_ACCORD_1_24_SHIFTED:
return "Accord24sh";
2015-07-10 06:01:56 -07:00
case HONDA_ACCORD_CD_DIP:
return "HondaD";
case FORD_INLINE_6_1995:
return "Fordi6";
case GY6_139QMB:
return "Gy6139";
2016-11-03 14:03:11 -07:00
case MAZDA_MIATA_NB1:
return "MiataNB1";
2015-07-10 06:01:56 -07:00
case MAZDA_323:
return "M323";
case SATURN_ION_2004:
return "Saturn Ion";
case MINI_COOPER_R50:
return "CoopR50";
case FORD_ESCORT_GT:
return "EscrtGT";
case CITROEN_TU3JP:
return "TU3JP";
case ROVER_V8:
return "Rvrv8";
case MITSU_4G93:
return "Mi4G93";
case MIATA_1990:
return "MX590";
case MIATA_1994_DEVIATOR:
return "MX594d";
case MIATA_1994_SPAGS:
return "MX594s";
case MIATA_1996:
return "MX596";
case BMW_E34:
return "BMWe34";
case VW_ABA:
return "VW_ABA";
2015-09-05 18:03:42 -07:00
case DODGE_STRATUS:
return "DODGE_STRATUS";
2015-07-10 06:01:56 -07:00
case SACHS:
return "SACHS";
2015-09-12 12:02:40 -07:00
case DAIHATSU:
return "DAIHATSU";
2015-10-17 10:02:05 -07:00
case SUZUKI_VITARA:
return "SUZUKI_VITARA";
case CAMARO_4:
return "CAMARO_4";
2015-12-20 17:01:44 -08:00
case CHEVY_C20_1973:
return "CHEVY C20";
2015-07-10 06:01:56 -07:00
case GM_2_2:
return "GM_2_2";
case DODGE_RAM:
return "DODGE_RAM";
default:
2016-03-26 03:03:24 -07:00
return getEngine_type_e(engineType);
2015-07-10 06:01:56 -07:00
}
}
/**
* @brief Prints current engine configuration to human-readable console.
*/
2017-03-19 15:39:48 -07:00
void printConfiguration(const engine_configuration_s *engineConfiguration) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "Template %s/%d trigger %s/%s/%d", getConfigurationName(engineConfiguration->engineType),
engineConfiguration->engineType, getTrigger_type_e(engineConfiguration->trigger.type),
2016-08-28 13:02:34 -07:00
getEngine_load_mode_e(engineConfiguration->fuelAlgorithm), engineConfiguration->fuelAlgorithm);
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "configurationVersion=%d", getGlobalConfigurationVersion());
for (int k = 0; k < FUEL_LOAD_COUNT; k++) {
2018-01-23 09:05:14 -08:00
// print("line %d (%.2f): ", k, engineConfiguration->fuelKeyBins[k]);
2015-07-10 06:01:56 -07:00
// for (int r = 0; r < FUEL_RPM_COUNT; r++) {
2018-01-23 09:05:14 -08:00
// print("%.2f ", engineConfiguration->fuelTable[k][r]);
2015-07-10 06:01:56 -07:00
// }
// print("\r\n");
}
// printFloatArray("RPM bin: ", config->fuelRpmBins, FUEL_RPM_COUNT);
//
// printFloatArray("Y bin: ", config->fuelLoadBins, FUEL_LOAD_COUNT);
//
// printFloatArray("CLT: ", config->cltFuelCorr, CLT_CURVE_SIZE);
// printFloatArray("CLT bins: ", config->cltFuelCorrBins, CLT_CURVE_SIZE);
//
// printFloatArray("IAT: ", config->iatFuelCorr, IAT_CURVE_SIZE);
// printFloatArray("IAT bins: ", config->iatFuelCorrBins, IAT_CURVE_SIZE);
//
// printFloatArray("vBatt: ", engineConfiguration->injector.battLagCorr, VBAT_INJECTOR_CURVE_SIZE);
// printFloatArray("vBatt bins: ", engineConfiguration->injector.battLagCorrBins, VBAT_INJECTOR_CURVE_SIZE);
scheduleMsg(&logger, "rpmHardLimit: %d/operationMode=%d", engineConfiguration->rpmHardLimit,
engineConfiguration->operationMode);
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "globalTriggerAngleOffset=%.2f", engineConfiguration->globalTriggerAngleOffset);
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "=== cranking ===");
scheduleMsg(&logger, "crankingRpm: %d", engineConfiguration->cranking.rpm);
scheduleMsg(&logger, "cranking injection %s", getInjection_mode_e(engineConfiguration->crankingInjectionMode));
if (engineConfiguration->useConstantDwellDuringCranking) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "ignitionDwellForCrankingMs=%.2f", engineConfiguration->ignitionDwellForCrankingMs);
2015-07-10 06:01:56 -07:00
} else {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "cranking charge charge angle=%.2f fire at %.2f", engineConfiguration->crankingChargeAngle,
2015-07-10 06:01:56 -07:00
engineConfiguration->crankingTimingAngle);
}
scheduleMsg(&logger, "=== ignition ===");
scheduleMsg(&logger, "ignitionMode: %s/enabled=%s", getIgnition_mode_e(engineConfiguration->ignitionMode),
boolToString(engineConfiguration->isIgnitionEnabled));
scheduleMsg(&logger, "timingMode: %s", getTiming_mode_e(engineConfiguration->timingMode));
if (engineConfiguration->timingMode == TM_FIXED) {
scheduleMsg(&logger, "fixedModeTiming: %d", (int) engineConfiguration->fixedModeTiming);
}
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "ignitionOffset=%.2f", engineConfiguration->ignitionOffset);
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "=== injection ===");
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "injection %s offset=%.2f/enabled=%s", getInjection_mode_e(engineConfiguration->injectionMode),
2016-08-28 13:02:34 -07:00
(double) engineConfiguration->extraInjectionOffset, boolToString(engineConfiguration->isInjectionEnabled));
2015-07-10 06:01:56 -07:00
printOutputs(engineConfiguration);
2017-02-13 15:03:38 -08:00
scheduleMsg(&logger, "map_avg=%s/ts=%s/wa=%s/fastAdc=%s",
2016-12-27 21:02:03 -08:00
boolToString(engineConfiguration->isMapAveragingEnabled),
2015-07-10 06:01:56 -07:00
boolToString(engineConfiguration->isTunerStudioEnabled),
boolToString(engineConfiguration->isWaveAnalyzerEnabled),
2017-02-13 15:03:38 -08:00
boolToString(boardConfiguration->isFastAdcEnabled));
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "isManualSpinningMode=%s/isCylinderCleanupEnabled=%s",
boolToString(engineConfiguration->isManualSpinningMode),
boolToString(engineConfiguration->isCylinderCleanupEnabled));
scheduleMsg(&logger, "clutchUp@%s: %s", hwPortname(boardConfiguration->clutchUpPin),
boolToString(engine->clutchUpState));
scheduleMsg(&logger, "clutchDown@%s: %s", hwPortname(boardConfiguration->clutchDownPin),
boolToString(engine->clutchDownState));
scheduleMsg(&logger, "boardTestModeJumperPin: %s/nesting=%d",
hwPortname(boardConfiguration->boardTestModeJumperPin), maxNesting);
scheduleMsg(&logger, "digitalPotentiometerSpiDevice %d", boardConfiguration->digitalPotentiometerSpiDevice);
for (int i = 0; i < DIGIPOT_COUNT; i++) {
scheduleMsg(&logger, "digitalPotentiometer CS%d %s", i,
hwPortname(boardConfiguration->digitalPotentiometerChipSelect[i]));
}
#if EFI_PROD_CODE
printSpiState(&logger, boardConfiguration);
#endif /* EFI_PROD_CODE */
}
2017-05-12 10:47:09 -07:00
static void doPrintConfiguration() {
2015-07-10 06:01:56 -07:00
printConfiguration(engineConfiguration);
}
static void setFixedModeTiming(int value) {
engineConfiguration->fixedModeTiming = value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
static void setTimingMode(int value) {
engineConfiguration->timingMode = (timing_mode_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
void setEngineType(int value) {
2016-11-04 13:02:50 -07:00
// enginePins.stopPins(); // this is mostly needed by functional tests
2016-11-04 03:03:31 -07:00
2015-07-10 06:01:56 -07:00
engineConfiguration->engineType = (engine_type_e) value;
2017-05-15 20:28:49 -07:00
resetConfigurationExt(&logger, (engine_type_e) value PASS_ENGINE_PARAMETER_SUFFIX);
2015-07-15 18:01:45 -07:00
#if EFI_ENGINE_SNIFFER || defined(__DOXYGEN__)
2015-07-10 06:01:56 -07:00
if (engine->isTestMode)
2016-01-30 19:03:36 -08:00
waveChart.reset();
2015-07-10 06:01:56 -07:00
#endif
#if EFI_INTERNAL_FLASH
writeToFlashNow();
// scheduleReset();
#endif /* EFI_PROD_CODE */
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setIdleSolenoidFrequency(int value) {
boardConfiguration->idle.solenoidFrequency = value;
incrementGlobalConfigurationVersion();
2015-07-10 06:01:56 -07:00
}
static void setInjectionPinMode(int value) {
boardConfiguration->injectionPinMode = (pin_output_mode_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setIgnitionPinMode(int value) {
boardConfiguration->ignitionPinMode = (pin_output_mode_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setIdlePinMode(int value) {
boardConfiguration->idle.solenoidPinMode = (pin_output_mode_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setInjectionOffset(float value) {
2016-08-28 13:02:34 -07:00
engineConfiguration->extraInjectionOffset = value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
static void setIgnitionOffset(float value) {
engineConfiguration->ignitionOffset = value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
static void setFuelPumpPinMode(int value) {
boardConfiguration->fuelPumpPinMode = (pin_output_mode_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setMalfunctionIndicatorPinMode(int value) {
boardConfiguration->malfunctionIndicatorPinMode = (pin_output_mode_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setSensorChartMode(int value) {
boardConfiguration->sensorChartMode = (sensor_chart_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setOM(int value) {
engineConfiguration->operationMode = (operation_mode_e)value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static char pinNameBuffer[16];
2017-06-12 15:48:55 -07:00
static void printThermistor(const char *msg, ThermistorConf *config, ThermistorMath *tm, bool useLinear) {
2015-07-10 06:01:56 -07:00
adc_channel_e adcChannel = config->adcChannel;
float voltage = getVoltageDivided("term", adcChannel);
2016-12-22 11:02:38 -08:00
float r = getResistance(config, voltage);
2015-07-10 06:01:56 -07:00
2017-06-12 15:48:55 -07:00
float t = getTemperatureC(config, tm, useLinear);
2015-07-10 06:01:56 -07:00
thermistor_conf_s *tc = &config->config;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "%s volts=%.2f Celsius=%.2f sensorR=%.2f on channel %d", msg, voltage, t, r, adcChannel);
2016-12-27 11:04:04 -08:00
scheduleMsg(&logger, "@%s", getPinNameByAdcChannel(msg, adcChannel, pinNameBuffer));
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "C=%.2f/R=%.2f C=%.2f/R=%.2f C=%.2f/R=%.2f",
2015-07-10 06:01:56 -07:00
tc->tempC_1, tc->resistance_1,
tc->tempC_2, tc->resistance_2,
tc->tempC_3, tc->resistance_3);
2017-04-07 13:01:49 -07:00
// %.5f
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "bias resistor=%.2fK A=%.5f B=%.5f C=%.5f", tc->bias_resistor / 1000,
2016-12-22 11:02:38 -08:00
tm->s_h_a, tm->s_h_b, tm->s_h_c);
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "==============================");
}
static void printTPSInfo(void) {
#if (EFI_PROD_CODE && HAL_USE_ADC) || defined(__DOXYGEN__)
2016-12-26 11:03:16 -08:00
if (!hasTpsSensor()) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "NO TPS SENSOR");
return;
}
2017-02-09 12:07:03 -08:00
static char pinNameBuffer[16];
2015-07-10 06:01:56 -07:00
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "tps min (closed) %d/max (full) %d v=%.2f @%s", engineConfiguration->tpsMin, engineConfiguration->tpsMax,
2017-05-15 20:28:49 -07:00
getTPSVoltage(PASS_ENGINE_PARAMETER_SIGNATURE), getPinNameByAdcChannel("tps", engineConfiguration->tpsAdcChannel, pinNameBuffer));
2016-08-20 18:03:09 -07:00
#endif /* EFI_PROD_CODE */
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "current 10bit=%d value=%.2f rate=%.2f", getTPS12bitAdc() / TPS_TS_CONVERSION, getTPS(PASS_ENGINE_PARAMETER_SIGNATURE),
2015-07-10 06:01:56 -07:00
getTpsRateOfChange());
}
static void printTemperatureInfo(void) {
#if EFI_ANALOG_SENSORS || defined(__DOXYGEN__)
2017-06-12 15:48:55 -07:00
printThermistor("CLT", &engineConfiguration->clt, &engine->engineState.cltCurve,
engineConfiguration->useLinearCltSensor);
2017-05-15 20:28:49 -07:00
if (!isValidCoolantTemperature(getCoolantTemperature(PASS_ENGINE_PARAMETER_SIGNATURE))) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "CLT sensing error");
}
2017-06-12 15:48:55 -07:00
printThermistor("IAT", &engineConfiguration->iat, &engine->engineState.iatCurve,
engineConfiguration->useLinearIatSensor);
2017-05-15 20:28:49 -07:00
if (!isValidIntakeAirTemperature(getIntakeAirTemperature(PASS_ENGINE_PARAMETER_SIGNATURE))) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "IAT sensing error");
}
scheduleMsg(&logger, "fan=%s @ %s", boolToString(enginePins.fanRelay.getLogicValue()),
hwPortname(boardConfiguration->fanPin));
scheduleMsg(&logger, "A/C relay=%s @ %s", boolToString(enginePins.acRelay.getLogicValue()),
hwPortname(boardConfiguration->acRelayPin));
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "warmupPID=%d corr=%.2f", boardConfiguration->useWarmupPidAfr,
2016-02-07 19:04:14 -08:00
engine->engineState.cltFuelCorrection);
2016-08-20 18:03:09 -07:00
#endif /* EFI_ANALOG_SENSORS */
2015-07-10 06:01:56 -07:00
}
2017-07-25 18:59:20 -07:00
void setCallFromPitStop(int durationMs) {
2017-05-04 14:03:23 -07:00
engine->callFromPitStopEndTime = currentTimeMillis() + durationMs;
}
2015-07-10 06:01:56 -07:00
static void setCrankingRpm(int value) {
engineConfiguration->cranking.rpm = value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
/**
* this method is used in console - it also prints current configuration
*/
static void setAlgorithmInt(int value) {
setAlgorithm((engine_load_mode_e) value);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setFiringOrder(int value) {
engineConfiguration->specs.firingOrder = (firing_order_e) value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setRpmHardLimit(int value) {
engineConfiguration->rpmHardLimit = value;
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
2017-05-07 15:37:22 -07:00
static void setCrankingIACExtra(float percent) {
2017-05-16 19:13:40 -07:00
engineConfiguration->crankingIACposition = percent;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "cranking_iac %.2f", percent);
2017-05-07 15:37:22 -07:00
}
2015-07-10 06:01:56 -07:00
static void setCrankingFuel(float timeMs) {
engineConfiguration->cranking.baseFuel = timeMs;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "cranking_fuel %.2f", timeMs);
2017-05-07 15:37:22 -07:00
2015-07-10 06:01:56 -07:00
printTemperatureInfo();
}
static void setGlobalTriggerAngleOffset(float value) {
2016-06-06 17:02:51 -07:00
if (cisnan(value)) {
warning(CUSTOM_ERR_SGTP_ARGUMENT, "Invalid argument");
2016-06-06 17:02:51 -07:00
return;
}
2015-07-10 06:01:56 -07:00
engineConfiguration->globalTriggerAngleOffset = value;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
2018-03-04 20:21:43 -08:00
static void setCrankingPrimingPulse(float value) {
engineConfiguration->startOfCrankingPrimingPulse = value;
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
}
2015-07-10 06:01:56 -07:00
static void setCrankingTimingAngle(float value) {
engineConfiguration->crankingTimingAngle = value;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setCrankingInjectionMode(int value) {
engineConfiguration->crankingInjectionMode = (injection_mode_e) value;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setInjectionMode(int value) {
engineConfiguration->injectionMode = (injection_mode_e) value;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setIgnitionMode(int value) {
engineConfiguration->ignitionMode = (ignition_mode_e) value;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
2015-12-18 14:02:31 -08:00
static void setOneCoilIgnition(void) {
setIgnitionMode((int)IM_ONE_COIL);
}
static void setWastedIgnition(void) {
setIgnitionMode((int)IM_WASTED_SPARK);
}
static void setIndividualCoilsIgnition(void) {
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;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
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;
}
static void setInjectorLag(float voltage, float value) {
setCurveValue(INJECTOR_LAG_CURVE, voltage, value);
}
2017-05-15 20:28:49 -07:00
static void setToothedWheel(int total, int skipped DECLARE_ENGINE_PARAMETER_SUFFIX) {
2017-02-23 05:20:24 -08:00
if (total < 1 || skipped >= total) {
scheduleMsg(&logger, "invalid parameters %d %d", total, skipped);
return;
}
2016-01-23 09:02:44 -08:00
engineConfiguration->trigger.type = TT_TOOTHED_WHEEL;
2017-02-23 05:20:24 -08:00
engineConfiguration->trigger.customTotalToothCount = total;
engineConfiguration->trigger.customSkippedToothCount = skipped;
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "toothed: total=%d/skipped=%d", total, skipped);
2017-03-01 19:18:25 -08:00
setToothedWheelConfiguration(&engine->triggerCentral.triggerShape, total, skipped, engineConfiguration->operationMode);
2015-07-10 06:01:56 -07:00
// initializeTriggerShape(&logger, engineConfiguration, engineConfiguration2);
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setCrankingChargeAngle(float value) {
engineConfiguration->crankingChargeAngle = value;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2017-05-12 10:47:09 -07:00
doPrintConfiguration();
2015-07-10 06:01:56 -07:00
}
static void setGlobalFuelCorrection(float value) {
if (value < 0.01 || value > 50)
return;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "setting fuel mult=%.2f", value);
2015-07-10 06:01:56 -07:00
engineConfiguration->globalFuelCorrection = value;
}
static void setCltBias(float value) {
engineConfiguration->clt.config.bias_resistor = value;
}
static void setFanSetting(float onTempC, float offTempC) {
if (onTempC <= offTempC) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "ON temp [%.2f] should be above OFF temp [%.2f]", onTempC, offTempC);
2015-07-10 06:01:56 -07:00
return;
}
engineConfiguration->fanOnTemperature = onTempC;
engineConfiguration->fanOffTemperature = offTempC;
}
static void setIatBias(float value) {
engineConfiguration->iat.config.bias_resistor = value;
}
static void setVBattDivider(float value) {
engineConfiguration->vbattDividerCoeff = value;
}
static void setWholeTimingMap(float value) {
// todo: table helper?
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting whole timing map to %.2f", value);
2015-07-10 06:01:56 -07:00
for (int l = 0; l < IGN_LOAD_COUNT; l++) {
for (int r = 0; r < IGN_RPM_COUNT; r++) {
config->ignitionTable[l][r] = value;
}
}
}
static void setWholePhaseMapCmd(float value) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting whole injection phase map to %.2f", value);
2015-07-10 06:01:56 -07:00
setMap(config->injectionPhase, value);
}
static void setWholeTimingMapCmd(float value) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting whole timing advance map to %.2f", value);
2015-07-10 06:01:56 -07:00
setWholeTimingMap(value);
}
static void setWholeVeCmd(float value) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting whole VE map to %.2f", value);
2016-08-28 13:02:34 -07:00
if (engineConfiguration->fuelAlgorithm != LM_SPEED_DENSITY) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "WARNING: setting VE map not in SD mode is pointless");
}
setMap(config->veTable, value);
}
static void setWholeFuelMapCmd(float value) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting whole fuel map to %.2f", value);
2016-08-28 13:02:34 -07:00
if (engineConfiguration->fuelAlgorithm == LM_SPEED_DENSITY) {
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "WARNING: setting fuel map in SD mode is pointless");
}
2017-05-15 20:28:49 -07:00
setWholeFuelMap(value PASS_ENGINE_PARAMETER_SUFFIX);
2015-07-10 06:01:56 -07:00
}
#if EFI_PROD_CODE
static void setEgtSpi(int spi) {
boardConfiguration->max31855spiDevice = (spi_device_e) spi;
}
static void setPotSpi(int spi) {
boardConfiguration->digitalPotentiometerSpiDevice = (spi_device_e) spi;
}
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 >= IGNITION_PIN_COUNT)
return;
brain_pin_e pin = parseBrainPin(pinName);
// todo: extract method - code duplication with other 'set_xxx_pin' methods?
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting ignition pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->ignitionPins[index] = pin;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const char *name) {
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting %s pin to %s please save&restart", name, hwPortname(pin));
*targetPin = pin;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
// set_idle_pin none
static void setIdlePin(const char *pinName) {
setIndividualPin(pinName, &boardConfiguration->idle.solenoidPin, "idle");
}
static void setMainRelayPin(const char *pinName) {
setIndividualPin(pinName, &boardConfiguration->mainRelayPin, "main relay");
}
static void setAlternatorPin(const char *pinName) {
setIndividualPin(pinName, &boardConfiguration->alternatorControlPin, "alternator");
}
static void setACPin(const char *pinName) {
setIndividualPin(pinName, &boardConfiguration->acRelayPin, "A/C");
}
static void setFuelPumpPin(const char *pinName) {
setIndividualPin(pinName, &boardConfiguration->fuelPumpPin, "fuelPump");
}
static void setInjectionPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr) - 1; // convert from human index into software index
if (index < 0 || index >= INJECTION_PIN_COUNT)
return;
brain_pin_e pin = parseBrainPin(pinName);
// todo: extract method - code duplication with other 'set_xxx_pin' methods?
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting injection pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->injectionPins[index] = pin;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
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;
brain_pin_e pin = parseBrainPin(pinName);
// todo: extract method - code duplication with other 'set_xxx_pin' methods?
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting trigger pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->triggerInputPins[index] = pin;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
static void setTriggerSimulatorMode(const char *indexStr, const char *modeCode) {
int index = atoi(indexStr);
if (index < 0 || index >= TRIGGER_SIMULATOR_PIN_COUNT || absI(index) == ERROR_CODE) {
return;
}
int mode = atoi(modeCode);
if (absI(mode) == ERROR_CODE) {
return;
}
boardConfiguration->triggerSimulatorPinModes[index] = (pin_output_mode_e) mode;
}
2017-05-08 05:08:22 -07:00
static void setEgtCSPin(const char *indexStr, const char *pinName) {
2015-07-10 06:01:56 -07:00
int index = atoi(indexStr);
if (index < 0 || index >= EGT_CHANNEL_COUNT || absI(index) == ERROR_CODE)
return;
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting EGT CS pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->max31855_cs[index] = pin;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
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 || absI(index) == ERROR_CODE)
return;
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting trigger simulator pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->triggerSimulatorPins[index] = pin;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
#if HAL_USE_ADC || defined(__DOXYGEN__)
static void setAnalogInputPin(const char *sensorStr, const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
adc_channel_e channel = getAdcChannel(pin);
if (channel == EFI_ADC_ERROR) {
scheduleMsg(&logger, "Error with [%s]", pinName);
return;
}
if (strEqual("map", sensorStr)) {
engineConfiguration->map.sensor.hwChannel = channel;
scheduleMsg(&logger, "setting MAP to %s/%d", pinName, channel);
} else if (strEqual("clt", sensorStr)) {
engineConfiguration->clt.adcChannel = channel;
scheduleMsg(&logger, "setting CLT to %s/%d", pinName, channel);
} else if (strEqual("iat", sensorStr)) {
engineConfiguration->iat.adcChannel = channel;
scheduleMsg(&logger, "setting IAT to %s/%d", pinName, channel);
} else if (strEqual("tps", sensorStr)) {
engineConfiguration->tpsAdcChannel = channel;
scheduleMsg(&logger, "setting TPS to %s/%d", pinName, channel);
}
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
}
#endif
static void setLogicInputPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr);
if (index < 0 || index > 2) {
return;
}
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "setting logic input pin[%d] to %s please save&restart", index, hwPortname(pin));
boardConfiguration->logicAnalyzerPins[index] = pin;
}
static void showPinFunction(const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
scheduleMsg(&logger, "invalid pin name [%s]", pinName);
return;
}
scheduleMsg(&logger, "Pin %s: [%s]", pinName, getPinFunction(pin));
}
#endif /* EFI_PROD_CODE */
static void setTimingMap(const char * rpmStr, const char *loadStr, const char *valueStr) {
float rpm = atoff(rpmStr);
float engineLoad = atoff(loadStr);
float value = atoff(valueStr);
2017-05-29 08:09:14 -07:00
int rpmIndex = findIndexMsg("setTM", config->ignitionRpmBins, IGN_RPM_COUNT, rpm);
2015-07-10 06:01:56 -07:00
rpmIndex = rpmIndex < 0 ? 0 : rpmIndex;
2017-05-29 08:09:14 -07:00
int loadIndex = findIndexMsg("setTM", config->ignitionLoadBins, IGN_LOAD_COUNT, engineLoad);
2015-07-10 06:01:56 -07:00
loadIndex = loadIndex < 0 ? 0 : loadIndex;
config->ignitionTable[loadIndex][rpmIndex] = value;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting timing map entry %d:%d to %.2f", rpmIndex, loadIndex, value);
2015-07-10 06:01:56 -07:00
}
static void setFuelMap(const char * rpmStr, const char *loadStr, const char *valueStr) {
float rpm = atoff(rpmStr);
float engineLoad = atoff(loadStr);
float value = atoff(valueStr);
2017-05-29 08:09:14 -07:00
int rpmIndex = findIndexMsg("setFM", config->fuelRpmBins, FUEL_RPM_COUNT, rpm);
2015-07-10 06:01:56 -07:00
rpmIndex = rpmIndex < 0 ? 0 : rpmIndex;
2017-05-29 08:09:14 -07:00
int loadIndex = findIndexMsg("setTM", config->fuelLoadBins, FUEL_LOAD_COUNT, engineLoad);
2015-07-10 06:01:56 -07:00
loadIndex = loadIndex < 0 ? 0 : loadIndex;
config->fuelTable[loadIndex][rpmIndex] = value;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "Setting fuel map entry %d:%d to %.2f", rpmIndex, loadIndex, value);
2015-07-10 06:01:56 -07:00
}
static void setSpiMode(int index, bool mode) {
switch (index) {
case 1:
boardConfiguration->is_enabled_spi_1 = mode;
break;
case 2:
boardConfiguration->is_enabled_spi_2 = mode;
break;
case 3:
boardConfiguration->is_enabled_spi_3 = mode;
break;
default:
scheduleMsg(&logger, "invalid spi index %d", index);
return;
}
printSpiState(&logger, boardConfiguration);
}
static void enableOrDisable(const char *param, bool isEnabled) {
if (strEqualCaseInsensitive(param, "fastadc")) {
boardConfiguration->isFastAdcEnabled = isEnabled;
2017-09-17 19:05:03 -07:00
} else if (strEqualCaseInsensitive(param, "etb_auto")) {
engine->etbAutoTune = isEnabled;
2016-10-27 21:02:10 -07:00
} else if (strEqualCaseInsensitive(param, "constant_dwell")) {
engineConfiguration->useConstantDwellDuringCranking = isEnabled;
2016-12-15 14:02:31 -08:00
} else if (strEqualCaseInsensitive(param, "binary_mode_console")) {
boardConfiguration->startConsoleInBinaryMode = isEnabled;
2016-07-25 19:01:42 -07:00
} else if (strEqualCaseInsensitive(param, "cj125")) {
boardConfiguration->isCJ125Enabled = isEnabled;
2015-10-18 17:01:25 -07:00
} else if (strEqualCaseInsensitive(param, "engine_sniffer")) {
engineConfiguration->isEngineChartEnabled = isEnabled;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "step1limimter")) {
boardConfiguration->enabledStep1Limiter = isEnabled;
2017-05-16 17:52:52 -07:00
#if EFI_PROD_CODE || defined(__DOXYGEN__)
} else if (strEqualCaseInsensitive(param, "auto_idle")) {
#if EFI_IDLE_CONTROL || defined(__DOXYGEN__)
2017-05-22 20:25:34 -07:00
setIdleMode(isEnabled ? IM_MANUAL : IM_AUTO);
#endif /* EFI_IDLE_CONTROL */
2017-05-16 17:52:52 -07:00
#endif /* EFI_PROD_CODE */
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "serial")) {
boardConfiguration->useSerialPort = isEnabled;
} else if (strEqualCaseInsensitive(param, "stepperidle")) {
boardConfiguration->useStepperIdle = isEnabled;
} else if (strEqualCaseInsensitive(param, "trigger_only_front")) {
2016-02-27 20:03:34 -08:00
engineConfiguration->useOnlyRisingEdgeForTrigger = isEnabled;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-09-27 14:01:35 -07:00
} else if (strEqualCaseInsensitive(param, "use_only_first_channel")) {
engineConfiguration->trigger.useOnlyFirstChannel = isEnabled;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2016-01-03 07:01:32 -08:00
} else if (strEqualCaseInsensitive(param, "two_wire_batch_injection")) {
engineConfiguration->twoWireBatchInjection = isEnabled;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2016-01-03 07:01:32 -08:00
} else if (strEqualCaseInsensitive(param, "two_wire_wasted_spark")) {
engineConfiguration->twoWireBatchIgnition = isEnabled;
2017-05-15 20:28:49 -07:00
incrementGlobalConfigurationVersion(PASS_ENGINE_PARAMETER_SIGNATURE);
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "HIP9011")) {
boardConfiguration->isHip9011Enabled = isEnabled;
2017-05-29 20:13:02 -07:00
} else if (strEqualCaseInsensitive(param, "verbose_etb")) {
engineConfiguration->isVerboseETB = isEnabled;
2017-05-22 12:06:27 -07:00
} else if (strEqualCaseInsensitive(param, "verbose_idle")) {
engineConfiguration->isVerboseIAC = isEnabled;
2016-07-21 21:04:09 -07:00
} else if (strEqualCaseInsensitive(param, "auxdebug1")) {
engineConfiguration->isVerboseAuxPid1 = isEnabled;
} else if (strEqualCaseInsensitive(param, "auxdebug2")) {
engineConfiguration->isVerboseAuxPid2 = isEnabled;
} else if (strEqualCaseInsensitive(param, "auxdebug3")) {
engineConfiguration->isVerboseAuxPid3 = isEnabled;
} else if (strEqualCaseInsensitive(param, "auxdebug4")) {
engineConfiguration->isVerboseAuxPid4 = isEnabled;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(param, "altdebug")) {
boardConfiguration->isVerboseAlternator = isEnabled;
} else if (strEqualCaseInsensitive(param, "tpic_advanced_mode")) {
boardConfiguration->useTpicAdvancedMode = isEnabled;
} else if (strEqualCaseInsensitive(param, "knockdebug")) {
engine->knockDebug = isEnabled;
} else if (strEqualCaseInsensitive(param, "altcontrol")) {
engineConfiguration->isAlternatorControlEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "sd")) {
boardConfiguration->isSdCardEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "test_mode")) {
engine->isTestMode = isEnabled;
} else if (strEqualCaseInsensitive(param, "can_read")) {
engineConfiguration->canReadEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "can_write")) {
engineConfiguration->canWriteEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "injection")) {
engineConfiguration->isInjectionEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "trigger_details")) {
engineConfiguration->isPrintTriggerSynchDetails = isEnabled;
} else if (strEqualCaseInsensitive(param, "ignition")) {
engineConfiguration->isIgnitionEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "self_stimulation")) {
engineConfiguration->directSelfStimulation = isEnabled;
} else if (strEqualCaseInsensitive(param, "engine_control")) {
boardConfiguration->isEngineControlEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "map_avg")) {
engineConfiguration->isMapAveragingEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "tunerstudio")) {
engineConfiguration->isTunerStudioEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "wave_analyzer")) {
engineConfiguration->isWaveAnalyzerEnabled = isEnabled;
} else if (strEqualCaseInsensitive(param, "manual_spinning")) {
engineConfiguration->isManualSpinningMode = isEnabled;
} else if (strEqualCaseInsensitive(param, "cylinder_cleanup")) {
engineConfiguration->isCylinderCleanupEnabled = isEnabled;
} else {
scheduleMsg(&logger, "unexpected [%s]", param);
return; // well, MISRA would not like this 'return' here :(
}
scheduleMsg(&logger, "[%s] %s", param, isEnabled ? "enabled" : "disabled");
}
static void enable(const char *param) {
enableOrDisable(param, true);
}
static void disable(const char *param) {
enableOrDisable(param, false);
}
static void enableSpi(int index) {
setSpiMode(index, true);
}
static void disableSpi(int index) {
setSpiMode(index, false);
}
void stopEngine(void) {
engine->stopEngineRequestTimeNt = getTimeNowNt();
2017-11-04 16:37:40 -07:00
// let's close injectors or else if these happen to be open right now
enginePins.stopPins();
2015-07-10 06:01:56 -07:00
}
static void printAllInfo(void) {
printTemperatureInfo();
printTPSInfo();
2015-07-15 18:01:45 -07:00
#if EFI_ENGINE_SNIFFER
2015-07-10 06:01:56 -07:00
scheduleMsg(&logger, "waveChartUsedSize=%d", waveChartUsedSize);
#endif
}
2017-05-12 03:19:47 -07:00
typedef struct {
const char *token;
int *value;
} plain_get_integer_s;
2017-05-28 10:39:08 -07:00
typedef struct {
const char *token;
uint16_t *value;
} plain_get_short_s;
2017-05-12 03:19:47 -07:00
typedef struct {
const char *token;
float *value;
} plain_get_float_s;
2017-05-12 10:08:11 -07:00
#if ! EFI_UNIT_TEST || defined(__DOXYGEN__)
2017-05-28 10:39:08 -07:00
plain_get_short_s getS_plain[] = {
{"idle_pid_min", (uint16_t *)&engineConfiguration->idleRpmPid.minValue},
{"idle_pid_max", (uint16_t *)&engineConfiguration->idleRpmPid.maxValue},
2017-05-28 10:39:08 -07:00
};
2017-05-12 03:19:47 -07:00
plain_get_integer_s getI_plain[] = {
// {"cranking_rpm", &engineConfiguration->cranking.rpm},
// {"cranking_injection_mode", setCrankingInjectionMode},
// {"injection_mode", setInjectionMode},
// {"sensor_chart_mode", setSensorChartMode},
// {"tpsErrorDetectionTooLow", setTpsErrorDetectionTooLow},
// {"tpsErrorDetectionTooHigh", setTpsErrorDetectionTooHigh},
// {"fixed_mode_timing", setFixedModeTiming},
// {"timing_mode", setTimingMode},
// {"engine_type", setEngineType},
{"warning_period", (int*)&engineConfiguration->warningPeriod},
2017-05-12 03:19:47 -07:00
{"hard_limit", &engineConfiguration->rpmHardLimit},
// {"firing_order", setFiringOrder},
// {"algorithm", setAlgorithmInt},
// {"injection_pin_mode", setInjectionPinMode},
// {"ignition_pin_mode", setIgnitionPinMode},
// {"idle_pin_mode", setIdlePinMode},
// {"fuel_pump_pin_mode", setFuelPumpPinMode},
// {"malfunction_indicator_pin_mode", setMalfunctionIndicatorPinMode},
// {"operation_mode", setOM},
2017-05-13 04:48:42 -07:00
{"debug_mode", (int*)&engineConfiguration->debugMode},
2017-05-16 19:13:40 -07:00
{"cranking_iac", &engineConfiguration->crankingIACposition},
2017-05-13 04:48:42 -07:00
{"trigger_type", (int*)&engineConfiguration->trigger.type},
2017-05-12 03:19:47 -07:00
// {"idle_solenoid_freq", setIdleSolenoidFrequency},
// {"tps_accel_len", setTpsAccelLen},
// {"engine_load_accel_len", setEngineLoadAccelLen},
// {"bor", setBor},
// {"can_mode", setCanType},
// {"idle_rpm", setTargetIdleRpm},
// {"idle_dt", setIdleDT},
// {"", },
// {"", },
// {"", },
// {"", },
// {"", },
};
plain_get_float_s getF_plain[] = {
2017-05-12 10:08:11 -07:00
{"cranking_dwell", &engineConfiguration->ignitionDwellForCrankingMs},
2017-05-12 03:19:47 -07:00
{"idle_position", &boardConfiguration->manIdlePosition},
2017-05-12 06:23:30 -07:00
{"ignition_offset", &engineConfiguration->ignitionOffset},
{"injection_offset", &engineConfiguration->extraInjectionOffset},
{"global_trigger_offset_angle", &engineConfiguration->globalTriggerAngleOffset},
2018-01-04 15:45:25 -08:00
{"global_fuel_correction", &engineConfiguration->globalFuelCorrection},
2017-05-12 06:23:30 -07:00
{"cranking_fuel", &engineConfiguration->cranking.baseFuel},
{"cranking_timing_angle", &engineConfiguration->crankingTimingAngle},
{"cranking_charge_angle", &engineConfiguration->crankingChargeAngle},
2017-05-12 03:19:47 -07:00
};
2017-05-12 10:08:11 -07:00
#endif /* EFI_UNIT_TEST */
2017-05-12 03:19:47 -07:00
2015-07-10 06:01:56 -07:00
static void getValue(const char *paramStr) {
2017-05-12 10:08:11 -07:00
#if ! EFI_UNIT_TEST || defined(__DOXYGEN__)
2017-05-12 03:19:47 -07:00
{
plain_get_integer_s *currentI = &getI_plain[0];
2017-05-12 10:08:11 -07:00
while (currentI < getI_plain + sizeof(getI_plain)/sizeof(getI_plain[0])) {
2017-05-12 03:19:47 -07:00
if (strEqualCaseInsensitive(paramStr, currentI->token)) {
scheduleMsg(&logger, "%s value: %d", currentI->token, *currentI->value);
return;
}
currentI++;
}
}
plain_get_float_s *currentF = &getF_plain[0];
2017-05-12 10:08:11 -07:00
while (currentF < getF_plain + sizeof(getF_plain)/sizeof(getF_plain[0])) {
2017-05-12 03:19:47 -07:00
if (strEqualCaseInsensitive(paramStr, currentF->token)) {
2017-05-12 10:08:11 -07:00
float value = *currentF->value;
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "%s value: %.2f", currentF->token, value);
2017-05-12 03:19:47 -07:00
return;
}
currentF++;
}
2017-05-12 10:08:11 -07:00
#endif /* EFI_UNIT_TEST */
2017-05-12 03:19:47 -07:00
2016-07-30 18:03:22 -07:00
if (strEqualCaseInsensitive(paramStr, "isCJ125Enabled")) {
scheduleMsg(&logger, "isCJ125Enabled=%d", boardConfiguration->isCJ125Enabled);
2017-02-14 19:03:21 -08:00
#if EFI_PROD_CODE || defined(__DOXYGEN__)
2017-02-14 18:01:56 -08:00
} else if (strEqualCaseInsensitive(paramStr, "bor")) {
showBor();
2017-05-16 17:52:52 -07:00
#endif /* EFI_PROD_CODE */
2016-11-23 20:02:35 -08:00
} else if (strEqualCaseInsensitive(paramStr, "nb_vvt_index")) {
scheduleMsg(&logger, "nb_vvt_index=%d", engineConfiguration->nbVvtIndex);
2016-11-14 19:02:35 -08:00
} else if (strEqualCaseInsensitive(paramStr, "global_trigger_offset_angle")) {
2018-01-23 09:05:14 -08:00
scheduleMsg(&logger, "global_trigger_offset=%.2f", engineConfiguration->globalTriggerAngleOffset);
2016-07-30 19:02:52 -07:00
} else if (strEqualCaseInsensitive(paramStr, "isHip9011Enabled")) {
scheduleMsg(&logger, "isHip9011Enabled=%d", boardConfiguration->isHip9011Enabled);
2015-07-10 06:01:56 -07:00
}
#if EFI_RTC || defined(__DOXYGEN__)
else if (strEqualCaseInsensitive(paramStr, "date")) {
printDateTime();
}
#endif
2018-01-04 15:45:25 -08:00
else {
scheduleMsg(&logger, "unexpcted here: %s", paramStr);
}
2015-07-10 06:01:56 -07:00
}
2017-12-01 20:11:01 -08:00
static void setFsioCurve1Value(float value) {
2018-01-07 08:17:49 -08:00
setLinearCurve(engineConfiguration->fsioCurve1, FSIO_CURVE_16, value, value, 1);
2017-12-01 20:11:01 -08:00
}
static void setFsioCurve2Value(float value) {
2018-01-07 08:17:49 -08:00
setLinearCurve(engineConfiguration->fsioCurve2, FSIO_CURVE_16, value, value, 1);
2017-12-01 20:11:01 -08:00
}
2017-01-06 06:03:33 -08:00
typedef struct {
const char *token;
VoidInt callback;
} command_i_s;
2017-01-06 07:04:41 -08:00
typedef struct {
const char *token;
VoidFloat callback;
} command_f_s;
2017-11-27 18:10:49 -08:00
command_f_s commandsF[] = {{"mock_iat_voltage", setMockIatVoltage},
2017-11-16 11:44:53 -08:00
{"mock_pedal_position", setMockPedalPosition},
2017-11-27 18:10:49 -08:00
{"mock_maf_voltage", setMockMafVoltage},
{"mock_afr_voltage", setMockAfrVoltage},
{"mock_tps_voltage", setMockTpsVoltage},
2017-11-27 18:15:08 -08:00
{"mock_map_voltage", setMockMapVoltage},
2017-11-27 18:10:49 -08:00
{"mock_vbatt_voltage", setMockVBattVoltage},
{"mock_clt_voltage", setMockCltVoltage},
2017-12-01 20:11:01 -08:00
{"fsio_curve_1_value", setFsioCurve1Value},
{"fsio_curve_2_value", setFsioCurve2Value},
2017-01-06 07:04:41 -08:00
{"ignition_offset", setIgnitionOffset},
{"injection_offset", setInjectionOffset},
{"global_trigger_offset_angle", setGlobalTriggerAngleOffset},
2018-01-03 12:38:08 -08:00
{"global_fuel_correction", setGlobalFuelCorrection},
2017-01-06 07:04:41 -08:00
{"cranking_fuel", setCrankingFuel},
2017-05-07 15:37:22 -07:00
{"cranking_iac", setCrankingIACExtra},
2017-01-06 07:04:41 -08:00
{"cranking_timing_angle", setCrankingTimingAngle},
{"cranking_charge_angle", setCrankingChargeAngle},
{"vbatt_divider", setVBattDivider},
{"clt_bias", setCltBias},
{"iat_bias", setIatBias},
2017-01-06 13:03:41 -08:00
{"tps_accel_threshold", setTpsAccelThr},
{"tps_decel_threshold", setTpsDecelThr},
{"tps_decel_multiplier", setTpsDecelMult},
2018-03-04 20:21:43 -08:00
{"cranking_priming_pulse", setCrankingPrimingPulse},
2017-01-06 13:03:41 -08:00
{"engine_load_accel_threshold", setEngineLoadAccelThr},
{"engine_load_accel_multiplier", setEngineLoadAccelMult},
{"engine_decel_threshold", setDecelThr},
{"engine_decel_multiplier", setDecelMult},
2018-01-17 16:37:26 -08:00
{"flat_injector_lag", setFlatInjectorLag},
2017-01-06 23:01:58 -08:00
#if EFI_PROD_CODE || defined(__DOXYGEN__)
#if EFI_VEHICLE_SPEED || defined(__DOXYGEN__)
2017-01-16 13:03:37 -08:00
{"mock_vehicle_speed", setMockVehicleSpeed},
#endif /* EFI_VEHICLE_SPEED */
#if EFI_IDLE_CONTROL || defined(__DOXYGEN__)
2017-05-22 20:25:34 -07:00
{"idle_offset", setIdleOffset},
2017-01-06 13:03:41 -08:00
{"idle_p", setIdlePFactor},
{"idle_i", setIdleIFactor},
{"idle_d", setIdleDFactor},
2018-11-26 19:17:16 -08:00
#endif /* EFI_IDLE_CONTROL */
#endif /* EFI_PROD_CODE */
#if EFI_ELECTRONIC_THROTTLE_BODY
2017-01-06 14:01:28 -08:00
{"etb_p", setEtbPFactor},
{"etb_i", setEtbIFactor},
2018-09-24 20:57:03 -07:00
{"etb_d", setEtbDFactor},
2018-11-26 19:17:16 -08:00
#endif /* EFI_ELECTRONIC_THROTTLE_BODY */
2017-01-06 14:01:28 -08:00
2017-01-06 13:03:41 -08:00
// {"", },
2017-01-06 07:04:41 -08:00
// {"", },
// {"", },
// {"", },
// {"", },
// {"", },
};
2017-03-03 20:22:22 -08:00
static void setTpsErrorDetectionTooLow(int v) {
engineConfiguration->tpsErrorDetectionTooLow = v;
}
static void setTpsErrorDetectionTooHigh(int v) {
engineConfiguration->tpsErrorDetectionTooHigh = v;
}
2017-01-06 06:03:33 -08:00
command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode},
2017-05-04 14:03:23 -07:00
{"call_from_pitstop", setCallFromPitStop},
2017-01-06 06:03:33 -08:00
{"cranking_rpm", setCrankingRpm},
{"cranking_injection_mode", setCrankingInjectionMode},
{"injection_mode", setInjectionMode},
2017-01-06 07:04:41 -08:00
{"sensor_chart_mode", setSensorChartMode},
2017-03-03 20:22:22 -08:00
{"tpsErrorDetectionTooLow", setTpsErrorDetectionTooLow},
{"tpsErrorDetectionTooHigh", setTpsErrorDetectionTooHigh},
2017-01-06 07:04:41 -08:00
{"fixed_mode_timing", setFixedModeTiming},
{"timing_mode", setTimingMode},
{"engine_type", setEngineType},
{"rpm_hard_limit", setRpmHardLimit},
{"firing_order", setFiringOrder},
{"algorithm", setAlgorithmInt},
{"injection_pin_mode", setInjectionPinMode},
{"ignition_pin_mode", setIgnitionPinMode},
{"idle_pin_mode", setIdlePinMode},
{"fuel_pump_pin_mode", setFuelPumpPinMode},
{"malfunction_indicator_pin_mode", setMalfunctionIndicatorPinMode},
{"operation_mode", setOM},
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},
2017-01-06 13:03:41 -08:00
{"tps_accel_len", setTpsAccelLen},
{"engine_load_accel_len", setEngineLoadAccelLen},
2017-01-06 23:01:58 -08:00
#if EFI_PROD_CODE || defined(__DOXYGEN__)
2017-02-14 18:01:56 -08:00
{"bor", setBor},
#if EFI_CAN_SUPPORT || defined(__DOXYGEN__)
2017-01-11 18:04:22 -08:00
{"can_mode", setCanType},
#endif /* EFI_CAN_SUPPORT */
#if EFI_IDLE_CONTROL || defined(__DOXYGEN__)
2017-01-06 14:01:28 -08:00
{"idle_position", setIdleValvePosition},
{"idle_rpm", setTargetIdleRpm},
{"idle_dt", setIdleDT},
#endif /* EFI_IDLE_CONTROL */
2017-01-06 23:01:58 -08:00
#endif /* EFI_PROD_CODE */
2018-11-26 19:17:16 -08:00
#if EFI_ELECTRONIC_THROTTLE_BODY
{"etb_o", setEtbOffset},
#endif /* EFI_ELECTRONIC_THROTTLE_BODY */
2017-01-06 07:04:41 -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);
2017-01-06 07:04:41 -08:00
command_f_s *currentF = &commandsF[0];
while (currentF < commandsF + sizeof(commandsF)/sizeof(commandsF[0])) {
if (strEqualCaseInsensitive(paramStr, currentF->token)) {
currentF->callback(valueF);
return;
}
currentF++;
}
command_i_s *currentI = &commandsI[0];
while (currentI < commandsI + sizeof(commandsI)/sizeof(commandsI[0])) {
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
}
2015-07-10 06:01:56 -07:00
if (strEqualCaseInsensitive(paramStr, "vsscoeff")) {
engineConfiguration->vehicleSpeedCoef = valueF;
#if EFI_PROD_CODE || defined(__DOXYGEN__)
} else if (strEqualCaseInsensitive(paramStr, "alt_t")) {
if (valueI > 10) {
engineConfiguration->alternatorControl.period = valueI;
2015-07-10 06:01:56 -07:00
}
showAltInfo();
} else if (strEqualCaseInsensitive(paramStr, "alt_offset")) {
2016-02-05 12:02:36 -08:00
engineConfiguration->alternatorControl.offset = valueI;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(paramStr, "alt_p")) {
setAltPFactor(valueF);
#endif
2017-01-06 06:03:33 -08:00
// } else if (strEqualCaseInsensitive(paramStr, "cranking_rpm")) {
// } else if (strEqualCaseInsensitive(paramStr, "cranking_rpm")) {
// } else if (strEqualCaseInsensitive(paramStr, "cranking_rpm")) {
// } else if (strEqualCaseInsensitive(paramStr, "cranking_rpm")) {
// } else if (strEqualCaseInsensitive(paramStr, "cranking_rpm")) {
// } else if (strEqualCaseInsensitive(paramStr, "cranking_rpm")) {
} else if (strEqualCaseInsensitive(paramStr, "warning_period")) {
2016-07-22 15:04:12 -07:00
engineConfiguration->warningPeriod = valueI;
2016-10-15 19:01:57 -07:00
} else if (strEqualCaseInsensitive(paramStr, "dwell")) {
2017-05-15 20:28:49 -07:00
setConstantDwell(valueF PASS_ENGINE_PARAMETER_SUFFIX);
2016-07-23 12:05:04 -07:00
} else if (strEqualCaseInsensitive(paramStr, "engineSnifferRpmThreshold")) {
engineConfiguration->engineSnifferRpmThreshold = valueI;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(paramStr, "step1rpm")) {
engineConfiguration->step1rpm = valueI;
2016-11-17 20:02:17 -08:00
} else if (strEqualCaseInsensitive(paramStr, "vvt_offset")) {
engineConfiguration->vvtOffset = valueF;
2016-11-14 19:02:35 -08:00
} else if (strEqualCaseInsensitive(paramStr, "vvt_mode")) {
engineConfiguration->vvtMode = (vvt_mode_e)valueI;
2016-11-23 20:02:35 -08:00
} else if (strEqualCaseInsensitive(paramStr, "nb_vvt_index")) {
engineConfiguration->nbVvtIndex = valueI;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(paramStr, "step1timing")) {
engineConfiguration->step1timing = valueI;
2016-11-13 20:02:33 -08:00
} else if (strEqualCaseInsensitive(paramStr, "operation_mode")) {
engineConfiguration->operationMode = (operation_mode_e)valueI;
2015-08-30 10:02:46 -07:00
} else if (strEqualCaseInsensitive(paramStr, "suckedOffCoef")) {
engineConfiguration->suckedOffCoef = valueF;
} else if (strEqualCaseInsensitive(paramStr, "addedToWallCoef")) {
engineConfiguration->addedToWallCoef = valueF;
2016-10-28 19:03:00 -07:00
} else if (strEqualCaseInsensitive(paramStr, "cranking_dwell")) {
engineConfiguration->ignitionDwellForCrankingMs = valueF;
2015-07-10 06:01:56 -07:00
} else if (strEqualCaseInsensitive(paramStr, "targetvbatt")) {
engineConfiguration->targetVBatt = valueF;
#if EFI_RTC || defined(__DOXYGEN__)
} else if (strEqualCaseInsensitive(paramStr, "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);
#endif
}
}
2017-05-07 17:40:10 -07:00
void initSettings(void) {
2018-01-30 11:56:24 -08:00
#if EFI_SIMULATOR
printf("initSettings\n");
#endif
2017-01-06 07:04:41 -08:00
// todo: start saving values into flash right away?
2015-07-10 06:01:56 -07:00
addConsoleActionP("showconfig", (VoidPtr) doPrintConfiguration, &engine);
addConsoleAction("tempinfo", printTemperatureInfo);
addConsoleAction("tpsinfo", printTPSInfo);
addConsoleAction("info", printAllInfo);
2015-12-18 14:02:31 -08:00
addConsoleAction("set_one_coil_ignition", setOneCoilIgnition);
addConsoleAction("set_wasted_spark_ignition", setWastedIgnition);
addConsoleAction("set_individual_coils_ignition", setIndividualCoilsIgnition);
2015-07-10 06:01:56 -07:00
addConsoleActionF("set_whole_phase_map", setWholePhaseMapCmd);
addConsoleActionF("set_whole_timing_map", setWholeTimingMapCmd);
addConsoleActionF("set_whole_fuel_map", setWholeFuelMapCmd);
addConsoleActionF("set_whole_ve_map", setWholeVeCmd);
2015-10-18 18:02:32 -07:00
addConsoleActionF("set_whole_ign_corr_map", setWholeIgnitionIatCorr);
2015-07-10 06:01:56 -07:00
addConsoleActionSSS("set_fuel_map", setFuelMap);
addConsoleActionSSS("set_timing_map", setTimingMap);
addConsoleAction("stopengine", (Void) stopEngine);
// todo: refactor this - looks like all boolean flags should be controlled with less code duplication
addConsoleActionI("enable_spi", enableSpi);
addConsoleActionI("disable_spi", disableSpi);
addConsoleActionS("enable", enable);
addConsoleActionS("disable", disable);
addConsoleActionII("set_toothed_wheel", setToothedWheel);
// flat curve - constant injector lag regardless of voltage
2017-06-11 11:40:29 -07:00
addConsoleActionF("set_flat_injector_lag", setFlatInjectorLag);
2015-07-10 06:01:56 -07:00
addConsoleActionFF("set_injector_lag", setInjectorLag);
2015-07-10 06:01:56 -07:00
addConsoleActionFF("set_fan", setFanSetting);
2015-08-30 10:02:46 -07:00
addConsoleActionSS("set", setValue);
addConsoleActionS("get", getValue);
#if EFI_PROD_CODE || defined(__DOXYGEN__)
2015-07-10 06:01:56 -07:00
addConsoleActionS("showpin", showPinFunction);
addConsoleActionSS("set_injection_pin", setInjectionPin);
addConsoleActionSS("set_ignition_pin", setIgnitionPin);
addConsoleActionSS("set_trigger_input_pin", setTriggerInputPin);
addConsoleActionSS("set_trigger_simulator_pin", setTriggerSimulatorPin);
2017-05-08 05:08:22 -07:00
addConsoleActionSS("set_egt_cs_pin", (VoidCharPtrCharPtr) setEgtCSPin);
2015-07-10 06:01:56 -07:00
addConsoleActionI("set_egt_spi", setEgtSpi);
addConsoleActionSS("set_trigger_simulator_mode", setTriggerSimulatorMode);
addConsoleActionS("set_fuel_pump_pin", setFuelPumpPin);
addConsoleActionS("set_ac_pin", setACPin);
addConsoleActionS("set_alternator_pin", setAlternatorPin);
addConsoleActionS("set_idle_pin", setIdlePin);
addConsoleActionS("set_main_relay_pin", setMainRelayPin);
#if HAL_USE_ADC || defined(__DOXYGEN__)
addConsoleActionSS("set_analog_input_pin", setAnalogInputPin);
#endif
addConsoleActionSS("set_logic_input_pin", setLogicInputPin);
addConsoleActionI("set_pot_spi", setPotSpi);
#endif /* EFI_PROD_CODE */
}