*\r
* Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
*\r
- * $Id: irmp.c,v 1.170 2015/01/28 09:18:30 fm Exp $\r
+ * $Id: irmp.c,v 1.171 2015/04/23 12:46:13 fm Exp $\r
*\r
* Supported AVR mikrocontrollers:\r
*\r
#define RCMM32_BIT_11_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RCMM32_11_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)\r
#define RCMM32_BIT_11_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RCMM32_11_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)\r
\r
+#define PENTAX_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define PENTAX_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+#define PENTAX_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define PENTAX_START_BIT_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+#define PENTAX_1_PAUSE_LEN_EXACT ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME + 0.5))\r
+#define PENTAX_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
+#define PENTAX_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+#define PENTAX_1_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
+#define PENTAX_1_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+#define PENTAX_0_PAUSE_LEN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME))\r
+#define PENTAX_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
+#define PENTAX_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+#define PENTAX_0_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
+#define PENTAX_0_PAUSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+\r
#define RADIO1_START_BIT_PULSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
#define RADIO1_START_BIT_PULSE_LEN_MAX ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
#define RADIO1_START_BIT_PAUSE_LEN_MIN ((uint_fast8_t)(F_INTERRUPTS * RADIO1_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
static const char proto_speaker[] PROGMEM = "SPEAKER";\r
static const char proto_lgair[] PROGMEM = "LGAIR";\r
static const char proto_samsung48[] PROGMEM = "SAMSG48";\r
+static const char proto_merlin[] PROGMEM = "MERLIN";\r
+static const char proto_pentax[] PROGMEM = "PENTAX";\r
\r
static const char proto_radio1[] PROGMEM = "RADIO1";\r
\r
proto_speaker,\r
proto_lgair,\r
proto_samsung48,\r
-\r
+ proto_merlin,\r
+ proto_pentax,\r
proto_radio1\r
};\r
\r
\r
#endif\r
\r
+#if IRMP_SUPPORT_PENTAX_PROTOCOL == 1\r
+\r
+static const PROGMEM IRMP_PARAMETER pentax_param =\r
+{\r
+ IRMP_PENTAX_PROTOCOL, // protocol: ir protocol\r
+ PENTAX_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1\r
+ PENTAX_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1\r
+ PENTAX_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1\r
+ PENTAX_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1\r
+ PENTAX_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0\r
+ PENTAX_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0\r
+ PENTAX_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0\r
+ PENTAX_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0\r
+ PENTAX_ADDRESS_OFFSET, // address_offset: address offset\r
+ PENTAX_ADDRESS_OFFSET + PENTAX_ADDRESS_LEN, // address_end: end of address\r
+ PENTAX_COMMAND_OFFSET, // command_offset: command offset\r
+ PENTAX_COMMAND_OFFSET + PENTAX_COMMAND_LEN, // command_end: end of command\r
+ PENTAX_COMPLETE_DATA_LEN, // complete_len: complete length of frame\r
+ PENTAX_STOP_BIT, // stop_bit: flag: frame has stop bit\r
+ PENTAX_LSB, // lsb_first: flag: LSB first\r
+ PENTAX_FLAGS // flags: some flags\r
+};\r
+\r
+#endif\r
+\r
#if IRMP_SUPPORT_RADIO1_PROTOCOL == 1\r
\r
static const PROGMEM IRMP_PARAMETER radio1_param =\r
else\r
#endif // IRMP_SUPPORT_ROOMBA_PROTOCOL == 1\r
\r
+#if IRMP_SUPPORT_PENTAX_PROTOCOL == 1\r
+ if (irmp_pulse_time >= PENTAX_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= PENTAX_START_BIT_PULSE_LEN_MAX &&\r
+ irmp_pause_time >= PENTAX_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= PENTAX_START_BIT_PAUSE_LEN_MAX)\r
+ {\r
+#ifdef ANALYZE\r
+ ANALYZE_PRINTF ("protocol = PENTAX, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
+ PENTAX_START_BIT_PULSE_LEN_MIN, PENTAX_START_BIT_PULSE_LEN_MAX,\r
+ PENTAX_START_BIT_PAUSE_LEN_MIN, PENTAX_START_BIT_PAUSE_LEN_MAX);\r
+#endif // ANALYZE\r
+ irmp_param_p = (IRMP_PARAMETER *) &pentax_param;\r
+ }\r
+ else\r
+#endif // IRMP_SUPPORT_PENTAX_PROTOCOL == 1\r
+\r
#if IRMP_SUPPORT_NIKON_PROTOCOL == 1\r
if (irmp_pulse_time >= NIKON_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= NIKON_START_BIT_PULSE_LEN_MAX &&\r
irmp_pause_time >= NIKON_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NIKON_START_BIT_PAUSE_LEN_MAX)\r
* Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
* Extensions for PIC 12F1820 W.Strobl 2014-07-20\r
*\r
- * $Id: irmpconfig.h,v 1.125 2015/02/26 15:42:53 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.127 2015/04/23 12:47:29 fm Exp $\r
*\r
* This program is free software; you can redistribute it and/or modify\r
* it under the terms of the GNU General Public License as published by\r
#define IRMP_SUPPORT_LGAIR_PROTOCOL 0 // LG Air Condition >= 10000 ~300 bytes\r
#define IRMP_SUPPORT_SAMSUNG48_PROTOCOL 0 // Samsung48 >= 10000 ~100 bytes (SAMSUNG must be enabled!)\r
#define IRMP_SUPPORT_MERLIN_PROTOCOL 0 // Merlin >= 15000 (better 20000) ~300 bytes\r
+#define IRMP_SUPPORT_PENTAX_PROTOCOL 0 // Pentax >= 10000 ~150 bytes\r
#define IRMP_SUPPORT_RADIO1_PROTOCOL 0 // RADIO, e.g. TEVION >= 10000 ~250 bytes (experimental)\r
\r
/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
*\r
* Copyright (c) 2013-2015 Frank Meyer - frank(at)fli4l.de\r
*\r
- * $Id: irmpprotocols.h,v 1.31 2015/02/26 15:42:53 fm Exp $\r
+ * $Id: irmpprotocols.h,v 1.32 2015/04/23 12:46:13 fm Exp $\r
*\r
* This program is free software; you can redistribute it and/or modify\r
* it under the terms of the GNU General Public License as published by\r
#define IRMP_LGAIR_PROTOCOL 40 // LG air conditioner\r
#define IRMP_SAMSUNG48_PROTOCOL 41 // air conditioner with SAMSUNG protocol (48 bits)\r
#define IRMP_MERLIN_PROTOCOL 42 // Merlin (Pollin 620 185)\r
+#define IRMP_PENTAX_PROTOCOL 43 // Pentax camera\r
+#define IRMP_RADIO1_PROTOCOL 44 // Radio protocol (experimental status), do not use it yet!\r
\r
-#define IRMP_RADIO1_PROTOCOL 43 // Radio protocol (experimental status), do not use it yet!\r
-\r
-#define IRMP_N_PROTOCOLS 43 // number of supported protocols\r
+#define IRMP_N_PROTOCOLS 44 // number of supported protocols\r
\r
/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
* timing constants:\r
\r
#define RCMM32_FRAME_REPEAT_PAUSE_TIME 80.0e-3 // frame repeat after 80 ms\r
#define RCMM32_ADDRESS_OFFSET 0 // skip 0 bits\r
-#define RCMM32_ADDRESS_LEN 16 // read 16 address bits\r
+#define RCMM32_ADDRESS_LEN 16 // read 16 address bits\r
#define RCMM32_COMMAND_OFFSET 17 // skip 17 bits\r
#define RCMM32_COMMAND_LEN 15 // read 15 bits\r
#define RCMM32_COMPLETE_DATA_LEN 32 // complete length\r
#define RCMM32_LSB 0 // LSB...MSB\r
#define RCMM32_FLAGS 0 // flags\r
\r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * PENTAX:\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#define PENTAX_START_BIT_PULSE_TIME 13000.0e-6 // 13 msec pulse\r
+#define PENTAX_START_BIT_PAUSE_TIME 3000.0e-6 // 3 msec pause\r
+#define PENTAX_PULSE_TIME 1000.0e-6 // 1 msec pulse\r
+#define PENTAX_1_PAUSE_TIME 3000.0e-6 // 3 msec pause\r
+#define PENTAX_0_PAUSE_TIME 1000.0e-6 // 1 msec pause\r
+#define PENTAX_FRAME_REPEAT_PAUSE_TIME 60.0e-3 // frame repeat after 60ms\r
+#define PENTAX_ADDRESS_OFFSET 0 // skip 0 bits\r
+#define PENTAX_ADDRESS_LEN 0 // read 0 address bits\r
+#define PENTAX_COMMAND_OFFSET 0 // skip 0 bits\r
+#define PENTAX_COMMAND_LEN 6 // read 6 bits\r
+#define PENTAX_COMPLETE_DATA_LEN 6 // complete length\r
+#define PENTAX_STOP_BIT 1 // has stop bit\r
+#define PENTAX_LSB 0 // LSB...MSB\r
+#define PENTAX_FLAGS 0 // flags\r
+\r
/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
* RADIO1 - e.g. Tevion\r
*---------------------------------------------------------------------------------------------------------------------------------------------------\r
*/\r
-#define RADIO1_START_BIT_PULSE_TIME 3000.0e-6 // 3000 usec pulse\r
-#define RADIO1_START_BIT_PAUSE_TIME 7000.0e-6 // 7000 usec pulse\r
-#define RADIO1_0_PULSE_TIME 500.0e-6 // 500 usec pulse\r
-#define RADIO1_0_PAUSE_TIME 1000.0e-6 // 1000 usec pause\r
-#define RADIO1_1_PULSE_TIME 1000.0e-6 // 1000 usec pulse\r
-#define RADIO1_1_PAUSE_TIME 500.0e-6 // 500 usec pause\r
-\r
-#define RADIO1_FRAME_REPEAT_PAUSE_TIME 25.0e-3 // frame repeat after 25ms\r
-#define RADIO1_ADDRESS_OFFSET 4 // skip 4 bits\r
-#define RADIO1_ADDRESS_LEN 16 // read 16 address bits\r
-#define RADIO1_COMMAND_OFFSET 20 // skip 4 + 16 bits\r
-#define RADIO1_COMMAND_LEN 3 // read 3 command bits\r
-#define RADIO1_COMPLETE_DATA_LEN 23 // complete length\r
-#define RADIO1_STOP_BIT 1 // has stop bit\r
-#define RADIO1_LSB 1 // LSB...MSB?\r
-#define RADIO1_FLAGS 0 // flags\r
+#define RADIO1_START_BIT_PULSE_TIME 3000.0e-6 // 3000 usec pulse\r
+#define RADIO1_START_BIT_PAUSE_TIME 7000.0e-6 // 7000 usec pulse\r
+#define RADIO1_0_PULSE_TIME 500.0e-6 // 500 usec pulse\r
+#define RADIO1_0_PAUSE_TIME 1000.0e-6 // 1000 usec pause\r
+#define RADIO1_1_PULSE_TIME 1000.0e-6 // 1000 usec pulse\r
+#define RADIO1_1_PAUSE_TIME 500.0e-6 // 500 usec pause\r
+\r
+#define RADIO1_FRAME_REPEAT_PAUSE_TIME 25.0e-3 // frame repeat after 25ms\r
+#define RADIO1_ADDRESS_OFFSET 4 // skip 4 bits\r
+#define RADIO1_ADDRESS_LEN 16 // read 16 address bits\r
+#define RADIO1_COMMAND_OFFSET 20 // skip 4 + 16 bits\r
+#define RADIO1_COMMAND_LEN 3 // read 3 command bits\r
+#define RADIO1_COMPLETE_DATA_LEN 23 // complete length\r
+#define RADIO1_STOP_BIT 1 // has stop bit\r
+#define RADIO1_LSB 1 // LSB...MSB?\r
+#define RADIO1_FLAGS 0 // flags\r
\r
/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
* Frame Repetitions:\r
* ATmega164, ATmega324, ATmega644, ATmega644P, ATmega1284, ATmega1284P\r
* ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328P\r
*\r
- * $Id: irsnd.c,v 1.84 2015/02/26 15:42:53 fm Exp $\r
+ * $Id: irsnd.c,v 1.85 2015/04/23 12:46:13 fm Exp $\r
*\r
* This program is free software; you can redistribute it and/or modify\r
* it under the terms of the GNU General Public License as published by\r
#define ROOMBA_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * ROOMBA_0_PAUSE_TIME + 0.5)\r
#define ROOMBA_FRAME_REPEAT_PAUSE_LEN (uint16_t)(F_INTERRUPTS * ROOMBA_FRAME_REPEAT_PAUSE_TIME + 0.5) // use uint16_t!\r
\r
+#define PENTAX_START_BIT_PULSE_LEN (uint8_t)(F_INTERRUPTS * PENTAX_START_BIT_PULSE_TIME + 0.5)\r
+#define PENTAX_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * PENTAX_START_BIT_PAUSE_TIME + 0.5)\r
+#define PENTAX_REPEAT_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * PENTAX_REPEAT_START_BIT_PAUSE_TIME + 0.5)\r
+#define PENTAX_PULSE_LEN (uint8_t)(F_INTERRUPTS * PENTAX_PULSE_TIME + 0.5)\r
+#define PENTAX_1_PAUSE_LEN (uint8_t)(F_INTERRUPTS * PENTAX_1_PAUSE_TIME + 0.5)\r
+#define PENTAX_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * PENTAX_0_PAUSE_TIME + 0.5)\r
+#define PENTAX_FRAME_REPEAT_PAUSE_LEN (uint16_t)(F_INTERRUPTS * PENTAX_FRAME_REPEAT_PAUSE_TIME + 0.5) // use uint16_t!\r
+\r
static volatile uint8_t irsnd_busy = 0;\r
static volatile uint8_t irsnd_protocol = 0;\r
static volatile uint8_t irsnd_buffer[6] = {0};\r
#if IRSND_SUPPORT_ROOMBA_PROTOCOL == 1\r
case IRMP_ROOMBA_PROTOCOL:\r
{\r
-\r
irsnd_buffer[0] = (irmp_data_p->command & 0x7F) << 1; // CCCCCCC.\r
irsnd_busy = TRUE;\r
break;\r
}\r
#endif\r
+#if IRSND_SUPPORT_PENTAX_PROTOCOL == 1\r
+ case IRMP_PENTAX_PROTOCOL:\r
+ {\r
+ irsnd_buffer[0] = (irmp_data_p->command & 0x3F) << 2; // CCCCCC..\r
+ irsnd_busy = TRUE;\r
+ break;\r
+ }\r
+#endif\r
+\r
default:\r
{\r
break;\r
irsnd_set_freq (IRSND_FREQ_38_KHZ);\r
break;\r
}\r
+#endif\r
+#if IRSND_SUPPORT_PENTAX_PROTOCOL == 1\r
+ case IRMP_PENTAX_PROTOCOL:\r
+ {\r
+ startbit_pulse_len = PENTAX_START_BIT_PULSE_LEN;\r
+ startbit_pause_len = PENTAX_START_BIT_PAUSE_LEN;\r
+ complete_data_len = PENTAX_COMPLETE_DATA_LEN;\r
+ pulse_1_len = PENTAX_PULSE_LEN;\r
+ pause_1_len = PENTAX_1_PAUSE_LEN - 1;\r
+ pulse_0_len = PENTAX_PULSE_LEN;\r
+ pause_0_len = PENTAX_0_PAUSE_LEN - 1;\r
+ has_stop_bit = PENTAX_STOP_BIT;\r
+ n_auto_repetitions = 1; // 1 frame\r
+ auto_repetition_pause_len = 0;\r
+ repeat_frame_pause_len = PENTAX_FRAME_REPEAT_PAUSE_LEN;\r
+ irsnd_set_freq (IRSND_FREQ_38_KHZ);\r
+ break;\r
+ }\r
#endif\r
default:\r
{\r
#if IRSND_SUPPORT_ROOMBA_PROTOCOL == 1\r
case IRMP_ROOMBA_PROTOCOL:\r
#endif\r
+#if IRSND_SUPPORT_PENTAX_PROTOCOL == 1\r
+ case IRMP_PENTAX_PROTOCOL:\r
+#endif\r
\r
#if IRSND_SUPPORT_SIRCS_PROTOCOL == 1 || IRSND_SUPPORT_NEC_PROTOCOL == 1 || IRSND_SUPPORT_NEC16_PROTOCOL == 1 || IRSND_SUPPORT_NEC42_PROTOCOL == 1 || \\r
IRSND_SUPPORT_LGAIR_PROTOCOL == 1 || IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1 || IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1 || \\r
IRSND_SUPPORT_KASEIKYO_PROTOCOL == 1 || IRSND_SUPPORT_RECS80_PROTOCOL == 1 || IRSND_SUPPORT_RECS80EXT_PROTOCOL == 1 || IRSND_SUPPORT_DENON_PROTOCOL == 1 || \\r
IRSND_SUPPORT_NUBERT_PROTOCOL == 1 || IRSND_SUPPORT_SPEAKER_PROTOCOL == 1 || IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 || IRSND_SUPPORT_FDC_PROTOCOL == 1 || IRSND_SUPPORT_RCCAR_PROTOCOL == 1 || \\r
IRSND_SUPPORT_JVC_PROTOCOL == 1 || IRSND_SUPPORT_NIKON_PROTOCOL == 1 || IRSND_SUPPORT_LEGO_PROTOCOL == 1 || IRSND_SUPPORT_THOMSON_PROTOCOL == 1 || \\r
- IRSND_SUPPORT_ROOMBA_PROTOCOL == 1 || IRSND_SUPPORT_TELEFUNKEN_PROTOCOL == 1\r
+ IRSND_SUPPORT_ROOMBA_PROTOCOL == 1 || IRSND_SUPPORT_TELEFUNKEN_PROTOCOL == 1 || IRSND_SUPPORT_PENTAX_PROTOCOL == 1\r
{\r
#if IRSND_SUPPORT_DENON_PROTOCOL == 1\r
if (irsnd_protocol == IRMP_DENON_PROTOCOL)\r
*\r
* Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
*\r
- * $Id: irsndconfig.h,v 1.65 2015/02/26 15:42:53 fm Exp $\r
+ * $Id: irsndconfig.h,v 1.67 2015/04/23 12:47:29 fm Exp $\r
*\r
* This program is free software; you can redistribute it and/or modify\r
* it under the terms of the GNU General Public License as published by\r
#define IRSND_SUPPORT_RCMM_PROTOCOL 0 // RCMM 12,24, or 32 >= 20000 DON'T CHANGE, NOT SUPPORTED YET!\r
#define IRSND_SUPPORT_LGAIR_PROTOCOL 0 // LG Air Condition >= 10000 ~150 bytes.\r
#define IRSND_SUPPORT_SAMSUNG48_PROTOCOL 0 // Samsung48 >= 10000 ~100 bytes\r
+#define IRSND_SUPPORT_PENTAX_PROTOCOL 0 // Pentax >= 10000 ~150 bytes\r
\r
\r
/*---------------------------------------------------------------------------------------------------------------------------------------------------\r