GCC Code Coverage Report


Directory: ./
File: firmware/config/engines/subaru.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 0.0% 0 0 54
Functions: 0.0% 0 0 3
Branches: -% 0 0 0
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 /**
2 * @file subaru.cpp
3 *
4 * SUBARU_2003_WRX
5 * set engine_type 22
6 *
7 * @date Sep 14, 2014
8 * @author Andrey Belomutskiy, (c) 2012-2020
9 */
10
11 #include "pch.h"
12
13 #include "subaru.h"
14 #include "custom_engine.h"
15 #include "proteus_meta.h"
16 #include "defaults.h"
17 #include "mre_meta.h"
18
19 /**
20 * MRE_SUBARU_EJ18
21 * set engine_type 37
22 */
23 void setSubaruEJ18_MRE() {
24 engineConfiguration->trigger.type = trigger_type_e::TT_VVT_SUBARU_7_WITHOUT_6;
25
26
27 // engineConfiguration->isDoubleSolenoidIdle = true;
28
29 engineConfiguration->displacement = 1.8;
30 strcpy(engineConfiguration->engineMake, ENGINE_MAKE_SUBARU);
31 strcpy(engineConfiguration->engineCode, "EJ18");
32
33 engineConfiguration->firingOrder = FO_1_3_2_4;
34 engineConfiguration->injectionMode = IM_SEQUENTIAL;
35 engineConfiguration->ignitionMode = IM_WASTED_SPARK;
36
37 #if (BOARD_TLE8888_COUNT > 0)
38 // Gpio::TLE8888_PIN_23: "33 - GP Out 3"
39 engineConfiguration->malfunctionIndicatorPin = MRE_GPOUT_3;
40 #endif /* BOARD_TLE8888_COUNT */
41
42 // this car has high-side main relay WOW so we have to hard wire it to ignition switch
43
44
45 }
46
47 /*
48 * Subaru SVX (Alcyone SVX)
49 */
50
51 void setSubaruEG33Defaults() {
52 setCamOperationMode();
53
54 engineConfiguration->trigger.type = trigger_type_e::TT_SUBARU_SVX;
55
56 engineConfiguration->cylindersCount = 6;
57 setLeftRightBanksNeedBetterName();
58 engineConfiguration->firingOrder = FO_1_6_3_2_5_4;
59
60 engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
61 engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
62 engineConfiguration->injectionMode = IM_SEQUENTIAL;
63
64 /* TODO: */
65 engineConfiguration->globalTriggerAngleOffset = 114; // the end of 19th tooth?
66
67 engineConfiguration->fuelAlgorithm = engine_load_mode_e::LM_REAL_MAF;
68
69 engineConfiguration->displacement = 3.30;
70 engineConfiguration->injector.flow = 250;
71
72 setTable(config->crankingCycleBaseFuel, 5); // ???
73 engineConfiguration->cranking.rpm = 400;
74
75 engineConfiguration->rpmHardLimit = 6500;
76
77 engineConfiguration->idleStepperReactionTime = 10;
78 engineConfiguration->stepperDirectionPinMode = OM_INVERTED;
79 engineConfiguration->useLinearCltSensor = true;
80
81 engineConfiguration->canReadEnabled = true;
82 engineConfiguration->canWriteEnabled = false;
83
84 /* Fully closed - 0.9V, fully opened - 4.7 (?) */
85 engineConfiguration->tpsMin = convertVoltageTo10bitADC(0.9);
86 engineConfiguration->tpsMax = convertVoltageTo10bitADC(4.7);
87 engineConfiguration->tpsErrorDetectionTooLow = -10; // -10% open
88 engineConfiguration->tpsErrorDetectionTooHigh = 110; // 110% open
89
90 engineConfiguration->mapMinBufferLength = 4;
91
92 /* idle configuration */
93 setTable(config->cltIdleCorrTable, 30.0);
94
95 engineConfiguration->maxAcRpm = 3000;
96
97 /* Check this */
98 engineConfiguration->tachPulsePerRev = 2;
99 }
100
101 void setSubaru2011() {
102 engineConfiguration->allowIdenticalPps = true;
103 setPPSCalibration(0.69, 3.38, 0.69, 3.38);
104
105 engineConfiguration->displacement = 2.5;
106 strcpy(engineConfiguration->engineMake, ENGINE_MAKE_SUBARU);
107 engineConfiguration->trigger.type = trigger_type_e::TT_36_2_2_2;
108 engineConfiguration->vvtMode[0] = VVT_BOSCH_QUICK_START;
109 engineConfiguration->vvtMode[1] = VVT_BOSCH_QUICK_START;
110 engineConfiguration->firingOrder = FO_1_3_2_4;
111 engineConfiguration->injectionMode = IM_SEQUENTIAL;
112
113 #if HW_PROTEUS && EFI_PROD_CODE
114 setProteusEtbIO();
115 engineConfiguration->triggerInputPins[0] = PROTEUS_VR_1;
116 engineConfiguration->camInputs[0] = PROTEUS_DIGITAL_1;
117 engineConfiguration->camInputs[1] = PROTEUS_DIGITAL_2;
118 engineConfiguration->camInputs[2] = PROTEUS_DIGITAL_3;
119 engineConfiguration->camInputs[3] = PROTEUS_DIGITAL_4;
120
121
122 engineConfiguration->starterControlPin = Gpio::PROTEUS_LS_14;
123 engineConfiguration->startStopButtonPin = PROTEUS_IN_AV_6_DIGITAL;
124 #endif // HW_PROTEUS
125
126 engineConfiguration->tpsMin = convertVoltageTo10bitADC(0.68);
127 engineConfiguration->tpsMax = convertVoltageTo10bitADC(3.96);
128 engineConfiguration->tps1SecondaryMin = convertVoltageTo10bitADC(1.55);
129 engineConfiguration->tps1SecondaryMax = convertVoltageTo10bitADC(4.17);
130
131 }
132