More cleanup and a few minor optimisations

This commit is contained in:
Bluechip
2015-06-20 20:27:59 +01:00
parent 6087fabfe1
commit c58507655c
14 changed files with 526 additions and 470 deletions

View File

@@ -18,8 +18,13 @@
#define JVC_RPT_LENGTH 60000
//+=============================================================================
#ifdef SEND_JVC
void IRsend::sendJVC (unsigned long data, int nbits, int repeat)
// 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
//
#if SEND_JVC
void IRsend::sendJVC (unsigned long data, int nbits, bool repeat)
{
// Set IR carrier frequency
enableIROut(38);
@@ -48,37 +53,36 @@ void IRsend::sendJVC (unsigned long data, int nbits, int repeat)
#endif
//+=============================================================================
#ifdef DECODE_JVC
long IRrecv::decodeJVC (decode_results *results)
#if DECODE_JVC
bool IRrecv::decodeJVC (decode_results *results)
{
long data = 0;
int offset = 1; // Skip first space
// Check for repeat
if (irparams.rawlen - 1 == 33 &&
MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK) &&
MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK)) {
results->bits = 0;
results->value = REPEAT;
if ( (irparams.rawlen - 1 == 33)
&& MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)
&& MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK)
) {
results->bits = 0;
results->value = REPEAT;
results->decode_type = JVC;
return true;
}
// Initial mark
if (!MATCH_MARK(results->rawbuf[offset], JVC_HDR_MARK)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset++], JVC_HDR_MARK)) return false ;
if (irparams.rawlen < 2 * JVC_BITS + 1 ) return false ;
if (irparams.rawlen < (2 * JVC_BITS) + 1 ) return false ;
// Initial space
if (!MATCH_SPACE(results->rawbuf[offset], JVC_HDR_SPACE)) return false ;
offset++;
if (!MATCH_SPACE(results->rawbuf[offset++], JVC_HDR_SPACE)) return false ;
for (int i = 0; i < JVC_BITS; i++) {
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) return false ;
offset++;
if (!MATCH_MARK(results->rawbuf[offset++], JVC_BIT_MARK)) return false ;
if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) data = (data << 1) | 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data <<= 1 ;
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data = (data << 1) | 0 ;
else return false ;
offset++;
}