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
75 #if !defined(RAW_BUFFER_LENGTH)
76 # if (defined(RAMEND) && RAMEND <= 0x8FF) || (defined(RAMSIZE) && RAMSIZE < 0x8FF)
78 #define RAW_BUFFER_LENGTH 200
81 #define RAW_BUFFER_LENGTH 750 // The value for air condition remotes.
84 #if RAW_BUFFER_LENGTH % 2 == 1
85 #error RAW_BUFFER_LENGTH must be even, since the array consists of space / mark pairs.
88 #if RAW_BUFFER_LENGTH <= 254 // saves around 75 bytes program memory and speeds up ISR
102 #if RECORD_GAP_TICKS <= 400 // Corresponds to RECORD_GAP_MICROS of 200000. A value of 255 is foolproof, but we assume, that the frame gap is
108 #if (__INT_WIDTH__ < 32)
110 #define BITS_IN_RAW_DATA_TYPE 32
113 #define BITS_IN_RAW_DATA_TYPE 64
120 #define IR_REC_STATE_IDLE 0 // Counting the gap time and waiting for the start bit to arrive
121 #define IR_REC_STATE_MARK 1 // A mark was received and we are counting the duration of it.
122 #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.
123 #define IR_REC_STATE_STOP 3 // Stopped until set to IR_REC_STATE_IDLE which can only be done by resume()
134 volatile uint8_t *IRReceivePinPortInputRegister;
135 uint8_t IRReceivePinMask;
138 #if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK)
154 #if defined(DEBUG) || defined(TRACE)
155 # define IR_DEBUG_PRINT(...) Serial.print(__VA_ARGS__)
156 # define IR_DEBUG_PRINTLN(...) Serial.println(__VA_ARGS__)
161 # define IR_DEBUG_PRINT(...) void()
165 # define IR_DEBUG_PRINTLN(...) void()
169 # define IR_TRACE_PRINT(...) Serial.print(__VA_ARGS__)
170 # define IR_TRACE_PRINTLN(...) Serial.println(__VA_ARGS__)
172 # define IR_TRACE_PRINT(...) void()
173 # define IR_TRACE_PRINTLN(...) void()
204 IRrecv(uint_fast8_t aReceivePin);
205 IRrecv(uint_fast8_t aReceivePin, uint_fast8_t aFeedbackLEDPin);
207 #if !defined(IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK)
214 void begin(uint_fast8_t aReceivePin,
bool aEnableLEDFeedback =
false, uint_fast8_t aFeedbackLEDPin =
219 void start(uint32_t aMicrosecondsToAddToGapCounter);
220 void restartTimer(uint32_t aMicrosecondsToAddToGapCounter);
259 bool printIRResultShort(Print *aSerial,
bool aPrintRepeatGap =
true,
bool aCheckForRecordGapsMicros =
true);
285 uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros,
bool aMSBfirst);
288 uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros,
bool aMSBfirst)
289 __attribute__ ((deprecated (
"Please use decodePulseDistanceWidthData() with 6 parameters.")));
292 uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros,
bool aMSBfirst);
295 uint_fast8_t aValueOfSpaceToMarkTransition, uint16_t aBiphaseTimeUnit);
297 void initBiphaselevel(uint_fast8_t aRCDecodeRawbuffOffset, uint16_t aBiphaseTimeUnit);
343 __attribute__ ((deprecated (
"Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData.<fieldname> .")));
346 void blink13(uint8_t aEnableLEDFeedback)
347 __attribute__ ((deprecated (
"Please use setLEDFeedback() or enableLEDFeedback() / disableLEDFeedback().")));
353 uint_fast8_t
compare(uint16_t oldval, uint16_t newval);
373 bool matchTicks(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros);
374 bool matchMark(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros);
375 bool matchSpace(uint16_t aMeasuredTicks, uint16_t aMatchValueMicros);
380 bool MATCH(uint16_t measured, uint16_t desired);
381 bool MATCH_MARK(uint16_t measured_ticks, uint16_t desired_us);
382 bool MATCH_SPACE(uint16_t measured_ticks, uint16_t desired_us);
391 #define DO_NOT_ENABLE_LED_FEEDBACK 0x00
392 #define LED_FEEDBACK_DISABLED_COMPLETELY 0x00
393 #define LED_FEEDBACK_ENABLED_FOR_RECEIVE 0x01
394 #define LED_FEEDBACK_ENABLED_FOR_SEND 0x02
396 void setLEDFeedback(uint8_t aFeedbackLEDPin, uint8_t aEnableLEDFeedback);
405 void setBlinkPin(uint8_t aFeedbackLEDPin) __attribute__ ((deprecated (
"Please use setLEDFeedback().")));
412 #if !defined(TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT)
413 #define TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT 25 // Relative tolerance (in percent) for matchTicks(), matchMark() and matchSpace() functions used for protocol decoding.
416 #define TICKS(us) ((us)/MICROS_PER_TICK) // (us)/50
417 #if MICROS_PER_TICK == 50 && TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT == 25 // Defaults
418 #define TICKS_LOW(us) ((us)/67 ) // 67 = MICROS_PER_TICK / ((100-25)/100) = (MICROS_PER_TICK * 100) / (100-25)
419 #define TICKS_HIGH(us) (((us)/40) + 1) // 40 = MICROS_PER_TICK / ((100+25)/100) = (MICROS_PER_TICK * 100) / (100+25)
423 #define LTOL (100 - TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT)
426 #define UTOL (100 + TOLERANCE_FOR_DECODERS_MARK_OR_SPACE_MATCHING_PERCENT)
427 #define TICKS_LOW(us) ((uint16_t ) ((long) (us) * LTOL / (MICROS_PER_TICK * 100) ))
428 #define TICKS_HIGH(us) ((uint16_t ) ((long) (us) * UTOL / (MICROS_PER_TICK * 100) + 1))
449 #define SEND_REPEAT_COMMAND true
461 #if defined(IR_SEND_PIN)
464 void begin(
bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin);
466 void begin(uint8_t aSendPin)
467 # if !defined (DOXYGEN)
468 __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.")));
472 void begin(uint_fast8_t aSendPin,
bool aEnableLEDFeedback)
473 # if !defined (DOXYGEN)
474 __attribute__ ((deprecated (
"You must use begin() and enableLEDFeedback() or disableLEDFeedback() since version 4.3.")));
477 IRsend(uint_fast8_t aSendPin);
478 void begin(uint_fast8_t aSendPin);
481 void begin(uint_fast8_t aSendPin,
bool aEnableLEDFeedback, uint_fast8_t aFeedbackLEDPin);
488 #if defined(SEND_PWM_BY_TIMER)
489 void enableHighFrequencyIROut(uint_fast16_t aFrequencyKHz);
493 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
494 IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis,
499 IRRawDataType *aDecodedRawDataArray, uint16_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis,
505 uint_fast8_t aNumberOfBits);
506 void sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros,
507 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
508 IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags, uint16_t aRepeatPeriodMillis,
511 uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros,
512 IRRawDataType aData, uint_fast8_t aNumberOfBits,
bool aMSBFirst,
bool aSendStopBit, uint16_t aRepeatPeriodMillis,
514 __attribute__ ((deprecated (
"Since version 4.1.0 parameter aSendStopBit is not longer required.")));
516 uint16_t aZeroSpaceMicros,
IRRawDataType aData, uint_fast8_t aNumberOfBits, uint8_t aFlags);
517 void sendBiphaseData(uint16_t aBiphaseTimeUnit, uint32_t aData, uint_fast8_t aNumberOfBits);
519 void mark(uint16_t aMarkMicros);
520 static void space(uint16_t aSpaceMicros);
524 void sendRaw(
const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
525 void sendRaw_P(
const uint8_t aBufferWithTicks[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
528 void sendRaw(
const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
529 void sendRaw_P(
const uint16_t aBufferWithMicroseconds[], uint_fast16_t aLengthOfBuffer, uint_fast8_t aIRFrequencyKilohertz);
535 int8_t aNumberOfHeaderBits = 8);
537 int8_t aNumberOfHeaderBits = 8);
538 void sendBangOlufsenRaw(uint32_t aRawData, int_fast8_t aBits,
bool aBackToBack =
false);
540 bool aUseDatalinkTiming =
false);
544 #if !defined (DOXYGEN)
545 __attribute__ ((deprecated (
"Please use sendDenon(aAddress, aCommand, aNumberOfRepeats).")));
583 void sendLegoPowerFunctions(uint8_t aChannel, uint8_t tCommand, uint8_t aMode,
bool aDoSend5Times =
true);
613 void sendJVCMSB(
unsigned long data,
int nbits,
bool repeat =
false);
615 void sendLG(
unsigned long data,
624 void sendNECMSB(uint32_t data, uint8_t nbits,
bool repeat =
false);
625 void sendRC5(uint32_t data, uint8_t nbits);
626 void sendRC5ext(uint8_t addr, uint8_t cmd,
bool toggle);
627 void sendRC6Raw(uint32_t data, uint8_t nbits);
628 void sendRC6(uint32_t data, uint8_t nbits)
__attribute__ ((deprecated (
"Please use sendRC6Raw().")));
629 void sendRC6Raw(uint64_t data, uint8_t nbits);
630 void sendRC6(uint64_t data, uint8_t nbits)
__attribute__ ((deprecated (
"Please use sendRC6Raw().")));
633 void sendSharp(uint16_t address, uint16_t command);
635 __attribute__ ((deprecated (
"This old function sends MSB first! Please use sendSamsung().")));
640 __attribute__ ((deprecated (
"This old function sends MSB first! Please use sendSony(aAddress, aCommand, aNumberOfRepeats).")));
642 void sendWhynter(uint32_t aData, uint8_t aNumberOfBitsToSend);
644 #if !defined(IR_SEND_PIN)
663 #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)
Apple: Send NEC with fixed 16 bit Apple address 0x87EE.
void sendMagiQuest(uint32_t aWandId, uint16_t aMagnitude)
void sendSamsungMSB(unsigned long data, int nbits)
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)
Sends NEC protocol.
void stop()
Disables the timer for IR reception.
decode_type_t lastDecodedProtocol
void int_fast8_t aNumberOfRepeats
bool decodeBiPhaseData(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint_fast8_t aStartClockCount, uint_fast8_t aValueOfSpaceToMarkTransition, uint16_t aBiphaseTimeUnit)
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()
unsigned int IRRawlenType
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.
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()
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.
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)
bool decodePulseDistanceWidthDataStrict(uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset, uint16_t aOneMarkMicros, uint16_t aZeroMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroSpaceMicros, bool aMSBfirst)
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.
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...
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)
IRRawlenType rawlen
counter of entries in rawbuf
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)
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)
void sendPulseDistanceWidth(uint_fast8_t aFrequencyKHz, uint16_t aHeaderMarkMicros, uint16_t aHeaderSpaceMicros, uint16_t aOneMarkMicros, uint16_t aOneSpaceMicros, uint16_t aZeroMarkMicros, uint16_t aZeroSpaceMicros, IRRawDataType aData, uint_fast8_t aNumberOfBits, bool aMSBFirst, bool aSendStopBit, uint16_t aRepeatPeriodMillis, int_fast8_t aNumberOfRepeats, void(*aSpecialSendRepeatFunction)()=NULL) __attribute__((deprecated("Since version 4.1.0 parameter aSendStopBit is not longer required.")))
bool checkHeader(PulseDistanceWidthProtocolConstants *aProtocolConstants)
bool decodePulseDistanceWidthData(PulseDistanceWidthProtocolConstants *aProtocolConstants, uint_fast8_t aNumberOfBits, IRRawlenType aStartOffset=3)
Decode pulse distance protocols for PulseDistanceWidthProtocolConstants.
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 sendNEC(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
NEC Send frame and special repeats There is NO delay after the last sent repeat!
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()
uint8_t getMaximumTicksFromRawData(bool aSearchSpaceInsteadOfMark)
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.
IRRawbufType rawbuf[RAW_BUFFER_LENGTH]
raw data / tick counts per mark/space. With 8 bit we can only store up to 12.7 ms....
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)
Convert 16 bit address and 16 bit command to 32 bit NECRaw data If we get a command < 0x100,...
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)
uint8_t getMaximumMarkTicksFromRawData()
Common declarations for receiving and sending.
void sendSamsung16BitAddressAnd8BitCommand(uint16_t aAddress, uint8_t aCommand, int_fast8_t aNumberOfRepeats)
Maybe no one needs it in the wild...
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.
void sendSonyMSB(unsigned long data, int nbits)
Old version with MSB first data.
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.
uint8_t getMaximumSpaceTicksFromRawData()
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 sendNEC2(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
NEC2 Send frame !!! and repeat the frame for each requested repeat !!! There is NO delay after the la...
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 from data contained in parameter using ProtocolConstants structure for timing etc...
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 RAW_BUFFER_LENGTH determines the length of the byte buffer where the received IR timing data is s...
uint32_t lastDecodedAddress
void sendOnkyo(uint16_t aAddress, uint16_t aCommand, int_fast8_t aNumberOfRepeats)
There is NO delay after the last sent repeat!
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 ...
uint_fast8_t IRReceivePin
Pin connected to IR data from detector.
uint16_t initialGapTicks
Tick counts of the length of the gap between previous and current IR frame. Pre 4....