]> cloudbase.mooo.com Git - irmp.git/commitdiff
Version 2.9.2: added S100 protocol, some minor corrections
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Fri, 29 May 2015 08:27:04 +0000 (08:27 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Fri, 29 May 2015 08:27:04 +0000 (08:27 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@161 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

README.txt
irmp.c
irmp.h
irmpconfig.h
irmpprotocols.h
irsnd.c
irsndconfig.h

index 3fd8ebb10cdffe62cb5d3a54dbbd196f94b13645..9128b173d85e393be8d2f9805ed54f484b105edc 100644 (file)
@@ -1,8 +1,8 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  2.9.1 28.05.2015\r
-Version IRSND: 2.9.1 28.05.2015\r
+Version IRMP:  2.9.2 29.05.2015\r
+Version IRSND: 2.9.2 29.05.2015\r
 \r
 Dokumentation:\r
  \r
diff --git a/irmp.c b/irmp.c
index a75e8d7468567a822064f11452b634c7448113c7..ee462c3665200f0ede418a76995308ec6f954806 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.174 2015/05/28 06:48:19 fm Exp $\r
+ * $Id: irmp.c,v 1.175 2015/05/29 08:23:56 fm Exp $\r
  *\r
  * Supported AVR mikrocontrollers:\r
  *\r
@@ -37,6 +37,7 @@
 #endif\r
 \r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 ||                   \\r
+    IRMP_SUPPORT_S100_PROTOCOL == 1 ||                  \\r
     IRMP_SUPPORT_RC6_PROTOCOL == 1 ||                   \\r
     IRMP_SUPPORT_GRUNDIG_NOKIA_IR60_PROTOCOL == 1 ||    \\r
     IRMP_SUPPORT_SIEMENS_OR_RUWIDO_PROTOCOL == 1 ||     \\r
 #define RC5_BIT_LEN_MIN                         ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define RC5_BIT_LEN_MAX                         ((uint_fast8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
 \r
+#if IRMP_SUPPORT_BOSE_PROTOCOL == 1 // BOSE conflicts with S100, so keep tolerance for S100 minimal here:\r
+#define S100_START_BIT_LEN_MIN                   ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_05 + 0.5) - 1)\r
+#define S100_START_BIT_LEN_MAX                   ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_05 + 0.5) + 1)\r
+#else\r
+#define S100_START_BIT_LEN_MIN                   ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define S100_START_BIT_LEN_MAX                   ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+#endif\r
+\r
+#define S100_BIT_LEN_MIN                         ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
+#define S100_BIT_LEN_MAX                         ((uint_fast8_t)(F_INTERRUPTS * S100_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)\r
+\r
 #define DENON_PULSE_LEN_MIN                     ((uint_fast8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
 #define DENON_PULSE_LEN_MAX                     ((uint_fast8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)\r
 #define DENON_1_PAUSE_LEN_MIN                   ((uint_fast8_t)(F_INTERRUPTS * DENON_1_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)\r
@@ -579,6 +591,7 @@ static const char proto_samsung48[]     PROGMEM = "SAMSG48";
 static const char proto_merlin[]        PROGMEM = "MERLIN";\r
 static const char proto_pentax[]        PROGMEM = "PENTAX";\r
 static const char proto_fan[]           PROGMEM = "FAN";\r
+static const char proto_s100[]          PROGMEM = "S100";\r
 \r
 static const char proto_radio1[]        PROGMEM = "RADIO1";\r
 \r
@@ -630,6 +643,7 @@ irmp_protocol_names[IRMP_N_PROTOCOLS + 1] PROGMEM =
     proto_merlin,\r
     proto_pentax,\r
     proto_fan,\r
+    proto_s100,\r
     proto_radio1\r
 };\r
 \r
@@ -1261,6 +1275,31 @@ static const PROGMEM IRMP_PARAMETER rc5_param =
 \r
 #endif\r
 \r
+#if IRMP_SUPPORT_S100_PROTOCOL == 1\r
+\r
+static const PROGMEM IRMP_PARAMETER s100_param =\r
+{\r
+    IRMP_S100_PROTOCOL,                                                 // protocol:        ir protocol\r
+    S100_BIT_LEN_MIN,                                                   // pulse_1_len_min: here: minimum length of short pulse\r
+    S100_BIT_LEN_MAX,                                                   // pulse_1_len_max: here: maximum length of short pulse\r
+    S100_BIT_LEN_MIN,                                                   // pause_1_len_min: here: minimum length of short pause\r
+    S100_BIT_LEN_MAX,                                                   // pause_1_len_max: here: maximum length of short pause\r
+    0,                                                                  // pulse_0_len_min: here: not used\r
+    0,                                                                  // pulse_0_len_max: here: not used\r
+    0,                                                                  // pause_0_len_min: here: not used\r
+    0,                                                                  // pause_0_len_max: here: not used\r
+    S100_ADDRESS_OFFSET,                                                // address_offset:  address offset\r
+    S100_ADDRESS_OFFSET + S100_ADDRESS_LEN,                             // address_end:     end of address\r
+    S100_COMMAND_OFFSET,                                                // command_offset:  command offset\r
+    S100_COMMAND_OFFSET + S100_COMMAND_LEN,                             // command_end:     end of command\r
+    S100_COMPLETE_DATA_LEN,                                             // complete_len:    complete length of frame\r
+    S100_STOP_BIT,                                                      // stop_bit:        flag: frame has stop bit\r
+    S100_LSB,                                                           // lsb_first:       flag: LSB first\r
+    S100_FLAGS                                                          // flags:           some flags\r
+};\r
+\r
+#endif\r
+\r
 #if IRMP_SUPPORT_DENON_PROTOCOL == 1\r
 \r
 static const PROGMEM IRMP_PARAMETER denon_param =\r
@@ -1870,11 +1909,11 @@ static const PROGMEM IRMP_PARAMETER radio1_param =
 \r
 #endif\r
 \r
-static uint_fast8_t                              irmp_bit;                   // current bit position\r
-static IRMP_PARAMETER                       irmp_param;\r
+static uint_fast8_t                             irmp_bit;                   // current bit position\r
+static IRMP_PARAMETER                           irmp_param;\r
 \r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1 && (IRMP_SUPPORT_FDC_PROTOCOL == 1 || IRMP_SUPPORT_RCCAR_PROTOCOL == 1)\r
-static IRMP_PARAMETER                       irmp_param2;\r
+static IRMP_PARAMETER                           irmp_param2;\r
 #endif\r
 \r
 static volatile uint_fast8_t                     irmp_ir_detected = FALSE;\r
@@ -2030,6 +2069,12 @@ irmp_get_data (IRMP_DATA * irmp_data_p)
                 rtc = TRUE;\r
                 break;\r
 #endif\r
+#if IRMP_SUPPORT_S100_PROTOCOL == 1\r
+            case IRMP_S100_PROTOCOL:\r
+                irmp_address &= ~0x20;                              // clear toggle bit\r
+                rtc = TRUE;\r
+                break;\r
+#endif\r
 #if IRMP_SUPPORT_IR60_PROTOCOL == 1\r
             case IRMP_IR60_PROTOCOL:\r
                 if (irmp_command != 0x007d)                         // 0x007d (== 62<<1 + 1) is start instruction frame\r
@@ -2378,7 +2423,7 @@ irmp_ISR (void)
     static uint_fast16_t    last_irmp_denon_command;                                // save last irmp command to recognize DENON frame repetition\r
     static uint_fast16_t    denon_repetition_len = 0xFFFF;                          // denon repetition len of 2nd auto generated frame\r
 #endif\r
-#if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
+#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1\r
     static uint_fast8_t     rc5_cmd_bit6;                                           // bit 6 of RC5 command is the inverted 2nd start bit\r
 #endif\r
 #if IRMP_SUPPORT_MANCHESTER == 1\r
@@ -2451,7 +2496,7 @@ irmp_ISR (void)
 #endif\r
                     irmp_bit                = 0xff;\r
                     irmp_pause_time         = 1;                                // 1st pause: set to 1, not to 0!\r
-#if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
+#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_S100_PROTOCOL == 1\r
                     rc5_cmd_bit6            = 0;                                // fm 2010-03-07: bugfix: reset it after incomplete RC5 frame!\r
 #endif\r
                 }\r
