]> cloudbase.mooo.com Git - irmp.git/commitdiff
Version 3.0.2
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Fri, 9 Sep 2016 08:04:05 +0000 (08:04 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Fri, 9 Sep 2016 08:04:05 +0000 (08:04 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@177 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

16 files changed:
README.txt
irmp-main-avr-uart.c
irmp-main-avr.c
irmp-main-esp8266.c
irmp-main-pic-12F1840.c
irmp-main-pic-xc8.c
irmp-main-stm32.c
irmp.c
irmp.h
irmpconfig.h
irmpprotocols.h
irmpsystem.h
irsnd-main-avr.c
irsnd.c
irsnd.h
irsndconfig.h

index bb4647cf0f1462c3f21307432502b0a4cca9f988..ca88fd7648c4dabdc5745f2f1824372bbe56c892 100644 (file)
@@ -1,8 +1,8 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  3.0.0 2016-01-12\r
-Version IRSND: 3.0.0 2016-01-12\r
+Version IRMP:  3.0.2 2016-09-09\r
+Version IRSND: 3.0.2 2016-09-09\r
 \r
 Documentation:\r
  \r
index 4b95dfddef9bf3114d5b0c8a6b8b469f3ba270ac..7260a7286204bf7f6f93b60217c1234ae935ae97 100644 (file)
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
- * irmp-main-avr-uart.cpp - demo main module to test IRMP decoder on AVR with UART\r
+ * irmp-main-avr-uart.c - demo main module to test IRMP decoder on AVR with UART\r
  *\r
  * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp-main-avr-uart.c,v 1.1 2016/01/12 11:55:05 fm Exp $\r
+ * $Id: irmp-main-avr-uart.c,v 1.2 2016/09/09 08:01:11 fm Exp $\r
  *\r
  * This demo module is runnable on AVRs with UART\r
  *\r
index 9cbdbf8263711d142da9422c60ba7e3a0fa4110e..caf62864f861b3dc69e49ec0346148fa89c6bb5a 100644 (file)
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * irmp-main-avr.c - demo main module to test IRMP decoder on AVR\r
  *\r
- * Copyright (c) 2009-2017 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp-main-avr.c,v 1.1 2016/01/12 11:55:05 fm Exp $\r
+ * $Id: irmp-main-avr.c,v 1.2 2016/01/12 21:15:16 fm Exp $\r
  *\r
  * This demo module is runnable on AVRs\r
  *\r
index 65124cb28b90ebfefec18f67cf851a212d751498..caa28e4382d298fdb260097e48e262f57f97bc18 100644 (file)
@@ -2,6 +2,8 @@
 \r
 Test program IRMP for ESP8266                2015-11-16 Wolfgang Strobl, Bonn\r
 \r
+$Id: irmp-main-esp8266.c,v 1.2 2016/01/12 21:15:16 fm Exp $\r
+\r
 IRMP ported to ESP8266, testet with MOD-WIFI-ESP8266-DEV on\r
 ESP8266-EVB evaluation board. https://www.olimex.com/Products/IoT/ESP8266-EVB/\r
 \r
index 235105e52aca650a098d1f9fe5b881bbcdbefa0f..821e9e544f2574e7e6038b34b93470cacdd8116f 100644 (file)
@@ -1,10 +1,12 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
- * main_pic12f1840.c - example main module for PIC 12f1840\r
+ * irmp-main-pic-12F1840.c - example main module for PIC 12f1840\r
  * \r
  * IR decoder using IRMP\r
  *\r
  * (c) 2014 Wolfgang Strobl (news4 at mystrobl.de) 2014-03-12:2014-07-20\r
  *\r
+ * $Id: irmp-main-pic-12F1840.c,v 1.4 2016/09/09 08:01:11 fm Exp $\r
+ *\r
  * This demo module is runnable on a Microchip PIC 12F1840\r
  *\r
  * To be used with IRMP by Frank Meyer (frank(at)fli4l.de)\r
index 579a4af091691faa928654cea3c3e054d7ad25e2..2d783271f35a136a49c49153b7436b3879f838dd 100644 (file)
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
- * main.c - demo main module to test IRMP decoder on PIC18F4520 with XC8 compiler\r
+ * irmp-main-pic-xc8.c - demo main module to test IRMP decoder on PIC18F4520 with XC8 compiler\r
  *\r
  * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp-main-pic-xc8.c,v 1.1 2016/01/12 11:55:05 fm Exp $\r
+ * $Id: irmp-main-pic-xc8.c,v 1.2 2016/09/09 08:01:11 fm Exp $\r
  *\r
  * This demo module is runnable on PIC18F4520 with XC8 compiler\r
  *\r
index ddc293cc3feb7727b55e72ed4301c0a902dd5609..671b1174a23a5b9a8018e2dc5f926a64312c6b0e 100644 (file)
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * irmp-main-stm32.c - demo main module to test IRMP decoder on STM32\r
  *\r
- * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp-main-stm32.c,v 1.1 2016/01/12 11:55:05 fm Exp $\r
+ * $Id: irmp-main-stm32.c,v 1.2 2016/01/12 21:15:16 fm Exp $\r
  *\r
  * This demo module is runnable on STM32\r
  *\r
diff --git a/irmp.c b/irmp.c
index 3895bba092838d46a94c3b9235991d1af51b879a..3b97afc50043762c1921a9ac131af6631e0be48b 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * irmp.c - infrared multi-protocol decoder, supports several remote control protocols\r
  *\r
- * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.184 2016/01/12 11:53:34 fm Exp $\r
+ * $Id: irmp.c,v 1.187 2016/09/09 07:53:29 fm Exp $\r
  *\r
  * Supported AVR mikrocontrollers:\r
  *\r
 #define KASEIKYO_0_PAUSE_LEN_MIN                ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
 #define KASEIKYO_0_PAUSE_LEN_MAX                ((uint_fast8_t)(F_INTERRUPTS * KASEIKYO_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
 \r
+#define MITSU_HEAVY_START_BIT_PULSE_LEN_MIN     ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define MITSU_HEAVY_START_BIT_PULSE_LEN_MAX     ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN     ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX     ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+#define MITSU_HEAVY_PULSE_LEN_MIN               ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME * MIN_TOLERANCE_40 + 0.5) - 1)\r
+#define MITSU_HEAVY_PULSE_LEN_MAX               ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME * MAX_TOLERANCE_40 + 0.5) + 1)\r
+#define MITSU_HEAVY_1_PAUSE_LEN_MIN             ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
+#define MITSU_HEAVY_1_PAUSE_LEN_MAX             ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+#define MITSU_HEAVY_0_PAUSE_LEN_MIN             ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)\r
+#define MITSU_HEAVY_0_PAUSE_LEN_MAX             ((uint_fast8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
+\r
 #define PANASONIC_START_BIT_PULSE_LEN_MIN       ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define PANASONIC_START_BIT_PULSE_LEN_MAX       ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 #define PANASONIC_START_BIT_PAUSE_LEN_MIN       ((uint_fast8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
@@ -623,6 +634,7 @@ static const char proto_s100[]          PROGMEM = "S100";
 static const char proto_acp24[]         PROGMEM = "ACP24";\r
 static const char proto_technics[]      PROGMEM = "TECHNICS";\r
 static const char proto_panasonic[]     PROGMEM = "PANASONIC";\r
+static const char proto_mitsu_heavy[]   PROGMEM = "MITSU_HEAVY";\r
 \r
 static const char proto_radio1[]        PROGMEM = "RADIO1";\r
 \r
@@ -678,6 +690,7 @@ irmp_protocol_names[IRMP_N_PROTOCOLS + 1] PROGMEM =
     proto_acp24,\r
     proto_technics,\r
     proto_panasonic,\r
+    proto_mitsu_heavy,\r
     proto_radio1\r
 };\r
 \r
@@ -1298,6 +1311,31 @@ static const PROGMEM IRMP_PARAMETER panasonic_param =
 \r
 #endif\r
 \r
+#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+\r
+static const PROGMEM IRMP_PARAMETER mitsu_heavy_param =\r
+{\r
+    IRMP_MITSU_HEAVY_PROTOCOL,                                          // protocol:        ir protocol\r
+    MITSU_HEAVY_PULSE_LEN_MIN,                                          // pulse_1_len_min: minimum length of pulse with bit value 1\r
+    MITSU_HEAVY_PULSE_LEN_MAX,                                          // pulse_1_len_max: maximum length of pulse with bit value 1\r
+    MITSU_HEAVY_1_PAUSE_LEN_MIN,                                        // pause_1_len_min: minimum length of pause with bit value 1\r
+    MITSU_HEAVY_1_PAUSE_LEN_MAX,                                        // pause_1_len_max: maximum length of pause with bit value 1\r
+    MITSU_HEAVY_PULSE_LEN_MIN,                                          // pulse_0_len_min: minimum length of pulse with bit value 0\r
+    MITSU_HEAVY_PULSE_LEN_MAX,                                          // pulse_0_len_max: maximum length of pulse with bit value 0\r
+    MITSU_HEAVY_0_PAUSE_LEN_MIN,                                        // pause_0_len_min: minimum length of pause with bit value 0\r
+    MITSU_HEAVY_0_PAUSE_LEN_MAX,                                        // pause_0_len_max: maximum length of pause with bit value 0\r
+    MITSU_HEAVY_ADDRESS_OFFSET,                                         // address_offset:  address offset\r
+    MITSU_HEAVY_ADDRESS_OFFSET + MITSU_HEAVY_ADDRESS_LEN,               // address_end:     end of address\r
+    MITSU_HEAVY_COMMAND_OFFSET,                                         // command_offset:  command offset\r
+    MITSU_HEAVY_COMMAND_OFFSET + MITSU_HEAVY_COMMAND_LEN,               // command_end:     end of command\r
+    MITSU_HEAVY_COMPLETE_DATA_LEN,                                      // complete_len:    complete length of frame\r
+    MITSU_HEAVY_STOP_BIT,                                               // stop_bit:        flag: frame has stop bit\r
+    MITSU_HEAVY_LSB,                                                    // lsb_first:       flag: LSB first\r
+    MITSU_HEAVY_FLAGS                                                   // flags:           some flags\r
+};\r
+\r
+#endif\r
+\r
 #if IRMP_SUPPORT_RECS80_PROTOCOL == 1\r
 \r
 static const PROGMEM IRMP_PARAMETER recs80_param =\r
@@ -2338,6 +2376,11 @@ static uint_fast8_t genre2;                                                 // s
 static uint_fast8_t  parity;                                                // number of '1' of the first 14 bits, check if even.\r
 #endif\r
 \r
+#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+static uint_fast8_t  check;                                                 // number of '1' of the first 14 bits, check if even.\r
+static uint_fast8_t  mitsu_parity;                                          // number of '1' of the first 14 bits, check if even.\r
+#endif\r
+\r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  *  store bit\r
  *  @details  store bit in temp address or temp command\r
@@ -2511,11 +2554,11 @@ irmp_store_bit (uint_fast8_t value)
     {\r
         if (irmp_bit >= 20 && irmp_bit < 24)\r
         {\r
-            irmp_tmp_command |= (((uint_fast16_t) (value)) << (irmp_bit - 8));       // store 4 system bits (genre 1) in upper nibble with LSB first\r
+            irmp_tmp_command |= (((uint_fast16_t) (value)) << (irmp_bit - 8));      // store 4 system bits (genre 1) in upper nibble with LSB first\r
         }\r
         else if (irmp_bit >= 24 && irmp_bit < 28)\r
         {\r
-            genre2 |= (((uint_fast8_t) (value)) << (irmp_bit - 20));                 // store 4 system bits (genre 2) in upper nibble with LSB first\r
+            genre2 |= (((uint_fast8_t) (value)) << (irmp_bit - 20));                // store 4 system bits (genre 2) in upper nibble with LSB first\r
         }\r
 \r
         if (irmp_bit < KASEIKYO_COMPLETE_DATA_LEN)\r
@@ -2532,6 +2575,47 @@ irmp_store_bit (uint_fast8_t value)
     }\r
     else\r
 #endif\r
+\r
+#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+    if (irmp_param.protocol == IRMP_MITSU_HEAVY_PROTOCOL)                           // squeeze 64 bits into 16 bits:\r
+    {\r
+        if (irmp_bit == 72 )\r
+        {                                                                           // irmp_tmp_address, irmp_tmp_command received: check parity & compress\r
+            mitsu_parity = PARITY_CHECK_OK;\r
+\r
+            check = irmp_tmp_address >> 8;                                          // inverted upper byte == lower byte?\r
+            check = ~ check;\r
+\r
+            if (check == (irmp_tmp_address & 0xFF))\r
+            {                                                                       // ok:\r
+                irmp_tmp_address <<= 8;                                             // throw away upper byte\r
+            }\r
+            else\r
+            {\r
+                mitsu_parity = PARITY_CHECK_FAILED;\r
+            }\r
+\r
+            check = irmp_tmp_command >> 8;                                          // inverted upper byte == lower byte?\r
+            check = ~ check;\r
+            if (check == (irmp_tmp_command & 0xFF))\r
+            {                                                                       // ok:  pack together\r
+                irmp_tmp_address |= irmp_tmp_command & 0xFF;                        // byte 1, byte2 in irmp_tmp_address, irmp_tmp_command can be used for byte 3\r
+            }\r
+            else\r
+            {\r
+                mitsu_parity = PARITY_CHECK_FAILED;\r
+            }\r
+            irmp_tmp_command = 0;\r
+        }\r
+\r
+        if (irmp_bit >= 72 )\r
+        {                                                                           // receive 3. word in irmp_tmp_command\r
+            irmp_tmp_command <<= 1;\r
+            irmp_tmp_command |= value;\r
+        }\r
+    }\r
+    else\r
+#endif // IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL\r
     {\r
         ;\r
     }\r
@@ -2968,6 +3052,20 @@ irmp_ISR (void)
                     else\r
 #endif // IRMP_SUPPORT_PANASONIC_PROTOCOL == 1\r
 \r
+#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+                    if (irmp_pulse_time >= MITSU_HEAVY_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= MITSU_HEAVY_START_BIT_PULSE_LEN_MAX &&\r
+                        irmp_pause_time >= MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX)\r
+                    {                                                           // it's MITSU_HEAVY\r
+#ifdef ANALYZE\r
+                        ANALYZE_PRINTF ("protocol = MITSU_HEAVY, start bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",\r
+                                        MITSU_HEAVY_START_BIT_PULSE_LEN_MIN, MITSU_HEAVY_START_BIT_PULSE_LEN_MAX,\r
+                                        MITSU_HEAVY_START_BIT_PAUSE_LEN_MIN, MITSU_HEAVY_START_BIT_PAUSE_LEN_MAX);\r
+#endif // ANALYZE\r
+                        irmp_param_p = (IRMP_PARAMETER *) &mitsu_heavy_param;\r
+                    }\r
+                    else\r
+#endif // IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+\r
 #if IRMP_SUPPORT_RADIO1_PROTOCOL == 1\r
                     if (irmp_pulse_time >= RADIO1_START_BIT_PULSE_LEN_MIN && irmp_pulse_time <= RADIO1_START_BIT_PULSE_LEN_MAX &&\r
                         irmp_pause_time >= RADIO1_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= RADIO1_START_BIT_PAUSE_LEN_MAX)\r
