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
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
|