Speeduino
Loading...
Searching...
No Matches
programmableIOControl_details.h
Go to the documentation of this file.
1
6#include <stdint.h>
7#include "../../../config_pages.h"
8#include "../../../preprocessor.h"
9
11{
12
13// Forward declares
14struct state_t;
15
16// Defined here for unit testing, but only used in programmableIOControl.cpp
17constexpr uint8_t COMPARATOR_EQUAL = 0;
18constexpr uint8_t COMPARATOR_NOT_EQUAL = 1;
19constexpr uint8_t COMPARATOR_GREATER = 2;
20constexpr uint8_t COMPARATOR_GREATER_EQUAL = 3;
21constexpr uint8_t COMPARATOR_LESS = 4;
22constexpr uint8_t COMPARATOR_LESS_EQUAL = 5;
23constexpr uint8_t COMPARATOR_AND = 6;
24constexpr uint8_t COMPARATOR_XOR = 7;
25
26constexpr uint8_t COMBINE_DISABLED = 0;
27constexpr uint8_t COMBINE_AND = 1;
28constexpr uint8_t COMBINE_OR = 2;
29constexpr uint8_t COMBINE_XOR = 3;
30
31constexpr uint8_t REUSE_RULES = 240;
32
33using getDataFn = int16_t (*)(uint16_t index);
34
36 uint8_t opType;
37 uint8_t dataIndex;
38 int16_t target;
39
40 bool isVirtualData() const {
41 return dataIndex >= REUSE_RULES;
42 }
43 bool evaluate(int16_t lhs, int16_t rhs) const;
44 int16_t getComparisonData(const state_t& state, getDataFn pGetData) const;
45 bool evaluate(const state_t& state, getDataFn pGetData) const;
46};
47
48enum class LimitingType : uint8_t {
49 Min = 0,
50 Max = 1,
51};
52
53// It's much easier to work with a struct that represents the rule in a more direct way, so we convert the config13 struct into this for processing
54// Ideally the tune would also be able to use this struct directly, but that would require some refactoring of how the config pages are stored and accessed,
55// so for now we keep using config13 for the tune and convert to programmableOutputRule for processing
56struct rule_t {
60
61 rule_t() = default;
62 rule_t(const config13& page13, uint8_t index)
63 : combineOpType(page13.operation[index].bitwise),
64 firstOp({page13.operation[index].firstCompType, page13.firstDataIn[index], page13.firstTarget[index]}),
65 secondOp({page13.operation[index].secondCompType, page13.secondDataIn[index], page13.secondTarget[index]})
66 {
67 }
68
69 bool evaluateCombineOp(bool lhs, bool rhs) const;
70 bool evaluate(const state_t& state, getDataFn pGetData) const;
71};
72
73// The struct representing the state of each programmable I/O channel, used for processing the
74// rules and keeping track of delays and active status.
76{
77 bool isRuleActive : 1;
79 uint8_t _index : 3;
81 uint8_t outputDelayCount = 0;
82
84 : isRuleActive(false), isOutputActive(false), _index(0U)
85 {}
86
87 void initialize(const config13& page13, uint8_t index);
88};
89
99{
101 uint8_t outputPin = 0;
102 bool isPinValid : 1;
105 uint8_t outputTimeLimit = 0;
106 uint8_t activationDelay = 0;
107
108 processing_channel_t(const config13 &page13, channel_state_t& channel_state);
109
110 bool isPhysicalPin(void) const {
111 return outputPin < 128U;
112 }
113
114 bool hasMaxLimit(void) const {
115 return (limitType==LimitingType::Max) && (outputTimeLimit != 0);
116 }
117
121
125
126 void incrementOutputDelay(void);
127
131};
132
133// The struct representing the current state of the programmable I/O system
140
141}
Definition programmableIOControl_details.cpp:5
constexpr uint8_t COMPARATOR_LESS_EQUAL
Definition programmableIOControl_details.h:22
constexpr uint8_t REUSE_RULES
Definition programmableIOControl_details.h:31
LimitingType
Definition programmableIOControl_details.h:48
constexpr uint8_t COMPARATOR_LESS
Definition programmableIOControl_details.h:21
constexpr uint8_t COMBINE_DISABLED
Definition programmableIOControl_details.h:26
constexpr uint8_t COMPARATOR_XOR
Definition programmableIOControl_details.h:24
constexpr uint8_t COMPARATOR_GREATER_EQUAL
Definition programmableIOControl_details.h:20
constexpr uint8_t COMBINE_XOR
Definition programmableIOControl_details.h:29
constexpr uint8_t COMBINE_AND
Definition programmableIOControl_details.h:27
constexpr uint8_t COMPARATOR_GREATER
Definition programmableIOControl_details.h:19
constexpr uint8_t COMPARATOR_NOT_EQUAL
Definition programmableIOControl_details.h:18
constexpr uint8_t COMBINE_OR
Definition programmableIOControl_details.h:28
constexpr uint8_t COMPARATOR_AND
Definition programmableIOControl_details.h:23
constexpr uint8_t COMPARATOR_EQUAL
Definition programmableIOControl_details.h:17
int16_t(*)(uint16_t index) getDataFn
Definition programmableIOControl_details.h:33
#define _countof(x)
Compile time calculation of an array size.
Definition preprocessor.h:22
TESTABLE_STATIC state_t state
Definition programmableIOControl.cpp:15
const config4 const config13 & page13
Definition scheduler_ignition_controller.cpp:657
Definition config_pages.h:845
uint8_t outputPin[8]
Disable(0) or enable (set to valid pin number) Programmable Pin (output/target pin to set)
Definition config_pages.h:848
Definition programmableIOControl_details.h:76
uint8_t activationDelayCount
Definition programmableIOControl_details.h:80
uint8_t _index
Definition programmableIOControl_details.h:79
bool isOutputActive
Definition programmableIOControl_details.h:78
bool isRuleActive
Definition programmableIOControl_details.h:77
void initialize(const config13 &page13, uint8_t index)
Definition programmableIOControl_details.cpp:7
uint8_t outputDelayCount
Definition programmableIOControl_details.h:81
channel_state_t()
Definition programmableIOControl_details.h:83
Definition programmableIOControl_details.h:35
bool isVirtualData() const
Definition programmableIOControl_details.h:40
bool evaluate(int16_t lhs, int16_t rhs) const
Definition programmableIOControl_details.cpp:90
int16_t getComparisonData(const state_t &state, getDataFn pGetData) const
Definition programmableIOControl_details.cpp:71
int16_t target
Definition programmableIOControl_details.h:38
uint8_t opType
Definition programmableIOControl_details.h:36
uint8_t dataIndex
Definition programmableIOControl_details.h:37
A struct that captures enough information to process a channel. Instances of this class are ephemeral...
Definition programmableIOControl_details.h:99
bool activationDelayExpired(void) const
Definition programmableIOControl_details.h:122
channel_state_t & _channel_state
Definition programmableIOControl_details.h:100
uint8_t outputTimeLimit
Output delay for each programmable I/O, kindOfLimiting bit dependent(Unit: 0.1S)
Definition programmableIOControl_details.h:105
bool outputDelayExpired(void) const
Definition programmableIOControl_details.h:118
uint8_t outputPin
Disable(0) or enable (set to valid pin number) Programmable Pin (output/target pin to set)
Definition programmableIOControl_details.h:101
uint8_t activationDelay
Output write delay for each programmable I/O (Unit: 0.1S)
Definition programmableIOControl_details.h:106
void incrementOutputDelay(void)
Definition programmableIOControl_details.cpp:41
LimitingType limitType
Select which kind of output limiting are active (0 - minimum | 1 - maximum)
Definition programmableIOControl_details.h:104
bool isPhysicalPin(void) const
Definition programmableIOControl_details.h:110
bool hasMaxLimit(void) const
Definition programmableIOControl_details.h:114
void incrementActivationDelay(void)
Definition programmableIOControl_details.h:128
bool isPinValid
Definition programmableIOControl_details.h:102
bool isOutputInverted
Invert (on/off) value before writing to output pin (for all programmable I/O:s).
Definition programmableIOControl_details.h:103
Definition programmableIOControl_details.h:56
bool evaluate(const state_t &state, getDataFn pGetData) const
Definition programmableIOControl_details.cpp:122
compOperation_t secondOp
Second operand for comparison, used if bitwise operation is enabled.
Definition programmableIOControl_details.h:59
compOperation_t firstOp
First operand for comparison.
Definition programmableIOControl_details.h:58
uint8_t combineOpType
Definition programmableIOControl_details.h:57
bool evaluateCombineOp(bool lhs, bool rhs) const
Definition programmableIOControl_details.cpp:112
rule_t(const config13 &page13, uint8_t index)
Definition programmableIOControl_details.h:62
Definition programmableIOControl_details.h:135
channel_state_t channels[_countof(config13::outputPin)]
Definition programmableIOControl_details.h:136
uint8_t compressedOutputStatus(void) const
Definition programmableIOControl_details.cpp:61