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.6 KiB

/* IRLib_P06_JVC.h
* Part of IRLib Library for Arduino receiving, decoding, and sending
* infrared signals. See COPYRIGHT.txt and LICENSE.txt for more information.
*/
/*
* JVC omits the mark/space header on repeat sending. Therefore we multiply
* it by 0 if it's a repeat. The only device I had to test this protocol was
* an old JVC VCR. It would only work if at least 2 frames are sent separated
* by 45 time periods of "space". Therefore you should call this routine once
* with "first=true" and it will send a first frame followed by one repeat
* frame. If First==false, it will only send a single repeat frame.
*/
#ifndef IRLIB_PROTOCOL_06_H
#define IRLIB_PROTOCOL_06_H
#define IR_SEND_PROTOCOL_06 case 06: IRsendJVC::send(data,(bool)data2); break;
#define IR_DECODE_PROTOCOL_06 if(IRdecodeJVC::decode()) return true;
#ifdef IRLIB_HAVE_COMBO
#define PV_IR_DECODE_PROTOCOL_06 ,public virtual IRdecodeJVC
#define PV_IR_SEND_PROTOCOL_06 ,public virtual IRsendJVC
#else
#define PV_IR_DECODE_PROTOCOL_06 public virtual IRdecodeJVC
#define PV_IR_SEND_PROTOCOL_06 public virtual IRsendJVC
#endif
#ifdef IRLIBSENDBASE_H
class IRsendJVC: public virtual IRsendBase {
public:
void send(uint32_t data, bool first=true) {
sendGeneric(data, 16,525*16*first, 525*8*first, 525, 525,525*3, 525, 38, true);
space(525*45);
if(first) {
sendGeneric(data, 16,0,0, 525, 525,525*3, 525, 38, true);
space(525*45);
}
}
};
#endif //IRLIBSENDBASE_H
#ifdef IRLIBDECODEBASE_H
class IRdecodeJVC: public virtual IRdecodeBase {
public:
bool decode(void) {
// JVC does not send any header if there is a repeat.
// first try with the header. If that fails, try without.
IRLIB_ATTEMPT_MESSAGE(F("JVC"));
if(!decodeGeneric(36,525*16,525*8,525,525*3,525)) {
IRLIB_ATTEMPT_MESSAGE(F("JVC Repeat"));
if (recvGlobal.decodeLength==34) {
if(!decodeGeneric(0,525,0,525,525*3,525)) {
return IRLIB_REJECTION_MESSAGE(F("JVC repeat failed generic"));
} else {
//If this is a repeat code then IRdecodeBase::decodeGeneric fails to add the most significant bit
if (MATCH(recvGlobal.decodeBuffer[2],(525*3))) {
value |= 0x8000;
} else {
if (!MATCH(recvGlobal.decodeBuffer[2],525)) return DATA_SPACE_ERROR(525);
}
}
bits++;
}
else return RAW_COUNT_ERROR;
}
address=(recvGlobal.decodeLength==36);
protocolNum =JVC;
return true;
}
};
#endif //IRLIBDECODEBASE_H
#define IRLIB_HAVE_COMBO
#endif //IRLIB_PROTOCOL_06_H