Speeduino
Loading...
Searching...
No Matches
board_native.h
Go to the documentation of this file.
1#pragma once
2
3#if defined(NATIVE_BOARD)
4#include <stdint.h>
5#include <array>
6#include <limits>
7#include "../lib/ArduinoFake/SoftwareTimer.h"
8
9/*
10***********************************************************************************************************
11* General
12*/
13
18using COMPARE_TYPE = software_timer_t::counter_t;
19
21constexpr auto uS_TO_TIMER_COMPARE = software_timer_t::microsToTicks;
22
24constexpr auto ticksToMicros = software_timer_t::ticksToMicros;
25
26#define FPU_MAX_SIZE 32 //Size of the FPU buffer. 0 means no FPU.
27constexpr uint16_t BLOCKING_FACTOR = 121;
28constexpr uint16_t TABLE_BLOCKING_FACTOR = 64;
29#define IGN_CHANNELS 8
30#define INJ_CHANNELS 8
31#define TS_SERIAL_BUFFER_SIZE 517 //Size of the serial buffer used by new comms protocol. For SD transfers this must be at least 512 + 1 (flag) + 4 (sector)
32
33#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
34#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
35
36static inline bool pinIsReserved(uint8_t pin) { return pin==0U; } //Forbidden pins like USB on other boards
37
38#if false
39static constexpr uint8_t A0 = 0U;
40static constexpr uint8_t A1 = 0U;
41static constexpr uint8_t A2 = 0U;
42static constexpr uint8_t A3 = 0U;
43static constexpr uint8_t A5 = 0U;
44static constexpr uint8_t A6 = 0U;
45static constexpr uint8_t A7 = 0U;
46#endif
47static constexpr uint8_t A8 = 0U;
48static constexpr uint8_t A9 = 0U;
49static constexpr uint8_t A10 = 0U;
50static constexpr uint8_t A11 = 0U;
51static constexpr uint8_t A12 = 0U;
52static constexpr uint8_t A13 = 0U;
53static constexpr uint8_t A14 = 0U;
54static constexpr uint8_t A15 = 0U;
55
56#define PWM_FAN_AVAILABLE
57
58/*
59***********************************************************************************************************
60* Schedules
61*/
62#define DEFINE_TIMER_VARS(Prefix, index, array) \
63 static inline void Prefix##index##_TIMER_ENABLE(void) { array[index-1].enableTimer(); } \
64 static inline void Prefix##index##_TIMER_DISABLE(void) { array[index-1].disableTimer(); } \
65 static std::atomic<software_timer_t::counter_t>& Prefix##index##_COUNTER = array[index-1].counter; \
66 static std::atomic<software_timer_t::counter_t>& Prefix##index##_COMPARE = array[index-1].compare;
67
68extern std::array<software_timer_t, INJ_CHANNELS> fuelTimers;
69
70DEFINE_TIMER_VARS(FUEL, 1, fuelTimers)
71DEFINE_TIMER_VARS(FUEL, 2, fuelTimers)
72DEFINE_TIMER_VARS(FUEL, 3, fuelTimers)
73DEFINE_TIMER_VARS(FUEL, 4, fuelTimers)
74DEFINE_TIMER_VARS(FUEL, 5, fuelTimers)
75DEFINE_TIMER_VARS(FUEL, 6, fuelTimers)
76DEFINE_TIMER_VARS(FUEL, 7, fuelTimers)
77DEFINE_TIMER_VARS(FUEL, 8, fuelTimers)
78
79extern std::array<software_timer_t, IGN_CHANNELS> ignitionTimers;
80
81DEFINE_TIMER_VARS(IGN, 1, ignitionTimers)
82DEFINE_TIMER_VARS(IGN, 2, ignitionTimers)
83DEFINE_TIMER_VARS(IGN, 3, ignitionTimers)
84DEFINE_TIMER_VARS(IGN, 4, ignitionTimers)
85DEFINE_TIMER_VARS(IGN, 5, ignitionTimers)
86DEFINE_TIMER_VARS(IGN, 6, ignitionTimers)
87DEFINE_TIMER_VARS(IGN, 7, ignitionTimers)
88DEFINE_TIMER_VARS(IGN, 8, ignitionTimers)
89
90/*
91***********************************************************************************************************
92* Auxiliaries
93*/
94
95extern software_timer_t boostTimer;
96#define ENABLE_BOOST_TIMER() boostTimer.enableTimer()
97#define DISABLE_BOOST_TIMER() boostTimer.disableTimer()
98#define BOOST_TIMER_COMPARE boostTimer.compare
99#define BOOST_TIMER_COUNTER boostTimer.counter
100
101extern software_timer_t vvtTimer;
102#define ENABLE_VVT_TIMER() vvtTimer.enableTimer()
103#define DISABLE_VVT_TIMER() vvtTimer.disableTimer()
104#define VVT_TIMER_COMPARE vvtTimer.compare
105#define VVT_TIMER_COUNTER vvtTimer.counter
106
107extern software_timer_t fanTimer;
108#define ENABLE_FAN_TIMER() fanTimer.enableTimer()
109#define DISABLE_FAN_TIMER() fanTimer.disableTimer()
110#define FAN_TIMER_COMPARE fanTimer.compare
111#define FAN_TIMER_COUNTER fanTimer.counter
112
113/*
114***********************************************************************************************************
115* Idle
116*/
117extern software_timer_t idleTimer;
118#define IDLE_TIMER_ENABLE() idleTimer.enableTimer()
119#define IDLE_TIMER_DISABLE() idleTimer.disableTimer()
120#define IDLE_COUNTER idleTimer.counter
121#define IDLE_COMPARE idleTimer.compare
122
123#define ATOMIC() \
124 for ( \
125 struct { TickEventGuard guard; uint8_t done = 1; } loopGuard; \
126 loopGuard.done; loopGuard.done = 0U )
127
128#if !defined(max)
129template<typename _Tp>
130constexpr const _Tp& max(const _Tp& __a, const _Tp& __b) {
131 if (__b > __a) {
132 return __b;
133 }
134 return __a;
135}
136#endif
137#if !defined(min)
138template<typename _Tp>
139constexpr const _Tp& min(const _Tp& __a, const _Tp& __b) {
140 if (__b < __a) {
141 return __b;
142 }
143 return __a;
144}
145#endif
146
147/*
148***********************************************************************************************************
149* CAN / Second serial
150*/
151#define SECONDARY_SERIAL_T decltype(Serial)
152
153#define RTC_LIB_H <time.h>
154#define EEPROM_LIB_H <EEPROM.h>
155class EEPROMClass;
156using EEPROM_t = EEPROMClass;
157
158#endif // NATIVE_BOARD
EEPROMClass EEPROM_t
Definition board_avr2560.h:63
uint16_t COMPARE_TYPE
The timer overflow type.
Definition board_avr2560.h:33
static bool pinIsReserved(uint8_t pin)
Definition board_avr2560.h:72
constexpr uint16_t BLOCKING_FACTOR
Definition board_avr2560.h:70
static constexpr uint32_t ticksToMicros(COMPARE_TYPE ticks)
Convert timer ticks to µS.
Definition board_avr2560.h:49
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_avr2560.h:71
static constexpr COMPARE_TYPE uS_TO_TIMER_COMPARE(uint32_t micros)
Convert µS to timer ticks.
Definition board_avr2560.h:41