daily_automated
This commit is contained in:
99
trunk/Arduino/libraries/IRremote/src/ir_JVC.cpp
Normal file
99
trunk/Arduino/libraries/IRremote/src/ir_JVC.cpp
Normal file
@@ -0,0 +1,99 @@
|
||||
#include "IRremote.h"
|
||||
|
||||
//==============================================================================
|
||||
// JJJJJ V V CCCC
|
||||
// J V V C
|
||||
// J V V C
|
||||
// J J V V C
|
||||
// J V CCCC
|
||||
//==============================================================================
|
||||
|
||||
#define JVC_BITS 16
|
||||
#define JVC_HEADER_MARK 8400
|
||||
#define JVC_HEADER_SPACE 4200
|
||||
#define JVC_BIT_MARK 600
|
||||
#define JVC_ONE_SPACE 1600
|
||||
#define JVC_ZERO_SPACE 550
|
||||
#define JVC_REPEAT_SPACE 50000
|
||||
|
||||
//+=============================================================================
|
||||
// JVC does NOT repeat by sending a separate code (like NEC does).
|
||||
// The JVC protocol repeats by skipping the header.
|
||||
// To send a JVC repeat signal, send the original code value
|
||||
// and set 'repeat' to true
|
||||
//
|
||||
// JVC commands sometimes need to be sent two or three times with 40 to 60 ms pause in between.
|
||||
//
|
||||
#if SEND_JVC
|
||||
void IRsend::sendJVC(unsigned long data, int nbits, bool repeat) {
|
||||
// Set IR carrier frequency
|
||||
enableIROut(38);
|
||||
|
||||
// Only send the Header if this is NOT a repeat command
|
||||
if (!repeat) {
|
||||
mark(JVC_HEADER_MARK);
|
||||
space(JVC_HEADER_SPACE);
|
||||
}
|
||||
|
||||
// Data
|
||||
sendPulseDistanceWidthData(JVC_BIT_MARK, JVC_ONE_SPACE, JVC_BIT_MARK, JVC_ZERO_SPACE, data, nbits);
|
||||
|
||||
// Footer
|
||||
mark(JVC_BIT_MARK);
|
||||
space(0); // Always end with the LED off
|
||||
}
|
||||
#endif
|
||||
|
||||
//+=============================================================================
|
||||
#if DECODE_JVC
|
||||
bool IRrecv::decodeJVC() {
|
||||
long data = 0;
|
||||
int offset = 1; // Skip first space
|
||||
|
||||
// Check for repeat
|
||||
if ((results.rawlen - 1 == 33) && MATCH_MARK(results.rawbuf[offset], JVC_BIT_MARK)
|
||||
&& MATCH_MARK(results.rawbuf[results.rawlen - 1], JVC_BIT_MARK)) {
|
||||
results.bits = 0;
|
||||
results.value = REPEAT;
|
||||
results.isRepeat = true;
|
||||
results.decode_type = JVC;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Initial mark
|
||||
if (!MATCH_MARK(results.rawbuf[offset], JVC_HEADER_MARK)) {
|
||||
return false;
|
||||
}
|
||||
offset++;
|
||||
|
||||
if (results.rawlen < (2 * JVC_BITS) + 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Initial space
|
||||
if (!MATCH_SPACE(results.rawbuf[offset], JVC_HEADER_SPACE)) {
|
||||
return false;
|
||||
}
|
||||
offset++;
|
||||
|
||||
data = decodePulseDistanceData(JVC_BITS, offset, JVC_BIT_MARK, JVC_ONE_SPACE, JVC_ZERO_SPACE);
|
||||
|
||||
// Stop bit
|
||||
if (!MATCH_MARK(results.rawbuf[offset], JVC_BIT_MARK)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Success
|
||||
results.bits = JVC_BITS;
|
||||
results.value = data;
|
||||
results.decode_type = JVC;
|
||||
|
||||
return true;
|
||||
}
|
||||
bool IRrecv::decodeJVC(decode_results *aResults) {
|
||||
bool aReturnValue = decodeJVC();
|
||||
*aResults = results;
|
||||
return aReturnValue;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user