IRremote
ir_Kaseikyo.hpp
Go to the documentation of this file.
1 /*
2  * ir_Kaseikyo.hpp
3  *
4  * Contains functions for receiving and sending Kaseikyo/Panasonic IR Protocol in "raw" and standard format with 16 bit address + 8 bit command
5  *
6  * This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
7  *
8  ************************************************************************************
9  * MIT License
10  *
11  * Copyright (c) 2020-2023 Armin Joachimsmeyer
12  *
13  * Permission is hereby granted, free of charge, to any person obtaining a copy
14  * of this software and associated documentation files (the "Software"), to deal
15  * in the Software without restriction, including without limitation the rights
16  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17  * copies of the Software, and to permit persons to whom the Software is furnished
18  * to do so, subject to the following conditions:
19  *
20  * The above copyright notice and this permission notice shall be included in all
21  * copies or substantial portions of the Software.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
24  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
25  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
27  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
28  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29  *
30  ************************************************************************************
31  */
32 #ifndef _IR_KASEIKYO_HPP
33 #define _IR_KASEIKYO_HPP
34 
35 // This block must be located after the includes of other *.hpp files
36 //#define LOCAL_DEBUG // This enables debug output only for this file - only for development
37 #include "LocalDebugLevelStart.h"
38 
42 //==============================================================================
43 // K K AA SSS EEEE III K K Y Y OOO
44 // K K A A S E I K K Y Y O O
45 // KK AAAA SSS EEE I KK Y O O
46 // K K A A S E I K K Y O O
47 // K K A A SSSS EEEE III K K Y OOO
48 //==============================================================================
49 //==============================================================================
50 // PPPP AAA N N AAA SSSS OOO N N IIIII CCCC
51 // P P A A NN N A A S O O NN N I C
52 // PPPP AAAAA N N N AAAAA SSS O O N N N I C
53 // P A A N NN A A S O O N NN I C
54 // P A A N N A A SSSS OOO N N IIIII CCCC
55 //==============================================================================
56 /*
57  Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first
58  +3450,-1700
59  + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400
60  + 450,- 400 + 400,- 450 + 500,- 350 + 450,- 450
61  + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400
62  + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 350
63  + 500,- 400 + 450,- 400 + 450,- 450 + 450,- 400
64  + 450,-1250 + 500,- 400 + 450,- 400 + 450,- 400
65  + 450,-1300 + 450,-1250 + 450,-1300 + 400,-1300
66  + 450,-1300 + 450,-1250 + 450,-1250 + 500,-1250
67  + 450,- 450 + 450,-1250 + 450,-1250 + 500,- 400
68  + 450,-1250 + 450,-1300 + 450,-1250 + 450,- 450
69  + 450,-1250 + 450,- 400 + 450,- 400 + 500,-1250
70  + 450,-1250 + 450,- 400 + 500,- 400 + 450,-1250
71  + 450
72  Sum: 64300
73  */
74 // http://www.hifi-remote.com/johnsfine/DecodeIR.html#Panasonic
75 // http://www.hifi-remote.com/johnsfine/DecodeIR.html#Kaseikyo
76 // LSB first
77 // The first two (8-bit) bytes contains the vendor code.
78 // The next 4 bit is VendorID parity.
79 // The last byte is parity (XOR) of the 3 bytes before.
80 // There are multiple interpretations of the next fields:
81 // IRP: {37k,432}<1,-1|1,-3>(8,-4,M:8,N:8,X:4,D:4,S:8,F:8,G:8,1,-173)+ {X=M:4:0^M:4:4^N:4:0^N:4:4}
82 // 1. interpretation: 4 bit Device, 8 bitSubdevice and 8 bit function.
83 // 0_______ 1_______ 2______ 3_______ 4_______ 5_______
84 // 01234567 89ABCDEF 01234567 01234567 01234567 01234567
85 // 01000000 00100100 0110Dev_ Sub_Dev_ Fun____ XOR( B2, B3, B4) - Byte 0,1 and vendor parity showing Panasonic vendor code 0x2002.
86 // 1. interpretation: <start bit><VendorID:16><VendorID parity:4><Device:4><Subdevice:8><Function:8><Parity:8><stop bit>
87 // see: http://www.remotecentral.com/cgi-bin/mboard/rc-pronto/thread.cgi?26152
88 // 2. interpretation (Flipper Zero style): <start bit><VendorID:16><VendorID parity:4><Genre1:4><Genre2:4><Command:10><ID:2><Parity:8><stop bit>
89 // see: https://www.mikrocontroller.net/articles/IRMP_-_english#KASEIKYO
90 // Implemented is Samsung style: <start bit><VendorID:16><VendorID parity:4><Address:12><Command:8><Parity of VendorID parity, Address and Command:8><stop bit>
91 // which is derived from Samsung remotes and may not be optimal for Denon kind of Kaseikyo protokol usage.
92 //
93 #define KASEIKYO_VENDOR_ID_BITS 16
94 #define KASEIKYO_VENDOR_ID_PARITY_BITS 4
95 #define KASEIKYO_ADDRESS_BITS 12
96 #define KASEIKYO_COMMAND_BITS 8
97 #define KASEIKYO_PARITY_BITS 8
98 #define KASEIKYO_BITS (KASEIKYO_VENDOR_ID_BITS + KASEIKYO_VENDOR_ID_PARITY_BITS + KASEIKYO_ADDRESS_BITS + KASEIKYO_COMMAND_BITS + KASEIKYO_PARITY_BITS) // 48
99 #define KASEIKYO_UNIT 432 // 16 pulses of 37 kHz (432,432432) - Pronto 0x70 | 0x10
100 
101 #define KASEIKYO_HEADER_MARK (8 * KASEIKYO_UNIT) // 3456
102 #define KASEIKYO_HEADER_SPACE (4 * KASEIKYO_UNIT) // 1728
103 
104 #define KASEIKYO_BIT_MARK KASEIKYO_UNIT
105 #define KASEIKYO_ONE_SPACE (3 * KASEIKYO_UNIT) // 1296
106 #define KASEIKYO_ZERO_SPACE KASEIKYO_UNIT
107 
108 #define KASEIKYO_AVERAGE_DURATION 56000
109 #define KASEIKYO_REPEAT_PERIOD 130000
110 #define KASEIKYO_REPEAT_DISTANCE (KASEIKYO_REPEAT_PERIOD - KASEIKYO_AVERAGE_DURATION) // 74 ms
111 #define KASEIKYO_MAXIMUM_REPEAT_DISTANCE (KASEIKYO_REPEAT_DISTANCE + (KASEIKYO_REPEAT_DISTANCE / 4)) // Just a guess
112 
113 #define PANASONIC_VENDOR_ID_CODE 0x2002
114 #define DENON_VENDOR_ID_CODE 0x3254
115 #define MITSUBISHI_VENDOR_ID_CODE 0xCB23
116 #define SHARP_VENDOR_ID_CODE 0x5AAA
117 #define JVC_VENDOR_ID_CODE 0x0103
118 
119 struct PulseDistanceWidthProtocolConstants const KaseikyoProtocolConstants PROGMEM = {KASEIKYO, KASEIKYO_KHZ, KASEIKYO_HEADER_MARK,
122 
123 /************************************
124  * Start of send and decode functions
125  ************************************/
126 
130 void IRsend::sendKaseikyo(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint16_t aVendorCode) {
131  // Set IR carrier frequency
132  enableIROut (KASEIKYO_KHZ); // 37 kHz
133 
134  // Vendor Parity
135  uint8_t tVendorParity = aVendorCode ^ (aVendorCode >> 8);
136  tVendorParity = (tVendorParity ^ (tVendorParity >> 4)) & 0xF;
137 
138 #if __INT_WIDTH__ < 32
139  LongUnion tSendValue;
140  // Compute parity
141  tSendValue.UWord.LowWord = (aAddress << KASEIKYO_VENDOR_ID_PARITY_BITS) | tVendorParity; // set low nibble with vendor parity
142  tSendValue.UBytes[2] = aCommand;
143  tSendValue.UBytes[3] = aCommand ^ tSendValue.UBytes[0] ^ tSendValue.UBytes[1]; // 8 bit parity of 3 bytes command, address and vendor parity
144  IRDecodedRawDataType tRawKaseikyoData[2];
145  tRawKaseikyoData[0] = (uint32_t) tSendValue.UWord.LowWord << 16 | aVendorCode; // LSB of tRawKaseikyoData[0] is sent first
146  tRawKaseikyoData[1] = tSendValue.UWord.HighWord;
147  sendPulseDistanceWidthFromArray_P(&KaseikyoProtocolConstants, &tRawKaseikyoData[0], KASEIKYO_BITS, aNumberOfRepeats);
148 #else
149  LongLongUnion tSendValue;
150  tSendValue.UWords[0] = aVendorCode;
151  // Compute parity
152  tSendValue.UWords[1] = (aAddress << KASEIKYO_VENDOR_ID_PARITY_BITS) | tVendorParity; // set low nibble to parity
153  tSendValue.UBytes[4] = aCommand;
154  tSendValue.UBytes[5] = aCommand ^ tSendValue.UBytes[2] ^ tSendValue.UBytes[3]; // Parity
155  sendPulseDistanceWidth_P(&KaseikyoProtocolConstants, tSendValue.ULongLong, KASEIKYO_BITS, aNumberOfRepeats);
156 #endif
157 }
158 
162 void IRsend::sendPanasonic(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
164 }
165 
169 void IRsend::sendKaseikyo_Denon(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
171 }
172 
176 void IRsend::sendKaseikyo_Mitsubishi(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
178 }
179 
183 void IRsend::sendKaseikyo_Sharp(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
185 }
186 
190 void IRsend::sendKaseikyo_JVC(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
192 }
193 
194 /*
195  * Tested with my Panasonic DVD/TV remote
196  */
198 
199  decode_type_t tProtocol;
200  // Check we have enough data (96 + 4) 4 for initial gap, start bit mark and space + stop bit mark
201  if (decodedIRData.rawlen != ((2 * KASEIKYO_BITS) + 4)) {
202  DEBUG_PRINT(F("Kaseikyo: Data length="));
204  DEBUG_PRINTLN(F(" is not 100"));
205  return false;
206  }
207 
208  if (!checkHeader_P(&KaseikyoProtocolConstants)) {
209  return false;
210  }
211 
212  // decode first 16 Vendor ID bits
213  decodePulseDistanceWidthData_P(&KaseikyoProtocolConstants, KASEIKYO_VENDOR_ID_BITS);
214 
215  uint16_t tVendorId = decodedIRData.decodedRawData;
216  if (tVendorId == PANASONIC_VENDOR_ID_CODE) {
217  tProtocol = PANASONIC;
218  } else if (tVendorId == SHARP_VENDOR_ID_CODE) {
219  tProtocol = KASEIKYO_SHARP;
220  } else if (tVendorId == DENON_VENDOR_ID_CODE) {
221  tProtocol = KASEIKYO_DENON;
222  } else if (tVendorId == JVC_VENDOR_ID_CODE) {
223  tProtocol = KASEIKYO_JVC;
224  } else if (tVendorId == MITSUBISHI_VENDOR_ID_CODE) {
225  tProtocol = KASEIKYO_MITSUBISHI;
226  } else {
227  tProtocol = KASEIKYO;
228  }
229 
230  // Vendor Parity
231  uint8_t tVendorParity = tVendorId ^ (tVendorId >> 8);
232  tVendorParity = (tVendorParity ^ (tVendorParity >> 4)) & 0xF;
233 
234  /*
235  * Decode next 32 bits, 8 VendorID parity parity + 12 address (device and subdevice) + 8 command + 8 parity
236  */
237  decodePulseDistanceWidthData_P(&KaseikyoProtocolConstants,
239  3 + (2 * KASEIKYO_VENDOR_ID_BITS));
240 
241  // Success
242 // decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value
243  LongUnion tValue;
245 #if __INT_WIDTH__ >= 32
246  // workaround until complete refactoring for 64 bit
247  decodedIRData.decodedRawData = (decodedIRData.decodedRawData << 16) | tVendorId; // store all 48 bits in decodedRawData
248 #endif
249  decodedIRData.address = (tValue.UWord.LowWord >> KASEIKYO_VENDOR_ID_PARITY_BITS); // remove 4 bit vendor parity
251  uint8_t tParity = tValue.UByte.LowByte ^ tValue.UByte.MidLowByte ^ tValue.UByte.MidHighByte;
252 
253  if (tVendorParity != (tValue.UByte.LowByte & 0xF)) {
255 
256  DEBUG_PRINT(F("Kaseikyo: 4 bit VendorID parity is not correct. Expected=0x"));
257  DEBUG_PRINT(tVendorParity, HEX);
258  DEBUG_PRINT(F(" received=0x"));
260  DEBUG_PRINT(F(" VendorID=0x"));
261  DEBUG_PRINTLN(tVendorId, HEX);
262  }
263 
264  if (tProtocol == KASEIKYO) {
266  decodedIRData.extra = tVendorId; // Store (unknown) vendor ID
267  }
268 
269  if (tValue.UByte.HighByte != tParity) {
271 
272  DEBUG_PRINT(F("Kaseikyo: 8 bit parity is not correct. Expected=0x"));
273  DEBUG_PRINT(tParity, HEX);
274  DEBUG_PRINT(F(" received=0x"));
276  DEBUG_PRINT(F(" address=0x"));
278  DEBUG_PRINT(F(" command=0x"));
280  }
281 
283  decodedIRData.protocol = tProtocol;
284 
285  // check for repeat
287 
288  return true;
289 }
290 
291 /*
292  * Removed void IRsend::sendPanasonic(uint16_t aAddress, uint32_t aData)
293  * and bool IRrecv::decodePanasonicMSB(decode_results *aResults)
294  * since their implementations were wrong (wrong length), and nobody recognized it
295  */
296 
298 #include "LocalDebugLevelEnd.h"
299 
300 #endif // _IR_KASEIKYO_HPP
IRData::address
uint16_t address
Decoded address, Distance protocol (tMarkTicksLong (if tMarkTicksLong == 0, then tMarkTicksShort) << ...
Definition: IRremoteInt.h:164
LongLongUnion::UBytes
uint8_t UBytes[8]
Definition: LongUnion.h:138
MICROS_PER_TICK
#define MICROS_PER_TICK
microseconds per clock interrupt tick
Definition: IRremote.hpp:133
LongUnion
Union to specify parts / manifestations of a 32 bit Long without casts and shifts.
Definition: LongUnion.h:59
KASEIKYO_DENON
@ KASEIKYO_DENON
Definition: IRProtocol.h:99
KASEIKYO_PARITY_BITS
#define KASEIKYO_PARITY_BITS
Definition: ir_Kaseikyo.hpp:97
IRData::numberOfBits
uint16_t numberOfBits
Number of bits received for data (address + command + parity) - to determine protocol length if diffe...
Definition: IRremoteInt.h:173
DEBUG_PRINT
#define DEBUG_PRINT(...)
Definition: LocalDebugLevelStart.h:79
IRsend::aNumberOfRepeats
void int_fast8_t aNumberOfRepeats
Definition: IRremoteInt.h:528
MITSUBISHI_VENDOR_ID_CODE
#define MITSUBISHI_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:115
IRsend::sendKaseikyo_Sharp
void sendKaseikyo_Sharp(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with SHARP_VENDOR_ID_CODE.
Definition: ir_Kaseikyo.hpp:183
KASEIKYO_SHARP
@ KASEIKYO_SHARP
Definition: IRProtocol.h:99
KASEIKYO_ADDRESS_BITS
#define KASEIKYO_ADDRESS_BITS
Definition: ir_Kaseikyo.hpp:95
IRrecv::decodePulseDistanceWidthData_P
void decodePulseDistanceWidthData_P(PulseDistanceWidthProtocolConstants const *aProtocolConstantsPGM, uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset=3)
Definition: IRReceive.hpp:1112
MICROS_IN_ONE_MILLI
#define MICROS_IN_ONE_MILLI
Definition: IRremote.hpp:217
IRrecv::checkHeader_P
bool checkHeader_P(PulseDistanceWidthProtocolConstants const *aProtocolConstantsPGM)
Definition: IRReceive.hpp:1228
LongUnion::UByte
struct LongUnion::@4 UByte
PROTOCOL_IS_PULSE_DISTANCE
#define PROTOCOL_IS_PULSE_DISTANCE
Definition: IRProtocol.h:151
KASEIKYO_JVC
@ KASEIKYO_JVC
Definition: IRProtocol.h:99
decode_type_t
decode_type_t
An enum consisting of all supported formats.
Definition: IRProtocol.h:97
KASEIKYO_BIT_MARK
#define KASEIKYO_BIT_MARK
Definition: ir_Kaseikyo.hpp:104
LongUnion::UBytes
uint8_t UBytes[4]
Definition: LongUnion.h:91
KASEIKYO_REPEAT_PERIOD
#define KASEIKYO_REPEAT_PERIOD
Definition: ir_Kaseikyo.hpp:109
LongUnion::LowByte
uint8_t LowByte
Definition: LongUnion.h:61
LongUnion::HighByte
uint8_t HighByte
Definition: LongUnion.h:64
IRrecv::checkForRepeatSpaceTicksAndSetFlag
void checkForRepeatSpaceTicksAndSetFlag(uint16_t aMaximumRepeatSpaceTicks)
Definition: IRReceive.hpp:1248
LongUnion::LowWord
uint16_t LowWord
Definition: LongUnion.h:80
KASEIKYO_VENDOR_ID_BITS
#define KASEIKYO_VENDOR_ID_BITS
Definition: ir_Kaseikyo.hpp:93
LongLongUnion
Union to specify parts / manifestations of a 64 bit LongLong without casts and shifts.
Definition: LongUnion.h:107
PANASONIC_VENDOR_ID_CODE
#define PANASONIC_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:113
LocalDebugLevelStart.h
IRDATA_FLAGS_PARITY_FAILED
#define IRDATA_FLAGS_PARITY_FAILED
The current (autorepeat) frame violated parity check.
Definition: IRProtocol.h:127
LongUnion::MidLowByte
uint8_t MidLowByte
Definition: LongUnion.h:62
IRDecodedRawDataType
uint32_t IRDecodedRawDataType
Definition: IRremoteInt.h:151
PulseDistanceWidthProtocolConstants
Definition: IRProtocol.h:139
IRsend::sendPulseDistanceWidth_P
void sendPulseDistanceWidth_P(PulseDistanceWidthProtocolConstants const *aProtocolConstantsPGM, IRDecodedRawDataType aData, uint_fast8_t aNumberOfBits, int_fast8_t aNumberOfRepeats)
Definition: IRSend.hpp:1158
PANASONIC
@ PANASONIC
Definition: IRProtocol.h:99
LongUnion::HighWord
uint16_t HighWord
Definition: LongUnion.h:81
IRrecv::decodedIRData
IRData decodedIRData
Definition: IRremoteInt.h:401
IRDATA_FLAGS_EXTRA_INFO
#define IRDATA_FLAGS_EXTRA_INFO
There is extra info not contained in address and data (e.g. Kaseikyo unknown vendor ID,...
Definition: IRProtocol.h:130
IRData::flags
uint8_t flags
IRDATA_FLAGS_IS_REPEAT, IRDATA_FLAGS_WAS_OVERFLOW etc. See IRDATA_FLAGS_* definitions above.
Definition: IRremoteInt.h:174
JVC_VENDOR_ID_CODE
#define JVC_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:117
PROTOCOL_IS_LSB_FIRST
#define PROTOCOL_IS_LSB_FIRST
Definition: IRProtocol.h:157
IRsend::sendKaseikyo
void sendKaseikyo(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats, uint16_t aVendorCode)
Address can be interpreted as sub-device << 4 + 4 bit device.
Definition: ir_Kaseikyo.hpp:130
IRsend::sendKaseikyo_JVC
void sendKaseikyo_JVC(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with JVC_VENDOR_ID_CODE.
Definition: ir_Kaseikyo.hpp:190
SHARP_VENDOR_ID_CODE
#define SHARP_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:116
IRData::command
uint16_t command
Decoded command, Distance protocol (tMarkTicksShort << 8) | tSpaceTicksShort.
Definition: IRremoteInt.h:165
IRData::decodedRawData
IRDecodedRawDataType decodedRawData
Up to 32/64 bit decoded raw data, to be used for send<protocol>Raw functions.
Definition: IRremoteInt.h:167
KASEIKYO_HEADER_SPACE
#define KASEIKYO_HEADER_SPACE
Definition: ir_Kaseikyo.hpp:102
KASEIKYO_COMMAND_BITS
#define KASEIKYO_COMMAND_BITS
Definition: ir_Kaseikyo.hpp:96
IRsend::sendPanasonic
void sendPanasonic(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with PANASONIC_VENDOR_ID_CODE.
Definition: ir_Kaseikyo.hpp:162
IRsend::sendPulseDistanceWidthFromArray_P
void sendPulseDistanceWidthFromArray_P(PulseDistanceWidthProtocolConstants const *aProtocolConstantsPGM, IRDecodedRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, int_fast8_t aNumberOfRepeats)
Definition: IRSend.hpp:1139
LongUnion::ULong
uint32_t ULong
Definition: LongUnion.h:95
KASEIKYO_MITSUBISHI
@ KASEIKYO_MITSUBISHI
Definition: IRProtocol.h:99
KASEIKYO
@ KASEIKYO
Definition: IRProtocol.h:99
KASEIKYO_VENDOR_ID_PARITY_BITS
#define KASEIKYO_VENDOR_ID_PARITY_BITS
Definition: ir_Kaseikyo.hpp:94
DEBUG_PRINTLN
#define DEBUG_PRINTLN(...)
Definition: LocalDebugLevelStart.h:80
KASEIKYO_MAXIMUM_REPEAT_DISTANCE
#define KASEIKYO_MAXIMUM_REPEAT_DISTANCE
Definition: ir_Kaseikyo.hpp:111
IRDATA_FLAGS_IS_LSB_FIRST
#define IRDATA_FLAGS_IS_LSB_FIRST
Definition: IRProtocol.h:134
KASEIKYO_KHZ
#define KASEIKYO_KHZ
Definition: IRProtocol.h:174
LongLongUnion::UWords
uint16_t UWords[4]
Definition: LongUnion.h:140
LongLongUnion::ULongLong
uint64_t ULongLong
Definition: LongUnion.h:142
IRData::extra
uint16_t extra
Contains upper 16 bit of Magiquest WandID, Kaseikyo unknown vendor ID and Distance protocol (HeaderMa...
Definition: IRremoteInt.h:166
KASEIKYO_ONE_SPACE
#define KASEIKYO_ONE_SPACE
Definition: ir_Kaseikyo.hpp:105
IRsend::sendKaseikyo_Mitsubishi
void sendKaseikyo_Mitsubishi(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with MITSUBISHI_VENDOR_ID_CODE.
Definition: ir_Kaseikyo.hpp:176
IRData::rawlen
IRRawlenType rawlen
Counter of entries in rawbuf of last received frame.
Definition: IRremoteInt.h:182
LongUnion::MidHighByte
uint8_t MidHighByte
Definition: LongUnion.h:63
KASEIKYO_HEADER_MARK
#define KASEIKYO_HEADER_MARK
Definition: ir_Kaseikyo.hpp:101
PROGMEM
struct PulseDistanceWidthProtocolConstants const KaseikyoProtocolConstants PROGMEM
Definition: ir_Kaseikyo.hpp:119
LongUnion::UWord
struct LongUnion::@6 UWord
IRrecv::decodeKaseikyo
bool decodeKaseikyo()
Definition: ir_Kaseikyo.hpp:197
KASEIKYO_BITS
#define KASEIKYO_BITS
Definition: ir_Kaseikyo.hpp:98
IRData::protocol
decode_type_t protocol
UNKNOWN, NEC, SONY, RC5, PULSE_DISTANCE, ...
Definition: IRremoteInt.h:163
KASEIKYO_ZERO_SPACE
#define KASEIKYO_ZERO_SPACE
Definition: ir_Kaseikyo.hpp:106
IRsend::aCommand
void aCommand
Definition: IRremoteInt.h:617
IRsend::enableIROut
void enableIROut(uint_fast8_t aFrequencyKHz)
Enables IR output.
Definition: IRSend.hpp:1498
IRsend::sendKaseikyo_Denon
void sendKaseikyo_Denon(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with DENON_VENDOR_ID_CODE.
Definition: ir_Kaseikyo.hpp:169
LocalDebugLevelEnd.h
DENON_VENDOR_ID_CODE
#define DENON_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:114