Control Surface main
MIDI Control Surface library for Arduino
Loading...
Searching...
No Matches
Arduino-Hardware-Types.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <AH/Arduino-Wrapper.h> // pin functions and constants
7#include <AH/STL/type_traits>
8
9#if defined(BOARD_HAS_PIN_REMAP) && !defined(BOARD_USES_HW_GPIO_NUMBERS)
10#error \
11 "This library is not compatible with pin remapping. Please disable it by choosing "Tools > Pin Numbering > By GPIO number (legacy)" in the Arduino IDE. See https://github.com/espressif/arduino-esp32/issues/9150 for details"
12#endif
13
14#if defined(ARDUINO_API_VERSION)
15
16using ArduinoPin_t = pin_size_t;
17using PinStatus_t = PinStatus;
18using PinMode_t = PinMode;
19using BitOrder_t = BitOrder;
20
21#else // ARDUINO_API_VERSION
22
24 AH::function_traits<decltype(::digitalWrite)>::argument_t<0>;
26 AH::function_traits<decltype(::digitalWrite)>::argument_t<1>;
27using PinMode_t = AH::function_traits<decltype(::pinMode)>::argument_t<1>;
28
29#if defined(ARDUINO_ARCH_SAM) || defined(ARDUINO_ARCH_SAMD)
30using BitOrder_t = BitOrder;
31#else
32using BitOrder_t = uint8_t;
33#endif
34
35namespace AH_pin_detail {
36constexpr static auto tmp_HIGH = HIGH;
37constexpr static auto tmp_LOW = LOW;
38constexpr static auto tmp_INPUT = INPUT;
39constexpr static auto tmp_OUTPUT = OUTPUT;
40constexpr static auto tmp_INPUT_PULLUP = INPUT_PULLUP;
41} // namespace AH_pin_detail
42#ifdef HIGH
43#undef HIGH
44#define HIGH HIGH
45#endif
46#ifdef LOW
47#undef LOW
48#define LOW LOW
49#endif
50#ifdef INPUT
51#undef INPUT
52#define INPUT INPUT
53#endif
54#ifdef OUTPUT
55#undef OUTPUT
56#define OUTPUT OUTPUT
57#endif
58#ifdef INPUT_PULLUP
59#undef INPUT_PULLUP
60#define INPUT_PULLUP INPUT_PULLUP
61#endif
67
68#endif // ARDUINO_API_VERSION
69
71
72template <class T>
74 return static_cast<ArduinoPin_t>(t);
75}
76constexpr ArduinoPin_t arduino_pin_cast(pin_t t) { return t.pin; }
77#if (defined(NOT_AN_INTERRUPT) || defined(ARDUINO_API_VERSION)) && \
78 !defined(ARDUINO_ARCH_RENESAS)
79using not_an_interrupt_t = decltype(NOT_AN_INTERRUPT);
81using interrupt_t =
82 std::conditional<std::is_enum<not_an_interrupt_t>::value,
83 std::underlying_type<not_an_interrupt_t>,
84 type_identity<not_an_interrupt_t>>::type::type;
85#endif
86
#define END_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
constexpr PinStatus_t LOW
constexpr PinMode_t INPUT
AH::function_traits< decltype(::digitalWrite)>::argument_t< 1 > PinStatus_t
uint8_t BitOrder_t
constexpr PinStatus_t HIGH
AH::function_traits< decltype(::pinMode)>::argument_t< 1 > PinMode_t
constexpr PinMode_t INPUT_PULLUP
constexpr PinMode_t OUTPUT
AH::function_traits< decltype(::digitalWrite)>::argument_t< 0 > ArduinoPin_t
A class that reads and filters an analog input.
static constexpr auto tmp_INPUT
static constexpr auto tmp_HIGH
static constexpr auto tmp_OUTPUT
static constexpr auto tmp_LOW
static constexpr auto tmp_INPUT_PULLUP
constexpr ArduinoPin_t arduino_pin_cast(T t)
Type for storing pin numbers of Extended Input/Output elements.