Example #1
0
void RCSwitch::handleInterrupt() {

  static unsigned int duration;
  static unsigned int changeCount;
  static unsigned long lastTime;
  static unsigned int repeatCount;
  

  long time = micros();
  duration = time - lastTime;
 
  if (duration > 5000 && duration > RCSwitch::timings[0] - 200 && duration < RCSwitch::timings[0] + 200) {
    repeatCount++;
    changeCount--;
    if (repeatCount == 2) {
		if (receiveProtocol1(changeCount) == false){
			if (receiveProtocol2(changeCount) == false){
				//failed
			}
		}
      repeatCount = 0;
    }
    changeCount = 0;
  } else if (duration > 5000) {
    changeCount = 0;
  }
 
  if (changeCount >= RCSWITCH_MAX_CHANGES) {
    changeCount = 0;
    repeatCount = 0;
  }
  RCSwitch::timings[changeCount++] = duration;
  lastTime = time;  
}
Example #2
0
void RCSwitch::handleInterrupt() {

  static unsigned long longTime=0;
  static unsigned int longCount;

  static unsigned int duration;
  static unsigned int changeCount;
  static unsigned long lastTime;
  static unsigned int repeatCount;

  long time = micros();
  duration = time - lastTime;

  longCount++;
  if(longTime == 0)
    longTime = time;
  else
  if((time - longTime) > 1000000) {
    if(longCount > 7000) {
      printf("Warning: RCSwitch::handleInterrupt: Serious noise on the RF interrupt: %d calls in %d micros",longCount,(time-longTime));
    }
    longTime = time;
    longCount = 1;
  }

  if (duration > 5000 && duration > RCSwitch::timings[0] - 200 && duration < RCSwitch::timings[0] + 200) {    
    repeatCount++;
    changeCount--;

    if (repeatCount == 2) {
                if (receiveProtocol1(changeCount) == false){
                        if (receiveProtocol2(changeCount) == false){
                                //failed
                        }
                }
      repeatCount = 0;
    }
    changeCount = 0;
  } else if (duration > 5000) {
    changeCount = 0;
  }

  if (changeCount >= RCSWITCH_MAX_CHANGES) {
    changeCount = 0;
    repeatCount = 0;
  }
  RCSwitch::timings[changeCount++] = duration;
  lastTime = time;  
  if(RCSwitch::nReceivedValue>0 && RCSwitch::receiveCallback != NULL) {
        RCSwitch::receiveCallback(RCSwitch::nReceivedValue);
        RCSwitch::nReceivedValue = NO_VALUE;
  }
}