| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | /** | |||
| 2 | * @file map.cpp | |||
| 3 | * | |||
| 4 | * See also map_averaging.cpp | |||
| 5 | * | |||
| 6 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
| 7 | */ | |||
| 8 | #include "pch.h" | |||
| 9 | ||||
| 10 | #if EFI_ANALOG_SENSORS | |||
| 11 | ||||
| 12 | /** | |||
| 13 | * This function checks if Baro/MAP sensor value is inside of expected range | |||
| 14 | * @return unchanged mapKPa parameter or NaN | |||
| 15 | */ | |||
| 16 | ✗ | static float validateBaroMap(float mapKPa) { | ||
| 17 | // Highest interstate is the Eisenhower Tunnel at 11158 feet -> 66 kpa | |||
| 18 | // Lowest point is the Dead Sea, -1411 feet -> 106 kpa | |||
| 19 | ✗ | if (std::isnan(mapKPa) || mapKPa > 110 || mapKPa < 60) { | ||
| 20 | ✗ | warning(ObdCode::OBD_Barometric_Press_Circ, "Invalid start-up baro pressure = %.2fkPa", mapKPa); | ||
| 21 | ✗ | return NAN; | ||
| 22 | } | |||
| 23 | ✗ | return mapKPa; | ||
| 24 | } | |||
| 25 | ||||
| 26 | #if EFI_PROD_CODE | |||
| 27 | ||||
| 28 | static void printMAPInfo() { | |||
| 29 | #if EFI_ANALOG_SENSORS | |||
| 30 | efiPrintf("instant value=%.2fkPa", Sensor::getOrZero(SensorType::Map)); | |||
| 31 | ||||
| 32 | #if EFI_MAP_AVERAGING && defined (MODULE_MAP_AVERAGING) | |||
| 33 | efiPrintf("map type=%d/%s MAP=%.2fkPa", engineConfiguration->map.sensor.type, | |||
| 34 | getAir_pressure_sensor_type_e(engineConfiguration->map.sensor.type), | |||
| 35 | Sensor::getOrZero(SensorType::Map)); | |||
| 36 | #endif // EFI_MAP_AVERAGING | |||
| 37 | ||||
| 38 | adc_channel_e mapAdc = engineConfiguration->map.sensor.hwChannel; | |||
| 39 | char pinNameBuffer[16]; | |||
| 40 | ||||
| 41 | efiPrintf("MAP %.2fv @%s", | |||
| 42 | adcGetRawVoltage("mapinfo", mapAdc).value_or(0), | |||
| 43 | getPinNameByAdcChannel("map", mapAdc, pinNameBuffer, sizeof(pinNameBuffer))); | |||
| 44 | if (engineConfiguration->map.sensor.type == MT_CUSTOM) { | |||
| 45 | efiPrintf("at %.2fv=%.2f at %.2fv=%.2f", | |||
| 46 | engineConfiguration->mapLowValueVoltage, | |||
| 47 | engineConfiguration->map.sensor.lowValue, | |||
| 48 | engineConfiguration->mapHighValueVoltage, | |||
| 49 | engineConfiguration->map.sensor.highValue); | |||
| 50 | } | |||
| 51 | ||||
| 52 | if (Sensor::hasSensor(SensorType::BarometricPressure)) { | |||
| 53 | efiPrintf("baro type=%d value=%.2f", engineConfiguration->baroSensor.type, Sensor::get(SensorType::BarometricPressure).value_or(-1)); | |||
| 54 | if (engineConfiguration->baroSensor.type == MT_CUSTOM) { | |||
| 55 | efiPrintf("min=%.2f@%.2f max=%.2f@%.2f", | |||
| 56 | engineConfiguration->baroSensor.lowValue, | |||
| 57 | engineConfiguration->mapLowValueVoltage, | |||
| 58 | engineConfiguration->baroSensor.highValue, | |||
| 59 | engineConfiguration->mapHighValueVoltage); | |||
| 60 | } | |||
| 61 | } | |||
| 62 | #endif /* EFI_ANALOG_SENSORS */ | |||
| 63 | } | |||
| 64 | #endif /* EFI_PROD_CODE */ | |||
| 65 | ||||
| 66 | 585 | void initMapDecoder() { | ||
| 67 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 585 times.
|
1/2✗ Decision 'true' not taken.
✓ Decision 'false' taken 585 times.
|
585 | if (engineConfiguration->useFixedBaroCorrFromMap) { |
| 68 | // Read initial MAP sensor value and store it for Baro correction. | |||
| 69 | ✗ | float storedInitialBaroPressure = Sensor::get(SensorType::MapSlow).value_or(STD_ATMOSPHERE); | ||
| 70 | ✗ | efiPrintf("Get initial baro MAP pressure = %.2fkPa", storedInitialBaroPressure); | ||
| 71 | // validate if it's within a reasonable range (the engine should not be spinning etc.) | |||
| 72 | ✗ | storedInitialBaroPressure = validateBaroMap(storedInitialBaroPressure); | ||
| 73 | ✗ | if (!std::isnan(storedInitialBaroPressure)) { | ||
| 74 | ✗ | efiPrintf("Using this fixed MAP pressure to override the baro correction!"); | ||
| 75 | ||||
| 76 | // TODO: do literally anything other than this | |||
| 77 | ✗ | Sensor::setMockValue(SensorType::BarometricPressure, storedInitialBaroPressure); | ||
| 78 | } else { | |||
| 79 | ✗ | efiPrintf("The baro pressure is invalid. The fixed baro correction will be disabled!"); | ||
| 80 | } | |||
| 81 | } | |||
| 82 | ||||
| 83 | #if EFI_PROD_CODE | |||
| 84 | addConsoleAction("mapinfo", printMAPInfo); | |||
| 85 | #endif | |||
| 86 | 585 | } | ||
| 87 | ||||
| 88 | #else /* EFI_ANALOG_SENSORS */ | |||
| 89 | ||||
| 90 | void initMapDecoder() { | |||
| 91 | } | |||
| 92 | ||||
| 93 | #endif /* EFI_ANALOG_SENSORS */ | |||
| 94 |