33 #ifndef _IR_PROTOCOL_HPP
34 #define _IR_PROTOCOL_HPP
40 const char string_Unknown[]
PROGMEM =
"UNKNOWN";
41 const char string_PulseWidth[]
PROGMEM =
"PulseWidth";
42 const char string_PulseDistance[]
PROGMEM =
"PulseDistance";
43 const char string_Apple[]
PROGMEM =
"Apple";
44 const char string_Denon[]
PROGMEM =
"Denon";
45 const char string_JVC[]
PROGMEM =
"JVC";
46 const char string_LG[]
PROGMEM =
"LG";
47 const char string_LG2[]
PROGMEM =
"LG2";
48 const char string_NEC[]
PROGMEM =
"NEC";
49 const char string_NEC2[]
PROGMEM =
"NEC2";
50 const char string_Onkyo[]
PROGMEM =
"Onkyo";
51 const char string_Panasonic[]
PROGMEM =
"Panasonic";
52 const char string_Kaseikyo[]
PROGMEM =
"Kaseikyo";
53 const char string_Kaseikyo_Denon[]
PROGMEM =
"Kaseikyo_Denon";
54 const char string_Kaseikyo_Sharp[]
PROGMEM =
"Kaseikyo_Sharp";
55 const char string_Kaseikyo_JVC[]
PROGMEM =
"Kaseikyo_JVC";
56 const char string_Kaseikyo_Mitsubishi[]
PROGMEM =
"Kaseikyo_Mitsubishi";
57 const char string_RC5[]
PROGMEM =
"RC5";
58 const char string_RC6[]
PROGMEM =
"RC6";
59 const char string_RC6A[]
PROGMEM =
"RC6A";
60 const char string_Samsung[]
PROGMEM =
"Samsung";
61 const char string_SamsungLG[]
PROGMEM =
"SamsungLG";
62 const char string_Samsung48[]
PROGMEM =
"Samsung48";
63 const char string_Sharp[]
PROGMEM =
"Sharp";
64 const char string_Sony[]
PROGMEM =
"Sony";
65 const char string_BangOlufsen[]
PROGMEM =
"Bang&Olufsen";
66 const char string_BoseWave[]
PROGMEM =
"BoseWave";
67 const char string_Lego[]
PROGMEM =
"Lego";
68 const char string_MagiQuest[]
PROGMEM =
"MagiQuest";
69 const char string_Whynter[]
PROGMEM =
"Whynter";
70 const char string_Marantz[]
PROGMEM =
"Marantz";
71 const char string_FAST[]
PROGMEM =
"FAST";
72 const char string_OpenLASIR[]
PROGMEM =
"OpenLASIR";
73 const char string_Other[]
PROGMEM =
"OTHER";
79 PROGMEM = { string_Unknown, string_PulseWidth, string_PulseDistance, string_Apple, string_Denon, string_JVC, string_LG, string_LG2,
80 string_NEC, string_NEC2, string_Onkyo, string_Panasonic, string_Kaseikyo, string_Kaseikyo_Denon, string_Kaseikyo_Sharp,
81 string_Kaseikyo_JVC, string_Kaseikyo_Mitsubishi, string_RC5, string_RC6, string_RC6A, string_Samsung, string_SamsungLG,
82 string_Samsung48, string_Sharp, string_Sony
83 #if !defined(EXCLUDE_EXOTIC_PROTOCOLS)
84 , string_BangOlufsen, string_BoseWave, string_Lego, string_MagiQuest, string_Whynter, string_Marantz, string_FAST,
85 string_OpenLASIR, string_Other
91 const char *tProtocolStringPtr = (
char*) pgm_read_word(&
ProtocolNames[aProtocol]);
92 return ((__FlashStringHelper*) (tProtocolStringPtr));
100 #if (__INT_WIDTH__ >= 32)
101 # if __has_include(<type_traits>)
106 #include <type_traits>
109 #if __cpp_lib_void_t >= 201411L
111 using void_t = std::void_t<T>;
113 template<
typename ... Ts>
struct make_void {
116 template<
typename ... Ts>
using void_t =
typename make_void<Ts...>::type;
120 template<
typename T,
typename =
void>
121 struct has_ull_print: std::false_type {
124 struct has_ull_print<T, void_t<decltype(std::declval<T>().print(0ull, 0))>> : std::true_type {
129 template<typename PrintImplType, typename std::enable_if<!has_ull_print<PrintImplType>::value,
bool>::type =
true>
130 size_t print(PrintImplType *p,
unsigned long long value,
int base) {
131 size_t tLength = p->print(
static_cast<uint32_t
>(value >> 32), base);
132 tLength += p->print(
static_cast<uint32_t
>(value), base);
135 template<typename PrintImplType, typename std::enable_if<!has_ull_print<PrintImplType>::value,
bool>::type =
true>
136 size_t println(PrintImplType *p,
unsigned long long value,
int base) {
137 size_t tLength = p->print(
static_cast<uint32_t
>(value >> 32), base);
138 tLength += p->println(
static_cast<uint32_t
>(value), base);
142 template<typename PrintImplType, typename std::enable_if<has_ull_print<PrintImplType>::value,
bool>::type =
true>
143 size_t print(PrintImplType *p,
unsigned long long value,
int base) {
144 return p->print(value, base);
146 template<typename PrintImplType, typename std::enable_if<has_ull_print<PrintImplType>::value,
bool>::type =
true>
147 size_t println(PrintImplType *p,
unsigned long long value,
int base) {
148 return p->println(value, base);
154 size_t print(Print *aSerial,
unsigned long long n,
int base) {
155 return aSerial->print(n, base);
157 size_t println(Print *aSerial,
unsigned long long n,
int base) {
158 return aSerial->println(n, base);
175 aValue = (aValue >> 4) | (aValue << 4);
177 aValue = ((aValue & 0xcc) >> 2) | ((aValue & 0x33) << 2);
179 aValue = ((aValue & 0xaa) >> 1) | ((aValue & 0x55) << 1);
196 #endif // _IR_PROTOCOL_HPP