Go to the documentation of this file.
33 #ifndef _IR_REMOTE_INT_H
34 #define _IR_REMOTE_INT_H
42 #define F_CPU 16000000 // definition for a board for which F_CPU is not defined
44 #if defined(F_CPU) // F_CPU is used to generate the receive send timings in some CPU's
45 #define CLOCKS_PER_MICRO (F_CPU / MICROS_IN_ONE_SECOND)
51 #if defined(SYSCLOCK) // allow for processor specific code to define F_CPU
53 #define F_CPU SYSCLOCK // Clock frequency to be used for timing.
62 #define DISABLE_LED_FEEDBACK false
63 #define ENABLE_LED_FEEDBACK true
64 #define USE_DEFAULT_FEEDBACK_LED_PIN 0
70 #if !defined(RAW_BUFFER_LENGTH)
71 # if defined(DECODE_MAGIQUEST)
72 #define RAW_BUFFER_LENGTH 112 // MagiQuest requires 112 bytes.
74 #define RAW_BUFFER_LENGTH 100
75 //#define RAW_BUFFER_LENGTH 750 // 750 (600 if we have only 2k RAM) is the value for air condition remotes.
78 #if RAW_BUFFER_LENGTH % 2 == 1
79 #error RAW_BUFFER_LENGTH must be even, since the array consists of space / mark pairs.
86 #define IR_REC_STATE_IDLE 0 // Counting the gap time and waiting for the start bit to arrive
87 #define IR_REC_STATE_MARK 1 // A mark was received and we are counting the duration of it.
88 #define IR_REC_STATE_SPACE 2 // A space was received and we are counting the duration of it. If space is too long, we assume end of frame.
89 #define IR_REC_STATE_STOP 3 // Stopped until set to IR_REC_STATE_IDLE which can only be done by resume()
100 volatile uint8_t *IRReceivePinPortInputRegister;
101 uint8_t IRReceivePinMask;
104 #if !IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK
108 #if RAW_BUFFER_LENGTH <= 254 // saves around 75 bytes program memory and speeds up ISR
116 #if (__INT_WIDTH__ < 32)
118 #define BITS_IN_RAW_DATA_TYPE 32
121 #define BITS_IN_RAW_DATA_TYPE 64
130 #if defined(DEBUG) || defined(TRACE)
131 # define IR_DEBUG_PRINT(...) Serial.print(__VA_ARGS__)
132 # define IR_DEBUG_PRINTLN(...) Serial.println(__VA_ARGS__)
137 # define IR_DEBUG_PRINT(...) void()
141 # define IR_DEBUG_PRINTLN(...) void()
145 # define IR_TRACE_PRINT(...) Serial.print(__VA_ARGS__)
146 # define IR_TRACE_PRINTLN(...) Serial.println(__VA_ARGS__)
148 # define IR_TRACE_PRINT(...) void()
149 # define IR_TRACE_PRINTLN(...) void()
180 IRrecv(uint_fast8_t aReceivePin);
181 IRrecv(uint_fast8_t aReceivePin, uint_fast8_t aFeedbackLEDPin);
187 void begin(uint_fast8_t aReceivePin,
bool aEnableLEDFeedback =
false, uint_fast8_t aFeedbackLEDPin =
192 void start(uint32_t aMicrosecondsToAddToGapCounter);
193 void restartTimer(uint32_t aMicrosecondsToAddToGapCounter);
229 bool printIRResultShort(Print *aSerial,
bool aPrintRepeatGap =
true,
bool aCheckForRecordGapsMicros =
true);
252 uint_fast8_t aStartOffset = 3);
255 uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros,
bool aMSBfirst);
257 bool decodeBiPhaseData(uint_fast8_t aNumberOfBits, uint_fast8_t aStartOffset, uint_fast8_t aStartClockCount,
258 uint_fast8_t aValueOfSpaceToMarkTransition, uint16_t aBiphaseTimeUnit);
260 void initBiphaselevel(uint_fast8_t aRCDecodeRawbuffOffset, uint16_t aBiphaseTimeUnit);
306 __attribute__ ((deprecated (
"Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData.<fieldname> .")));
309 void blink13(uint8_t aEnableLEDFeedback)
310 __attribute__ ((deprecated (
"Please use setLEDFeedback() or enableLEDFeedback() / disableLEDFeedback().")));
316 uint_fast8_t
compare(uint16_t oldval, uint16_t newval);
336 bool matchTicks(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros);
337 bool matchMark(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros);
338 bool matchSpace(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros);
343 bool MATCH(uint16_t measured, uint16_t desired);
344 bool MATCH_MARK(uint16_t measured_ticks, uint16_t desired_us);
345 bool MATCH_SPACE(uint16_t measured_ticks, uint16_t desired_us);
354 #define DO_NOT_ENABLE_LED_FEEDBACK 0x00
355 #define LED_FEEDBACK_DISABLED_COMPLETELY 0x00
356 #define LED_FEEDBACK_ENABLED_FOR_RECEIVE 0x01
357 #define LED_FEEDBACK_ENABLED_FOR_SEND 0x02
359 void setLEDFeedback(uint8_t aFeedbackLEDPin, uint8_t aEnableLEDFeedback);
368 void setBlinkPin(uint8_t aFeedbackLEDPin) __attribute__ ((deprecated (
"Please use setLEDFeedback().")));
375 #if !defined(TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING)
376 #define TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING 25 // Relative tolerance (in percent) for matchTicks(), matchMark() and matchSpace() functions used for protocol decoding.
381 #define LTOL (100 - TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING)
384 #define UTOL (100 + TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING)
388 #if MICROS_PER_TICK == 50 && TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING == 25 // Defaults
389 #define TICKS_LOW(us) ((us)/67 ) // (us) / ((MICROS_PER_TICK:50 / LTOL:75 ) * 100)
390 #define TICKS_HIGH(us) (((us)/40) + 1) // (us) / ((MICROS_PER_TICK:50 / UTOL:125) * 100) + 1
392 #define TICKS_LOW(us) ((uint16_t ) ((long) (us) * LTOL / (MICROS_PER_TICK * 100) ))
393 #define TICKS_HIGH(us) ((uint16_t ) ((long) (us) * UTOL / (MICROS_PER_TICK * 100) + 1))
414 #define SEND_REPEAT_COMMAND true
426 #if defined(IR_SEND_PIN)
429 void begin(
bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin);
431 void begin(uint8_t aSendPin)
432 # if !defined (DOXYGEN)
433 __attribute__ ((deprecated (
"Error: IR_SEND_PIN is still defined, therefore the function begin(aSendPin) is NOT available. You must disable '#define IR_SEND_PIN' to enable this function.")));
437 void begin(uint_fast8_t aSendPin,
bool aEnableLEDFeedback)
438 # if !defined (DOXYGEN)
439 __attribute__ ((deprecated (
"You must use begin() and enableLEDFeedback() or disableLEDFeedback() since version 4.3.")));
442 IRsend(uint_fast8_t aSendPin);
443 void begin(uint_fast8_t aSendPin);
446 void begin(uint_fast8_t aSendPin,
bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin);
453 #if defined(SEND_PWM_BY_TIMER)
454 void enableHighFrequencyIROut(uint_fast16_t aFrequencyKHz);
458 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
459 IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis,
462 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
463 IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits,
bool aMSBFirst,
bool aSendStopBit,
465 __attribute__ ((deprecated (
"Since version 4.1.0 parameter aSendStopBit is not longer required.")));
469 IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis,
475 uint_fast8_t aNumberOfBits);
476 void sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros,
477 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
478 IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis,
480 void sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros,
481 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
482 IRRawDataType aData, uint_fast8_t aNumberOfBits,
bool aMSBFirst,
bool aSendStopBit, uint16_t aRepeatPeriodMillis,
484 __attribute__ ((deprecated (
"Since version 4.1.0 parameter aSendStopBit is not longer required.")));
486 uint16_t aZeroSpaceMicros,
IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags);
488 uint16_t aZeroSpaceMicros,
IRRawDataType aData, uint_fast8_t aNumberOfBits,
bool aMSBFirst,
bool aSendStopBit)
489 __attribute__ ((deprecated (
"Since version 4.1.0 last parameter aSendStopBit is not longer required.")));
490 void sendBiphaseData(uint16_t aBiphaseTimeUnit, uint32_t aData, uint_fast8_t aNumberOfBits);
492 void mark(uint16_t aMarkMicros);
493 static void space(uint16_t aSpaceMicros);
497 void sendRaw(
const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
498 void sendRaw_P(
const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
501 void sendRaw(
const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
502 void sendRaw_P(
const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
508 int8_t aNumberOfHeaderBits = 8);
510 int8_t aNumberOfHeaderBits = 8);
511 void sendBangOlufsenRaw(uint32_t aRawData, int_fast8_t aBits,
bool aBackToBack =
false);
513 bool aUseDatalinkTiming =
false);
517 #if !defined (DOXYGEN)
518 __attribute__ ((deprecated (
"Please use sendDenon(aAddress, aCommand, aNumberOfRepeats).")));
555 void sendLegoPowerFunctions(uint8_t aChannel, uint8_t tCommand, uint8_t aMode,
bool aDoSend5Times =
true);
585 void sendJVCMSB(
unsigned long data,
int nbits,
bool repeat =
false);
587 void sendLG(
unsigned long data,
596 void sendNECMSB(uint32_t data, uint8_t nbits,
bool repeat =
false);
597 void sendRC5(uint32_t data, uint8_t nbits);
598 void sendRC5ext(uint8_t addr, uint8_t cmd,
bool toggle);
599 void sendRC6Raw(uint32_t data, uint8_t nbits);
600 void sendRC6(uint32_t data, uint8_t nbits)
__attribute__ ((deprecated (
"Please use sendRC6Raw().")));
601 void sendRC6Raw(uint64_t data, uint8_t nbits);
602 void sendRC6(uint64_t data, uint8_t nbits)
__attribute__ ((deprecated (
"Please use sendRC6Raw().")));
605 void sendSharp(uint16_t address, uint16_t command);
607 __attribute__ ((deprecated (
"This old function sends MSB first! Please use sendSamsung().")));
610 __attribute__ ((deprecated (
"This old function sends MSB first! Please use sendSony(aAddress, aCommand, aNumberOfRepeats).")));
612 void sendWhynter(uint32_t aData, uint8_t aNumberOfBitsToSend);
614 #if !defined(IR_SEND_PIN)
633 #endif // _IR_REMOTE_INT_H
bool decodeHash()
decodeHash - decode an arbitrary IR code.
void sendShuzu(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
void sendLGRaw(uint32_t aRawData, int_fast8_t aNumberOfRepeats=NO_REPEATS)
Here you can put your raw data, even one with "wrong" checksum.
Results returned from old decoders !!!deprecated!!!
void sendApple(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
void sendMagiQuest(uint32_t aWandId, uint16_t aMagnitude)
void setFeedbackLED(bool aSwitchLedOn)
Flash LED while receiving or sending IR data.
void sendDish(uint16_t aData)
void sendNECRaw(uint32_t aRawData, int_fast8_t aNumberOfRepeats=NO_REPEATS)
void stop()
Disables the timer for IR reception.
decode_type_t lastDecodedProtocol
void int_fast8_t aNumberOfRepeats
void sendJVC(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
The JVC protocol repeats by skipping the header mark and space -> this leads to a poor repeat detecti...
void disableIRIn()
Alias for stop().
void sendKaseikyo_Sharp(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with SHARP_VENDOR_ID_CODE.
void setBlinkPin(uint8_t aFeedbackLEDPin) __attribute__((deprecated("Please use setLEDFeedback().")))
Old deprecated function name for setLEDFeedback()
void enableIRIn()
Alias for start().
void sendBangOlufsenRaw(uint32_t aRawData, int_fast8_t aBits, bool aBackToBack=false)
void setSendPin(uint_fast8_t aSendPin)
bool checkForRecordGapsMicros(Print *aSerial)
void sendBoseWave(uint8_t aCommand, int_fast8_t aNumberOfRepeats=NO_REPEATS)
void sendSony(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, uint8_t numberOfBits=12)
void disableLEDFeedbackForSend()
size_t compensateAndStorePronto(String *aString, uint16_t frequency=38000U)
void registerReceiveCompleteCallback(void(*aReceiveCompleteCallbackFunction)(void))
Sets the function to call if a protocol message has arrived.
Main class for receiving IR signals.
#define NO_REPEATS
Just for better readability of code.
void sendRC6Raw(uint32_t data, uint8_t nbits)
void mark(uint16_t aMarkMicros)
Sends an IR mark for the specified number of microseconds.
bool decodeDistanceWidth()
void sendSamsungLGRepeat()
Send repeat Repeat commands should be sent in a 110 ms raster.
constexpr auto disableLEDFeedbackForReceive
void sendSamsung48(uint16_t aAddress, uint32_t aCommand, int_fast8_t aNumberOfRepeats)
Here we send Samsung48 We send 2 x (8 bit command and then ~command)
void sendRC6(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle=true)
Assemble raw data for RC6 from parameters and toggle state and send We do not wait for the minimal tr...
decode_type_t
An enum consisting of all supported formats.
void restartAfterSend()
Restarts receiver after send.
static void customDelayMicroseconds(unsigned long aMicroseconds)
Custom delay function that circumvents Arduino's delayMicroseconds 16 bit limit and is (mostly) not e...
void sendPulseDistanceWidth(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, uint_fast8_t aNumberOfBits, int_fast8_t aNumberOfRepeats)
Sends PulseDistance frames and repeats and enables receiver again.
IRrecv()
Instantiate the IRrecv class.
uint_fast8_t sBiphaseDecodeRawbuffOffset
void blink13(uint8_t aEnableLEDFeedback) __attribute__((deprecated("Please use setLEDFeedback() or enableLEDFeedback() / disableLEDFeedback().")))
Old deprecated function name for setLEDFeedback() or enableLEDFeedback() / disableLEDFeedback()
void printIRResultAsCVariables(Print *aSerial)
Print results as C variables to be used for sendXXX()
uint16_t rawbuf[RAW_BUFFER_LENGTH]
raw data / tick counts per mark/space, first entry is the length of the gap between previous and curr...
void sendWhynter(uint32_t aData, uint8_t aNumberOfBitsToSend)
void sendDenonRaw(uint16_t aRawData, int_fast8_t aNumberOfRepeats=NO_REPEATS) void sendFAST(uint8_t aCommand
__attribute__((deprecated("This old function sends MSB first! Please use sendSamsung().")))
decode_type_t decode_type
bool matchTicks(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros)
Match function without compensating for marks exceeded or spaces shortened by demodulator hardware Cu...
void(* ReceiveCompleteCallbackFunction)(void)
The function to call if a protocol message has arrived, i.e. StateForISR changed to IR_REC_STATE_STOP...
void begin(uint_fast8_t aReceivePin, bool aEnableLEDFeedback=false, uint_fast8_t aFeedbackLEDPin=USE_DEFAULT_FEEDBACK_LED_PIN)
Initializes the receive and feedback pin.
void sendRaw_P(const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz)
New function using an 8 byte tick (50 us) timing array in FLASH to save program memory Raw data start...
void checkForRepeatSpaceTicksAndSetFlag(uint16_t aMaximumRepeatSpaceTicks)
bool decodeSonyMSB(decode_results *aResults)
Main class for sending IR signals.
This struct contains the data and control used for receiver static functions and the ISR (interrupt s...
bool matchSpace(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros)
Compensate for spaces shortened by demodulator hardware.
void compensateAndPrintIRResultAsPronto(Print *aSerial, uint16_t frequency=38000U)
Print the result (second argument) as Pronto Hex on the Print supplied as argument.
void sendLG2SpecialRepeat()
Static function for sending special repeat frame.
IRData * read()
If IR receiver data is available, returns pointer to IrReceiver.decodedIRData, else NULL.
uint_fast8_t getBiphaselevel()
Gets the level of one time interval (aBiphaseTimeUnit) at a time from the raw buffer.
uint_fast8_t rawlen
counter of entries in rawbuf
bool decodePulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, uint_fast8_t aNumberOfBits, uint_fast8_t aStartOffset=3)
Decode pulse distance protocols for PulseDistanceWidthProtocolConstants.
bool decodeLGMSB(decode_results *aResults)
void sendSamsung(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
Here we send Samsung32 If we get a command < 0x100, we send command and then ~command If we get an ad...
void sendNEC2(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
bool MATCH_SPACE(uint16_t measured_ticks, uint16_t desired_us)
bool decodeSAMSUNG(decode_results *aResults)
bool decodeLegoPowerFunctions()
bool OverflowFlag
Raw buffer OverflowFlag occurred.
void sendRaw(const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz)
Function using an 8 byte tick timing array to save program memory Raw data starts with a Mark.
bool decodePanasonicMSB(decode_results *aResults)
Data structure for the user application, available as decodedIRData.
void sendSamsung16BitAddressAndCommand(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
Maybe no one needs it in the wild...
void sendSamsungLG(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
void sendRC5ext(uint8_t addr, uint8_t cmd, bool toggle)
bool decodeBiPhaseData(uint_fast8_t aNumberOfBits, uint_fast8_t aStartOffset, uint_fast8_t aStartClockCount, uint_fast8_t aValueOfSpaceToMarkTransition, uint16_t aBiphaseTimeUnit)
void sendSamsungLGSpecialRepeat()
Like above, but implemented as a static function Used for sending special repeat frame.
void disableLEDFeedback()
bool printIRResultShort(Print *aSerial, bool aPrintRepeatGap=true, bool aCheckForRecordGapsMicros=true)
Function to print values and flags of IrReceiver.decodedIRData in one line.
void sendBangOlufsenDataLink(uint32_t aHeader, uint8_t aData, int_fast8_t aNumberOfRepeats=NO_REPEATS, int8_t aNumberOfHeaderBits=8)
bool MATCH(uint16_t measured, uint16_t desired)
void sendSharp(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
bool checkHeader(PulseDistanceWidthProtocolConstants *aProtocolConstants)
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.
uint_fast8_t compare(uint16_t oldval, uint16_t newval)
Compare two (tick) values for Hash decoder Use a tolerance of 20% to enable e.g.
void begin(uint_fast8_t aSendPin)
Initializes the send pin and enable LED feedback with board specific FEEDBACK_LED_ON() and FEEDBACK_L...
void sendNECMSB(uint32_t data, uint8_t nbits, bool repeat=false)
With Send sendNECMSB() you can send your old 32 bit codes.
void sendKaseikyo_JVC(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with JVC_VENDOR_ID_CODE.
static void printActiveIRProtocols(Print *aSerial)
void printActiveIRProtocols(Print *aSerial)
void nbits is deprecated and may not work as expected ! Use NumberOfRepeats
uint32_t computeLGRawDataAndChecksum(uint8_t aAddress, uint16_t aCommand)
uint16_t periodOnTimeMicros
void IRReceiveTimerInterruptHandler()
void restartTimerWithTicksToAdd(uint16_t aTicksToAddToGapCounter)
bool isIdle()
Returns status of reception.
void sendPanasonic(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with PANASONIC_VENDOR_ID_CODE.
void printDistanceWidthTimingInfo(Print *aSerial, DistanceWidthTimingInfoStruct *aDistanceWidthTimingInfo)
int getMarkExcessMicros()
Getter function for MARK_EXCESS_MICROS.
bool matchMark(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros)
Compensate for marks exceeded by demodulator hardware.
void compensateAndPrintIRResultAsCArray(Print *aSerial, bool aOutputMicrosecondsInsteadOfTicks=true)
Dump out the IrReceiver.decodedIRData.rawDataPtr->rawbuf[] to be used as C definition for sendRaw().
bool MATCH_MARK(uint16_t measured_ticks, uint16_t desired_us)
uint16_t getPulseCorrectionNanos()
size_t write(IRData *aIRSendData, int_fast8_t aNumberOfRepeats=NO_REPEATS)
Interprets and sends a IRData structure.
volatile uint_fast16_t TickCounterForISR
Counts 50uS ticks. The value is copied into the rawbuf array on every transition. Counting is indepen...
void sendDenon(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aSendSharp=false)
volatile uint8_t StateForISR
State Machine state.
void setReceivePin(uint_fast8_t aReceivePinNumber)
Sets / changes the receiver pin number.
bool decodeDenonOld(decode_results *aResults)
void start()
Start the receiving process.
void compensateAndStoreIRResultInArray(uint8_t *aArrayPtr)
Store the decodedIRData to be used for sendRaw().
void enableLEDFeedbackForSend()
uint32_t computeNECRawDataAndChecksum(uint16_t aAddress, uint16_t aCommand)
void printIRResultMinimal(Print *aSerial)
Function to print protocol number, address, command, raw data and repeat flag of IrReceiver....
void initDecodedIRData()
Is internally called by decode before calling decoders.
void sendPronto(const __FlashStringHelper *str, int_fast8_t aNumberOfRepeats=NO_REPEATS)
Common declarations for receiving and sending.
void addMicrosToInternalTickCounter(uint16_t aMicrosecondsToAddToInternalTickCounter)
void sendJVCMSB(unsigned long data, int nbits, bool repeat=false)
With Send sendJVCMSB() you can send your old 32 bit codes.
uint32_t lastDecodedCommand
bool decodeRC5()
Try to decode data as RC5 protocol.
bool available()
Returns true if IR receiver data is available.
uint16_t periodTimeMicros
static void space(uint16_t aSpaceMicros)
Sends an IR space for the specified number of microseconds.
void sendRC5(uint8_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats, bool aEnableAutomaticToggle=true)
constexpr auto enableLEDFeedbackForReceive
void initBiphaselevel(uint_fast8_t aRCDecodeRawbuffOffset, uint16_t aBiphaseTimeUnit)
void end()
Alias for stop().
void sendKaseikyo_Mitsubishi(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with MITSUBISHI_VENDOR_ID_CODE.
bool decodeNECMSB(decode_results *aResults)
void sendBangOlufsenRawDataLink(uint64_t aRawData, int_fast8_t aBits, bool aBackToBack=false, bool aUseDatalinkTiming=false)
bool decodeNEC()
Decodes also Onkyo and Apple.
bool decodeHashOld(decode_results *aResults)
void sendNECRepeat()
Send special NEC repeat frame Repeat commands should be sent in a 110 ms raster.
void printIRSendUsage(Print *aSerial)
Function to print values and flags of IrReceiver.decodedIRData in one line.
void sendSAMSUNG(unsigned long data, int nbits)
void IRLedOff()
Just switch the IR sending LED off to send an IR space A space is "no output", so the PWM output is d...
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)
void sendFAST(uint8_t aSendPin, uint16_t aCommand, uint_fast8_t aNumberOfRepeats=0)
void addTicksToInternalTickCounter(uint16_t aTicksToAddToInternalTickCounter)
void sendPulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, IRRawDataType aData, uint_fast8_t aNumberOfBits)
Sends PulseDistance data The output always ends with a space Each additional call costs 16 bytes prog...
bool decode()
The main decode function, attempts to decode the recently receive IR signal.
void sendSharpRaw(unsigned long data, int nbits)
#define RAW_BUFFER_LENGTH
The length of the buffer where the IR timing data is stored before decoding 100 is sufficient for mos...
uint32_t lastDecodedAddress
void sendOnkyo(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
void nbits is deprecated and may not work as expected ! Use Command
uint32_t getTotalDurationOfRawData()
void sendLegoPowerFunctions(uint8_t aChannel, uint8_t tCommand, uint8_t aMode, bool aDoSend5Times=true)
#define USE_DEFAULT_FEEDBACK_LED_PIN
bool decodeRC6()
Try to decode data as RC6 protocol.
void sendBiphaseData(uint16_t aBiphaseTimeUnit, uint32_t aData, uint_fast8_t aNumberOfBits)
Sends Biphase data MSB first Always send start bit, do not send the trailing space of the start bit 0...
const char * getProtocolString()
void sendLG(uint8_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
LG uses the NEC repeat.
void sendBangOlufsen(uint16_t aHeader, uint8_t aData, int_fast8_t aNumberOfRepeats=NO_REPEATS, int8_t aNumberOfHeaderBits=8)
void resume()
Restart the ISR (Interrupt Service Routine) state machine, to enable receiving of the next IR frame.
void startWithTicksToAdd(uint16_t aTicksToAddToGapCounter)
bool decode_old(decode_results *aResults)
IRrecv IrReceiver
The receiver instance.
void enableIROut(uint_fast8_t aFrequencyKHz)
Enables IR output.
void sendKaseikyo_Denon(uint16_t aAddress, uint8_t aData, int_fast8_t aNumberOfRepeats)
Stub using Kaseikyo with DENON_VENDOR_ID_CODE.
void printIRResultRawFormatted(Print *aSerial, bool aOutputMicrosecondsInsteadOfTicks=true)
Dump out the timings in IrReceiver.decodedIRData.rawDataPtr->rawbuf[] array 8 values per line.
void sendLG2(uint8_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
LG2 uses a special repeat.
bool decodeJVCMSB(decode_results *aResults)
void sendNECSpecialRepeat()
Static function variant of IRsend::sendNECRepeat For use in ProtocolConstants.
void setLEDFeedback(uint8_t aFeedbackLEDPin, uint8_t aEnableLEDFeedback)
Enable blinking of feedback LED (LED_BUILTIN is taken as default) on IR sending and receiving Cannot ...
void sendNEC(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
NEC Send frame and special repeats There is NO delay after the last sent repeat!
uint_fast8_t IRReceivePin
Pin connected to IR data from detector.