IRremote
Minimal receiver for NEC and FAST protocol

Classes

struct  TinyIRReceiverStruct
 Control and data variables of the state machine for TinyReceiver. More...
 
struct  TinyIRReceiverCallbackDataStruct
 Can be used by the callback to transfer received data to main loop for further processing. More...
 

Macros

#define VERSION_IRTINY   "1.0.0"
 
#define VERSION_IRTINY_MAJOR   1
 
#define VERSION_IRTINY_MINOR   0
 
#define VERSION_IRTINY_PATCH   0
 
#define NEC_ADDRESS_BITS   16
 Timing for NEC protocol. More...
 
#define NEC_COMMAND_BITS   16
 
#define NEC_BITS   (NEC_ADDRESS_BITS + NEC_COMMAND_BITS)
 
#define NEC_UNIT   560
 
#define NEC_HEADER_MARK   (16 * NEC_UNIT)
 
#define NEC_HEADER_SPACE   (8 * NEC_UNIT)
 
#define NEC_BIT_MARK   NEC_UNIT
 
#define NEC_ONE_SPACE   (3 * NEC_UNIT)
 
#define NEC_ZERO_SPACE   NEC_UNIT
 
#define NEC_REPEAT_HEADER_SPACE   (4 * NEC_UNIT)
 
#define NEC_REPEAT_PERIOD   110000
 
#define NEC_MINIMAL_DURATION   49900
 
#define NEC_MAXIMUM_REPEAT_DISTANCE   (NEC_REPEAT_PERIOD - NEC_MINIMAL_DURATION + 10000)
 
#define FAST_8_BIT_PARITY_ADDRESS_BITS   0
 FAST_8_BIT_CS Protocol characteristics: More...
 
#define FAST_8_BIT_PARITY_COMMAND_BITS   16
 
#define FAST_8_BIT_PARITY_BITS   (FAST_8_BIT_PARITY_ADDRESS_BITS + FAST_8_BIT_PARITY_COMMAND_BITS)
 
#define FAST_8_BIT_PARITY_UNIT   526
 
#define FAST_8_BIT_PARITY_BIT_MARK   FAST_8_BIT_PARITY_UNIT
 
#define FAST_8_BIT_PARITY_ONE_SPACE   (3 * FAST_8_BIT_PARITY_UNIT)
 
#define FAST_8_BIT_PARITY_ZERO_SPACE   FAST_8_BIT_PARITY_UNIT
 
#define FAST_8_BIT_PARITY_HEADER_MARK   (4 * FAST_8_BIT_PARITY_UNIT)
 
#define FAST_8_BIT_PARITY_HEADER_SPACE   (FAST_8_BIT_PARITY_ONE_SPACE)
 
#define FAST_8_BIT_PARITY_REPEAT_PERIOD   50000
 
#define FAST_8_BIT_PARITY_REPEAT_DISTANCE   (FAST_8_BIT_PARITY_REPEAT_PERIOD - (40 * FAST_8_BIT_PARITY_UNIT))
 
#define FAST_8_BIT_PARITY_MAXIMUM_REPEAT_DISTANCE   (FAST_8_BIT_PARITY_REPEAT_DISTANCE + 10000)
 
#define ENABLE_NEC_REPEAT_SUPPORT
 
#define TINY_ADDRESS_BITS   NEC_ADDRESS_BITS
 
#define TINY_COMMAND_BITS   NEC_COMMAND_BITS
 
#define TINY_ADDRESS_HAS_8_BIT_PARITY   true
 
#define TINY_COMMAND_HAS_8_BIT_PARITY   true
 
#define TINY_BITS   NEC_BITS
 
#define TINY_UNIT   NEC_UNIT
 
#define TINY_HEADER_MARK   NEC_HEADER_MARK
 
#define TINY_HEADER_SPACE   NEC_HEADER_SPACE
 
#define TINY_BIT_MARK   NEC_BIT_MARK
 
#define TINY_ONE_SPACE   NEC_ONE_SPACE
 
#define TINY_ZERO_SPACE   NEC_ZERO_SPACE
 
#define TINY_MAXIMUM_REPEAT_DISTANCE   NEC_MAXIMUM_REPEAT_DISTANCE
 
