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";
82 PROGMEM = { string_Unknown, string_PulseWidth, string_PulseDistance, string_Apple, string_Denon, string_JVC, string_LG, string_LG2,
83 string_NEC, string_NEC2, string_Onkyo, string_Panasonic, string_Kaseikyo, string_Kaseikyo_Denon, string_Kaseikyo_Sharp,
84 string_Kaseikyo_JVC, string_Kaseikyo_Mitsubishi, string_RC5, string_RC6, string_RC6A, string_Samsung, string_SamsungLG,
85 string_Samsung48, string_Sharp, string_Sony
86 #if !defined(EXCLUDE_EXOTIC_PROTOCOLS)
87 , string_BangOlufsen, string_BoseWave, string_Lego, string_MagiQuest, string_Whynter, string_FAST
93 const char *tProtocolStringPtr = (
char*) pgm_read_word(&
ProtocolNames[aProtocol]);
94 return ((__FlashStringHelper*) (tProtocolStringPtr));
102 #if (__INT_WIDTH__ >= 32)
103 # if __has_include(<type_traits>)
108 #include <type_traits>
111 #if __cpp_lib_void_t >= 201411L
113 using void_t = std::void_t<T>;
115 template<
typename ... Ts>
struct make_void {
118 template<
typename ... Ts>
using void_t =
typename make_void<Ts...>::type;
122 template<
typename T,
typename =
void>
123 struct has_ull_print: std::false_type {
126 struct has_ull_print<T, void_t<decltype(std::declval<T>().print(0ull, 0))>> : std::true_type {
131 template<typename PrintImplType, typename std::enable_if<!has_ull_print<PrintImplType>::value,
bool>::type =
true>
132 size_t print(PrintImplType *p,
unsigned long long value,
int base) {
133 size_t tLength = p->print(
static_cast<uint32_t
>(value >> 32), base);
134 tLength += p->print(
static_cast<uint32_t
>(value), base);
138 template<typename PrintImplType, typename std::enable_if<has_ull_print<PrintImplType>::value,
bool>::type =
true>
139 size_t print(PrintImplType *p,
unsigned long long value,
int base) {
140 return p->print(value, base);
146 size_t print(Print *aSerial,
unsigned long long n,
int base) {
147 return aSerial->print(n, base);
164 (void) aPrintRepeatGap;
169 aSerial->println(F(
"Overflow"));
172 aSerial->print(F(
"Protocol="));
175 #if defined(DECODE_HASH)
176 aSerial->print(F(
" Hash=0x"));
177 #if (__INT_WIDTH__ < 32)
184 #if !defined(DISABLE_CODE_FOR_RECEIVER)
186 aSerial->print((aIRDataPtr->
rawlen + 1) / 2, DEC);
187 aSerial->println(F(
" bits (incl. gap and start) received"));
190 #if defined(DECODE_DISTANCE_WIDTH)
196 aSerial->print(F(
" Address=0x"));
197 aSerial->print(aIRDataPtr->
address, HEX);
199 aSerial->print(F(
" Command=0x"));
200 aSerial->print(aIRDataPtr->
command, HEX);
203 aSerial->print(F(
" Extra=0x"));
204 aSerial->print(aIRDataPtr->
extra, HEX);
208 aSerial->print(F(
" Parity fail"));
212 aSerial->print(F(
" Toggle=1"));
214 #if defined(DECODE_DISTANCE_WIDTH)
222 aSerial->print(F(
" Raw-Data=0x"));
223 #if (__INT_WIDTH__ < 32)
233 aSerial->print(F(
" bits"));
236 aSerial->print(F(
" MSB first"));
238 aSerial->print(F(
" LSB first"));
248 aSerial->print(F(
"Auto-"));
250 aSerial->print(F(
"Repeat"));
252 #if !defined(DISABLE_CODE_FOR_RECEIVER)
253 aSerial->print(F(
" Gap="));
255 aSerial->print(F(
"us"));
257 uint16_t tSumOfDurationTicks = 0;
261 aSerial->print(F(
" Duration="));
263 aSerial->println(F(
"us"));
277 aValue = (aValue >> 4) | (aValue << 4);
279 aValue = ((aValue & 0xcc) >> 2) | ((aValue & 0x33) << 2);
281 aValue = ((aValue & 0xaa) >> 1) | ((aValue & 0x55) << 1);
298 #if defined(LOCAL_DEBUG)
301 #endif // _IR_PROTOCOL_HPP