Gemeinsame Unterverzeichnisse: irmp-3.2.3/IR-Data und irmp-3.2.3-melinera/IR-Data.
diff -uN irmp-3.2.3/irmp.c irmp-3.2.3-melinera/irmp.c
--- irmp-3.2.3/irmp.c	2020-07-10 16:02:46.000000000 +0200
+++ irmp-3.2.3-melinera/irmp.c	2020-11-27 19:51:05.042518755 +0100
@@ -131,6 +131,17 @@
 #define NEC_FRAME_REPEAT_PAUSE_LEN_MAX          (uint_fast16_t)(F_INTERRUPTS * 100.0e-3 * MAX_TOLERANCE_20 + 0.5)
 #endif
 
+#if IRMP_SUPPORT_MELINERA_PROTOCOL
+#  define MELINERA_0_PULSE_LEN_MIN              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_0_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
+#  define MELINERA_0_PULSE_LEN_MAX              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_0_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
+#  define MELINERA_0_PAUSE_LEN_MIN              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_0_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
+#  define MELINERA_0_PAUSE_LEN_MAX              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_0_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
+#  define MELINERA_1_PULSE_LEN_MIN              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_1_PULSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
+#  define MELINERA_1_PULSE_LEN_MAX              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_1_PULSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
+#  define MELINERA_1_PAUSE_LEN_MIN              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_1_PAUSE_TIME * MIN_TOLERANCE_30 + 0.5) - 1)
+#  define MELINERA_1_PAUSE_LEN_MAX              ((uint_fast8_t)(F_INTERRUPTS * MELINERA_1_PAUSE_TIME * MAX_TOLERANCE_30 + 0.5) + 1)
+#endif
+
 #define SAMSUNG_START_BIT_PULSE_LEN_MIN         ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
 #define SAMSUNG_START_BIT_PULSE_LEN_MAX         ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PULSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
 #define SAMSUNG_START_BIT_PAUSE_LEN_MIN         ((uint_fast8_t)(F_INTERRUPTS * SAMSUNG_START_BIT_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
@@ -761,6 +772,8 @@
 static const char proto_rf_x10[]        PROGMEM = "RF_X10";
 static const char proto_rf_medion[]     PROGMEM = "RF_MEDION";
 
+static const char proto_melinera[]      PROGMEM = "MELINERA";
+
 const char * const
 irmp_protocol_names[IRMP_N_PROTOCOLS + 1] PROGMEM =
 {
@@ -824,7 +837,9 @@
 
     proto_rf_gen24,
     proto_rf_x10,
-    proto_rf_medion
+    proto_rf_medion,
+
+    proto_melinera
 };
 
 #endif
@@ -2811,6 +2826,10 @@
 static uint_fast16_t irmp_lgair_command;                                    // ir command
 #endif
 
+#if IRMP_SUPPORT_MELINERA_PROTOCOL == 1
+static uint_fast16_t irmp_melinera_command;                                 // ir command
+#endif
+
 #if IRMP_SUPPORT_SAMSUNG_PROTOCOL == 1
 static uint_fast16_t irmp_tmp_id;                                           // ir id (only SAMSUNG)
 #endif
@@ -2980,6 +2999,14 @@
     // NO else!
 #endif
 
+#if IRMP_SUPPORT_MELINERA_PROTOCOL == 1
+    if (irmp_param.protocol == IRMP_NEC_PROTOCOL || irmp_param.protocol == IRMP_NEC42_PROTOCOL || irmp_param.protocol == IRMP_MELINERA_PROTOCOL)
+    {
+        irmp_melinera_command <<= 1;                                                                        // MELINERA uses MSB
+        irmp_melinera_command |= value;
+    }
+#endif
+
 #if IRMP_SUPPORT_NEC42_PROTOCOL == 1
     if (irmp_param.protocol == IRMP_NEC42_PROTOCOL && irmp_bit >= 13 && irmp_bit < 26)
     {
@@ -3217,6 +3244,9 @@
                     irmp_lgair_command      = 0;
                     irmp_lgair_address      = 0;
 #endif
+#if IRMP_SUPPORT_MELINERA_PROTOCOL == 1
+                    irmp_melinera_command   = 0;
+#endif
                     irmp_bit                = 0xff;
                     irmp_pause_time         = 1;                                // 1st pause: set to 1, not to 0!
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1
@@ -4175,6 +4205,15 @@
                             if (! (irmp_param.flags & IRMP_PARAM_FLAG_IS_MANCHESTER))
                             {
                                 ANALYZE_PRINTF1 ("stop bit detected\n");
+
+#if IRMP_SUPPORT_MELINERA_PROTOCOL == 1
+                                if (irmp_param.protocol == IRMP_MELINERA_PROTOCOL)
+                                {
+                                    irmp_tmp_command = irmp_melinera_command;  // set command
+                                    irmp_tmp_address = 0;                      // no address
+                                }
+#endif
+
                             }
                             irmp_param.stop_bit = 0;
                         }