#define MICROS_IN_ONE_SECOND   1000000L
 
#define MICROS_IN_ONE_MILLI   1000L
 
#define lowerValue25Percent(aDuration)   (aDuration - (aDuration / 4))
 
#define upperValue25Percent(aDuration)   (aDuration + (aDuration / 4))
 
#define lowerValue50Percent(aDuration)   (aDuration / 2)
 
#define upperValue50Percent(aDuration)   (aDuration + (aDuration / 2))
 
#define IR_RECEIVER_STATE_WAITING_FOR_START_MARK   0
 
#define IR_RECEIVER_STATE_WAITING_FOR_START_SPACE   1
 
#define IR_RECEIVER_STATE_WAITING_FOR_FIRST_DATA_MARK   2
 
#define IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE   3
 
#define IR_RECEIVER_STATE_WAITING_FOR_DATA_MARK   4
 
#define IR_RECEIVER_STATE_WAITING_FOR_STOP_MARK   5
 
#define IRDATA_FLAGS_EMPTY   0x00
 
#define IRDATA_FLAGS_IS_REPEAT   0x01
 
#define IRDATA_FLAGS_IS_AUTO_REPEAT   0x02
 
#define IRDATA_FLAGS_PARITY_FAILED   0x04
 the current (autorepeat) frame violated parity check More...
 
#define IR_INPUT_PIN   2
 
#define TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT
 
#define USE_ATTACH_INTERRUPT
 

Functions

void handleReceivedTinyIRData (uint16_t aAddress, uint16_t aCommand, uint8_t aFlags)
 
bool initPCIInterruptForTinyReceiver ()
 Sets IR_INPUT_PIN mode to INPUT, and if IR_FEEDBACK_LED_PIN is defined, sets feedback LED output mode. More...
 
bool enablePCIInterruptForTinyReceiver ()
 Initializes hardware interrupt generation according to IR_INPUT_PIN or use attachInterrupt() function. More...
 
void disablePCIInterruptForTinyReceiver ()
 
bool isTinyReceiverIdle ()
 
void printTinyReceiverResultMinimal (uint8_t aAddress, uint8_t aCommand, uint8_t aFlags, Print *aSerial)
 
void sendFast8BitAndParity (uint8_t aSendPin, uint8_t aCommand, uint_fast8_t aNumberOfRepeats=0)
 
void sendNECMinimal (uint8_t aSendPin, uint8_t aCommand, uint_fast8_t aNumberOfRepeats=0)
 
void handleReceivedIRData (uint16_t aAddress, uint8_t aCommand, bool isRepetition)
 Declaration of the callback function provided by the user application. More...
 
void IRPinChangeInterruptHandler (void)
 The ISR (Interrupt Service Routine) of TinyIRRreceiver. More...
 

Variables

TinyIRReceiverStruct TinyIRReceiverControl
 

Detailed Description

Macro Definition Documentation

◆ ENABLE_NEC_REPEAT_SUPPORT

#define ENABLE_NEC_REPEAT_SUPPORT

Definition at line 111 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_ADDRESS_BITS

#define FAST_8_BIT_PARITY_ADDRESS_BITS   0

FAST_8_BIT_CS Protocol characteristics:

  • Bit timing is like JVC
  • The header is shorter, 4000 vs. 12500
  • No address and 16 bit data, interpreted as 8 bit command and 8 bit inverted command, leading to a fixed protocol length of (7 + (16 * 2) + 1) * 526 = 40 * 560 = 21040 microseconds or 21 ms.
  • Repeats are sent as complete frames but in a 50 ms period.

Definition at line 76 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_BIT_MARK

#define FAST_8_BIT_PARITY_BIT_MARK   FAST_8_BIT_PARITY_UNIT

Definition at line 82 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_BITS

#define FAST_8_BIT_PARITY_BITS   (FAST_8_BIT_PARITY_ADDRESS_BITS + FAST_8_BIT_PARITY_COMMAND_BITS)

Definition at line 78 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_COMMAND_BITS

#define FAST_8_BIT_PARITY_COMMAND_BITS   16

Definition at line 77 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_HEADER_MARK

#define FAST_8_BIT_PARITY_HEADER_MARK   (4 * FAST_8_BIT_PARITY_UNIT)

