char* hexdump(char *str, unsigned char *d, int l, bool appendNewLine) { for (l--; l != -1; l--) { str = PrintHexByte(str, *d++); } if (appendNewLine) { *str++ = '\n'; } return str; }
boolean Plugin_075(byte function, char *string) { if ((RawSignal.Number != LIDL_PULSECOUNT) && (RawSignal.Number != LIDL_PULSECOUNT2)) return false; unsigned long bitstream=0; unsigned long bitstream2=0; int bitcount=0; byte type=0; //================================================================================== // get all bits if (RawSignal.Number == LIDL_PULSECOUNT) { if (RawSignal.Pulses[1]*RawSignal.Multiply > 1000 && RawSignal.Pulses[2]*RawSignal.Multiply > 1000 && RawSignal.Pulses[3]*RawSignal.Multiply > 1000 && RawSignal.Pulses[4]*RawSignal.Multiply > 1000 && RawSignal.Pulses[5]*RawSignal.Multiply > 1000 && RawSignal.Pulses[6]*RawSignal.Multiply > 1000 && RawSignal.Pulses[7]*RawSignal.Multiply > 1000 && RawSignal.Pulses[8]*RawSignal.Multiply > 1000 && RawSignal.Pulses[9]*RawSignal.Multiply > 1000 ) { // } else { return false; } for(int x=10;x <=90;x+=2) { if (bitcount < 28){ if (RawSignal.Pulses[x]*RawSignal.Multiply > 550) { bitstream = (bitstream << 1); bitcount++; } else { bitstream = (bitstream << 1) | 0x1; bitcount++; } } else { if (RawSignal.Pulses[x]*RawSignal.Multiply > 550) { bitstream2 = (bitstream2 << 1); bitcount++; } else { bitstream2 = (bitstream2 << 1) | 0x1; bitcount++; } } } } else { if (RawSignal.Pulses[0] != PLUGIN_ID) return false; // only accept plugin1 translated packets type=1; for(byte x=1;x < LIDL_PULSECOUNT2-1;x+=2) { if (RawSignal.Pulses[x]*RawSignal.Multiply > 200) { if (RawSignal.Pulses[x+1]*RawSignal.Multiply > 200) return false; // invalid pulse length if (bitcount > 23) { bitstream2 = (bitstream2 << 1); } else { bitstream = (bitstream << 1); } bitcount++; } else { if (RawSignal.Pulses[x+1]*RawSignal.Multiply < 200) return false; // invalid pulse length if (bitcount > 23) { bitstream2 = (bitstream2 << 1) | 0x1; } else { bitstream = (bitstream << 1) | 0x1; } bitcount++; } } } //================================================================================== // all bytes received, make sure checksum is okay //================================================================================== if (type==0) { if ((bitstream2 &0xfff) != 0x00) return false; // these 8 bits are always 0 } else { if (bitstream != 0x5ca588) return false; } //================================================================================== // Prevent repeating signals from showing up //================================================================================== if((SignalHash!=SignalHashPrevious) || ((RepeatingTimer+2000)<millis()) || (SignalCRC != bitstream) ) { SignalCRC=bitstream; // not seen the RF packet recently } else { return true; // already seen the RF packet recently } //================================================================================== // Output // ---------------------------------- Serial.print("20;"); PrintHexByte(PKSequenceNumber++); // ---------------------------------- if (type == 0) { Serial.print(";SilverCrest;"); // Label sprintf(pbuffer, "ID=%08lx;", bitstream); // ID } else { Serial.print(";SilverCrest;"); // Label sprintf(pbuffer, "ID=%08lx;", bitstream2); // ID } Serial.print( pbuffer ); Serial.print(F("SWITCH=1;CMD=ON;")); Serial.print(F("CHIME=01;")); Serial.println(); //================================================================================== RawSignal.Repeats=true; // suppress repeats of the same RF packet RawSignal.Number=0; // do not process the packet any further return true; }