@@ -4774,6 +4872,25 @@ irmp_ISR (void)
                         }\r
 #endif // IRMP_SUPPORT_ORTEK_PROTOCOL == 1\r
 \r
+#if IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+                        if (irmp_param.protocol == IRMP_MITSU_HEAVY_PROTOCOL)\r
+                        {\r
+                            check = irmp_tmp_command >> 8;                    // inverted upper byte == lower byte?\r
+                            check = ~ check;\r
+                            if (check == (irmp_tmp_command & 0xFF)) {         //ok:\r
+                              irmp_tmp_command &= 0xFF;\r
+                            }\r
+                            else  mitsu_parity = PARITY_CHECK_FAILED;\r
+                            if (mitsu_parity == PARITY_CHECK_FAILED)\r
+                            {\r
+#ifdef ANALYZE\r
+                                ANALYZE_PRINTF ("error 7: parity check failed\n");\r
+#endif // ANALYZE\r
+                                irmp_ir_detected = FALSE;\r
+                            }\r
+                        }\r
+#endif // IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL\r
+\r
 #if IRMP_SUPPORT_RC6_PROTOCOL == 1\r
                         if (irmp_param.protocol == IRMP_RC6_PROTOCOL && irmp_param.complete_len == RC6_COMPLETE_DATA_LEN_LONG)     // RC6 mode = 6?\r
                         {\r
@@ -5013,16 +5130,16 @@ get_fdc_key (uint_fast16_t cmd)
 {\r
     static uint8_t key_table[128] =\r
     {\r
-     // 0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F\r
-         0,     '^',    '1',    '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    '0',    0xDF,   '´',    0,      '\b',\r
-        '\t',   'q',    'w',    'e',    'r',    't',    'z',    'u',    'i',    'o',    'p',    0xFC,   '+',    0,      0,      'a',\r
-        's',    'd',    'f',    'g',    'h',    'j',    'k',    'l',    0xF6,   0xE4,   '#',    '\r',   0,      '<',    'y',    'x',\r
-        'c',    'v',    'b',    'n',    'm',    ',',    '.',    '-',    0,      0,      0,      0,      0,      ' ',    0,      0,\r
-\r
-         0,     '°',    '!',    '"',    '§',    '$',    '%',    '&',    '/',    '(',    ')',    '=',    '?',    '`',    0,      '\b',\r
-        '\t',   'Q',    'W',    'E',    'R',    'T',    'Z',    'U',    'I',    'O',    'P',    0xDC,   '*',    0,      0,      'A',\r
-        'S',    'D',    'F',    'G',    'H',    'J',    'K',    'L',    0xD6,   0xC4,   '\'',   '\r',   0,      '>',    'Y',    'X',\r
-        'C',    'V',    'B',    'N',    'M',    ';',    ':',    '_',    0,      0,      0,      0,      0,      ' ',    0,      0\r
+     // 0     1    2    3    4    5    6    7    8     9     A     B     C     D    E    F\r
+         0,   '^', '1', '2', '3', '4', '5', '6', '7',  '8',  '9',  '0',  0xDF, '´', 0,   '\b',\r
+        '\t', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i',  'o',  'p',  0xFC, '+',   0,   0,   'a',\r
+        's',  'd', 'f', 'g', 'h', 'j', 'k', 'l', 0xF6, 0xE4, '#',  '\r', 0,    '<', 'y', 'x',\r
+        'c',  'v', 'b', 'n', 'm', ',', '.', '-', 0,    0,    0,    0,    0,    ' ', 0,   0,\r
+\r
+         0,   '°', '!', '"', '§', '$', '%', '&', '/',  '(',  ')',  '=',  '?',  '`', 0,   '\b',\r
+        '\t', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I',  'O',  'P',  0xDC, '*',  0,   0,   'A',\r
+        'S',  'D', 'F', 'G', 'H', 'J', 'K', 'L', 0xD6, 0xC4, '\'', '\r', 0,    '>', 'Y', 'X',\r
+        'C',  'V', 'B', 'N', 'M', ';', ':', '_', 0,    0,    0,    0,    0,    ' ', 0,   0\r
     };\r
     static uint_fast8_t state;\r
 \r
@@ -5069,7 +5186,7 @@ get_fdc_key (uint_fast16_t cmd)
                     {\r
                         switch (cmd)\r
                         {\r
-                            case 0x0003: key = '²';     break;\r
+                            case 0x0003: key = 0xB2;    break; // upper 2\r
                             case 0x0008: key = '{';     break;\r
                             case 0x0009: key = '[';     break;\r
                             case 0x000A: key = ']';     break;\r
diff --git a/irmp.h b/irmp.h
index c305fab9c67191923b1884cb28576b07c871d8df..ded7e8087bbed621c001cb036e29cc85cb99d6f5 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * irmp.h\r
  *\r
- * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.101 2015/11/18 08:27:50 fm Exp $\r
+ * $Id: irmp.h,v 1.103 2016/09/09 07:53: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_ROOMBA_PROTOCOL          0\r
 #endif\r
 \r
+#if IRMP_SUPPORT_PANASONIC_PROTOCOL == 1 && IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+#  warning PANASONIC protocol conflicts wih MITSU_HEAVY, please enable only one of both protocols\r
+#  warning MITSU_HEAVY protocol disabled\r
+#  undef IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL\r
+#  define IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL      0\r
+#endif\r
+\r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_ORTEK_PROTOCOL == 1\r
 #  warning RC5 protocol conflicts wih ORTEK, please enable only one of both protocols\r
 #  warning ORTEK protocol disabled\r
index 35caa8cee9671729eae040f87a8e25e81d474315..61c14a977bcb84e2657d7750612c73be70f1e722 100644 (file)
@@ -3,10 +3,10 @@
  *\r
  * DO NOT INCLUDE THIS FILE, WILL BE INCLUDED BY IRMP.H!\r
  *\r
- * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  * Extensions for PIC 12F1820 W.Strobl 2014-07-20\r
  *\r
- * $Id: irmpconfig.h,v 1.146 2016/01/12 11:53:34 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.148 2016/09/09 07:53: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
@@ -97,6 +97,7 @@
 #define IRMP_SUPPORT_ACP24_PROTOCOL             0       // ACP24                >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_TECHNICS_PROTOCOL          0       // TECHNICS             >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_PANASONIC_PROTOCOL         0       // PANASONIC Beamer     >= 10000                 ~250 bytes\r
+#define IRMP_SUPPORT_MITSU_HEAVY_PROTOCOL       0       // Mitsubishi Aircond   >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_RADIO1_PROTOCOL            0       // RADIO, e.g. TEVION   >= 10000                 ~250 bytes (experimental)\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
index 0e6a020a0cce0500353ad8181f6f859dd7609c62..a742d6d72f9d0b5021ab83ad0fd47f43be91cbed 100644 (file)
@@ -3,9 +3,9 @@
  *\r
  * DO NOT INCLUDE THIS FILE, WILL BE INCLUDED BY IRMP.H or IRSND.H!\r
  *\r
- * Copyright (c) 2013-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2013-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpprotocols.h,v 1.44 2015/11/30 09:31:54 fm Exp $\r
+ * $Id: irmpprotocols.h,v 1.46 2016/09/09 07:53: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_ACP24_PROTOCOL                     46              // Stiebel Eltron ACP24 air conditioner\r
 #define IRMP_TECHNICS_PROTOCOL                  47              // Technics, similar to Matsushita, but 22 instead of 24 bits\r
 #define IRMP_PANASONIC_PROTOCOL                 48              // Panasonic (Beamer), start bits similar to KASEIKYO\r
+#define IRMP_MITSU_HEAVY_PROTOCOL               49              // Mitsubishi-Heavy Aircondition, similar timing as Panasonic beamer\r
 \r
-#define IRMP_RADIO1_PROTOCOL                    49              // Radio protocol (experimental status), do not use it yet!\r
+#define IRMP_RADIO1_PROTOCOL                    50              // Radio protocol (experimental status), do not use it yet!\r
 \r
-#define IRMP_N_PROTOCOLS                        50              // number of supported protocols\r
+#define IRMP_N_PROTOCOLS                        51              // number of supported protocols\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * timing constants:\r
@@ -257,22 +258,42 @@ typedef uint8_t     PAUSE_LEN;
  * PANASONIC (Beamer), start bit timings similar to KASEIKYO\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
-#define PANASONIC_START_BIT_PULSE_TIME           3600.0e-6                       // 3600 usec pulse\r
-#define PANASONIC_START_BIT_PAUSE_TIME           1600.0e-6                       // 1690 usec pause\r
-#define PANASONIC_PULSE_TIME                      565.0e-6                       //  565 usec pulse\r
-#define PANASONIC_1_PAUSE_TIME                   1140.0e-6                       // 1140 usec pause\r
-#define PANASONIC_0_PAUSE_TIME                    316.0e-6                       //  316 usec pause\r
-#define PANASONIC_AUTO_REPETITION_PAUSE_TIME       40.0e-3                       // repetition after 40 ms?\r
-#define PANASONIC_FRAME_REPEAT_PAUSE_TIME          40.0e-3                       // frame repeat after 40 ms\r
-#define PANASONIC_ADDRESS_OFFSET                 24                              // skip 24 bits: 010000000000010000000001\r
-#define PANASONIC_ADDRESS_LEN                    16                              // read 16 address bits\r
-#define PANASONIC_COMMAND_OFFSET                 40                              // skip 40 bits\r
-#define PANASONIC_COMMAND_LEN                    16                              // read 16 command bits\r
-#define PANASONIC_COMPLETE_DATA_LEN              56                              // complete length\r
-#define PANASONIC_STOP_BIT                       1                               // has stop bit\r
-#define PANASONIC_LSB                            1                               // LSB...MSB?\r
-#define PANASONIC_FRAMES                         1                               // PANASONIC sends 1 frame\r
-#define PANASONIC_FLAGS                          0                               // flags\r
+#define PANASONIC_START_BIT_PULSE_TIME           3600.0e-6                      // 3600 usec pulse\r
+#define PANASONIC_START_BIT_PAUSE_TIME           1600.0e-6                      // 1690 usec pause\r
+#define PANASONIC_PULSE_TIME                      565.0e-6                      //  565 usec pulse\r
+#define PANASONIC_1_PAUSE_TIME                   1140.0e-6                      // 1140 usec pause\r
+#define PANASONIC_0_PAUSE_TIME                    316.0e-6                      //  316 usec pause\r
+#define PANASONIC_AUTO_REPETITION_PAUSE_TIME       40.0e-3                      // repetition after 40 ms?\r
+#define PANASONIC_FRAME_REPEAT_PAUSE_TIME          40.0e-3                      // frame repeat after 40 ms\r
+#define PANASONIC_ADDRESS_OFFSET                 24                             // skip 24 bits: 010000000000010000000001\r
+#define PANASONIC_ADDRESS_LEN                    16                             // read 16 address bits\r
+#define PANASONIC_COMMAND_OFFSET                 40                             // skip 40 bits\r
+#define PANASONIC_COMMAND_LEN                    16                             // read 16 command bits\r
+#define PANASONIC_COMPLETE_DATA_LEN              56                             // complete length\r
+#define PANASONIC_STOP_BIT                       1                              // has stop bit\r
+#define PANASONIC_LSB                            1                              // LSB...MSB?\r
+#define PANASONIC_FRAMES                         1                              // PANASONIC sends 1 frame\r
+#define PANASONIC_FLAGS                          0                              // flags\r
+\r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * MITSUBISHI-Heavy Aircondition, timings similar to PANASONIC beamer\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#define MITSU_HEAVY_START_BIT_PULSE_TIME          3200.0e-6                     // 3600 usec pulse\r
+#define MITSU_HEAVY_START_BIT_PAUSE_TIME          1560.0e-6                     // 1690 usec pause\r
+#define MITSU_HEAVY_PULSE_TIME                     400.0e-6                     //  565 usec pulse\r
+#define MITSU_HEAVY_1_PAUSE_TIME                  1200.0e-6                     // 1140 usec pause\r
+#define MITSU_HEAVY_0_PAUSE_TIME                   430.0e-6                     //  316 usec pause\r
+#define MITSU_HEAVY_FRAME_REPEAT_PAUSE_TIME         40.0e-3                     // frame repeat after 40 ms\r
+#define MITSU_HEAVY_ADDRESS_OFFSET                 40                           // skip 24 bits: 010000000000010000000001\r
+#define MITSU_HEAVY_ADDRESS_LEN                    16                           // read 16 address bits\r
+#define MITSU_HEAVY_COMMAND_OFFSET                 56                           // skip 40 bits\r
+#define MITSU_HEAVY_COMMAND_LEN                    16                           // read 16 command bits\r
+#define MITSU_HEAVY_COMPLETE_DATA_LEN              88                           // complete length\r
+#define MITSU_HEAVY_STOP_BIT                       1                            // has stop bit\r
+#define MITSU_HEAVY_LSB                            0                            // LSB...MSB?\r
+#define MITSU_HEAVY_FRAMES                         1                            // PANASONIC sends 1 frame\r
+#define MITSU_HEAVY_FLAGS                          0                            // flags\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * RECS80:\r
index cef563bb07bd519243b8f5a59656228e9a04508b..4cafdd5e75b70858924aca75483ff39be6b89a56 100644 (file)
@@ -1,9 +1,9 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * irmpsystem.h - system specific includes and defines\r
  *\r
- * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2009-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpsystem.h,v 1.22 2016/01/12 11:53:34 fm Exp $\r
+ * $Id: irmpsystem.h,v 1.24 2016/09/09 07:53: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
@@ -158,6 +158,8 @@ typedef unsigned short                  uint16_t;
 #if defined(PIC_CCS) || defined(PIC_C18) || defined(ARM_STM32) || defined(STELLARIS_ARM_CORTEX_M4)\r
 typedef unsigned char                   uint8_t;\r
 typedef unsigned short                  uint16_t;\r
+typedef unsigned char                   uint_fast8_t;\r
+typedef unsigned short                  uint_fast16_t;\r
 #endif\r
 \r
 #if defined (PIC_C18)                                                               // PIC C18 or XC8 compiler\r
@@ -175,7 +177,13 @@ typedef unsigned short                  uint16_t;
 #  define FALSE                         0\r
 #endif\r
 \r
-typedef struct __attribute__ ((__packed__))\r
+#if defined(PIC_C18)\r
+#define IRMP_PACKED_STRUCT\r
+#else\r
+#define IRMP_PACKED_STRUCT              __attribute__ ((__packed__))\r
+#endif\r
+\r
+typedef struct IRMP_PACKED_STRUCT\r
 {\r
     uint8_t                             protocol;                                   // protocol, e.g. NEC_PROTOCOL\r
     uint16_t                            address;                                    // address\r
index 7ce53025de309a07d0b79ee39115f55aee63208b..ba14086560f11410bd08a6b01ab39c5cffe579d6 100644 (file)
@@ -1,8 +1,10 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
- * irsndmain.c - demo main module to test IRSND encoder on AVRs\r
+ * irsnd-main-avr.c - demo main module to test IRSND encoder on AVRs\r
  *\r
  * Copyright (c) 2010-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
+ * $Id: irsnd-main-avr.c,v 1.3 2016/09/09 08:01:11 fm Exp $\r
+ *\r
  * ATMEGA88 @ 8 MHz internal RC      Osc with BODLEVEL 4.3V: lfuse: 0xE2 hfuse: 0xDC efuse: 0xF9\r
  * ATMEGA88 @ 8 MHz external Crystal Osc with BODLEVEL 4.3V: lfuse: 0xFF hfuse: 0xDC efuse: 0xF9\r
  *\r
diff --git a/irsnd.c b/irsnd.c
index 8e1fd51ff750c64e0021c7867f04c49001fa388d..15692c15bc2a01c09bd404d517cd27ed2c121097 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -1,7 +1,7 @@
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * @file irsnd.c\r
  *\r
- * Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2010-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
  * Supported AVR mikrocontrollers:\r
  *\r
@@ -14,7 +14,7 @@
  * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284, ATmega1284P\r
  * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
  *\r
- * $Id: irsnd.c,v 1.99 2015/12/16 14:12:17 fm Exp $\r
+ * $Id: irsnd.c,v 1.101 2016/09/09 07:53: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
     //Nothing here to do here -> See irsndconfig.h\r
 #elif defined (ARM_STM32)  //STM32\r
     //Nothing here to do here -> See irsndconfig.h\r
-#elif defined (TEENSY_ARM_CORTEX_M4)                                // Teensy3\r
-#  if !digitalPinHasPWM(IRSND_PIN)\r
-#    error need pin with PWM output.\r
-#  endif\r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * Macro digitalPinHasPWM bothers PIC_C18 compiler, but why?\r
+ *\r
+ * #elif defined (TEENSY_ARM_CORTEX_M4)                                // Teensy3\r
+ * #  if !digitalPinHasPWM(IRSND_PIN)\r
+ * #    error need pin with PWM output.\r
+ * #  endif\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
 #else\r
 #  if !defined (unix) && !defined (WIN32)\r
 #    error mikrocontroller not defined, please fill in definitions here.\r
 #define KASEIKYO_AUTO_REPETITION_PAUSE_LEN      (uint16_t)(F_INTERRUPTS * KASEIKYO_AUTO_REPETITION_PAUSE_TIME + 0.5)            // use uint16_t!\r
 #define KASEIKYO_FRAME_REPEAT_PAUSE_LEN         (uint16_t)(F_INTERRUPTS * KASEIKYO_FRAME_REPEAT_PAUSE_TIME + 0.5)               // use uint16_t!\r
 \r
-#define PANASONIC_START_BIT_PULSE_LEN            (uint8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME + 0.5)\r
-#define PANASONIC_START_BIT_PAUSE_LEN            (uint8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME + 0.5)\r
-#define PANASONIC_PULSE_LEN                      (uint8_t)(F_INTERRUPTS * PANASONIC_PULSE_TIME + 0.5)\r
-#define PANASONIC_1_PAUSE_LEN                    (uint8_t)(F_INTERRUPTS * PANASONIC_1_PAUSE_TIME + 0.5)\r
-#define PANASONIC_0_PAUSE_LEN                    (uint8_t)(F_INTERRUPTS * PANASONIC_0_PAUSE_TIME + 0.5)\r
-#define PANASONIC_AUTO_REPETITION_PAUSE_LEN      (uint16_t)(F_INTERRUPTS * PANASONIC_AUTO_REPETITION_PAUSE_TIME + 0.5)            // use uint16_t!\r
-#define PANASONIC_FRAME_REPEAT_PAUSE_LEN         (uint16_t)(F_INTERRUPTS * PANASONIC_FRAME_REPEAT_PAUSE_TIME + 0.5)               // use uint16_t!\r
+#define PANASONIC_START_BIT_PULSE_LEN           (uint8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PULSE_TIME + 0.5)\r
+#define PANASONIC_START_BIT_PAUSE_LEN           (uint8_t)(F_INTERRUPTS * PANASONIC_START_BIT_PAUSE_TIME + 0.5)\r
+#define PANASONIC_PULSE_LEN                     (uint8_t)(F_INTERRUPTS * PANASONIC_PULSE_TIME + 0.5)\r
+#define PANASONIC_1_PAUSE_LEN                   (uint8_t)(F_INTERRUPTS * PANASONIC_1_PAUSE_TIME + 0.5)\r
+#define PANASONIC_0_PAUSE_LEN                   (uint8_t)(F_INTERRUPTS * PANASONIC_0_PAUSE_TIME + 0.5)\r
+#define PANASONIC_AUTO_REPETITION_PAUSE_LEN     (uint16_t)(F_INTERRUPTS * PANASONIC_AUTO_REPETITION_PAUSE_TIME + 0.5)           // use uint16_t!\r
+#define PANASONIC_FRAME_REPEAT_PAUSE_LEN        (uint16_t)(F_INTERRUPTS * PANASONIC_FRAME_REPEAT_PAUSE_TIME + 0.5)              // use uint16_t!\r
+\r
+#define MITSU_HEAVY_START_BIT_PULSE_LEN         (uint8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PULSE_TIME + 0.5)\r
+#define MITSU_HEAVY_START_BIT_PAUSE_LEN         (uint8_t)(F_INTERRUPTS * MITSU_HEAVY_START_BIT_PAUSE_TIME + 0.5)\r
+#define MITSU_HEAVY_PULSE_LEN                   (uint8_t)(F_INTERRUPTS * MITSU_HEAVY_PULSE_TIME + 0.5)\r
+#define MITSU_HEAVY_1_PAUSE_LEN                 (uint8_t)(F_INTERRUPTS * MITSU_HEAVY_1_PAUSE_TIME + 0.5)\r
+#define MITSU_HEAVY_0_PAUSE_LEN                 (uint8_t)(F_INTERRUPTS * MITSU_HEAVY_0_PAUSE_TIME + 0.5)\r
+#define MITSU_HEAVY_FRAME_REPEAT_PAUSE_LEN      (uint16_t)(F_INTERRUPTS * MITSU_HEAVY_FRAME_REPEAT_PAUSE_TIME + 0.5)             // use uint16_t!\r
 \r
 #define RECS80_START_BIT_PULSE_LEN              (uint8_t)(F_INTERRUPTS * RECS80_START_BIT_PULSE_TIME + 0.5)\r
 #define RECS80_START_BIT_PAUSE_LEN              (uint8_t)(F_INTERRUPTS * RECS80_START_BIT_PAUSE_TIME + 0.5)\r
 \r
 static volatile uint8_t                         irsnd_busy = 0;\r
 static volatile uint8_t                         irsnd_protocol = 0;\r
-static volatile uint8_t                         irsnd_buffer[9] = {0};\r
+static volatile uint8_t                         irsnd_buffer[11] = {0};\r
 static volatile uint8_t                         irsnd_repeat = 0;\r
 static volatile uint8_t                         irsnd_is_on = FALSE;\r
 \r
@@ -1171,6 +1183,28 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait)
             break;\r
         }\r
 #endif\r
+#if IRSND_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+        case IRMP_MITSU_HEAVY_PROTOCOL:\r
+        {\r
+            address = irmp_data_p->address;\r
+            command = irmp_data_p->command;\r
+\r
+            irsnd_buffer[0] = 0x4A;\r
+            irsnd_buffer[1] = 0x75;\r
+            irsnd_buffer[2] = 0xC3;\r
+            irsnd_buffer[3] = 0x64;\r
+            irsnd_buffer[4] = 0x9B;\r
+            irsnd_buffer[5] = ~(address & 0xFF00) >> 8;\r
+            irsnd_buffer[6] = (address & 0xFF00) >> 8;\r
+            irsnd_buffer[7] = ~(address & 0x00FF);\r
+            irsnd_buffer[8] = (address & 0x00FF);\r
+            irsnd_buffer[9] = ~(command & 0x00FF);\r
+            irsnd_buffer[10] = (command & 0x00FF);\r
+\r
+            irsnd_busy      = TRUE;\r
+            break;\r
+        }\r
+#endif\r
 #if IRSND_SUPPORT_RECS80_PROTOCOL == 1\r
         case IRMP_RECS80_PROTOCOL:\r
         {\r
@@ -1905,6 +1939,24 @@ irsnd_ISR (void)
                         break;\r
                     }\r
 #endif\r
+#if IRSND_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+                    case IRMP_MITSU_HEAVY_PROTOCOL:\r
+                    {\r
+                        startbit_pulse_len          = MITSU_HEAVY_START_BIT_PULSE_LEN;\r
+                        startbit_pause_len          = MITSU_HEAVY_START_BIT_PAUSE_LEN - 1;\r
+                        pulse_1_len                 = MITSU_HEAVY_PULSE_LEN;\r
+                        pause_1_len                 = MITSU_HEAVY_1_PAUSE_LEN - 1;\r
+                        pulse_0_len                 = MITSU_HEAVY_PULSE_LEN;\r
+                        pause_0_len                 = MITSU_HEAVY_0_PAUSE_LEN - 1;\r
+                        has_stop_bit                = MITSU_HEAVY_STOP_BIT;\r
+                        complete_data_len           = MITSU_HEAVY_COMPLETE_DATA_LEN;\r
+                        n_auto_repetitions          = MITSU_HEAVY_FRAMES;                             // 1 frame\r
+                        auto_repetition_pause_len   = 0;;\r
+                        repeat_frame_pause_len      = MITSU_HEAVY_FRAME_REPEAT_PAUSE_LEN;\r
+                        irsnd_set_freq (IRSND_FREQ_40_KHZ);\r
+                        break;\r
+                    }\r
+#endif\r
 #if IRSND_SUPPORT_RECS80_PROTOCOL == 1\r
                     case IRMP_RECS80_PROTOCOL:\r
                     {\r
@@ -2428,6 +2480,9 @@ irsnd_ISR (void)
 #if IRSND_SUPPORT_PANASONIC_PROTOCOL == 1\r
                 case IRMP_PANASONIC_PROTOCOL:\r
 #endif\r
+#if IRSND_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
+                case IRMP_MITSU_HEAVY_PROTOCOL:\r
+#endif\r
 #if IRSND_SUPPORT_RECS80_PROTOCOL == 1\r
                 case IRMP_RECS80_PROTOCOL:\r
 #endif\r
@@ -2489,7 +2544,8 @@ irsnd_ISR (void)
     IRSND_SUPPORT_NUBERT_PROTOCOL == 1 || IRSND_SUPPORT_FAN_PROTOCOL == 1 || IRSND_SUPPORT_SPEAKER_PROTOCOL == 1 || IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 || \\r
     IRSND_SUPPORT_FDC_PROTOCOL == 1 || IRSND_SUPPORT_RCCAR_PROTOCOL == 1 || IRSND_SUPPORT_JVC_PROTOCOL == 1 || IRSND_SUPPORT_NIKON_PROTOCOL == 1 || \\r
     IRSND_SUPPORT_LEGO_PROTOCOL == 1 || IRSND_SUPPORT_THOMSON_PROTOCOL == 1 || IRSND_SUPPORT_ROOMBA_PROTOCOL == 1 || IRSND_SUPPORT_TELEFUNKEN_PROTOCOL == 1 || \\r
-    IRSND_SUPPORT_PENTAX_PROTOCOL == 1 || IRSND_SUPPORT_ACP24_PROTOCOL == 1 || IRSND_SUPPORT_PANASONIC_PROTOCOL == 1 || IRSND_SUPPORT_BOSE_PROTOCOL == 1\r
+    IRSND_SUPPORT_PENTAX_PROTOCOL == 1 || IRSND_SUPPORT_ACP24_PROTOCOL == 1 || IRSND_SUPPORT_PANASONIC_PROTOCOL == 1 || IRSND_SUPPORT_BOSE_PROTOCOL == 1 || \\r
+    IRSND_SUPPORT_MITSU_HEAVY_PROTOCOL == 1\r
                 {\r
                     if (pulse_counter == 0)\r
                     {\r
diff --git a/irsnd.h b/irsnd.h
index 9fb8bb865fe9671acadcd8bffc0bb2dda5ac16a0..1e797d574fdcfb33e03e10d054cc8207444f9904 100644 (file)
--- a/irsnd.h
+++ b/irsnd.h
@@ -1,9 +1,9 @@
  /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * irsnd.h\r
  *\r
- * Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2010-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsnd.h,v 1.23 2015/11/18 08:27:50 fm Exp $\r
+ * $Id: irsnd.h,v 1.24 2016/01/12 21:15:16 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
index 93b8a4029f886d8c5116eea58fe265c5d9d8dc41..bded8ed636f948d4cd2b3fec9c28cecd90b6a8db 100644 (file)
@@ -3,9 +3,9 @@
  *\r
  * DO NOT INCLUDE THIS FILE, WILL BE INCLUDED BY IRSND.H!\r
  *\r
- * Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
+ * Copyright (c) 2010-2016 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsndconfig.h,v 1.86 2015/11/18 08:27:50 fm Exp $\r
+ * $Id: irsndconfig.h,v 1.88 2016/09/09 07:53: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
@@ -87,6 +87,7 @@
 #define IRSND_SUPPORT_ACP24_PROTOCOL            0       // ACP24                >= 10000                 ~150 bytes\r
 #define IRSND_SUPPORT_TECHNICS_PROTOCOL         0       // TECHNICS             >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
 #define IRSND_SUPPORT_PANASONIC_PROTOCOL        0       // PANASONIC Beamer     >= 10000                 ~150 bytes\r
+#define IRSND_SUPPORT_MITSU_HEAVY_PROTOCOL      0       // Mitsubishi-Heavy Aircondition, similar Timing to Panasonic beamer\r
 \r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r