Definition at line 86 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_HEADER_SPACE

#define FAST_8_BIT_PARITY_HEADER_SPACE   (FAST_8_BIT_PARITY_ONE_SPACE)

Definition at line 87 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_MAXIMUM_REPEAT_DISTANCE

#define FAST_8_BIT_PARITY_MAXIMUM_REPEAT_DISTANCE   (FAST_8_BIT_PARITY_REPEAT_DISTANCE + 10000)

Definition at line 91 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_ONE_SPACE

#define FAST_8_BIT_PARITY_ONE_SPACE   (3 * FAST_8_BIT_PARITY_UNIT)

Definition at line 83 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_REPEAT_DISTANCE

#define FAST_8_BIT_PARITY_REPEAT_DISTANCE   (FAST_8_BIT_PARITY_REPEAT_PERIOD - (40 * FAST_8_BIT_PARITY_UNIT))

Definition at line 90 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_REPEAT_PERIOD

#define FAST_8_BIT_PARITY_REPEAT_PERIOD   50000

Definition at line 89 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_UNIT

#define FAST_8_BIT_PARITY_UNIT   526

Definition at line 80 of file TinyIR.h.

◆ FAST_8_BIT_PARITY_ZERO_SPACE

#define FAST_8_BIT_PARITY_ZERO_SPACE   FAST_8_BIT_PARITY_UNIT

Definition at line 84 of file TinyIR.h.

◆ IR_INPUT_PIN

#define IR_INPUT_PIN   2

Definition at line 104 of file TinyIRReceiver.hpp.

◆ IR_RECEIVER_STATE_WAITING_FOR_DATA_MARK

#define IR_RECEIVER_STATE_WAITING_FOR_DATA_MARK   4

Definition at line 185 of file TinyIR.h.

◆ IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE

#define IR_RECEIVER_STATE_WAITING_FOR_DATA_SPACE   3

Definition at line 184 of file TinyIR.h.

◆ IR_RECEIVER_STATE_WAITING_FOR_FIRST_DATA_MARK

#define IR_RECEIVER_STATE_WAITING_FOR_FIRST_DATA_MARK   2

Definition at line 183 of file TinyIR.h.

◆ IR_RECEIVER_STATE_WAITING_FOR_START_MARK

#define IR_RECEIVER_STATE_WAITING_FOR_START_MARK   0

Definition at line 181 of file TinyIR.h.

◆ IR_RECEIVER_STATE_WAITING_FOR_START_SPACE

#define IR_RECEIVER_STATE_WAITING_FOR_START_SPACE   1

Definition at line 182 of file TinyIR.h.

◆ IR_RECEIVER_STATE_WAITING_FOR_STOP_MARK

#define IR_RECEIVER_STATE_WAITING_FOR_STOP_MARK   5

Definition at line 186 of file TinyIR.h.

◆ IRDATA_FLAGS_EMPTY

#define IRDATA_FLAGS_EMPTY   0x00

Definition at line 214 of file TinyIR.h.

◆ IRDATA_FLAGS_IS_AUTO_REPEAT

#define IRDATA_FLAGS_IS_AUTO_REPEAT   0x02

Definition at line 216 of file TinyIR.h.

◆ IRDATA_FLAGS_IS_REPEAT

#define IRDATA_FLAGS_IS_REPEAT   0x01

Definition at line 215 of file TinyIR.h.

◆ IRDATA_FLAGS_PARITY_FAILED

#define IRDATA_FLAGS_PARITY_FAILED   0x04

the current (autorepeat) frame violated parity check

Definition at line 217 of file TinyIR.h.

◆ lowerValue25Percent

#define lowerValue25Percent (   aDuration)    (aDuration - (aDuration / 4))

Definition at line 173 of file TinyIR.h.

◆ lowerValue50Percent

#define lowerValue50Percent (   aDuration)    (aDuration / 2)

Definition at line 175 of file TinyIR.h.

◆ MICROS_IN_ONE_MILLI

#define MICROS_IN_ONE_MILLI   1000L

Definition at line 167 of file TinyIR.h.

◆ MICROS_IN_ONE_SECOND

#define MICROS_IN_ONE_SECOND   1000000L