@@ -2747,6 +2792,37 @@ irmp_ISR (void)
                     else\r
 #endif // IRMP_SUPPORT_RECS80_PROTOCOL == 1\r
 \r
+#if IRMP_SUPPORT_S100_PROTOCOL == 1\r
+                    if (((irmp_pulse_time >= S100_START_BIT_LEN_MIN     && irmp_pulse_time <= S100_START_BIT_LEN_MAX) ||\r
+                         (irmp_pulse_time >= 2 * S100_START_BIT_LEN_MIN && irmp_pulse_time <= 2 * S100_START_BIT_LEN_MAX)) &&\r
+                        ((irmp_pause_time >= S100_START_BIT_LEN_MIN     && irmp_pause_time <= S100_START_BIT_LEN_MAX) ||\r
+                         (irmp_pause_time >= 2 * S100_START_BIT_LEN_MIN && irmp_pause_time <= 2 * S100_START_BIT_LEN_MAX)))\r
+                    {                                                           // it's S100\r
+#ifdef ANALYZE\r
+                        ANALYZE_PRINTF ("protocol = S100, start bit timings: pulse: %3d - %3d, pause: %3d - %3d or pulse: %3d - %3d, pause: %3d - %3d\n",\r
+                                        S100_START_BIT_LEN_MIN, S100_START_BIT_LEN_MAX,\r
+                                        2 * S100_START_BIT_LEN_MIN, 2 * S100_START_BIT_LEN_MAX,\r
+                                        S100_START_BIT_LEN_MIN, S100_START_BIT_LEN_MAX,\r
+                                        2 * S100_START_BIT_LEN_MIN, 2 * S100_START_BIT_LEN_MAX);\r
+#endif // ANALYZE\r
+\r
+                        irmp_param_p = (IRMP_PARAMETER *) &s100_param;\r
+                        last_pause = irmp_pause_time;\r
+\r
+                        if ((irmp_pulse_time > S100_START_BIT_LEN_MAX && irmp_pulse_time <= 2 * S100_START_BIT_LEN_MAX) ||\r
+                            (irmp_pause_time > S100_START_BIT_LEN_MAX && irmp_pause_time <= 2 * S100_START_BIT_LEN_MAX))\r
+                        {\r
+                          last_value  = 0;\r
+                          rc5_cmd_bit6 = 1<<6;\r
+                        }\r
+                        else\r
+                        {\r
+                          last_value  = 1;\r
+                        }\r
+                    }\r
+                    else\r
+#endif // IRMP_SUPPORT_S100_PROTOCOL == 1\r
+\r
 #if IRMP_SUPPORT_RC5_PROTOCOL == 1\r
                     if (((irmp_pulse_time >= RC5_START_BIT_LEN_MIN     && irmp_pulse_time <= RC5_START_BIT_LEN_MAX) ||\r
                          (irmp_pulse_time >= 2 * RC5_START_BIT_LEN_MIN && irmp_pulse_time <= 2 * RC5_START_BIT_LEN_MAX)) &&\r
@@ -4493,6 +4569,12 @@ irmp_ISR (void)
                         {\r
                             irmp_tmp_command |= rc5_cmd_bit6;                       // store bit 6\r
                         }\r
+#endif\r
+#if IRMP_SUPPORT_S100_PROTOCOL == 1\r
+                        if (irmp_param.protocol == IRMP_S100_PROTOCOL)\r
+                        {\r
+                            irmp_tmp_command |= rc5_cmd_bit6;                       // store bit 6\r
+                        }\r
 #endif\r
                         irmp_command = irmp_tmp_command;                            // store command\r
 \r
diff --git a/irmp.h b/irmp.h
index 74a54f33858b5f58aa57ba3116639119bce47876..8e906e06f0418f79d02dd0e58986796b6f58a838 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.94 2015/05/07 06:51:10 fm Exp $\r
+ * $Id: irmp.h,v 1.95 2015/05/29 08:23:56 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_ORTEK_PROTOCOL           0\r
 #endif\r
 \r
+#if IRMP_SUPPORT_RC5_PROTOCOL == 1 && IRMP_SUPPORT_S100_PROTOCOL == 1\r
+#  warning RC5 protocol conflicts wih S100, please enable only one of both protocols\r
+#  warning S100 protocol disabled\r
+#  undef IRMP_SUPPORT_S100_PROTOCOL\r
+#  define IRMP_SUPPORT_S100_PROTOCOL            0\r
+#endif\r
+\r
+#if IRMP_SUPPORT_NUBERT_PROTOCOL == 1 && IRMP_SUPPORT_FAN_PROTOCOL == 1\r
+#  warning NUBERT protocol conflicts wih FAN, please enable only one of both protocols\r
+#  warning FAN protocol disabled\r
+#  undef IRMP_SUPPORT_FAN_PROTOCOL\r
+#  define IRMP_SUPPORT_FAN_PROTOCOL             0\r
+#endif\r
+\r
 #if IRMP_SUPPORT_FDC_PROTOCOL == 1 && IRMP_SUPPORT_ORTEK_PROTOCOL == 1\r
 #  warning FDC protocol conflicts wih ORTEK, please enable only one of both protocols\r
 #  warning ORTEK protocol disabled\r
index 3f87fd7dc01ea6f2a32f227470de17f49da2b117..2bbc42ec1da778b18c8452e3488016c5e290b038 100644 (file)
@@ -6,7 +6,7 @@
  * 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.130 2015/05/28 06:46:49 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.132 2015/05/29 08:24:37 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
@@ -72,7 +72,7 @@
 #define IRMP_SUPPORT_BOSE_PROTOCOL              0       // BOSE                 >= 10000                 ~150 bytes\r
 #define IRMP_SUPPORT_KATHREIN_PROTOCOL          0       // Kathrein             >= 10000                 ~200 bytes\r
 #define IRMP_SUPPORT_NUBERT_PROTOCOL            0       // NUBERT               >= 10000                  ~50 bytes\r
-#define IRMP_SUPPORT_FAN_PROTOCOL               1       // FAN (ventilator)     >= 10000                  ~50 bytes\r
+#define IRMP_SUPPORT_FAN_PROTOCOL               0       // FAN (ventilator)     >= 10000                  ~50 bytes\r
 #define IRMP_SUPPORT_SPEAKER_PROTOCOL           0       // SPEAKER (~NUBERT)    >= 10000                  ~50 bytes\r
 #define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL      0       // Bang & Olufsen       >= 10000                 ~200 bytes\r
 #define IRMP_SUPPORT_RECS80_PROTOCOL            0       // RECS80 (SAA3004)     >= 15000                  ~50 bytes\r
@@ -93,6 +93,7 @@
 #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_S100_PROTOCOL              0       // S100                >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_RADIO1_PROTOCOL            0       // RADIO, e.g. TEVION   >= 10000                 ~250 bytes (experimental)\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
index 33de666c9c0441c7d7a03e688e9a5956932335aa..515c895c94027ce4bfdc3864833b1300b14e2c73 100644 (file)
@@ -5,7 +5,7 @@
  *\r
  * Copyright (c) 2013-2015 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpprotocols.h,v 1.34 2015/05/28 06:46:49 fm Exp $\r
+ * $Id: irmpprotocols.h,v 1.35 2015/05/29 08:23:56 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_MERLIN_PROTOCOL                    42              // Merlin (Pollin 620 185)\r
 #define IRMP_PENTAX_PROTOCOL                    43              // Pentax camera\r
 #define IRMP_FAN_PROTOCOL                       44              // FAN (ventilator), very similar to NUBERT, but last bit is data bit instead of stop bit\r
-#define IRMP_RADIO1_PROTOCOL                    45              // Radio protocol (experimental status), do not use it yet!\r
+#define IRMP_S100_PROTOCOL                      45              // very similar to RC5, but 14 instead of 13 data bits\r
+#define IRMP_RADIO1_PROTOCOL                    46              // Radio protocol (experimental status), do not use it yet!\r
 \r
-#define IRMP_N_PROTOCOLS                        45              // number of supported protocols\r
+#define IRMP_N_PROTOCOLS                        46              // number of supported protocols\r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * timing constants:\r
@@ -275,6 +276,22 @@ typedef uint8_t     PAUSE_LEN;
 #define RC5_LSB                                 0                               // MSB...LSB\r
 #define RC5_FLAGS                               IRMP_PARAM_FLAG_IS_MANCHESTER   // flags\r
 \r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * S100: very similar to RC5, but 14 insted of 13 bits\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#define S100_BIT_TIME                             889.0e-6                       // 889 usec pulse/pause\r
+#define S100_FRAME_REPEAT_PAUSE_TIME               88.9e-3                       // frame repeat after 88.9ms\r
+\r
+#define S100_ADDRESS_OFFSET                      1                               // skip 1 bit (2nd start)\r
+#define S100_ADDRESS_LEN                         6                               // read 1 toggle bit (for key repetition detection) + 5 address bits\r
+#define S100_COMMAND_OFFSET                      7                               // skip 5 bits (2nd start + 1 toggle + 5 address)\r
+#define S100_COMMAND_LEN                         7                               // read 7 command bits\r
+#define S100_COMPLETE_DATA_LEN                   14                              // complete length\r
+#define S100_STOP_BIT                            0                               // has no stop bit\r
+#define S100_LSB                                 0                               // MSB...LSB\r
+#define S100_FLAGS                               IRMP_PARAM_FLAG_IS_MANCHESTER   // flags\r
+\r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * DENON:\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
diff --git a/irsnd.c b/irsnd.c
index e477e4dfef54ab0e8bf39168e554edfc81756b79..923a30a2170995425effc2369819d714409b09b9 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -13,7 +13,7 @@
  * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284, ATmega1284P\r
  * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
  *\r
- * $Id: irsnd.c,v 1.88 2015/05/27 09:33:14 fm Exp $\r
+ * $Id: irsnd.c,v 1.89 2015/05/29 08:23:56 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_BIT_NUMBER                        2\r
 #  endif // IRSND_OCx\r
 \r
-#elif defined (__AVR_ATxmega128A1U__)                               // ATxmega128A1U \r
+#elif defined (__AVR_XMEGA__)                                       // ATxmega\r
 #  if IRSND_OCx == IRSND_XMEGA_OC0A   \r
 #    define IRSND_BIT_NUMBER                        0\r
 #  elif IRSND_OCx == IRSND_XMEGA_OC0B\r
 #  elif IRSND_OCx == IRSND_XMEGA_OC1B\r
 #    define IRSND_BIT_NUMBER                        5\r
 #  else\r
-#    error Wrong value for IRSND_OCx, choose IRSND_OC0, IRSND_OC1A, or IRSND_OC1B in irsndconfig.h\r
+#    error Wrong value for IRSND_OCx, choose IRSND_XMEGA_OC0A, IRSND_XMEGA_OC0B, IRSND_XMEGA_OC0C, IRSND_XMEGA_OC0D, IRSND_XMEGA_OC1A, or IRSND_XMEGA_OC1B in irsndconfig.h\r
 #  endif // IRSND_OCx\r
 \r
 #elif defined (PIC_C18)    //Microchip C18 compiler\r
index a42eacd6550a70b467a3729c3c23cd5dfbd7f410..e661f3749eac9452f9ce2285cb22d1d4aba5aaff 100644 (file)
@@ -5,7 +5,7 @@
  *\r
  * Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsndconfig.h,v 1.71 2015/05/28 06:46:49 fm Exp $\r
+ * $Id: irsndconfig.h,v 1.73 2015/05/29 08:24:37 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
@@ -82,6 +82,7 @@
 #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
+#define IRSND_SUPPORT_S100_PROTOCOL             0       // S100                 >= 10000                 ~150 bytes\r
 \r
 \r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r