     if ((dur >= (IR_REMOTE_ONE_TIMING_MIN)) &&
     (dur <= (IR_REMOTE_ONE_TIMING_MAX)))
     {
-//       Serial.println(" +");
+#ifdef __IRREMOTE_RECEIVE_REVERT__
+       bitSet(irData, (IR_REMOTE_DATA_WIDTH -1 - irDataIdx));
+#else
        bitSet(irData, irDataIdx);
+#endif
     }
     else if((dur <= (IR_REMOTE_ZERO_TIMING_MAX)) &&
     (dur >= (IR_REMOTE_ZERO_TIMING_MIN)) )
     {
-//      Serial.println(" -");
+#ifdef __IRREMOTE_RECEIVE_REVERT__
+      bitClear(irData, (IR_REMOTE_DATA_WIDTH - 1 - irDataIdx));
+#else
       bitClear(irData, irDataIdx);
+#endif
+    }
+    else if ((dur <= (IR_REMOTE_CONTINUE_TIMING_MAX)) &&
+    (dur >= (IR_REMOTE_CONTINUE_TIMING_MIN)))
+    {
+      irDataLongCode = irData;
+      Serial.print("continues@");
+      Serial.println(irData, HEX);
+      irDataIdx = 0; /* reset index to continue receive next data */
     }
     else{
       Serial.print("unkn!");

 * https://github.com/marduino/arduino/wiki
 * 
 * https://github.com/arduino/ArduinoCore-samd/blob/master/cores/arduino/main.cpp
 */

/* a start high pulse in micro-seconds indicates start transferring a set of bits */
#define IR_REMOTE_START_TIMING_MIN    3800
#define IR_REMOTE_START_TIMING_MAX    4700

/* a 'one' timing means to set a bit to 1, indicated by 1200micro-seconds high pulse */
#define IR_REMOTE_ONE_TIMING_MIN      900
#define IR_REMOTE_ONE_TIMING_MAX      1800

/* a 'zero' timing means to set a bit to 0, indicated by 600micro-seconds high pulse */
#define IR_REMOTE_ZERO_TIMING_MIN     300
#define IR_REMOTE_ZERO_TIMING_MAX     700

/* measurement time out, in case timeout, reset all status */

  dataStartTiming = 0;
  isDataValid = 0;
  irData = 0;
  irDataIdx = 0;
  irDataLongCode = 0; 
}

bool IRIsPulseValid(unsigned int dur)