Definition at line 163 of file TinyIR.h.

◆ NEC_ADDRESS_BITS

#define NEC_ADDRESS_BITS   16

Timing for NEC protocol.

see: https://www.sbprojects.net/knowledge/ir/nec.php LSB first, 1 start bit + 16 bit address + 8 bit data + 8 bit inverted data + 1 stop bit.

Definition at line 49 of file TinyIR.h.

◆ NEC_BIT_MARK

#define NEC_BIT_MARK   NEC_UNIT

Definition at line 58 of file TinyIR.h.

◆ NEC_BITS

#define NEC_BITS   (NEC_ADDRESS_BITS + NEC_COMMAND_BITS)

Definition at line 51 of file TinyIR.h.

◆ NEC_COMMAND_BITS

#define NEC_COMMAND_BITS   16

Definition at line 50 of file TinyIR.h.

◆ NEC_HEADER_MARK

#define NEC_HEADER_MARK   (16 * NEC_UNIT)

Definition at line 55 of file TinyIR.h.

◆ NEC_HEADER_SPACE

#define NEC_HEADER_SPACE   (8 * NEC_UNIT)

Definition at line 56 of file TinyIR.h.

◆ NEC_MAXIMUM_REPEAT_DISTANCE

#define NEC_MAXIMUM_REPEAT_DISTANCE   (NEC_REPEAT_PERIOD - NEC_MINIMAL_DURATION + 10000)

Definition at line 66 of file TinyIR.h.

◆ NEC_MINIMAL_DURATION

#define NEC_MINIMAL_DURATION   49900

Definition at line 65 of file TinyIR.h.

◆ NEC_ONE_SPACE

#define NEC_ONE_SPACE   (3 * NEC_UNIT)

Definition at line 59 of file TinyIR.h.

◆ NEC_REPEAT_HEADER_SPACE

#define NEC_REPEAT_HEADER_SPACE   (4 * NEC_UNIT)

Definition at line 62 of file TinyIR.h.

◆ NEC_REPEAT_PERIOD

#define NEC_REPEAT_PERIOD   110000

Definition at line 64 of file TinyIR.h.

◆ NEC_UNIT

#define NEC_UNIT   560

Definition at line 53 of file TinyIR.h.

◆ NEC_ZERO_SPACE

#define NEC_ZERO_SPACE   NEC_UNIT

Definition at line 60 of file TinyIR.h.

◆ TINY_ADDRESS_BITS

#define TINY_ADDRESS_BITS   NEC_ADDRESS_BITS

Definition at line 113 of file TinyIR.h.

◆ TINY_ADDRESS_HAS_8_BIT_PARITY

#define TINY_ADDRESS_HAS_8_BIT_PARITY   true

Definition at line 115 of file TinyIR.h.

◆ TINY_BIT_MARK

#define TINY_BIT_MARK   NEC_BIT_MARK

Definition at line 124 of file TinyIR.h.

◆ TINY_BITS

#define TINY_BITS   NEC_BITS

Definition at line 118 of file TinyIR.h.

◆ TINY_COMMAND_BITS

#define TINY_COMMAND_BITS   NEC_COMMAND_BITS

Definition at line 114 of file TinyIR.h.

◆ TINY_COMMAND_HAS_8_BIT_PARITY

#define TINY_COMMAND_HAS_8_BIT_PARITY   true

Definition at line 116 of file TinyIR.h.

◆ TINY_HEADER_MARK

#define TINY_HEADER_MARK   NEC_HEADER_MARK

Definition at line 121 of file TinyIR.h.

◆ TINY_HEADER_SPACE

#define TINY_HEADER_SPACE   NEC_HEADER_SPACE

Definition at line 122 of file TinyIR.h.

◆ TINY_MAXIMUM_REPEAT_DISTANCE

#define TINY_MAXIMUM_REPEAT_DISTANCE   NEC_MAXIMUM_REPEAT_DISTANCE

Definition at line 128 of file TinyIR.h.

◆ TINY_ONE_SPACE

#define TINY_ONE_SPACE   NEC_ONE_SPACE

Definition at line 125 of file TinyIR.h.

◆ TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT

#define TINY_RECEIVER_USE_ARDUINO_ATTACH_INTERRUPT

Definition at line 123 of file TinyIRReceiver.hpp.

◆ TINY_UNIT

#define TINY_UNIT   NEC_UNIT

Definition at line 119 of file TinyIR.h.

◆ TINY_ZERO_SPACE

#define TINY_ZERO_SPACE   NEC_ZERO_SPACE

Definition at line 126 of file TinyIR.h.

◆ upperValue25Percent

#define upperValue25Percent (   aDuration)    (aDuration + (aDuration / 4))

Definition at line 174 of file TinyIR.h.

◆ upperValue50Percent

#define upperValue50Percent (   aDuration)    (aDuration + (aDuration / 2))

Definition at line 176 of file TinyIR.h.

◆ USE_ATTACH_INTERRUPT

#define USE_ATTACH_INTERRUPT

Definition at line 444 of file TinyIRReceiver.hpp.

◆ VERSION_IRTINY

#define VERSION_IRTINY   "1.0.0"

Definition at line 38 of file TinyIR.h.

◆ VERSION_IRTINY_MAJOR

#define VERSION_IRTINY_MAJOR   1

Definition at line 39 of file TinyIR.h.

◆ VERSION_IRTINY_MINOR

#define VERSION_IRTINY_MINOR   0

Definition at line 40 of file TinyIR.h.

◆ VERSION_IRTINY_PATCH

#define VERSION_IRTINY_PATCH   0

Definition at line 41 of file TinyIR.h.

Function Documentation

◆ disablePCIInterruptForTinyReceiver()

void disablePCIInterruptForTinyReceiver ( )

Definition at line 574 of file TinyIRReceiver.hpp.

◆ enablePCIInterruptForTinyReceiver()

bool enablePCIInterruptForTinyReceiver ( )

Initializes hardware interrupt generation according to IR_INPUT_PIN or use attachInterrupt() function.

Returns
true if interrupt was successfully enabled

Definition at line 508 of file TinyIRReceiver.hpp.

◆ handleReceivedIRData()

void handleReceivedIRData ( uint16_t  aAddress,
uint8_t  aCommand,
bool  isRepetition 
)

Declaration of the callback function provided by the user application.

It is called every time a complete IR command or repeat was received.

◆ handleReceivedTinyIRData()

void handleReceivedTinyIRData ( uint16_t  aAddress,
uint16_t  aCommand,
uint8_t  aFlags 
)

◆ initPCIInterruptForTinyReceiver()

bool initPCIInterruptForTinyReceiver ( )

Sets IR_INPUT_PIN mode to INPUT, and if IR_FEEDBACK_LED_PIN is defined, sets feedback LED output mode.

Then call enablePCIInterruptForTinyReceiver()

Definition at line 393 of file TinyIRReceiver.hpp.

◆ IRPinChangeInterruptHandler()

void IRPinChangeInterruptHandler ( void  )

The ISR (Interrupt Service Routine) of TinyIRRreceiver.

It handles the NEC protocol decoding and calls the user callback function on complete. 5 us + 3 us for push + pop for a 16MHz ATmega

Definition at line 139 of file TinyIRReceiver.hpp.

◆ isTinyReceiverIdle()

bool isTinyReceiverIdle ( )

Definition at line 385 of file TinyIRReceiver.hpp.

◆ printTinyReceiverResultMinimal()

void printTinyReceiverResultMinimal ( uint8_t  aAddress,
uint8_t  aCommand,
uint8_t  aFlags,
Print *  aSerial 
)

Definition at line 405 of file TinyIRReceiver.hpp.

◆ sendFast8BitAndParity()

void sendFast8BitAndParity ( uint8_t  aSendPin,
uint8_t  aCommand,
uint_fast8_t  aNumberOfRepeats = 0 
)

Definition at line 147 of file TinyIRSender.hpp.

◆ sendNECMinimal()

void sendNECMinimal ( uint8_t  aSendPin,
uint8_t  aCommand,
uint_fast8_t  aNumberOfRepeats = 0 
)

Variable Documentation

◆ TinyIRReceiverControl

TinyIRReceiverStruct TinyIRReceiverControl

Definition at line 89 of file TinyIRReceiver.hpp.