From 9e46bbf5197c4e7dcac9f6068aab6930f889a50c Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 10 Mar 2019 12:02:25 -0400 Subject: [PATCH] better Electronic Throttle body control #493 two ETBs --- firmware/config/engines/custom_engine.cpp | 6 +-- .../controllers/algo/engine_configuration.cpp | 8 ++-- ...ngine_configuration_generated_structures.h | 48 ++++++++++++------- firmware/controllers/algo/rusefi_generated.h | 36 +++++++++----- firmware/controllers/electronic_throttle.cpp | 30 +++++++----- firmware/controllers/system/efiGpio.cpp | 8 ++-- firmware/integration/rusefi_config.txt | 17 ++++--- firmware/tunerstudio/rusefi.input | 25 ++++++---- .../models/src/com/rusefi/config/Fields.java | 36 +++++++++----- 9 files changed, 134 insertions(+), 80 deletions(-) diff --git a/firmware/config/engines/custom_engine.cpp b/firmware/config/engines/custom_engine.cpp index af2af80b9f..b21a4d8745 100644 --- a/firmware/config/engines/custom_engine.cpp +++ b/firmware/config/engines/custom_engine.cpp @@ -279,9 +279,9 @@ void setEtbTestConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { /** * remember that some H-bridges require 5v control lines, not just 3v logic outputs we have on stm32 */ - CONFIGB(etbDirectionPin1) = GPIOC_7; - CONFIGB(etbDirectionPin2) = GPIOC_9; - CONFIGB(etbControlPin1) = GPIOE_14; + CONFIGB(etb1.directionPin1) = GPIOC_7; + CONFIGB(etb1.directionPin2) = GPIOC_9; + CONFIGB(etb1.controlPin1) = GPIOE_14; #if EFI_PROD_CODE || defined(__DOXYGEN__) setDefaultEtbParameters(PASS_ENGINE_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 5ff0fccf55..ae1691b094 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -360,10 +360,10 @@ void prepareVoidConfiguration(engine_configuration_s *engineConfiguration) { boardConfiguration->idle.solenoidPinMode = OM_DEFAULT; boardConfiguration->fuelPumpPin = GPIO_UNASSIGNED; boardConfiguration->fuelPumpPinMode = OM_DEFAULT; - boardConfiguration->etbControlPin1 = GPIO_UNASSIGNED; - boardConfiguration->etbControlPin2 = GPIO_UNASSIGNED; - boardConfiguration->etbDirectionPin1 = GPIO_UNASSIGNED; - boardConfiguration->etbDirectionPin2 = GPIO_UNASSIGNED; + boardConfiguration->etb1.controlPin1 = GPIO_UNASSIGNED; + boardConfiguration->etb1.controlPin2 = GPIO_UNASSIGNED; + boardConfiguration->etb1.directionPin1 = GPIO_UNASSIGNED; + boardConfiguration->etb1.directionPin2 = GPIO_UNASSIGNED; boardConfiguration->o2heaterPin = GPIO_UNASSIGNED; boardConfiguration->tachOutputPin = GPIO_UNASSIGNED; diff --git a/firmware/controllers/algo/engine_configuration_generated_structures.h b/firmware/controllers/algo/engine_configuration_generated_structures.h index b0db9f0392..a78a33991e 100644 --- a/firmware/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sat Mar 09 23:22:39 EST 2019 +// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Mar 10 11:52:06 EDT 2019 // begin #ifndef ENGINE_CONFIGURATION_GENERATED_H_ #define ENGINE_CONFIGURATION_GENERATED_H_ @@ -367,6 +367,27 @@ typedef struct { /** total size 8*/ } idle_hardware_s; +// start of etb_io +typedef struct { + /** + * offset 0 + */ + brain_pin_e directionPin1; + /** + * offset 1 + */ + brain_pin_e directionPin2; + /** + * offset 2 + */ + brain_pin_e controlPin1; + /** + * offset 3 + */ + brain_pin_e controlPin2; + /** total size 4*/ +} etb_io; + // start of board_configuration_s typedef struct { /** @@ -508,19 +529,7 @@ typedef struct { /** * offset 80 */ - brain_pin_e etbDirectionPin1; - /** - * offset 81 - */ - brain_pin_e etbDirectionPin2; - /** - * offset 82 - */ - brain_pin_e etbControlPin1; - /** - * offset 83 - */ - brain_pin_e etbControlPin2; + etb_io etb1; /** * offset 84 */ @@ -1264,9 +1273,10 @@ typedef struct { */ adc_channel_e fuelLevelSensor; /** + * Second throttle body position sensor * offset 515 */ - uint8_t unusedtps; + adc_channel_e tps2AdcChannel; /** * offset 516 */ @@ -2315,7 +2325,11 @@ typedef struct { /** * offset 3988 */ - int mainUnusedEnd[623]; + etb_io etb2; + /** + * offset 3992 + */ + int mainUnusedEnd[622]; /** total size 6480*/ } engine_configuration_s; @@ -2562,4 +2576,4 @@ typedef struct { #endif // end -// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sat Mar 09 23:22:39 EST 2019 +// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Mar 10 11:52:06 EDT 2019 diff --git a/firmware/controllers/algo/rusefi_generated.h b/firmware/controllers/algo/rusefi_generated.h index 347dc6fe11..119a4dfe6e 100644 --- a/firmware/controllers/algo/rusefi_generated.h +++ b/firmware/controllers/algo/rusefi_generated.h @@ -310,8 +310,8 @@ #define vbattAdcChannel_offset_hex 201 #define fuelLevelSensor_offset 514 #define fuelLevelSensor_offset_hex 202 -#define unusedtps_offset 515 -#define unusedtps_offset_hex 203 +#define tps2AdcChannel_offset 515 +#define tps2AdcChannel_offset_hex 203 #define overrideCrankingIgnition_offset 516 #define overrideCrankingIgnition_offset_hex 204 #define sensorChartFrequency_offset 520 @@ -500,14 +500,16 @@ #define unusedEtbM_offset_hex 2a3 #define digitalPotentiometerSpiDevice_offset 676 #define digitalPotentiometerSpiDevice_offset_hex 2a4 -#define etbDirectionPin1_offset 680 -#define etbDirectionPin1_offset_hex 2a8 -#define etbDirectionPin2_offset 681 -#define etbDirectionPin2_offset_hex 2a9 -#define etbControlPin1_offset 682 -#define etbControlPin1_offset_hex 2aa -#define etbControlPin2_offset 683 -#define etbControlPin2_offset_hex 2ab +#define etb1_offset 680 +#define etb1_offset_hex 2a8 +#define etb1_directionPin1_offset 680 +#define etb1_directionPin1_offset_hex 2a8 +#define etb1_directionPin2_offset 681 +#define etb1_directionPin2_offset_hex 2a9 +#define etb1_controlPin1_offset 682 +#define etb1_controlPin1_offset_hex 2aa +#define etb1_controlPin2_offset 683 +#define etb1_controlPin2_offset_hex 2ab #define fuelLevelEmptyTankVoltage_offset 684 #define fuelLevelEmptyTankVoltage_offset_hex 2ac #define fuelLevelFullTankVoltage_offset 688 @@ -1646,8 +1648,18 @@ #define etb_iTermMax_offset_hex f8e #define etbDeadband_offset 3984 #define etbDeadband_offset_hex f90 -#define mainUnusedEnd_offset 3988 -#define mainUnusedEnd_offset_hex f94 +#define etb2_offset 3988 +#define etb2_offset_hex f94 +#define etb2_directionPin1_offset 3988 +#define etb2_directionPin1_offset_hex f94 +#define etb2_directionPin2_offset 3989 +#define etb2_directionPin2_offset_hex f95 +#define etb2_controlPin1_offset 3990 +#define etb2_controlPin1_offset_hex f96 +#define etb2_controlPin2_offset 3991 +#define etb2_controlPin2_offset_hex f97 +#define mainUnusedEnd_offset 3992 +#define mainUnusedEnd_offset_hex f98 #define cltCrankingCorrBins_offset 6480 #define cltCrankingCorrBins_offset_hex 1950 #define cltCrankingCorr_offset 6512 diff --git a/firmware/controllers/electronic_throttle.cpp b/firmware/controllers/electronic_throttle.cpp index dbc437280d..8580dbfd0e 100644 --- a/firmware/controllers/electronic_throttle.cpp +++ b/firmware/controllers/electronic_throttle.cpp @@ -247,10 +247,10 @@ static void showEthInfo(void) { scheduleMsg(&logger, "dir=%d DC=%f", dcMotor.isOpenDirection(), dcMotor.Get()); scheduleMsg(&logger, "etbControlPin1=%s duty=%.2f freq=%d", - hwPortname(CONFIGB(etbControlPin1)), + hwPortname(CONFIGB(etb1.controlPin1)), currentEtbDuty, engineConfiguration->etbFreq); - scheduleMsg(&logger, "close dir=%s", hwPortname(CONFIGB(etbDirectionPin2))); + scheduleMsg(&logger, "close dir=%s", hwPortname(CONFIGB(etb1.directionPin2))); pid.showPidStatus(&logger, "ETB"); } @@ -318,21 +318,25 @@ void setDefaultEtbParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // CONFIGB(etbControlPin1) = GPIOE_4; // test board, matched default fuel pump relay } +static bool isSamePins(etb_io *current, etb_io *active) { + return current->controlPin1 != active->controlPin1 || + current->controlPin2 != active->controlPin2 || + current->directionPin1 != active->directionPin1 || + current->directionPin2 != active->directionPin2; +} + bool isETBRestartNeeded(void) { /** * We do not want any interruption in HW pin while adjusting other properties */ - return engineConfiguration->bc.etbControlPin1 != activeConfiguration.bc.etbControlPin1 || - engineConfiguration->bc.etbControlPin2 != activeConfiguration.bc.etbControlPin2 || - engineConfiguration->bc.etbDirectionPin1 != activeConfiguration.bc.etbDirectionPin1 || - engineConfiguration->bc.etbDirectionPin2 != activeConfiguration.bc.etbDirectionPin2; + return isSamePins(&engineConfiguration->bc.etb1, &activeConfiguration.bc.etb1); } void stopETBPins(void) { - unmarkPin(activeConfiguration.bc.etbControlPin1); - unmarkPin(activeConfiguration.bc.etbControlPin2); - unmarkPin(activeConfiguration.bc.etbDirectionPin1); - unmarkPin(activeConfiguration.bc.etbDirectionPin2); + unmarkPin(activeConfiguration.bc.etb1.controlPin1); + unmarkPin(activeConfiguration.bc.etb1.controlPin2); + unmarkPin(activeConfiguration.bc.etb1.directionPin1); + unmarkPin(activeConfiguration.bc.etb1.directionPin2); } void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration) { @@ -346,7 +350,7 @@ void startETBPins(void) { // this line used for PWM startSimplePwmExt(&etbPwmUp, "etb1", &engine->executor, - CONFIGB(etbControlPin1), + CONFIGB(etb1.controlPin1), &enginePins.etbOutput1, freq, 0.80, @@ -359,8 +363,8 @@ void startETBPins(void) { 0.80, applyPinState); */ - outputDirectionOpen.initPin("etb dir open", CONFIGB(etbDirectionPin1)); - outputDirectionClose.initPin("etb dir close", CONFIGB(etbDirectionPin2)); + outputDirectionOpen.initPin("etb dir open", CONFIGB(etb1.directionPin1)); + outputDirectionClose.initPin("etb dir close", CONFIGB(etb1.directionPin2)); } static void setTempOutput(float value) { diff --git a/firmware/controllers/system/efiGpio.cpp b/firmware/controllers/system/efiGpio.cpp index 145c7813e2..5c89573955 100644 --- a/firmware/controllers/system/efiGpio.cpp +++ b/firmware/controllers/system/efiGpio.cpp @@ -97,10 +97,10 @@ void EnginePins::unregisterPins() { sdCsPin.unregisterOutput(activeConfiguration.bc.sdCardCsPin, engineConfiguration->bc.sdCardCsPin); accelerometerCs.unregisterOutput(activeConfiguration.LIS302DLCsPin, engineConfiguration->LIS302DLCsPin); - etbOutput1.unregisterOutput(activeConfiguration.bc.etbDirectionPin1, - engineConfiguration->bc.etbDirectionPin1); - etbOutput2.unregisterOutput(activeConfiguration.bc.etbDirectionPin2, - engineConfiguration->bc.etbDirectionPin2); + etbOutput1.unregisterOutput(activeConfiguration.bc.etb1.directionPin1, + engineConfiguration->bc.etb1.directionPin1); + etbOutput2.unregisterOutput(activeConfiguration.bc.etb1.directionPin2, + engineConfiguration->bc.etb1.directionPin2); checkEnginePin.unregisterOutput(activeConfiguration.bc.malfunctionIndicatorPin, engineConfiguration->bc.malfunctionIndicatorPin); dizzyOutput.unregisterOutput(activeConfiguration.dizzySparkOutputPin, diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 8076877455..15c60c3902 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -393,7 +393,7 @@ log_format_e logFormat; adc_channel_e tpsAdcChannel;See aslo pedalPositionAdcChannel adc_channel_e vbattAdcChannel; adc_channel_e fuelLevelSensor; - uint8_t[1] unusedtps; + adc_channel_e tps2AdcChannel;Second throttle body position sensor int overrideCrankingIgnition; int sensorChartFrequency;;"index", 1, 0, 0, 300, 0 ; size 4 @@ -454,6 +454,13 @@ struct idle_hardware_s brain_pin_e stepperStepPin; pin_output_mode_e solenoidPinMode; end_struct + +struct etb_io + brain_pin_e directionPin1; + brain_pin_e directionPin2; + brain_pin_e controlPin1; + brain_pin_e controlPin2; +end_struct struct_no_prefix board_configuration_s idle_hardware_s idle; @@ -505,10 +512,7 @@ spi_device_e digitalPotentiometerSpiDevice;Digital Potentiometer is used by stoc custom adc_channel_mode_e 4 bits, U32, @OFFSET@, [0:1], "Off", "Slow", "Fast", "INVALID" - brain_pin_e etbDirectionPin1; - brain_pin_e etbDirectionPin2; - brain_pin_e etbControlPin1; - brain_pin_e etbControlPin2; + etb_io etb1 float fuelLevelEmptyTankVoltage;;"V", 1, 0, 0,10, 2 float fuelLevelFullTankVoltage;;"V", 1, 0, 0,10, 2 @@ -979,7 +983,8 @@ tChargeMode_e tChargeMode; int16_t etb_iTermMin;iTerm min value;"", 1, 0, -30000, 30000.0, 0 int16_t etb_iTermMax;iTerm max value;"", 1, 0, -30000, 30000.0, 0 float etbDeadband;;"", 1, 0, 0, 100.0, 2 - int[623] mainUnusedEnd; + etb_io etb2 + int[622] mainUnusedEnd; end_struct diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index fea83f45df..9f7c9b52ec 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1477,6 +1477,7 @@ cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" field = "IAT ADC input", iat_adcChannel field = "vBatt ADC input", vbattAdcChannel field = "TPS ADC input", tpsAdcChannel + field = "TPS2 ADC input", tps2AdcChannel field = "MAF ADC input", mafAdcChannel field = "AFR ADC input", afr_hwChannel field = "fuelLevelSensor", fuelLevelSensor @@ -1507,10 +1508,14 @@ cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" field = "Idle Stepper Enable", stepperEnablePin field = "Fuel Pump Pin", fuelPumpPin field = "Fuel Pump Pin Mode", fuelPumpPinMode - field = "ETB Dir #1", etbDirectionPin1 - field = "ETB Dir #2", etbDirectionPin2 - field = "ETB Control #1", etbControlPin1 - field = "ETB Control #2", etbControlPin2 + field = "ETB#1 Dir #1", etb1_directionPin1 + field = "ETB#1 Dir #2", etb1_directionPin2 + field = "ETB#1 Control #1", etb1_controlPin1 + field = "ETB#1 Control #2", etb1_controlPin2 + field = "ETB#2 Dir #1", etb2_directionPin1 + field = "ETB#2 Dir #2", etb2_directionPin2 + field = "ETB#2 Control #1", etb2_controlPin1 + field = "ETB#2 Control #2", etb2_controlPin2 field = "SD CS Pin", sdCardCsPin field = "Check Engine Pin", malfunctionIndicatorPin field = "Check Engine Pin Mode", malfunctionIndicatorPinMode @@ -2229,10 +2234,14 @@ cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" field = "Throttle Pedal Up", throttlePedalUpVoltage field = "Throttle Pedal Wide Open", throttlePedalWOTVoltage field = "PWM Frequency", etbFreq, {throttlePedalPositionAdcChannel != 16} - field = "Dir #1", etbDirectionPin1, {throttlePedalPositionAdcChannel != 16} - field = "Dir #2", etbDirectionPin2, {throttlePedalPositionAdcChannel != 16} - field = "Control #1", etbControlPin1, {throttlePedalPositionAdcChannel != 16} - field = "Control #2", etbControlPin2, {throttlePedalPositionAdcChannel != 16} + field = "#1 Direction #1", etb1_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "#1 Direction #2", etb1_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "#1 Control #1", etb1_controlPin1, {throttlePedalPositionAdcChannel != 16} + field = "#1 Control #2", etb1_controlPin2, {throttlePedalPositionAdcChannel != 16} + field = "#2 Direction #1", etb2_directionPin1, {throttlePedalPositionAdcChannel != 16} + field = "#2 Direction #2", etb2_directionPin2, {throttlePedalPositionAdcChannel != 16} + field = "#2 Control #1", etb2_controlPin1, {throttlePedalPositionAdcChannel != 16} + field = "#2 Control #2", etb2_controlPin2, {throttlePedalPositionAdcChannel != 16} field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} diff --git a/java_console/models/src/com/rusefi/config/Fields.java b/java_console/models/src/com/rusefi/config/Fields.java index 938582ecc1..aa23edcb38 100644 --- a/java_console/models/src/com/rusefi/config/Fields.java +++ b/java_console/models/src/com/rusefi/config/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config; -// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sat Mar 09 23:22:39 EST 2019 +// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sun Mar 10 11:53:40 EDT 2019 public class Fields { public static final int LE_COMMAND_LENGTH = 200; public static final int BLOCKING_FACTOR = 400; @@ -204,8 +204,8 @@ public class Fields { public static final int vbattAdcChannel_offset_hex = 201; public static final int fuelLevelSensor_offset = 514; public static final int fuelLevelSensor_offset_hex = 202; - public static final int unusedtps_offset = 515; - public static final int unusedtps_offset_hex = 203; + public static final int tps2AdcChannel_offset = 515; + public static final int tps2AdcChannel_offset_hex = 203; public static final int overrideCrankingIgnition_offset = 516; public static final int overrideCrankingIgnition_offset_hex = 204; public static final int sensorChartFrequency_offset = 520; @@ -359,10 +359,11 @@ public class Fields { public static final int cj125CsPin_offset = 674; public static final int unusedEtbM_offset = 675; public static final int digitalPotentiometerSpiDevice_offset = 676; - public static final int etbDirectionPin1_offset = 680; - public static final int etbDirectionPin2_offset = 681; - public static final int etbControlPin1_offset = 682; - public static final int etbControlPin2_offset = 683; + public static final int etb1_offset = 680; + public static final int etb1_directionPin1_offset = 680; + public static final int etb1_directionPin2_offset = 681; + public static final int etb1_controlPin1_offset = 682; + public static final int etb1_controlPin2_offset = 683; public static final int fuelLevelEmptyTankVoltage_offset = 684; public static final int fuelLevelFullTankVoltage_offset = 688; public static final int afr_type_offset = 692; @@ -1040,7 +1041,12 @@ public class Fields { public static final int etb_iTermMin_offset = 3980; public static final int etb_iTermMax_offset = 3982; public static final int etbDeadband_offset = 3984; - public static final int mainUnusedEnd_offset = 3988; + public static final int etb2_offset = 3988; + public static final int etb2_directionPin1_offset = 3988; + public static final int etb2_directionPin2_offset = 3989; + public static final int etb2_controlPin1_offset = 3990; + public static final int etb2_controlPin2_offset = 3991; + public static final int mainUnusedEnd_offset = 3992; public static final int cltCrankingCorrBins_offset = 6480; public static final int cltCrankingCorrBins_offset_hex = 1950; public static final int cltCrankingCorr_offset = 6512; @@ -1278,7 +1284,7 @@ public class Fields { public static final Field TPSADCCHANNEL = Field.create("TPSADCCHANNEL", 512, FieldType.INT, adc_channel_e); public static final Field VBATTADCCHANNEL = Field.create("VBATTADCCHANNEL", 513, FieldType.INT, adc_channel_e); public static final Field FUELLEVELSENSOR = Field.create("FUELLEVELSENSOR", 514, FieldType.INT, adc_channel_e); - public static final Field UNUSEDTPS = Field.create("UNUSEDTPS", 515, FieldType.INT); + public static final Field TPS2ADCCHANNEL = Field.create("TPS2ADCCHANNEL", 515, FieldType.INT, adc_channel_e); public static final Field OVERRIDECRANKINGIGNITION = Field.create("OVERRIDECRANKINGIGNITION", 516, FieldType.INT); public static final Field SENSORCHARTFREQUENCY = Field.create("SENSORCHARTFREQUENCY", 520, FieldType.INT); public static final String[] trigger_type_e = {"custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "2JZ", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "trg44", "trg45", "INVALID"}; @@ -1367,10 +1373,10 @@ public class Fields { public static final Field CJ125CSPIN = Field.create("CJ125CSPIN", 674, FieldType.INT, brain_pin_e); public static final Field UNUSEDETBM = Field.create("UNUSEDETBM", 675, FieldType.INT); public static final Field DIGITALPOTENTIOMETERSPIDEVICE = Field.create("DIGITALPOTENTIOMETERSPIDEVICE", 676, FieldType.INT); - public static final Field ETBDIRECTIONPIN1 = Field.create("ETBDIRECTIONPIN1", 680, FieldType.INT, brain_pin_e); - public static final Field ETBDIRECTIONPIN2 = Field.create("ETBDIRECTIONPIN2", 681, FieldType.INT, brain_pin_e); - public static final Field ETBCONTROLPIN1 = Field.create("ETBCONTROLPIN1", 682, FieldType.INT, brain_pin_e); - public static final Field ETBCONTROLPIN2 = Field.create("ETBCONTROLPIN2", 683, FieldType.INT, brain_pin_e); + public static final Field ETB1_DIRECTIONPIN1 = Field.create("ETB1_DIRECTIONPIN1", 680, FieldType.INT, brain_pin_e); + public static final Field ETB1_DIRECTIONPIN2 = Field.create("ETB1_DIRECTIONPIN2", 681, FieldType.INT, brain_pin_e); + public static final Field ETB1_CONTROLPIN1 = Field.create("ETB1_CONTROLPIN1", 682, FieldType.INT, brain_pin_e); + public static final Field ETB1_CONTROLPIN2 = Field.create("ETB1_CONTROLPIN2", 683, FieldType.INT, brain_pin_e); public static final Field FUELLEVELEMPTYTANKVOLTAGE = Field.create("FUELLEVELEMPTYTANKVOLTAGE", 684, FieldType.FLOAT); public static final Field FUELLEVELFULLTANKVOLTAGE = Field.create("FUELLEVELFULLTANKVOLTAGE", 688, FieldType.FLOAT); public static final String[] ego_sensor_e = {"BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom"}; @@ -1891,6 +1897,10 @@ public class Fields { public static final Field ETB_ITERMMIN = Field.create("ETB_ITERMMIN", 3980, FieldType.INT); public static final Field ETB_ITERMMAX = Field.create("ETB_ITERMMAX", 3982, FieldType.INT); public static final Field ETBDEADBAND = Field.create("ETBDEADBAND", 3984, FieldType.FLOAT); + public static final Field ETB2_DIRECTIONPIN1 = Field.create("ETB2_DIRECTIONPIN1", 3988, FieldType.INT, brain_pin_e); + public static final Field ETB2_DIRECTIONPIN2 = Field.create("ETB2_DIRECTIONPIN2", 3989, FieldType.INT, brain_pin_e); + public static final Field ETB2_CONTROLPIN1 = Field.create("ETB2_CONTROLPIN1", 3990, FieldType.INT, brain_pin_e); + public static final Field ETB2_CONTROLPIN2 = Field.create("ETB2_CONTROLPIN2", 3991, FieldType.INT, brain_pin_e); public static final Field FSIOFORMULAS1 = Field.create("FSIOFORMULAS1", 6672, FieldType.INT); public static final Field FSIOFORMULAS2 = Field.create("FSIOFORMULAS2", 6872, FieldType.INT); public static final Field FSIOFORMULAS3 = Field.create("FSIOFORMULAS3", 7072, FieldType.INT);