Infrared remote library for Arduino: send and receive infrared signals with multiple protocols Port from Arduino-IRremote https://github.com/z3t0/Arduino-IRremote
ir_JVC.cpp
00001 #include "IRremote.h" 00002 #include "IRremoteInt.h" 00003 00004 //============================================================================== 00005 // JJJJJ V V CCCC 00006 // J V V C 00007 // J V V C 00008 // J J V V C 00009 // J V CCCC 00010 //============================================================================== 00011 00012 #define JVC_BITS 16 00013 #define JVC_HDR_MARK 8000 00014 #define JVC_HDR_SPACE 4000 00015 #define JVC_BIT_MARK 600 00016 #define JVC_ONE_SPACE 1600 00017 #define JVC_ZERO_SPACE 550 00018 #define JVC_RPT_LENGTH 60000 00019 00020 //+============================================================================= 00021 // JVC does NOT repeat by sending a separate code (like NEC does). 00022 // The JVC protocol repeats by skipping the header. 00023 // To send a JVC repeat signal, send the original code value 00024 // and set 'repeat' to true 00025 // 00026 #if SEND_JVC 00027 void IRsend::sendJVC (unsigned long data, int nbits, bool repeat) 00028 { 00029 // Set IR carrier frequency 00030 enableIROut(38); 00031 00032 // Only send the Header if this is NOT a repeat command 00033 if (!repeat){ 00034 mark(JVC_HDR_MARK); 00035 space(JVC_HDR_SPACE); 00036 } 00037 00038 // Data 00039 for (unsigned long mask = 1UL << (nbits - 1); mask; mask >>= 1) { 00040 if (data & mask) { 00041 mark(JVC_BIT_MARK); 00042 space(JVC_ONE_SPACE); 00043 } else { 00044 mark(JVC_BIT_MARK); 00045 space(JVC_ZERO_SPACE); 00046 } 00047 } 00048 00049 // Footer 00050 mark(JVC_BIT_MARK); 00051 space(0); // Always end with the LED off 00052 } 00053 #endif 00054 00055 //+============================================================================= 00056 #if DECODE_JVC 00057 bool IRrecv::decodeJVC (decode_results *results) 00058 { 00059 long data = 0; 00060 int offset = 1; // Skip first space 00061 00062 // Check for repeat 00063 if ( (irparams.rawlen - 1 == 33) 00064 && MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK) 00065 && MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK) 00066 ) { 00067 results->bits = 0; 00068 results->value = REPEAT; 00069 results->decode_type = JVC; 00070 return true; 00071 } 00072 00073 // Initial mark 00074 if (!MATCH_MARK(results->rawbuf[offset++], JVC_HDR_MARK)) return false ; 00075 00076 if (irparams.rawlen < (2 * JVC_BITS) + 1 ) return false ; 00077 00078 // Initial space 00079 if (!MATCH_SPACE(results->rawbuf[offset++], JVC_HDR_SPACE)) return false ; 00080 00081 for (int i = 0; i < JVC_BITS; i++) { 00082 if (!MATCH_MARK(results->rawbuf[offset++], JVC_BIT_MARK)) return false ; 00083 00084 if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) data = (data << 1) | 1 ; 00085 else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) data = (data << 1) | 0 ; 00086 else return false ; 00087 offset++; 00088 } 00089 00090 // Stop bit 00091 if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) return false ; 00092 00093 // Success 00094 results->bits = JVC_BITS; 00095 results->value = data; 00096 results->decode_type = JVC; 00097 00098 return true; 00099 } 00100 #endif 00101
Generated on Fri Jul 15 2022 02:03:08 by 1.7.2