rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Data Fields | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
DynoView Class Reference

#include <dynoview.h>

Collaboration diagram for DynoView:
Collaboration graph
[legend]

Public Member Functions

void init ()
 
void update ()
 
bool onRpm (int rpm, float time, float tps)
 

Data Fields

float currentTorque
 
float currentHP
 

Private Member Functions

void reset ()
 

Static Private Member Functions

static void move (uint8_t size, float *data)
 
static float accumulate_window (uint8_t size, const float *data)
 

Private Attributes

float airDensityKgM3 = 1.225
 
uint16_t wheelOverallDiameterMm = 0
 
float saeBaroCorrectionFactor
 
float saeBaroMmhg
 
float saeTempCorrectionFactor
 
float saeVaporPressure
 
float saeCorrectionFactor
 
DynoPoint dynoViewPoint
 
DynoPoint dynoViewPointPrev
 
int count = 0
 
int count_rpm = 0
 
int prev_rpm = 0
 
float tail_hp [dyno_view_window_size]
 
float tail_torque [dyno_view_window_size]
 
float tail_rpm [dyno_view_window_size_rpm]
 
bool isInitialized = false
 

Static Private Attributes

static constexpr int dyno_view_window_size = 7
 
static constexpr int dyno_view_window_size_rpm = 10
 
static constexpr int dyno_view_tps_min_for_run = 30
 
static constexpr int dyno_view_rpm_diff_smooth = 30
 
static constexpr float dyno_view_log_time_smooth_sec = 0.05f
 
static constexpr int dyno_view_tps_diff_to_reset_run = 10
 
static constexpr int dyno_view_rpm_fall_to_reset_run = 60
 

Detailed Description

Definition at line 34 of file dynoview.h.

Member Function Documentation

◆ accumulate_window()

static float DynoView::accumulate_window ( uint8_t  size,
const float data 
)
inlinestaticprivate

Definition at line 55 of file dynoview.h.

56 {
57 float sum = 0.0;
58
59 for(int i = 0; i < size; ++i) {
60 sum += data[size - i - 1];
61 }
62
63 return sum / (float)size;
64 }
composite packet size

Referenced by onRpm().

Here is the caller graph for this function:

◆ init()

void DynoView::init ( )

Definition at line 14 of file dynoview.cpp.

15{
16 if (isInitialized) {
17 return;
18 }
19 isInitialized = true;
20
21 //config->dynoSaeBaro = Sensor::get(SensorType::BarometricPressure).value_or(config->dynoSaeBaro);
22
24
25 saeVaporPressure = 6.1078f * pow(10.0f, (7.5f * (float)config->dynoSaeTemperatureC) / (237.3f + (float)config->dynoSaeTemperatureC)) * .02953f * ((float)config->dynoSaeRelativeHumidity / 100.0f);
26 saeBaroMmhg = 29.23f * (config->dynoSaeBaro / 100.0f);
28 saeTempCorrectionFactor = pow((((float)config->dynoSaeTemperatureC + C_K_OFFSET) / 298.0f), 0.5f);
30
31 reset();
32}
float saeCorrectionFactor
Definition dynoview.h:74
float saeBaroMmhg
Definition dynoview.h:71
uint16_t wheelOverallDiameterMm
Definition dynoview.h:67
void reset()
Definition dynoview.cpp:52
float saeTempCorrectionFactor
Definition dynoview.h:72
bool isInitialized
Definition dynoview.h:95
float saeBaroCorrectionFactor
Definition dynoview.h:70
float saeVaporPressure
Definition dynoview.h:73
static constexpr persistent_config_s * config

Referenced by update().

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

◆ move()

static void DynoView::move ( uint8_t  size,
float data 
)
inlinestaticprivate

Definition at line 48 of file dynoview.h.

48 {
49 for(int i = size - 1; i > 0; --i)
50 {
51 memcpy(&data[i], &data[i - 1], sizeof(float));
52 }
53 }

Referenced by onRpm().

Here is the caller graph for this function:

◆ onRpm()

bool DynoView::onRpm ( int  rpm,
float  time,
float  tps 
)

Definition at line 63 of file dynoview.cpp.

64{
65 if(tps < dyno_view_tps_min_for_run || dynoViewPointPrev.tps - tps > dyno_view_tps_diff_to_reset_run) {
66 reset();
67 return false;
68 }
69
71 {
72 if(abs(rpm - prev_rpm) < 1) {
73 return false;
74 }
75 prev_rpm = rpm;
76
77 // more smoothly
79 {
80 return false;
81 }
82
83 int rpmDiffSmooth = abs(rpm - dynoViewPointPrev.rpm);
84
85 if(rpmDiffSmooth < dyno_view_rpm_diff_smooth) {
86 return false;
87 }
88
90 tail_rpm[0] = rpm;
91
92 count_rpm++;
93 int accumulate_window_size = std::min(count_rpm, dyno_view_window_size_rpm);
94 dynoViewPoint.rpm = (int)accumulate_window(accumulate_window_size, tail_rpm);
95
97 {
98 reset();
99 return false;
100 }
101
102 int rpmDiffStep = abs(dynoViewPoint.rpm - dynoViewPointPrev.rpm);
103
104 if (rpmDiffStep < config->dynoRpmStep)
105 {
106 return false;
107 }
108
109 } else {
110 dynoViewPoint.rpm = rpm;
111 }
112
113 //dynoViewPoint.rpm = rpm;
114 dynoViewPoint.time = time;
115 dynoViewPoint.tps = tps;
116
120 dynoViewPoint.mph = dynoViewPoint.vMs * 2.2369363;
121
123 {
126 if(dynoViewPoint.aMs2 < 0) {
128 }
131
133
139
142
145
147 ++count;
148 }
149
150 int accumulate_window_size = std::min(count, dyno_view_window_size);
151
152 currentTorque = accumulate_window(accumulate_window_size, tail_torque);
153 currentHP = accumulate_window(accumulate_window_size, tail_hp);
154
156 return true;
157 }
158
160
161 return false;
162}
float currentHP
Definition dynoview.h:42
int count_rpm
Definition dynoview.h:80
int count
Definition dynoview.h:79
DynoPoint dynoViewPointPrev
Definition dynoview.h:77
float tail_torque[dyno_view_window_size]
Definition dynoview.h:92
static constexpr int dyno_view_window_size_rpm
Definition dynoview.h:84
static constexpr float dyno_view_log_time_smooth_sec
Definition dynoview.h:87
static constexpr int dyno_view_rpm_diff_smooth
Definition dynoview.h:86
float airDensityKgM3
Definition dynoview.h:66
float currentTorque
Definition dynoview.h:41
DynoPoint dynoViewPoint
Definition dynoview.h:76
static void move(uint8_t size, float *data)
Definition dynoview.h:48
float tail_hp[dyno_view_window_size]
Definition dynoview.h:91
static constexpr int dyno_view_window_size
Definition dynoview.h:83
static constexpr int dyno_view_tps_diff_to_reset_run
Definition dynoview.h:88
static constexpr int dyno_view_rpm_fall_to_reset_run
Definition dynoview.h:89
int prev_rpm
Definition dynoview.h:81
static float accumulate_window(uint8_t size, const float *data)
Definition dynoview.h:55
float tail_rpm[dyno_view_window_size_rpm]
Definition dynoview.h:93
float tps
Definition dynoview.h:17
float torqueWheelNm
Definition dynoview.h:28
float torqueNm
Definition dynoview.h:29
float engineRps
Definition dynoview.h:19
float forceDragN
Definition dynoview.h:26
float aMs2
Definition dynoview.h:24
int rpm
Definition dynoview.h:15
float distanceM
Definition dynoview.h:23
float vMs
Definition dynoview.h:21
float hp
Definition dynoview.h:31
float mph
Definition dynoview.h:22
float torqueLbFt
Definition dynoview.h:30
float forceTotalN
Definition dynoview.h:27
float time
Definition dynoview.h:16
float axleRps
Definition dynoview.h:20
float forceN
Definition dynoview.h:25

Referenced by update().

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

◆ reset()

void DynoView::reset ( )
private

Definition at line 52 of file dynoview.cpp.

53{
57 count = 0;
58 count_rpm = 0;
59 currentTorque = 0;
60 currentHP = 0;
61}

Referenced by init(), and onRpm().

Here is the caller graph for this function:

◆ update()

void DynoView::update ( )

Definition at line 34 of file dynoview.cpp.

35{
36 init();
37
39 rpm = efiRound(rpm, 1.0);
40 int intRpm = (int)rpm;
41
43
44 if(intRpm > 0) {
45 efitimeus_t timeStamp = getTimeNowUs();
46 float timeInSec = (float)(timeStamp) / US_PER_SECOND;
47
48 onRpm(intRpm, timeInSec, tps);
49 }
50}
bool onRpm(int rpm, float time, float tps)
Definition dynoview.cpp:63
void init()
Definition dynoview.cpp:14
static float getOrZero(SensorType type)
Definition sensor.h:83
float efiRound(float value, float precision)
Definition efilib.cpp:34
efitimeus_t getTimeNowUs()
Definition efitime.cpp:26

Referenced by updateDynoView().

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

Field Documentation

◆ airDensityKgM3

float DynoView::airDensityKgM3 = 1.225
private

Definition at line 66 of file dynoview.h.

Referenced by onRpm().

◆ count

int DynoView::count = 0
private

Definition at line 79 of file dynoview.h.

Referenced by onRpm(), and reset().

◆ count_rpm

int DynoView::count_rpm = 0
private

Definition at line 80 of file dynoview.h.

Referenced by onRpm(), and reset().

◆ currentHP

float DynoView::currentHP

Definition at line 42 of file dynoview.h.

Referenced by getDynoviewHP(), onRpm(), and reset().

◆ currentTorque

float DynoView::currentTorque

Definition at line 41 of file dynoview.h.

Referenced by getDynoviewTorque(), onRpm(), and reset().

◆ dyno_view_log_time_smooth_sec

constexpr float DynoView::dyno_view_log_time_smooth_sec = 0.05f
staticconstexprprivate

Definition at line 87 of file dynoview.h.

Referenced by onRpm().

◆ dyno_view_rpm_diff_smooth

constexpr int DynoView::dyno_view_rpm_diff_smooth = 30
staticconstexprprivate

Definition at line 86 of file dynoview.h.

Referenced by onRpm().

◆ dyno_view_rpm_fall_to_reset_run

constexpr int DynoView::dyno_view_rpm_fall_to_reset_run = 60
staticconstexprprivate

Definition at line 89 of file dynoview.h.

Referenced by onRpm().

◆ dyno_view_tps_diff_to_reset_run

constexpr int DynoView::dyno_view_tps_diff_to_reset_run = 10
staticconstexprprivate

Definition at line 88 of file dynoview.h.

Referenced by onRpm().

◆ dyno_view_tps_min_for_run

constexpr int DynoView::dyno_view_tps_min_for_run = 30
staticconstexprprivate

Definition at line 85 of file dynoview.h.

◆ dyno_view_window_size

constexpr int DynoView::dyno_view_window_size = 7
staticconstexprprivate

Definition at line 83 of file dynoview.h.

Referenced by onRpm().

◆ dyno_view_window_size_rpm

constexpr int DynoView::dyno_view_window_size_rpm = 10
staticconstexprprivate

Definition at line 84 of file dynoview.h.

Referenced by onRpm().

◆ dynoViewPoint

DynoPoint DynoView::dynoViewPoint
private

Definition at line 76 of file dynoview.h.

Referenced by onRpm().

◆ dynoViewPointPrev

DynoPoint DynoView::dynoViewPointPrev
private

Definition at line 77 of file dynoview.h.

Referenced by onRpm(), and reset().

◆ isInitialized

bool DynoView::isInitialized = false
private

Definition at line 95 of file dynoview.h.

Referenced by init().

◆ prev_rpm

int DynoView::prev_rpm = 0
private

Definition at line 81 of file dynoview.h.

Referenced by onRpm().

◆ saeBaroCorrectionFactor

float DynoView::saeBaroCorrectionFactor
private

Definition at line 70 of file dynoview.h.

Referenced by init().

◆ saeBaroMmhg

float DynoView::saeBaroMmhg
private

Definition at line 71 of file dynoview.h.

Referenced by init().

◆ saeCorrectionFactor

float DynoView::saeCorrectionFactor
private

Definition at line 74 of file dynoview.h.

Referenced by init(), and onRpm().

◆ saeTempCorrectionFactor

float DynoView::saeTempCorrectionFactor
private

Definition at line 72 of file dynoview.h.

Referenced by init().

◆ saeVaporPressure

float DynoView::saeVaporPressure
private

Definition at line 73 of file dynoview.h.

Referenced by init().

◆ tail_hp

float DynoView::tail_hp[dyno_view_window_size]
private

Definition at line 91 of file dynoview.h.

Referenced by onRpm().

◆ tail_rpm

float DynoView::tail_rpm[dyno_view_window_size_rpm]
private

Definition at line 93 of file dynoview.h.

Referenced by onRpm().

◆ tail_torque

float DynoView::tail_torque[dyno_view_window_size]
private

Definition at line 92 of file dynoview.h.

Referenced by onRpm().

◆ wheelOverallDiameterMm

uint16_t DynoView::wheelOverallDiameterMm = 0
private

Definition at line 67 of file dynoview.h.

Referenced by init(), and onRpm().


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