diff --git a/README.md b/README.md index 915b128..b1b7671 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This library enables you to send and receive using infra-red signals on an Ardui Tutorials and more information will be made available on [the official homepage](http://z3t0.github.io/Arduino-IRremote/). -## Version - 2.4.0b +## Version - 2.5.0b ## Installation 1. Navigate to the [Releases](https://github.com/z3t0/Arduino-IRremote/releases) page. @@ -43,7 +43,7 @@ We are open to suggestions for adding support to new boards, however we highly r | [ATtiny84](https://github.com/SpenceKonde/ATTinyCore) | **6** | **1** | | [ATtiny85](https://github.com/SpenceKonde/ATTinyCore) | **1** | **TINY0** | | [ATmega8](https://github.com/MCUdude/MiniCore) | **9** | **1** | -| Atmega32u4 | 5, 9, **13** | 1, 3, **4** | +| Atmega32u4 | 5, **9**, 13 | 1, 3, **4** | | [ATmega48, ATmega88, ATmega168, ATmega328](https://github.com/MCUdude/MiniCore) | **3**, 9 | 1, **2** | | [ATmega1284](https://github.com/MCUdude/MightyCore) | 13, 14, 6 | 1, **2**, 3 | | [ATmega164, ATmega324, ATmega644](https://github.com/MCUdude/MightyCore) | 13, **14** | 1, **2** | diff --git a/changelog.md b/changelog.md index 92d6471..d090387 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,6 @@ +## 2.5.0 +- Added Philips Extended RC-5 protocol support [PR #522] (https://github.com/z3t0/Arduino-IRremote/pull/522) + ## 2.4.0 - 2017/08/10 - Cleanup of hardware dependencies. Merge in SAM support [PR #437](https://github.com/z3t0/Arduino-IRremote/pull/437) diff --git a/src/IRremote.h b/src/IRremote.h index 6e823c2..268204b 100644 --- a/src/IRremote.h +++ b/src/IRremote.h @@ -330,6 +330,7 @@ class IRsend //...................................................................... # if SEND_RC5 void sendRC5 (unsigned long data, int nbits) ; + void sendRC5ext (unsigned long addr, unsigned long cmd, boolean toggle); # endif # if SEND_RC6 void sendRC6 (unsigned long data, int nbits) ; diff --git a/src/ir_RC5_RC6.cpp b/src/ir_RC5_RC6.cpp index 402ded7..ab2b3b3 100644 --- a/src/ir_RC5_RC6.cpp +++ b/src/ir_RC5_RC6.cpp @@ -77,6 +77,73 @@ void IRsend::sendRC5 (unsigned long data, int nbits) space(0); // Always end with the LED off } + +void IRsend::sendRC5ext (unsigned long addr, unsigned long cmd, boolean toggle) +{ + // Set IR carrier frequency + enableIROut(36); + + unsigned long addressBits = 5; + unsigned long commandBits = 7; + unsigned long nbits = addressBits + commandBits; + + // Start + mark(RC5_T1); + + // Bit #6 of the command part, but inverted! + unsigned long cmdBit6 = (1UL << (commandBits-1)) & cmd; + if (cmdBit6) { + // Inverted (1 -> 0 = mark-to-space) + mark(RC5_T1); + space(RC5_T1); + } else { + space(RC5_T1); + mark(RC5_T1); + } + commandBits--; + + // Toggle bit + static int toggleBit = 1; + if (toggle) { + if (toggleBit == 0) { + toggleBit = 1; + } else { + toggleBit = 0; + } + } + if (toggleBit) { + space(RC5_T1); + mark(RC5_T1); + } else { + mark(RC5_T1); + space(RC5_T1); + } + + // Address + for (unsigned long mask = 1UL << (addressBits - 1); mask; mask >>= 1) { + if (addr & mask) { + space(RC5_T1); // 1 is space, then mark + mark(RC5_T1); + } else { + mark(RC5_T1); + space(RC5_T1); + } + } + + // Command + for (unsigned long mask = 1UL << (commandBits - 1); mask; mask >>= 1) { + if (cmd & mask) { + space(RC5_T1); // 1 is space, then mark + mark(RC5_T1); + } else { + mark(RC5_T1); + space(RC5_T1); + } + } + + space(0); // Always end with the LED off +} + #endif //+============================================================================= diff --git a/src/private/boarddefs.h b/src/private/boarddefs.h index f70ac45..c641711 100644 --- a/src/private/boarddefs.h +++ b/src/private/boarddefs.h @@ -131,8 +131,8 @@ // Teensy 2.0 #elif defined(__AVR_ATmega32U4__) //#define IR_USE_TIMER1 // tx = pin 14 - //#define IR_USE_TIMER3 // tx = pin 9 - #define IR_USE_TIMER4_HS // tx = pin 10 + #define IR_USE_TIMER3 // tx = pin 9 + //#define IR_USE_TIMER4_HS // tx = pin 10 // Teensy 3.0 / Teensy 3.1 #elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)