33 #ifndef _IR_PROTOCOL_HPP
34 #define _IR_PROTOCOL_HPP
46 const char string_Unknown[]
PROGMEM =
"UNKNOWN";
47 const char string_PulseWidth[]
PROGMEM =
"PulseWidth";
48 const char string_PulseDistance[]
PROGMEM =
"PulseDistance";
49 const char string_Apple[]
PROGMEM =
"Apple";
50 const char string_Denon[]
PROGMEM =
"Denon";
51 const char string_JVC[]
PROGMEM =
"JVC";
52 const char string_LG[]
PROGMEM =
"LG";
53 const char string_LG2[]
PROGMEM =
"LG2";
54 const char string_NEC[]
PROGMEM =
"NEC";
55 const char string_NEC2[]
PROGMEM =
"NEC2";
56 const char string_Onkyo[]
PROGMEM =
"Onkyo";
57 const char string_Panasonic[]
PROGMEM =
"Panasonic";
58 const char string_Kaseikyo[]
PROGMEM =
"Kaseikyo";
59 const char string_Kaseikyo_Denon[]
PROGMEM =
"Kaseikyo_Denon";
60 const char string_Kaseikyo_Sharp[]
PROGMEM =
"Kaseikyo_Sharp";
61 const char string_Kaseikyo_JVC[]
PROGMEM =
"Kaseikyo_JVC";
62 const char string_Kaseikyo_Mitsubishi[]
PROGMEM =
"Kaseikyo_Mitsubishi";
63 const char string_RC5[]
PROGMEM =
"RC5";
64 const char string_RC6[]
PROGMEM =
"RC6";
65 const char string_RC6A[]
PROGMEM =
"RC6A";
66 const char string_Samsung[]
PROGMEM =
"Samsung";
67 const char string_SamsungLG[]
PROGMEM =
"SamsungLG";
68 const char string_Samsung48[]
PROGMEM =
"Samsung48";
69 const char string_Sharp[]
PROGMEM =
"Sharp";
70 const char string_Sony[]
PROGMEM =
"Sony";
71 const char string_BangOlufsen[]
PROGMEM =
"Bang&Olufsen";
72 const char string_BoseWave[]
PROGMEM =
"BoseWave";
73 const char string_Lego[]
PROGMEM =
"Lego";
74 const char string_MagiQuest[]
PROGMEM =
"MagiQuest";
75 const char string_Whynter[]
PROGMEM =
"Whynter";
76 const char string_FAST[]
PROGMEM =
"FAST";
77 const char string_Other[]
PROGMEM =
"OTHER";
83 PROGMEM = { string_Unknown, string_PulseWidth, string_PulseDistance, string_Apple, string_Denon, string_JVC, string_LG, string_LG2,
84 string_NEC, string_NEC2, string_Onkyo, string_Panasonic, string_Kaseikyo, string_Kaseikyo_Denon, string_Kaseikyo_Sharp,
85 string_Kaseikyo_JVC, string_Kaseikyo_Mitsubishi, string_RC5, string_RC6, string_RC6A, string_Samsung, string_SamsungLG,
86 string_Samsung48, string_Sharp, string_Sony
87 #if !defined(EXCLUDE_EXOTIC_PROTOCOLS)
88 , string_BangOlufsen, string_BoseWave, string_Lego, string_MagiQuest, string_Whynter, string_FAST, string_Other
94 const char *tProtocolStringPtr = (
char*) pgm_read_word(&
ProtocolNames[aProtocol]);
95 return ((__FlashStringHelper*) (tProtocolStringPtr));
103 #if (__INT_WIDTH__ >= 32)
104 # if __has_include(<type_traits>)
109 #include <type_traits>
112 #if __cpp_lib_void_t >= 201411L
114 using void_t = std::void_t<T>;
116 template<
typename ... Ts>
struct make_void {
119 template<
typename ... Ts>
using void_t =
typename make_void<Ts...>::type;
123 template<
typename T,
typename =
void>
124 struct has_ull_print: std::false_type {
127 struct has_ull_print<T, void_t<decltype(std::declval<T>().print(0ull, 0))>> : std::true_type {
132 template<typename PrintImplType, typename std::enable_if<!has_ull_print<PrintImplType>::value,
bool>::type =
true>
133 size_t print(PrintImplType *p,
unsigned long long value,
int base) {
134 size_t tLength = p->print(
static_cast<uint32_t
>(value >> 32), base);
135 tLength += p->print(
static_cast<uint32_t
>(value), base);
139 template<typename PrintImplType, typename std::enable_if<has_ull_print<PrintImplType>::value,
bool>::type =
true>
140 size_t print(PrintImplType *p,
unsigned long long value,
int base) {
141 return p->print(value, base);
147 size_t print(Print *aSerial,
unsigned long long n,
int base) {
148 return aSerial->print(n, base);
165 aValue = (aValue >> 4) | (aValue << 4);
167 aValue = ((aValue & 0xcc) >> 2) | ((aValue & 0x33) << 2);
169 aValue = ((aValue & 0xaa) >> 1) | ((aValue & 0x55) << 1);
186 #if defined(LOCAL_DEBUG)
189 #endif // _IR_PROTOCOL_HPP