You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.9 KiB
74 lines
2.9 KiB
5 years ago
|
/* IRLib_P07_NECx.h
|
||
|
* Part of IRLib Library for Arduino receiving, decoding, and sending
|
||
|
* infrared signals. See COPYRIGHT.txt and LICENSE.txt for more information.
|
||
|
*/
|
||
|
/*
|
||
|
* NECx is a variation of NEC protocol. The only difference is in the timing of the
|
||
|
* header. There are two variations NECx1 and NECx2. They differ only in the way in
|
||
|
* which they handle repeat codes. If you hold a button using NECx1 it does not repeat
|
||
|
* the same sequence. Rather it sends a special sequence consisting of the usual header
|
||
|
* followed by a normal mark, a "1" bit, and then a long space with a 108ms extent. Note
|
||
|
* this so-called "ditto" repeat code is slightly different than the one for regular NEC.
|
||
|
* When IRLib receives one of these special repeat sequences, it returns the
|
||
|
* value REPEAT_CODE which is defined in IRLibProtocols.h as the value 0xffffffff. If you
|
||
|
* send REPEAT_CODE, the send routine will create a special sequence for you.
|
||
|
* Whether it is a normal code or a repeat code the entire frame has a 108ms extent.
|
||
|
* The IRP notation for these protocols are:
|
||
|
* NECx1: {38k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,~F:8,1,^108,(8,-8,D:1,1,^108m)*)
|
||
|
* NECx2: {38k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,~F:8,1,^108)+
|
||
|
*/
|
||
|
|
||
|
#ifndef IRLIB_PROTOCOL_07_H
|
||
|
#define IRLIB_PROTOCOL_07_H
|
||
|
#define IR_SEND_PROTOCOL_07 case 07: IRsendNECx::send(data); break;
|
||
|
#define IR_DECODE_PROTOCOL_07 if(IRdecodeNECx::decode()) return true;
|
||
|
#ifdef IRLIB_HAVE_COMBO
|
||
|
#define PV_IR_DECODE_PROTOCOL_07 ,public virtual IRdecodeNECx
|
||
|
#define PV_IR_SEND_PROTOCOL_07 ,public virtual IRsendNECx
|
||
|
#else
|
||
|
#define PV_IR_DECODE_PROTOCOL_07 public virtual IRdecodeNECx
|
||
|
#define PV_IR_SEND_PROTOCOL_07 public virtual IRsendNECx
|
||
|
#endif
|
||
|
|
||
|
#ifdef IRLIBSENDBASE_H
|
||
|
class IRsendNECx: public virtual IRsendBase {
|
||
|
public:
|
||
|
void send(uint32_t data) {
|
||
|
if (data==REPEAT_CODE) {
|
||
|
enableIROut(38);
|
||
|
mark(564*8); space(564*8); mark(564);space(564);
|
||
|
mark(564); space(412);delay(98);//actually 98412us
|
||
|
}
|
||
|
else {
|
||
|
sendGeneric(data,32, 564*8, 564*8, 564, 564, 564*3, 564, 38, true);
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
#endif //IRLIBSENDBASE_H
|
||
|
|
||
|
#ifdef IRLIBDECODEBASE_H
|
||
|
class IRdecodeNECx: public virtual IRdecodeBase {
|
||
|
public:
|
||
|
virtual bool decode(void) {
|
||
|
IRLIB_ATTEMPT_MESSAGE(F("NECx"));
|
||
|
resetDecoder();//This used to be in the receiver getResults.
|
||
|
// Check for repeat
|
||
|
if (recvGlobal.decodeLength == 6 && MATCH(recvGlobal.decodeBuffer[1], 564*8) && MATCH(recvGlobal.decodeBuffer[2],564*8)
|
||
|
&& MATCH(recvGlobal.decodeBuffer[3],564) && MATCH(recvGlobal.decodeBuffer[5],564)
|
||
|
) {
|
||
|
bits = 0;
|
||
|
value = REPEAT_CODE;
|
||
|
protocolNum = NECX;
|
||
|
return true;
|
||
|
}
|
||
|
if(!decodeGeneric(68, 564*8, 564*8, 564, 564*3, 564)) return false;
|
||
|
protocolNum = NECX;
|
||
|
return true;
|
||
|
}
|
||
|
};
|
||
|
#endif //IRLIBDECODEBASE_H
|
||
|
|
||
|
#define IRLIB_HAVE_COMBO
|
||
|
|
||
|
#endif //IRLIB_PROTOCOL_07_H
|