rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Static Public Member Functions
AdcSubscription Class Reference

#include <adc_subscription.h>

Static Public Member Functions

static AdcSubscriptionEntrySubscribeSensor (FunctionalSensorBase &sensor, adc_channel_e channel, float lowpassCutoffHZ, float voltsPerAdcVolt=0.0f)
 
static void UnsubscribeSensor (FunctionalSensorBase &sensor)
 
static void UnsubscribeSensor (FunctionalSensorBase &sensor, adc_channel_e newChannel)
 
static void UpdateSubscribers (efitick_t nowNt)
 
static void ResetFilters ()
 
static void PrintInfo ()
 

Detailed Description

Definition at line 21 of file adc_subscription.h.

Member Function Documentation

◆ PrintInfo()

void AdcSubscription::PrintInfo ( )
static

Definition at line 174 of file adc_subscription.cpp.

174 {
175 for (size_t i = 0; i < efi::size(s_entries); i++) {
176 auto& entry = s_entries[i];
177
178 if (!entry.Sensor) {
179 // Skip unconfigured entries
180 continue;
181 }
182
183 const auto name = entry.Sensor->getSensorName();
184 auto mcuVolts = adcGetRawVoltage("sensor", entry.Channel);
185 float sensorVolts = mcuVolts.value_or(0) * entry.VoltsPerAdcVolt;
186 auto channel = entry.Channel;
187
188 char pinNameBuffer[16];
189
190 efiPrintf(
191 "%s ADC%d m=%d %s adc=%.2f/input=%.2fv/divider=%.2f %s",
192 name,
193 channel,
194 (int)getAdcMode(channel),
195 getPinNameByAdcChannel(name, channel, pinNameBuffer, sizeof(pinNameBuffer)),
196 mcuVolts.value_or(0), sensorVolts, entry.VoltsPerAdcVolt,
197 mcuVolts ? "valid" : "INVALID"
198 );
199 }
200}
AdcChannelMode getAdcMode(adc_channel_e hwChannel)
expected< float > adcGetRawVoltage(const char *msg, adc_channel_e hwChannel)
uint16_t channel
Definition adc_inputs.h:104
static AdcSubscriptionEntry s_entries[16]
const char * getSensorName() const
Definition sensor.h:130
char * getPinNameByAdcChannel(const char *msg, adc_channel_e hwChannel, char *buffer, size_t bufferSize)
FunctionalSensorBase * Sensor

Referenced by printSensorInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetFilters()

void AdcSubscription::ResetFilters ( )
static

Definition at line 134 of file adc_subscription.cpp.

134 {
135 for (size_t i = 0; i < efi::size(s_entries); i++) {
136 auto &entry = s_entries[i];
137 entry.HasUpdated = false;
138 }
139}
bool HasUpdated

Referenced by setHellenEnValue().

Here is the caller graph for this function:

◆ SubscribeSensor()

AdcSubscriptionEntry * AdcSubscription::SubscribeSensor ( FunctionalSensorBase sensor,
adc_channel_e  channel,
float  lowpassCutoffHZ,
float  voltsPerAdcVolt = 0.0f 
)
static

TODO: this code is similar to initIfValid, what is the plan? shall we extract helper method or else?

Definition at line 7 of file adc_subscription.cpp.

7 {
8 return nullptr;
9}

Referenced by configureTempSensor(), initAuxSensors(), initFluidPressure(), initFuelLevel(), initMaf(), initMap(), initRangeSensors(), and initVbatt().

Here is the caller graph for this function:

◆ UnsubscribeSensor() [1/2]

void AdcSubscription::UnsubscribeSensor ( FunctionalSensorBase sensor)
static

Definition at line 11 of file adc_subscription.cpp.

11 {
12}

Referenced by deinitAuxSensors(), deinitFluidPressure(), deinitMap(), deinitThermistors(), and deinitVbatt().

Here is the caller graph for this function:

◆ UnsubscribeSensor() [2/2]

void AdcSubscription::UnsubscribeSensor ( FunctionalSensorBase sensor,
adc_channel_e  newChannel 
)
static

Definition at line 14 of file adc_subscription.cpp.

14 {
15}

◆ UpdateSubscribers()

void AdcSubscription::UpdateSubscribers ( efitick_t  nowNt)
static

Definition at line 141 of file adc_subscription.cpp.

141 {
143
144 for (size_t i = 0; i < efi::size(s_entries); i++) {
145 auto &entry = s_entries[i];
146
147 if (!entry.Sensor) {
148 // Skip unconfigured entries
149 continue;
150 }
151
152 auto mcuVolts = adcGetRawVoltage("sensor", entry.Channel);
153 if (mcuVolts) {
154 entry.sensorVolts = mcuVolts.value_or(0) * entry.VoltsPerAdcVolt;
155
156 // On the very first update, preload the filter as if we've been
157 // seeing this value for a long time. This prevents a slow ramp-up
158 // towards the correct value just after startup
159 if (!entry.HasUpdated) {
160 entry.Filter.cookSteadyState(entry.sensorVolts);
161 entry.HasUpdated = true;
162 }
163
164 float filtered = entry.Filter.filter(entry.sensorVolts);
165
166 entry.Sensor->postRawValue(filtered, nowNt);
167 } else {
168
169 }
170 }
171}
@ AdcSubscriptionUpdateSubscribers

Referenced by adcInputsUpdateSubscribers().

Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following files: