GCC Code Coverage Report


Directory: ./
File: firmware/controllers/algo/dynoview.h
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 9 0 9
Functions: 100.0% 2 0 2
Branches: 100.0% 4 0 4
Decisions: 100.0% 4 - 4

Line Branch Decision Exec Source
1 /*
2 * @file dynoview.h
3 *
4 * @date Jan 05, 2025
5 * @author Alexey Ershov, (c) 2012-2025
6 */
7
8 #pragma once
9
10 void updateDynoView();
11 int getDynoviewHP();
12 int getDynoviewTorque();
13
14 struct DynoPoint {
15 int rpm;
16 float time;
17 float tps;
18
19 float engineRps;
20 float axleRps;
21 float vMs;
22 float mph;
23 float distanceM;
24 float aMs2;
25 float forceN;
26 float forceDragN;
27 float forceTotalN;
28 float torqueWheelNm;
29 float torqueNm;
30 float torqueLbFt;
31 float hp;
32 };
33
34 class DynoView {
35 public:
36
37 void init();
38 void update();
39 bool onRpm(int rpm, float time, float tps);
40
41 float currentTorque;
42 float currentHP;
43
44 private:
45
46 void reset();
47
48 442 static inline void move(uint8_t size, float* data) {
49
2/2
✓ Branch 0 taken 3138 times.
✓ Branch 1 taken 442 times.
2/2
✓ Decision 'true' taken 3138 times.
✓ Decision 'false' taken 442 times.
3580 for(int i = size - 1; i > 0; --i)
50 {
51 3138 memcpy(&data[i], &data[i - 1], sizeof(float));
52 }
53 442 }
54
55 442 static inline float accumulate_window(uint8_t size, const float* data)
56 {
57 442 float sum = 0.0;
58
59
2/2
✓ Branch 0 taken 3232 times.
✓ Branch 1 taken 442 times.
2/2
✓ Decision 'true' taken 3232 times.
✓ Decision 'false' taken 442 times.
3674 for(int i = 0; i < size; ++i) {
60 3232 sum += data[size - i - 1];
61 }
62
63 442 return sum / (float)size;
64 }
65
66 float airDensityKgM3 = 1.225; // 15C
67 uint16_t wheelOverallDiameterMm = 0;
68
69 // SAE corrections
70 float saeBaroCorrectionFactor;
71 float saeBaroMmhg;
72 float saeTempCorrectionFactor;
73 float saeVaporPressure;
74 float saeCorrectionFactor;
75
76 DynoPoint dynoViewPoint;
77 DynoPoint dynoViewPointPrev;
78
79 int count = 0;
80 int count_rpm = 0;
81 int prev_rpm = 0;
82
83 static constexpr int dyno_view_window_size = 7;
84 static constexpr int dyno_view_window_size_rpm = 10;
85 static constexpr int dyno_view_tps_min_for_run = 30;
86 static constexpr int dyno_view_rpm_diff_smooth = 30;
87 static constexpr float dyno_view_log_time_smooth_sec = 0.05f;
88 static constexpr int dyno_view_tps_diff_to_reset_run = 10;
89 static constexpr int dyno_view_rpm_fall_to_reset_run = 60;
90
91 float tail_hp[dyno_view_window_size];
92 float tail_torque[dyno_view_window_size];
93 float tail_rpm[dyno_view_window_size_rpm];
94
95 bool isInitialized = false;
96 };
97