-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFaultHandling.cpp
95 lines (82 loc) · 2.06 KB
/
FaultHandling.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "FaultHandling.h"
#include "Arduino.h"
Fault::Handler *Fault::Handler::inst = 0;
Fault::Handler *Fault::Handler::instance()
{
if (inst == 0) {
inst = new Handler();
}
return inst;
}
Fault::Handler::Handler()
{
for (int i = 0; i < ALL_OK; i++) {
faults[i] = false;
}
}
void Fault::Handler::setFaultCode(Type fault)
{
if (!this->faults[fault]) {
this->faults[fault] = true;
this->minorFaultState = 0;
this->lastTs = millis();
}
}
void Fault::Handler::unlatchFaultCode(Type fault)
{
this->faults[fault] = false;
}
void Fault::Handler::onFaultUnlatchEvent(FaultUnlatchEvent event)
{
bool *evtTriggers = k_faultUnlatchMapping[event];
for (int i = 0; i < RETRYABLE_END_SENTINEL - FATAL_END_SENTINEL; ++i) {
if (evtTriggers[i]) {
unlatchFaultCode(FATAL_END_SENTINEL + 1 + i);
}
}
}
bool Fault::Handler::hasFault(Type fault) { return this->faults[fault]; }
bool Fault::Handler::hasFaultOfType(Type start, Type end)
{
for (int i = start; i < end; i++) {
if (hasFault((Type)i)) {
return true;
}
}
return false;
}
int Fault::Handler::numFaults()
{
int count = 0;
for (int i = 0; i < ALL_OK; i++) {
if (faults[i] == true) {
count++;
}
}
return count;
}
int Fault::Handler::nextFault(Type start)
{
for (int i = start; i < ALL_OK; i++) {
if (faults[i] == true) {
return i;
}
}
return -1;
}
void Fault::Handler::printFaultReport()
{
Serial.println("FAULT REPORT:");
for (int i = ZERO + 1; i < FATAL_END_SENTINEL; i++) {
Serial.print("Fatal Fault #");
Serial.print(i);
Serial.print(": ");
Serial.println(faults[i]);
}
for (int i = FATAL_END_SENTINEL + 1; i < RETRYABLE_END_SENTINEL; i++) {
Serial.print("Recoverable Fault #");
Serial.print(i);
Serial.print(": ");
Serial.println(faults[i]);
}
}