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 "../lib/ArduinoFake/SoftwareTimer.h"
7
8/*
9***********************************************************************************************************
10* General
11*/
12using COMPARE_TYPE = software_timer_t::counter_t;
13#define FPU_MAX_SIZE 32 //Size of the FPU buffer. 0 means no FPU.
14constexpr uint16_t BLOCKING_FACTOR = 121;
15constexpr uint16_t TABLE_BLOCKING_FACTOR = 64;
16#define IGN_CHANNELS 8
17#define INJ_CHANNELS 8
18#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)
19
20#define BOARD_MAX_DIGITAL_PINS NUM_DIGITAL_PINS
21#define BOARD_MAX_IO_PINS NUM_DIGITAL_PINS
22
23static inline bool pinIsReserved(uint8_t pin) { return pin==0U; } //Forbidden pins like USB on other boards
24
25#if false
26static constexpr uint8_t A0 = 0U;
27static constexpr uint8_t A1 = 0U;
28static constexpr uint8_t A2 = 0U;
29static constexpr uint8_t A3 = 0U;
30static constexpr uint8_t A5 = 0U;
31static constexpr uint8_t A6 = 0U;
32static constexpr uint8_t A7 = 0U;
33#endif
34static constexpr uint8_t A8 = 0U;
35static constexpr uint8_t A9 = 0U;
36static constexpr uint8_t A10 = 0U;
37static constexpr uint8_t A11 = 0U;
38static constexpr uint8_t A12 = 0U;
39static constexpr uint8_t A13 = 0U;
40static constexpr uint8_t A14 = 0U;
41static constexpr uint8_t A15 = 0U;
42
43#define PWM_FAN_AVAILABLE
44
45/*
46***********************************************************************************************************
47* Schedules
48*/
49#define MAX_TIMER_PERIOD (UINT32_MAX/1000UL) //The longest period of time (in uS) that the timer can permit
50#define uS_TO_TIMER_COMPARE(uS1) ((uS1) / 1000U) //Converts a given number of uS into the required number of timer ticks until that time has passed
51
52#define DEFINE_TIMER_VARS(Prefix, index, array) \
53 static inline void Prefix##index##_TIMER_ENABLE(void) { array[index-1].enableTimer(); } \
54 static inline void Prefix##index##_TIMER_DISABLE(void) { array[index-1].disableTimer(); } \
55 static std::atomic<software_timer_t::counter_t>& Prefix##index##_COUNTER = array[index-1].counter; \
56 static std::atomic<software_timer_t::counter_t>& Prefix##index##_COMPARE = array[index-1].compare;
57
58extern std::array<software_timer_t, INJ_CHANNELS> fuelTimers;
59
60DEFINE_TIMER_VARS(FUEL, 1, fuelTimers)
61DEFINE_TIMER_VARS(FUEL, 2, fuelTimers)
62DEFINE_TIMER_VARS(FUEL, 3, fuelTimers)
63DEFINE_TIMER_VARS(FUEL, 4, fuelTimers)
64DEFINE_TIMER_VARS(FUEL, 5, fuelTimers)
65DEFINE_TIMER_VARS(FUEL, 6, fuelTimers)
66DEFINE_TIMER_VARS(FUEL, 7, fuelTimers)
67DEFINE_TIMER_VARS(FUEL, 8, fuelTimers)
68
69extern std::array<software_timer_t, IGN_CHANNELS> ignitionTimers;
70
71DEFINE_TIMER_VARS(IGN, 1, ignitionTimers)
72DEFINE_TIMER_VARS(IGN, 2, ignitionTimers)
73DEFINE_TIMER_VARS(IGN, 3, ignitionTimers)
74DEFINE_TIMER_VARS(IGN, 4, ignitionTimers)
75DEFINE_TIMER_VARS(IGN, 5, ignitionTimers)
76DEFINE_TIMER_VARS(IGN, 6, ignitionTimers)
77DEFINE_TIMER_VARS(IGN, 7, ignitionTimers)
78DEFINE_TIMER_VARS(IGN, 8, ignitionTimers)
79
80/*
81***********************************************************************************************************
82* Auxiliaries
83*/
84
85extern software_timer_t boostTimer;
86#define ENABLE_BOOST_TIMER() boostTimer.enableTimer()
87#define DISABLE_BOOST_TIMER() boostTimer.disableTimer()
88#define BOOST_TIMER_COMPARE boostTimer.compare
89#define BOOST_TIMER_COUNTER boostTimer.counter
90
91extern software_timer_t vvtTimer;
92#define ENABLE_VVT_TIMER() vvtTimer.enableTimer()
93#define DISABLE_VVT_TIMER() vvtTimer.disableTimer()
94#define VVT_TIMER_COMPARE vvtTimer.compare
95#define VVT_TIMER_COUNTER vvtTimer.counter
96
97extern software_timer_t fanTimer;
98#define ENABLE_FAN_TIMER() fanTimer.enableTimer()
99#define DISABLE_FAN_TIMER() fanTimer.disableTimer()
100#define FAN_TIMER_COMPARE fanTimer.compare
101#define FAN_TIMER_COUNTER fanTimer.counter
102
103/*
104***********************************************************************************************************
105* Idle
106*/
107extern software_timer_t idleTimer;
108#define IDLE_TIMER_ENABLE() idleTimer.enableTimer()
109#define IDLE_TIMER_DISABLE() idleTimer.disableTimer()
110#define IDLE_COUNTER idleTimer.counter
111#define IDLE_COMPARE idleTimer.compare
112
113#define ATOMIC() // No atomic operations needed for this platform
114
115#if !defined(max)
116template<typename _Tp>
117constexpr const _Tp& max(const _Tp& __a, const _Tp& __b) {
118 if (__b > __a) {
119 return __b;
120 }
121 return __a;
122}
123#endif
124#if !defined(min)
125template<typename _Tp>
126constexpr const _Tp& min(const _Tp& __a, const _Tp& __b) {
127 if (__b < __a) {
128 return __b;
129 }
130 return __a;
131}
132#endif
133
134/*
135***********************************************************************************************************
136* CAN / Second serial
137*/
138#define SECONDARY_SERIAL_T decltype(Serial)
139
140#define RTC_LIB_H <time.h>
141#define EEPROM_LIB_H <EEPROM.h>
142using eeprom_address_t = uint16_t;
143
144
145#endif // NATIVE_BOARD
int eeprom_address_t
Definition board_avr2560.h:37
#define COMPARE_TYPE
Definition board_avr2560.h:29
static bool pinIsReserved(uint8_t pin)
Definition board_avr2560.h:46
constexpr uint16_t BLOCKING_FACTOR
Definition board_avr2560.h:44
constexpr uint16_t TABLE_BLOCKING_FACTOR
Definition board_avr2560.h:45