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 #if defined(DEBUG) && !defined(LOCAL_DEBUG)
36 #define LOCAL_DEBUG
37 #else
38 //#define LOCAL_DEBUG // This enables debug output only for this file
39 #endif
40 
44 //==============================================================================
45 // K K AA SSS EEEE III K K Y Y OOO
46 // K K A A S E I K K Y Y O O
47 // KK AAAA SSS EEE I KK Y O O
48 // K K A A S E I K K Y O O
49 // K K A A SSSS EEEE III K K Y OOO
50 //==============================================================================
51 //==============================================================================
52 // PPPP AAA N N AAA SSSS OOO N N IIIII CCCC
53 // P P A A NN N A A S O O NN N I C
54 // PPPP AAAAA N N N AAAAA SSS O O N N N I C
55 // P A A N NN A A S O O N NN I C
56 // P A A N N A A SSSS OOO N N IIIII CCCC
57 //==============================================================================
58 /*
59  Protocol=Panasonic Address=0xFF1 Command=0x76 Raw-Data=0x9976FF10 48 bits LSB first
60  +3450,-1700
61  + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 400
62  + 450,- 400 + 400,- 450 + 500,- 350 + 450,- 450
63  + 450,- 400 + 450,- 400 + 500,- 400 + 450,- 400
64  + 450,- 400 + 500,-1250 + 450,- 400 + 500,- 350
65  + 500,- 400 + 450,- 400 + 450,- 450 + 450,- 400
66  + 450,-1250 + 500,- 400 + 450,- 400 + 450,- 400
67  + 450,-1300 + 450,-1250 + 450,-1300 + 400,-1300
68  + 450,-1300 + 450,-1250 + 450,-1250 + 500,-1250
69  + 450,- 450 + 450,-1250 + 450,-1250 + 500,- 400
70  + 450,-1250 + 450,-1300 + 450,-1250 + 450,- 450
71  + 450,-1250 + 450,- 400 + 450,- 400 + 500,-1250
72  + 450,-1250 + 450,- 400 + 500,- 400 + 450,-1250
73  + 450
74  Sum: 64300
75  */
76 // http://www.hifi-remote.com/johnsfine/DecodeIR.html#Panasonic
77 // http://www.hifi-remote.com/johnsfine/DecodeIR.html#Kaseikyo
78 // LSB first
79 // The first two (8-bit) bytes contains the vendor code.
80 // The next 4 bit is VendorID parity.
81 // The last byte is parity (XOR) of the 3 bytes before.
82 // There are multiple interpretations of the next fields:
83 // 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}
84 // 1. interpretation: 4 bit Device, 8 bitSubdevice and 8 bit function.
85 // 0_______ 1_______ 2______ 3_______ 4_______ 5_______
86 // 01234567 89ABCDEF 01234567 01234567 01234567 01234567
87 // 01000000 00100100 0110Dev_ Sub_Dev_ Fun____ XOR( B2, B3, B4) - Byte 0,1 and vendor parity showing Panasonic vendor code 0x2002.
88 // 1. interpretation: <start bit><VendorID:16><VendorID parity:4><Device:4><Subdevice:8><Function:8><Parity:8><stop bit>
89 // see: http://www.remotecentral.com/cgi-bin/mboard/rc-pronto/thread.cgi?26152
90 // 2. interpretation (Flipper Zero style): <start bit><VendorID:16><VendorID parity:4><Genre1:4><Genre2:4><Command:10><ID:2><Parity:8><stop bit>
91 // see: https://www.mikrocontroller.net/articles/IRMP_-_english#KASEIKYO
92 // 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>
93 // which is derived from Samsung remotes and may not be optimal for Denon kind of Kaseikyo protokol usage.
94 //
95 #define KASEIKYO_VENDOR_ID_BITS 16
96 #define KASEIKYO_VENDOR_ID_PARITY_BITS 4
97 #define KASEIKYO_ADDRESS_BITS 12
98 #define KASEIKYO_COMMAND_BITS 8
99 #define KASEIKYO_PARITY_BITS 8
100 #define KASEIKYO_BITS (KASEIKYO_VENDOR_ID_BITS + KASEIKYO_VENDOR_ID_PARITY_BITS + KASEIKYO_ADDRESS_BITS + KASEIKYO_COMMAND_BITS + KASEIKYO_PARITY_BITS) // 48
101 #define KASEIKYO_UNIT 432 // 16 pulses of 37 kHz (432,432432) - Pronto 0x70 | 0x10
102 
103 #define KASEIKYO_HEADER_MARK (8 * KASEIKYO_UNIT) // 3456
104 #define KASEIKYO_HEADER_SPACE (4 * KASEIKYO_UNIT) // 1728
105 
106 #define KASEIKYO_BIT_MARK KASEIKYO_UNIT
107 #define KASEIKYO_ONE_SPACE (3 * KASEIKYO_UNIT) // 1296
108 #define KASEIKYO_ZERO_SPACE KASEIKYO_UNIT
109 
110 #define KASEIKYO_AVERAGE_DURATION 56000
111 #define KASEIKYO_REPEAT_PERIOD 130000
112 #define KASEIKYO_REPEAT_DISTANCE (KASEIKYO_REPEAT_PERIOD - KASEIKYO_AVERAGE_DURATION) // 74 ms
113 #define KASEIKYO_MAXIMUM_REPEAT_DISTANCE (KASEIKYO_REPEAT_DISTANCE + (KASEIKYO_REPEAT_DISTANCE / 4)) // Just a guess
114 
115 #define PANASONIC_VENDOR_ID_CODE 0x2002
116 #define DENON_VENDOR_ID_CODE 0x3254
117 #define MITSUBISHI_VENDOR_ID_CODE 0xCB23
118 #define SHARP_VENDOR_ID_CODE 0x5AAA
119 #define JVC_VENDOR_ID_CODE 0x0103
120 
124 
125 /************************************
126  * Start of send and decode functions
127  ************************************/
128 
132 void IRsend::sendKaseikyo(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint16_t aVendorCode) {
133  // Set IR carrier frequency
134  enableIROut (KASEIKYO_KHZ); // 37 kHz
135 
136  // Vendor Parity
137  uint8_t tVendorParity = aVendorCode ^ (aVendorCode >> 8);
138  tVendorParity = (tVendorParity ^ (tVendorParity >> 4)) & 0xF;
139 
140 #if __INT_WIDTH__ < 32
141  LongUnion tSendValue;
142  // Compute parity
143  tSendValue.UWord.LowWord = (aAddress << KASEIKYO_VENDOR_ID_PARITY_BITS) | tVendorParity; // set low nibble with vendor parity
144  tSendValue.UBytes[2] = aCommand;
145  tSendValue.UBytes[3] = aCommand ^ tSendValue.UBytes[0] ^ tSendValue.UBytes[1]; // 8 bit parity of 3 bytes command, address and vendor parity
146  IRRawDataType tRawKaseikyoData[2];
147  tRawKaseikyoData[0] = (uint32_t) tSendValue.UWord.LowWord << 16 | aVendorCode; // LSB of tRawKaseikyoData[0] is sent first
148  tRawKaseikyoData[1] = tSendValue.UWord.HighWord;
150 #else
151  LongLongUnion tSendValue;
152  tSendValue.UWords[0] = aVendorCode;
153  // Compute parity
154  tSendValue.UWords[1] = (aAddress << KASEIKYO_VENDOR_ID_PARITY_BITS) | tVendorParity; // set low nibble to parity
155  tSendValue.UBytes[4] = aCommand;
156  tSendValue.UBytes[5] = aCommand ^ tSendValue.UBytes[2] ^ tSendValue.UBytes[3]; // Parity
158 #endif
159 }
160 
164 void IRsend::sendPanasonic(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
166 }
167 
171 void IRsend::sendKaseikyo_Denon(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
173 }
174 
178 void IRsend::sendKaseikyo_Mitsubishi(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
180 }
181 
185 void IRsend::sendKaseikyo_Sharp(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
187 }
188 
192 void IRsend::sendKaseikyo_JVC(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats) {
194 }
195 
196 /*
197  * Tested with my Panasonic DVD/TV remote
198  */
200 
201  decode_type_t tProtocol;
202  // Check we have enough data (96 + 4) 4 for initial gap, start bit mark and space + stop bit mark
203  if (decodedIRData.rawlen != ((2 * KASEIKYO_BITS) + 4)) {
204  IR_DEBUG_PRINT(F("Kaseikyo: "));
205  IR_DEBUG_PRINT(F("Data length="));
207  IR_DEBUG_PRINTLN(F(" is not 100"));
208  return false;
209  }
210 
212  return false;
213  }
214 
215  // decode first 16 Vendor ID bits
217 #if defined(LOCAL_DEBUG)
218  Serial.print(F("Kaseikyo: "));
219  Serial.println(F("Vendor ID decode failed"));
220 #endif
221  return false;
222  }
223 
224  uint16_t tVendorId = decodedIRData.decodedRawData;
225  if (tVendorId == PANASONIC_VENDOR_ID_CODE) {
226  tProtocol = PANASONIC;
227  } else if (tVendorId == SHARP_VENDOR_ID_CODE) {
228  tProtocol = KASEIKYO_SHARP;
229  } else if (tVendorId == DENON_VENDOR_ID_CODE) {
230  tProtocol = KASEIKYO_DENON;
231  } else if (tVendorId == JVC_VENDOR_ID_CODE) {
232  tProtocol = KASEIKYO_JVC;
233  } else if (tVendorId == MITSUBISHI_VENDOR_ID_CODE) {
234  tProtocol = KASEIKYO_MITSUBISHI;
235  } else {
236  tProtocol = KASEIKYO;
237  }
238 
239  // Vendor Parity
240  uint8_t tVendorParity = tVendorId ^ (tVendorId >> 8);
241  tVendorParity = (tVendorParity ^ (tVendorParity >> 4)) & 0xF;
242 
243  /*
244  * Decode next 32 bits, 8 VendorID parity parity + 12 address (device and subdevice) + 8 command + 8 parity
245  */
248  3 + (2 * KASEIKYO_VENDOR_ID_BITS))) {
249 #if defined(LOCAL_DEBUG)
250  Serial.print(F("Kaseikyo: "));
251  Serial.println(F("VendorID parity, address, command + parity decode failed"));
252 #endif
253  return false;
254  }
255 
256  // Success
257 // decodedIRData.flags = IRDATA_FLAGS_IS_LSB_FIRST; // Not required, since this is the start value
258  LongUnion tValue;
260 #if __INT_WIDTH__ >= 32
261  // workaround until complete refactoring for 64 bit
262  decodedIRData.decodedRawData = (decodedIRData.decodedRawData << 16) | tVendorId; // store all 48 bits in decodedRawData
263 #endif
264  decodedIRData.address = (tValue.UWord.LowWord >> KASEIKYO_VENDOR_ID_PARITY_BITS); // remove 4 bit vendor parity
266  uint8_t tParity = tValue.UByte.LowByte ^ tValue.UByte.MidLowByte ^ tValue.UByte.MidHighByte;
267 
268  if (tVendorParity != (tValue.UByte.LowByte & 0xF)) {
270 
271 #if defined(LOCAL_DEBUG)
272  Serial.print(F("Kaseikyo: "));
273  Serial.print(F("4 bit VendorID parity is not correct. Expected=0x"));
274  Serial.print(tVendorParity, HEX);
275  Serial.print(F(" received=0x"));
276  Serial.print(decodedIRData.decodedRawData, HEX);
277  Serial.print(F(" VendorID=0x"));
278  Serial.println(tVendorId, HEX);
279 #endif
280  }
281 
282  if (tProtocol == KASEIKYO) {
284  decodedIRData.extra = tVendorId; // Store (unknown) vendor ID
285  }
286 
287  if (tValue.UByte.HighByte != tParity) {
289 
290 #if defined(LOCAL_DEBUG)
291  Serial.print(F("Kaseikyo: "));
292  Serial.print(F("8 bit parity is not correct. Expected=0x"));
293  Serial.print(tParity, HEX);
294  Serial.print(F(" received=0x"));
295  Serial.print(decodedIRData.decodedRawData >> KASEIKYO_COMMAND_BITS, HEX);
296  Serial.print(F(" address=0x"));
297  Serial.print(decodedIRData.address, HEX);
298  Serial.print(F(" command=0x"));
299  Serial.println(decodedIRData.command, HEX);
300 #endif
301  }
302 
304  decodedIRData.protocol = tProtocol;
305 
306  // check for repeat
308 
309  return true;
310 }
311 
312 /*
313  * Removed void IRsend::sendPanasonic(uint16_t aAddress, uint32_t aData)
314  * and bool IRrecv::decodePanasonicMSB(decode_results *aResults)
315  * since their implementations were wrong (wrong length), and nobody recognized it
316  */
317 
319 #if defined(LOCAL_DEBUG)
320 #undef LOCAL_DEBUG
321 #endif
322 #endif // _IR_KASEIKYO_HPP
IRData::address
uint16_t address
Decoded address, Distance protocol (tMarkTicksLong (if tMarkTicksLong == 0, then tMarkTicksShort) << ...
Definition: IRProtocol.h:109
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:249
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:54
KASEIKYO_PARITY_BITS
#define KASEIKYO_PARITY_BITS
Definition: ir_Kaseikyo.hpp:99
IRData::numberOfBits
uint16_t numberOfBits
Number of bits received for data (address + command + parity) - to determine protocol length if diffe...
Definition: IRProtocol.h:118
IRsend::aNumberOfRepeats
void int_fast8_t aNumberOfRepeats
Definition: IRremoteInt.h:520
MITSUBISHI_VENDOR_ID_CODE
#define MITSUBISHI_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:117
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:185
KASEIKYO_SHARP
@ KASEIKYO_SHARP
Definition: IRProtocol.h:55
KASEIKYO_ADDRESS_BITS
#define KASEIKYO_ADDRESS_BITS
Definition: ir_Kaseikyo.hpp:97
MICROS_IN_ONE_MILLI
#define MICROS_IN_ONE_MILLI
Definition: IRremote.hpp:254
LongUnion::UByte
struct LongUnion::@4 UByte
IRData::rawlen
uint_fast8_t rawlen
counter of entries in rawbuf
Definition: IRProtocol.h:123
KASEIKYO_JVC
@ KASEIKYO_JVC
Definition: IRProtocol.h:56
decode_type_t
decode_type_t
An enum consisting of all supported formats.
Definition: IRProtocol.h:40
KASEIKYO_BIT_MARK
#define KASEIKYO_BIT_MARK
Definition: ir_Kaseikyo.hpp:106
LongUnion::UBytes
uint8_t UBytes[4]
Definition: LongUnion.h:91
KASEIKYO_REPEAT_PERIOD
#define KASEIKYO_REPEAT_PERIOD
Definition: ir_Kaseikyo.hpp:111
IRsend::sendPulseDistanceWidth
void sendPulseDistanceWidth(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, uint_fast8_t aNumberOfBits, int_fast8_t aNumberOfRepeats)
Sends PulseDistance frames and repeats and enables receiver again.
Definition: IRSend.hpp:702
LongUnion::LowByte
uint8_t LowByte
Definition: LongUnion.h:61
LongUnion::HighByte
uint8_t HighByte
Definition: LongUnion.h:64
IRData::decodedRawData
IRRawDataType decodedRawData
Up to 32/64 bit decoded raw data, to be used for send functions.
Definition: IRProtocol.h:112
IRrecv::checkForRepeatSpaceTicksAndSetFlag
void checkForRepeatSpaceTicksAndSetFlag(uint16_t aMaximumRepeatSpaceTicks)
Definition: IRReceive.hpp:1042
IR_DEBUG_PRINT
#define IR_DEBUG_PRINT(...)
If DEBUG, print the arguments, otherwise do nothing.
Definition: IRremoteInt.h:137
LongUnion::LowWord
uint16_t LowWord
Definition: LongUnion.h:80
KASEIKYO_VENDOR_ID_BITS
#define KASEIKYO_VENDOR_ID_BITS
Definition: ir_Kaseikyo.hpp:95
LongLongUnion
Union to specify parts / manifestations of a 64 bit LongLong without casts and shifts.
Definition: LongUnion.h:107
IRrecv::decodePulseDistanceWidthData
bool decodePulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, uint_fast8_t aNumberOfBits, uint_fast8_t aStartOffset=3)
Decode pulse distance protocols for PulseDistanceWidthProtocolConstants.
Definition: IRReceive.hpp:845
PANASONIC_VENDOR_ID_CODE
#define PANASONIC_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:115
IRDATA_FLAGS_PARITY_FAILED
#define IRDATA_FLAGS_PARITY_FAILED
The current (autorepeat) frame violated parity check.
Definition: IRProtocol.h:93
LongUnion::MidLowByte
uint8_t MidLowByte
Definition: LongUnion.h:62
PulseDistanceWidthProtocolConstants
Definition: IRProtocol.h:132
PANASONIC
@ PANASONIC
Definition: IRProtocol.h:52
LongUnion::HighWord
uint16_t HighWord
Definition: LongUnion.h:81
IRrecv::decodedIRData
IRData decodedIRData
Definition: IRremoteInt.h:321
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:96
IRData::flags
uint8_t flags
IRDATA_FLAGS_IS_REPEAT, IRDATA_FLAGS_WAS_OVERFLOW etc. See IRDATA_FLAGS_* definitions above.
Definition: IRProtocol.h:119
JVC_VENDOR_ID_CODE
#define JVC_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:119
PROTOCOL_IS_LSB_FIRST
#define PROTOCOL_IS_LSB_FIRST
Definition: IRProtocol.h:146
IRrecv::checkHeader
bool checkHeader(PulseDistanceWidthProtocolConstants *aProtocolConstants)
Definition: IRReceive.hpp:1018
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:132
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:192
SHARP_VENDOR_ID_CODE
#define SHARP_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:118
IRData::command
uint16_t command
Decoded command, Distance protocol (tMarkTicksShort << 8) | tSpaceTicksShort.
Definition: IRProtocol.h:110
KASEIKYO_HEADER_SPACE
#define KASEIKYO_HEADER_SPACE
Definition: ir_Kaseikyo.hpp:104
KASEIKYO_COMMAND_BITS
#define KASEIKYO_COMMAND_BITS
Definition: ir_Kaseikyo.hpp:98
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:164
IRRawDataType
uint32_t IRRawDataType
Definition: IRremoteInt.h:117
LongUnion::ULong
uint32_t ULong
Definition: LongUnion.h:95
KASEIKYO_MITSUBISHI
@ KASEIKYO_MITSUBISHI
Definition: IRProtocol.h:57
KASEIKYO
@ KASEIKYO
Definition: IRProtocol.h:53
KASEIKYO_VENDOR_ID_PARITY_BITS
#define KASEIKYO_VENDOR_ID_PARITY_BITS
Definition: ir_Kaseikyo.hpp:96
KASEIKYO_MAXIMUM_REPEAT_DISTANCE
#define KASEIKYO_MAXIMUM_REPEAT_DISTANCE
Definition: ir_Kaseikyo.hpp:113
IRDATA_FLAGS_IS_LSB_FIRST
#define IRDATA_FLAGS_IS_LSB_FIRST
Definition: IRProtocol.h:100
KASEIKYO_KHZ
#define KASEIKYO_KHZ
Definition: IRProtocol.h:164
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: IRProtocol.h:111
KaseikyoProtocolConstants
struct PulseDistanceWidthProtocolConstants KaseikyoProtocolConstants
Definition: ir_Kaseikyo.hpp:121
KASEIKYO_ONE_SPACE
#define KASEIKYO_ONE_SPACE
Definition: ir_Kaseikyo.hpp:107
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:178
LongUnion::MidHighByte
uint8_t MidHighByte
Definition: LongUnion.h:63
KASEIKYO_HEADER_MARK
#define KASEIKYO_HEADER_MARK
Definition: ir_Kaseikyo.hpp:103
LongUnion::UWord
struct LongUnion::@6 UWord
IRsend::sendPulseDistanceWidthFromArray
void sendPulseDistanceWidthFromArray(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis, int_fast8_t aNumberOfRepeats)
Definition: IRSend.hpp:549
IRrecv::decodeKaseikyo
bool decodeKaseikyo()
Definition: ir_Kaseikyo.hpp:199
IR_DEBUG_PRINTLN
#define IR_DEBUG_PRINTLN(...)
If DEBUG, print the arguments as a line, otherwise do nothing.
Definition: IRremoteInt.h:141
KASEIKYO_BITS
#define KASEIKYO_BITS
Definition: ir_Kaseikyo.hpp:100
IRData::protocol
decode_type_t protocol
UNKNOWN, NEC, SONY, RC5, PULSE_DISTANCE, ...
Definition: IRProtocol.h:108
KASEIKYO_ZERO_SPACE
#define KASEIKYO_ZERO_SPACE
Definition: ir_Kaseikyo.hpp:108
IRsend::aCommand
void aCommand
Definition: IRremoteInt.h:582
IRsend::enableIROut
void enableIROut(uint_fast8_t aFrequencyKHz)
Enables IR output.
Definition: IRSend.hpp:1205
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:171
DENON_VENDOR_ID_CODE
#define DENON_VENDOR_ID_CODE
Definition: ir_Kaseikyo.hpp:116