@@ -5020,6 +5059,50 @@
                     }
                     else
 #endif // IRMP_SUPPORT_KATHREIN_PROTOCOL
+
+#if IRMP_SUPPORT_MELINERA_PROTOCOL == 1
+#if IRMP_SUPPORT_NEC42_PROTOCOL == 1
+                    if (irmp_param.protocol == IRMP_NEC42_PROTOCOL &&
+#else // IRMP_SUPPORT_NEC_PROTOCOL instead
+                    if (irmp_param.protocol == IRMP_NEC_PROTOCOL &&
+#endif // IRMP_SUPPORT_NEC42_PROTOCOL == 1
+                       (
+                        (irmp_pulse_time >= MELINERA_0_PULSE_LEN_MIN && irmp_pulse_time <= MELINERA_0_PULSE_LEN_MAX &&
+                         irmp_pause_time >= MELINERA_0_PAUSE_LEN_MIN && irmp_pause_time <= MELINERA_0_PAUSE_LEN_MAX) ||
+                        (irmp_pulse_time >= MELINERA_1_PULSE_LEN_MIN && irmp_pulse_time <= MELINERA_1_PULSE_LEN_MAX &&
+                         irmp_pause_time >= MELINERA_1_PAUSE_LEN_MIN && irmp_pause_time <= MELINERA_1_PAUSE_LEN_MAX)
+                       ))
+                    {
+                        ANALYZE_PRINTF1 ("Switching to MELINERA protocol ");
+                        irmp_param.protocol         = IRMP_MELINERA_PROTOCOL;
+                        irmp_param.pulse_0_len_min  = MELINERA_0_PULSE_LEN_MIN;
+                        irmp_param.pulse_0_len_max  = MELINERA_0_PULSE_LEN_MAX;
+                        irmp_param.pause_0_len_min  = MELINERA_0_PAUSE_LEN_MIN;
+                        irmp_param.pulse_0_len_max  = MELINERA_0_PAUSE_LEN_MAX;
+                        irmp_param.pulse_1_len_min  = MELINERA_1_PULSE_LEN_MIN;
+                        irmp_param.pulse_1_len_max  = MELINERA_1_PULSE_LEN_MAX;
+                        irmp_param.pause_1_len_min  = MELINERA_1_PAUSE_LEN_MIN;
+                        irmp_param.pulse_1_len_max  = MELINERA_1_PAUSE_LEN_MAX;
+                        irmp_param.address_offset   = MELINERA_ADDRESS_OFFSET;
+                        irmp_param.address_end      = MELINERA_ADDRESS_OFFSET + MELINERA_ADDRESS_LEN;
+                        irmp_param.command_offset   = MELINERA_COMMAND_OFFSET;
+                        irmp_param.command_end      = MELINERA_COMMAND_OFFSET + MELINERA_COMMAND_LEN;
+                        irmp_param.complete_len     = MELINERA_COMPLETE_DATA_LEN;
+
+                        if (irmp_pause_time >= MELINERA_0_PAUSE_LEN_MIN && irmp_pause_time <= MELINERA_0_PAUSE_LEN_MAX) {
+                            ANALYZE_PUTCHAR ('0');
+                            irmp_store_bit (0);
+                        } else {
+                            ANALYZE_PUTCHAR ('1');
+                            irmp_store_bit (1);
+                        }
+
+                        ANALYZE_NEWLINE ();
+                        wait_for_space = 0;
+                    }
+                    else
+#endif // IRMP_SUPPORT_MELINERA_PROTOCOL
+
                     {                                                               // timing incorrect!
                         ANALYZE_PRINTF4 ("error 3: timing not correct: data bit %d,  pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
                         ANALYZE_ONLY_NORMAL_PUTCHAR ('\n');
diff -uN irmp-3.2.3/irmpconfig.h irmp-3.2.3-melinera/irmpconfig.h
--- irmp-3.2.3/irmpconfig.h	2020-08-15 10:32:20.000000000 +0200
+++ irmp-3.2.3-melinera/irmpconfig.h	2020-11-27 18:45:20.453412253 +0100
@@ -127,6 +127,7 @@
 #define IRMP_SUPPORT_GREE_PROTOCOL              0       // GREE CLIMATE         >= 10000                 ~250 bytes
 #define IRMP_SUPPORT_RCII_PROTOCOL              0       // RCII T+A             >= 15000                 ~250 bytes
 #define IRMP_SUPPORT_METZ_PROTOCOL              0       // METZ                 >= 15000                 ~250 bytes
+#define IRMP_SUPPORT_MELINERA_PROTOCOL          1       // MELINERA (Lidl)      >= 10000                  ~50 bytes
 
 /*---------------------------------------------------------------------------------------------------------------------------------------------------
  * Protocols Part 2: RF decoders
diff -uN irmp-3.2.3/irmp.h irmp-3.2.3-melinera/irmp.h
--- irmp-3.2.3/irmp.h	2020-06-27 11:02:06.000000000 +0200
+++ irmp-3.2.3-melinera/irmp.h	2020-11-24 01:40:54.293719427 +0100
@@ -268,6 +268,12 @@
 #  define IRMP_SUPPORT_NEC_PROTOCOL             1
 #endif
 
+#if IRMP_SUPPORT_MELINERA_PROTOCOL == 1 && IRMP_SUPPORT_NEC_PROTOCOL == 0
+#  warning MELINERA protocol needs also NEC protocol, NEC protocol enabled
+#  undef IRMP_SUPPORT_NEC_PROTOCOL
+#  define IRMP_SUPPORT_NEC_PROTOCOL             1
+#endif
+
 #if IRMP_SUPPORT_RCMM_PROTOCOL == 1 && F_INTERRUPTS < 20000
 #  warning F_INTERRUPTS too low, RCMM protocol disabled (should be at least 20000)
 #  undef IRMP_SUPPORT_RCMM_PROTOCOL
diff -uN irmp-3.2.3/irmpprotocols.h irmp-3.2.3-melinera/irmpprotocols.h
--- irmp-3.2.3/irmpprotocols.h	2020-07-10 15:57:14.000000000 +0200
+++ irmp-3.2.3-melinera/irmpprotocols.h	2020-11-27 18:47:50.585057315 +0100
@@ -85,7 +85,9 @@
 #define RF_X10_PROTOCOL                         58              // RF PC X10 Remote Control (Medion, Pollin 721815)
 #define RF_MEDION_PROTOCOL                      59              // RF PC Medion Remote Control (Medion)
 
-#define IRMP_N_PROTOCOLS                        59              // number of supported protocols
+#define IRMP_MELINERA_PROTOCOL                  60
+
+#define IRMP_N_PROTOCOLS                        60              // number of supported protocols
 
 /*---------------------------------------------------------------------------------------------------------------------------------------------------
  * timing constants:
@@ -144,7 +146,7 @@
 #define SIRCS_FLAGS                             0                               // flags
 
 /*---------------------------------------------------------------------------------------------------------------------------------------------------
- * NEC & NEC42 & NEC16 & LGAIR:
+ * NEC & NEC42 & NEC16 & LGAIR & MELINERA:
  *---------------------------------------------------------------------------------------------------------------------------------------------------
  */
 #define NEC_START_BIT_PULSE_TIME                9000.0e-6                       // 9000 usec pulse
@@ -181,6 +183,16 @@
 #define NEC16_COMMAND_LEN                       8                               // read 8 bits (8 command)
 #define NEC16_COMPLETE_DATA_LEN                 16                              // complete length
 
+#define MELINERA_0_PULSE_TIME                    440.0e-6                       //  430 usec pause
+#define MELINERA_0_PAUSE_TIME                    600.0e-6                       //  600 usec pause
+#define MELINERA_1_PULSE_TIME                    940.0e-6                       //  910 usec pause
+#define MELINERA_1_PAUSE_TIME                   1140.0e-6                       // 1160 usec pause
+#define MELINERA_ADDRESS_OFFSET                 0                               // skip 0 bits
+#define MELINERA_ADDRESS_LEN                    0                               // read 0 address bits
+#define MELINERA_COMMAND_OFFSET                 0                               // skip 0 bits (0 address)
+#define MELINERA_COMMAND_LEN                    8                               // read 8 bits (8 command)
+#define MELINERA_COMPLETE_DATA_LEN              8                               // complete length
+
 /*---------------------------------------------------------------------------------------------------------------------------------------------------
  * SAMSUNG & SAMSUNG32 & SAMSUNG48:
  *---------------------------------------------------------------------------------------------------------------------------------------------------
