Speeduino
Loading...
Searching...
No Matches
auxiliaries.h
Go to the documentation of this file.
1#ifndef AUX_H
2#define AUX_H
3
4#include BOARD_H //Note that this is not a real file, it is defined in globals.h.
5
6#if defined(CORE_AVR)
7#include <util/atomic.h>
8#endif
9
10void initialiseAuxPWM(void);
11void boostControl(void);
12void boostDisable(void);
13void boostByGear(void);
14void vvtControl(void);
15void initialiseFan(void);
16void initialiseAirCon(void);
17void nitrousControl(void);
18void fanControl(void);
19void airConControl(void);
20bool READ_AIRCON_REQUEST(void);
21void wmiControl(void);
22
23#define SIMPLE_BOOST_P 1
24#define SIMPLE_BOOST_I 1
25#define SIMPLE_BOOST_D 1
26
27#if(defined(CORE_TEENSY) || defined(CORE_STM32))
28#define BOOST_PIN_LOW() (digitalWrite(pinBoost, LOW))
29#define BOOST_PIN_HIGH() (digitalWrite(pinBoost, HIGH))
30#define VVT1_PIN_LOW() (digitalWrite(pinVVT_1, LOW))
31#define VVT1_PIN_HIGH() (digitalWrite(pinVVT_1, HIGH))
32#define VVT2_PIN_LOW() (digitalWrite(pinVVT_2, LOW))
33#define VVT2_PIN_HIGH() (digitalWrite(pinVVT_2, HIGH))
34#define FAN_PIN_LOW() (digitalWrite(pinFan, LOW))
35#define FAN_PIN_HIGH() (digitalWrite(pinFan, HIGH))
36#define N2O_STAGE1_PIN_LOW() (digitalWrite(configPage10.n2o_stage1_pin, LOW))
37#define N2O_STAGE1_PIN_HIGH() (digitalWrite(configPage10.n2o_stage1_pin, HIGH))
38#define N2O_STAGE2_PIN_LOW() (digitalWrite(configPage10.n2o_stage2_pin, LOW))
39#define N2O_STAGE2_PIN_HIGH() (digitalWrite(configPage10.n2o_stage2_pin, HIGH))
40#define AIRCON_PIN_LOW() (digitalWrite(pinAirConComp, LOW))
41#define AIRCON_PIN_HIGH() (digitalWrite(pinAirConComp, HIGH))
42#define AIRCON_FAN_PIN_LOW() (digitalWrite(pinAirConFan, LOW))
43#define AIRCON_FAN_PIN_HIGH() (digitalWrite(pinAirConFan, HIGH))
44#define FUEL_PUMP_ON() (digitalWrite(pinFuelPump, HIGH))
45#define FUEL_PUMP_OFF() (digitalWrite(pinFuelPump, LOW))
46
47#define AIRCON_ON() { (((configPage15.airConCompPol==1)) ? AIRCON_PIN_LOW() : AIRCON_PIN_HIGH()); BIT_SET(currentStatus.airConStatus, BIT_AIRCON_COMPRESSOR); }
48#define AIRCON_OFF() { (((configPage15.airConCompPol==1)) ? AIRCON_PIN_HIGH() : AIRCON_PIN_LOW()); BIT_CLEAR(currentStatus.airConStatus, BIT_AIRCON_COMPRESSOR); }
49#define AIRCON_FAN_ON() { (((configPage15.airConFanPol==1)) ? AIRCON_FAN_PIN_LOW() : AIRCON_FAN_PIN_HIGH()); BIT_SET(currentStatus.airConStatus, BIT_AIRCON_FAN); }
50#define AIRCON_FAN_OFF() { (((configPage15.airConFanPol==1)) ? AIRCON_FAN_PIN_HIGH() : AIRCON_FAN_PIN_LOW()); BIT_CLEAR(currentStatus.airConStatus, BIT_AIRCON_FAN); }
51
52#define FAN_ON() { ((configPage6.fanInv) ? FAN_PIN_LOW() : FAN_PIN_HIGH()); }
53#define FAN_OFF() { ((configPage6.fanInv) ? FAN_PIN_HIGH() : FAN_PIN_LOW()); }
54#else
55#define BOOST_PIN_LOW() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *boost_pin_port &= ~(boost_pin_mask); }
56#define BOOST_PIN_HIGH() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *boost_pin_port |= (boost_pin_mask); }
57#define VVT1_PIN_LOW() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *vvt1_pin_port &= ~(vvt1_pin_mask); }
58#define VVT1_PIN_HIGH() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *vvt1_pin_port |= (vvt1_pin_mask); }
59#define VVT2_PIN_LOW() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *vvt2_pin_port &= ~(vvt2_pin_mask); }
60#define VVT2_PIN_HIGH() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *vvt2_pin_port |= (vvt2_pin_mask); }
61#define N2O_STAGE1_PIN_LOW() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *n2o_stage1_pin_port &= ~(n2o_stage1_pin_mask); }
62#define N2O_STAGE1_PIN_HIGH() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *n2o_stage1_pin_port |= (n2o_stage1_pin_mask); }
63#define N2O_STAGE2_PIN_LOW() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *n2o_stage2_pin_port &= ~(n2o_stage2_pin_mask); }
64#define N2O_STAGE2_PIN_HIGH() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *n2o_stage2_pin_port |= (n2o_stage2_pin_mask); }
65#define FUEL_PUMP_ON() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *pump_pin_port |= (pump_pin_mask); }
66#define FUEL_PUMP_OFF() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *pump_pin_port &= ~(pump_pin_mask); }
67
68//Note the below macros cannot use ATOMIC_BLOCK(ATOMIC_RESTORESTATE) as they are called from within ternary operators. The ATOMIC_BLOCK wrapped is instead placed around the ternary call below
69#define FAN_PIN_LOW() *fan_pin_port &= ~(fan_pin_mask)
70#define FAN_PIN_HIGH() *fan_pin_port |= (fan_pin_mask)
71#define AIRCON_PIN_LOW() *aircon_comp_pin_port &= ~(aircon_comp_pin_mask)
72#define AIRCON_PIN_HIGH() *aircon_comp_pin_port |= (aircon_comp_pin_mask)
73#define AIRCON_FAN_PIN_LOW() *aircon_fan_pin_port &= ~(aircon_fan_pin_mask)
74#define AIRCON_FAN_PIN_HIGH() *aircon_fan_pin_port |= (aircon_fan_pin_mask)
75
76#define AIRCON_ON() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ((((configPage15.airConCompPol)==1)) ? AIRCON_PIN_LOW() : AIRCON_PIN_HIGH()); BIT_SET(currentStatus.airConStatus, BIT_AIRCON_COMPRESSOR); }
77#define AIRCON_OFF() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ((((configPage15.airConCompPol)==1)) ? AIRCON_PIN_HIGH() : AIRCON_PIN_LOW()); BIT_CLEAR(currentStatus.airConStatus, BIT_AIRCON_COMPRESSOR); }
78#define AIRCON_FAN_ON() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ((((configPage15.airConFanPol)==1)) ? AIRCON_FAN_PIN_LOW() : AIRCON_FAN_PIN_HIGH()); BIT_SET(currentStatus.airConStatus, BIT_AIRCON_FAN); }
79#define AIRCON_FAN_OFF() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ((((configPage15.airConFanPol)==1)) ? AIRCON_FAN_PIN_HIGH() : AIRCON_FAN_PIN_LOW()); BIT_CLEAR(currentStatus.airConStatus, BIT_AIRCON_FAN); }
80
81#define FAN_ON() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ((configPage6.fanInv) ? FAN_PIN_LOW() : FAN_PIN_HIGH()); }
82#define FAN_OFF() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { ((configPage6.fanInv) ? FAN_PIN_HIGH() : FAN_PIN_LOW()); }
83#endif
84
85#define READ_N2O_ARM_PIN() ((*n2o_arming_pin_port & n2o_arming_pin_mask) ? true : false)
86
87
88#define VVT1_PIN_ON() VVT1_PIN_HIGH();
89#define VVT1_PIN_OFF() VVT1_PIN_LOW();
90#define VVT2_PIN_ON() VVT2_PIN_HIGH();
91#define VVT2_PIN_OFF() VVT2_PIN_LOW();
92#define VVT_TIME_DELAY_MULTIPLIER 50
93
94#define WMI_TANK_IS_EMPTY() ((configPage10.wmiEmptyEnabled) ? ((configPage10.wmiEmptyPolarity) ? digitalRead(pinWMIEmpty) : !digitalRead(pinWMIEmpty)) : 1)
95
96extern volatile PORT_TYPE *vvt1_pin_port;
97extern volatile PINMASK_TYPE vvt1_pin_mask;
98extern volatile PORT_TYPE *vvt2_pin_port;
99extern volatile PINMASK_TYPE vvt2_pin_mask;
100extern volatile PORT_TYPE *fan_pin_port;
101extern volatile PINMASK_TYPE fan_pin_mask;
102
103#if defined(PWM_FAN_AVAILABLE)//PWM fan not available on Arduino MEGA
104extern uint16_t fan_pwm_max_count; //Used for variable PWM frequency
105void fanInterrupt(void);
106#endif
107
108extern uint16_t vvt_pwm_max_count; //Used for variable PWM frequency
109extern uint16_t boost_pwm_max_count; //Used for variable PWM frequency
110
111void boostInterrupt(void);
112void vvtInterrupt(void);
113
114#endif
volatile PORT_TYPE * fan_pin_port
Definition auxiliaries.cpp:47
void initialiseAirCon(void)
Definition auxiliaries.cpp:88
void initialiseFan(void)
Definition auxiliaries.cpp:315
void vvtInterrupt(void)
Definition auxiliaries.cpp:1146
volatile PINMASK_TYPE vvt1_pin_mask
Definition auxiliaries.cpp:44
uint16_t vvt_pwm_max_count
Definition auxiliaries.cpp:72
void vvtControl(void)
Definition auxiliaries.cpp:779
volatile PINMASK_TYPE vvt2_pin_mask
Definition auxiliaries.cpp:46
void airConControl(void)
Definition auxiliaries.cpp:137
void boostControl(void)
Definition auxiliaries.cpp:682
volatile PORT_TYPE * vvt2_pin_port
Definition auxiliaries.cpp:45
void wmiControl(void)
Definition auxiliaries.cpp:1032
bool READ_AIRCON_REQUEST(void)
Definition auxiliaries.cpp:213
void fanControl(void)
Definition auxiliaries.cpp:335
volatile PINMASK_TYPE fan_pin_mask
Definition auxiliaries.cpp:48
volatile PORT_TYPE * vvt1_pin_port
Definition auxiliaries.cpp:43
void initialiseAuxPWM(void)
Definition auxiliaries.cpp:448
void nitrousControl(void)
Definition auxiliaries.cpp:975
uint16_t boost_pwm_max_count
Definition auxiliaries.cpp:73
void boostByGear(void)
Definition auxiliaries.cpp:542
void boostInterrupt(void)
Definition auxiliaries.cpp:1116
void boostDisable(void)
Definition auxiliaries.cpp:1104