Control Surface pin-t-adl
MIDI Control Surface library for Arduino
Hardware-Types.hpp
Go to the documentation of this file.
1/* ✔ */
2
3#pragma once
4
6AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
7
8#include <AH/Containers/Array.hpp>
10#include <AH/STL/limits>
12#include <stdint.h> // uint8_t
13
15
17using analog_t = uint16_t;
18
19namespace ExtIO {
21struct pin_t {
23 constexpr pin_t() = default;
25 constexpr pin_t(uint16_t pin) : pin(pin) {}
26
28 uint16_t pin = (std::numeric_limits<decltype(pin)>::max() >> 1) + 1;
29
30 static_assert(std::is_unsigned<decltype(pin)>::value,
31 "Error: pin_t should be an unsigned integer type");
32
34 this->pin += b.pin;
35 return *this;
36 }
38 ++pin;
39 return *this;
40 }
42 pin_t t = *this;
43 ++pin;
44 return t;
45 }
46
48 this->pin -= b.pin;
49 return *this;
50 }
52 --pin;
53 return *this;
54 }
56 pin_t t = *this;
57 --pin;
58 return t;
59 }
60};
61constexpr inline bool operator==(pin_t a, pin_t b) { return a.pin == b.pin; }
62constexpr inline bool operator<(pin_t a, pin_t b) { return a.pin < b.pin; }
63constexpr inline bool operator<=(pin_t a, pin_t b) { return a.pin <= b.pin; }
64constexpr inline bool operator>(pin_t a, pin_t b) { return a.pin > b.pin; }
65constexpr inline bool operator>=(pin_t a, pin_t b) { return a.pin >= b.pin; }
66constexpr inline bool operator!=(pin_t a, pin_t b) { return !(a == b); }
67constexpr inline pin_t operator-(pin_t a, pin_t b) { return a.pin - b.pin; }
68constexpr inline pin_t operator+(pin_t a, pin_t b) { return a.pin + b.pin; }
69constexpr inline pin_t operator*(pin_t a, pin_t b) { return a.pin * b.pin; }
70inline Print &operator<<(Print &os, pin_t p) {
71 using AH::operator<<;
72 return os << +p.pin;
73}
74#ifndef ARDUINO
75inline std::ostream &operator<<(std::ostream &os, pin_t p) {
76 return os << +p.pin;
77}
78#endif
79} // namespace ExtIO
80
82using ExtIO::pin_t;
83
84#ifdef NO_PIN // Fix for FastLED: https://github.com/FastLED/FastLED/issues/893
85#undef NO_PIN
86#endif
87
89constexpr pin_t NO_PIN{};
90
92template <size_t N>
94
96
#define END_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:36
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:35
constexpr auto max(const T &a, const U &b) -> decltype(a< b ? b :a)
Return the larger of two numbers/objects.
Definition: MinMaxFix.hpp:22
Print & operator<<(Print &os, pin_t p)
constexpr bool operator<(pin_t a, pin_t b)
constexpr pin_t operator*(pin_t a, pin_t b)
constexpr pin_t operator+(pin_t a, pin_t b)
constexpr bool operator==(pin_t a, pin_t b)
constexpr bool operator<=(pin_t a, pin_t b)
constexpr bool operator!=(pin_t a, pin_t b)
constexpr bool operator>(pin_t a, pin_t b)
constexpr bool operator>=(pin_t a, pin_t b)
constexpr pin_t operator-(pin_t a, pin_t b)
uint16_t analog_t
The type returned from analogRead and similar functions.
constexpr pin_t NO_PIN
A special pin number that indicates an unused or invalid pin.
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
Type for storing pin numbers of Extended Input/Output elements.
pin_t operator++(int)
constexpr pin_t()=default
Default constructor (NO_PIN).
uint16_t pin
The actual underlying pin number.
pin_t & operator-=(pin_t b)
constexpr pin_t(uint16_t pin)
Constructor from integer.
pin_t & operator+=(pin_t b)
pin_t operator--(int)