rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
board_configuration.cpp
Go to the documentation of this file.
1/**
2 * @file boards/hellen/uaefi/board_configuration.cpp
3 *
4 * See https://rusefi.com/s/uaefi
5 *
6 * @author Andrey Belomutskiy, (c) 2012-2023
7 */
8
9#include "pch.h"
10#include "defaults.h"
11#include "hellen_meta.h"
12#include "hellen_leds_100.cpp"
13#include "board_overrides.h"
14#include "connectors/generated_board_pin_names.h"
15#ifndef EFI_BOOTLOADER
16#include "AemXSeriesLambda.h"
17#endif // EFI_BOOTLOADER
18
19static void setInjectorPins() {
20 engineConfiguration->injectionPins[0] = Gpio::MM100_INJ1;
21 engineConfiguration->injectionPins[1] = Gpio::MM100_INJ2;
22 engineConfiguration->injectionPins[2] = Gpio::MM100_INJ3;
23 engineConfiguration->injectionPins[3] = Gpio::MM100_INJ4;
24 engineConfiguration->injectionPins[4] = Gpio::MM100_INJ5;
25 engineConfiguration->injectionPins[5] = Gpio::MM100_INJ6;
26}
27
28static void setIgnitionPins() {
29 engineConfiguration->ignitionPins[0] = Gpio::MM100_IGN1;
30 engineConfiguration->ignitionPins[1] = Gpio::MM100_IGN2;
31 engineConfiguration->ignitionPins[2] = Gpio::MM100_IGN3;
32 engineConfiguration->ignitionPins[3] = Gpio::MM100_IGN4;
33 engineConfiguration->ignitionPins[4] = Gpio::MM100_IGN5;
34 engineConfiguration->ignitionPins[5] = Gpio::MM100_IGN6;
35}
36
38 engineConfiguration->tps1_1AdcChannel = MM100_IN_TPS_ANALOG;
39 engineConfiguration->tps1_2AdcChannel = MM100_IN_AUX1_ANALOG;
41
42 setPPSInputs(MM100_IN_PPS_ANALOG, MM100_IN_AUX2_ANALOG);
43
44 engineConfiguration->clt.adcChannel = MM100_IN_CLT_ANALOG;
45 engineConfiguration->iat.adcChannel = MM100_IN_IAT_ANALOG;
46
47 engineConfiguration->triggerInputPins[0] = Gpio::MM100_UART8_TX; // VR2 max9924 is the safer default
48 engineConfiguration->camInputs[0] = Gpio::MM100_IN_D1; // HALL1
49 engineConfiguration->camInputs[1] = Gpio::MM100_IN_D2; // HALL2
50
52}
53
67
71 }
72 return true;
73}
74
76 // users would want to override those if using H-bridges for stepper idle control
77 setupTLE9201IncludingStepper(/*PWM controlPin*/Gpio::MM100_OUT_PWM3, Gpio::MM100_OUT_PWM4, Gpio::MM100_SPI2_MISO);
78 setupTLE9201IncludingStepper(/*PWM controlPin*/Gpio::MM100_OUT_PWM5, Gpio::MM100_SPI2_MOSI, Gpio::MM100_USB1ID, 1);
79}
80
81/**
82 * @brief Board-specific configuration defaults.
83 *
84
85 *
86 */
91
93
96
98
99 engineConfiguration->canTxPin = Gpio::MM100_CAN_TX;
100 engineConfiguration->canRxPin = Gpio::MM100_CAN_RX;
101
103
104#if (EFI_CAN_BUS_COUNT >= 3)
105 engineConfiguration->can3TxPin = Gpio::MM100_CAN3_TX;
106 engineConfiguration->can3RxPin = Gpio::MM100_CAN3_RX;
107#endif
108
109 engineConfiguration->mainRelayPin = Gpio::MM100_IGN7;
110 engineConfiguration->fanPin = Gpio::MM100_IGN8;
111 engineConfiguration->fuelPumpPin = Gpio::MM100_OUT_PWM2;
112
113 // SPI3 for on-board EGT
115 // MOSI not needed, we have one-way communication here
120
121 // "required" hardware is done - set some reasonable defaults
124
125 engineConfiguration->etbFunctions[0] = DC_Throttle1;
126
127 // Some sensible defaults for other options
129
130 setAlgorithm(engine_load_mode_e::LM_SPEED_DENSITY);
131
132 engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure;
133
134#ifndef EFI_BOOTLOADER
135 setCommonNTCSensor(&engineConfiguration->clt, HELLEN_DEFAULT_AT_PULLUP);
136 setCommonNTCSensor(&engineConfiguration->iat, HELLEN_DEFAULT_AT_PULLUP);
137#endif // EFI_BOOTLOADER
138
139 setTPS1Calibration(100, 650);
140 hellenWbo();
141}
142
143static Gpio OUTPUTS[] = {
144 Gpio::MM100_INJ6, // B1 injector output 6
145 Gpio::MM100_INJ5, // B2 injector output 5
146 Gpio::MM100_INJ4, // B3 injector output 4
147 Gpio::MM100_INJ3, // B4 injector output 3
148 Gpio::MM100_INJ2, // B5 injector output 2
149 Gpio::MM100_INJ1, // B6 injector output 1
150 Gpio::MM100_INJ7, // B7 Low Side output 1
151 Gpio::MM100_IGN8, // B8 Fan Relay Weak Low Side output 2
152 Gpio::MM100_IGN7, // B9 Main Relay Weak Low Side output 1
153 Gpio::MM100_OUT_PWM2, // B16 Low Side output 4 / Fuel Pump
154 Gpio::MM100_OUT_PWM1, // B17 Low Side output 3
155 Gpio::MM100_INJ8, // B18 Low Side output 2
156 // high sides
157 Gpio::MM100_IGN6, // B10 Coil 6
158 Gpio::MM100_IGN4, // B11 Coil 4
159 Gpio::MM100_IGN3, // B12 Coil 3
160 Gpio::MM100_IGN5, // B13 Coil 5
161 Gpio::MM100_IGN2, // B14 Coil 2
162 Gpio::MM100_IGN1, // B15 Coil 1
163};
164
166 return efi::size(OUTPUTS);
167}
168
172
174 return OUTPUTS;
175}
176
188
189static void uaefi_slowCallback() {
190#ifndef EFI_BOOTLOADER
192 if (aem1.hasSeenRx) {
193 Gpio green = getRunningLedPin();
194 auto greenPort = getBrainPinPort(green);
195 auto greenPin = getBrainPinIndex(green);
196 palClearPad(greenPort, greenPin); // Hellen has inverted LED control
197 }
198#endif // EFI_BOOTLOADER
199}
200
206
207int boardGetAnalogInputDiagnostic(adc_channel_e hwChannel, float voltage) {
208 /* we do not check voltage for valid range yet */
209 (void)voltage;
210
211 switch (hwChannel) {
212 /* inputs that may be affected by incorrect reference voltage */
213 case MM100_IN_TPS_ANALOG:
214 case MM100_IN_PPS_ANALOG:
215 case MM100_IN_IAT_ANALOG:
216 case MM100_IN_CLT_ANALOG:
217 case MM100_IN_O2S_ANALOG:
218 case MM100_IN_O2S2_ANALOG:
219 case MM100_IN_MAP1_ANALOG:
220 case MM100_IN_AUX1_ANALOG:
221 case MM100_IN_AUX2_ANALOG:
222 case MM100_IN_AUX4_ANALOG:
223 /* TODO: more? */
224 return (boardGetAnalogDiagnostic() == ObdCode::None) ? 0 : -1;
225 /* all other inputs should not rely on output 5V */
226 default:
227 return 0;
228 }
229
230 return 0;
231}
Gpio getRunningLedPin()
void setup_custom_board_overrides()
void setTPS1Calibration(uint16_t tpsMin, uint16_t tpsMax)
void setPPSInputs(adc_channel_e pps1, adc_channel_e pps2)
void setupTLE9201IncludingStepper(Gpio controlPin, Gpio direction, Gpio disable, int dcIndex)
std::optional< setup_custom_board_overrides_type > custom_board_periodicSlowCallback
Definition engine.cpp:148
std::optional< setup_custom_board_overrides_type > custom_board_ConfigOverrides
std::optional< setup_custom_board_overrides_type > custom_board_DefaultConfiguration
void setCrankOperationMode()
static constexpr engine_configuration_s * engineConfiguration
void setAlgorithm(engine_load_mode_e algo)
static void setupDefaultSensorInputs()
static Gpio OUTPUTS[]
static void setIgnitionPins()
int getBoardMetaOutputsCount()
Gpio * getBoardMetaOutputs()
static void setInjectorPins()
int getBoardMetaLowSideOutputsCount()
int getBoardMetaDcOutputsCount()
int boardGetAnalogInputDiagnostic(adc_channel_e hwChannel, float voltage)
void setUaefiDefaultETBPins()
bool validateBoardConfig()
static void uaefi_boardConfigOverrides()
static void uaefi_slowCallback()
static void uaefi_boardDefaultConfiguration()
Board-specific configuration defaults.
ObdCode boardGetAnalogDiagnostic()
void hellenMegaSdWithAccelerometer()
void setHellenCan()
void hellenWbo()
void setHellenVbatt()
void setHellenMegaEnPin(bool enableBoardOnStartUp)
void setHellenCan2()
void setHellenMMbaro()
void setDefaultHellenAtPullUps(float pullup=HELLEN_DEFAULT_AT_PULLUP)
AemXSeriesWideband aem1(0, SensorType::Lambda1)
int getBrainPinIndex(Gpio brainPin)
ioportid_t getBrainPinPort(brain_pin_e brainPin)
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
void setCommonNTCSensor(ThermistorConf *thermistorConf, float pullup)