annotate service/busyboxArduino/IRremote/IRremote.h @ 155:e88308cea843

add IRremote Ignore-this: c295c68f923af8d072841f1d7c1e5ab8
author drewp@bigasterisk.com
date Mon, 19 Jan 2015 17:55:26 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
1 /*
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
2 * IRremote
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
3 * Version 0.1 July, 2009
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
4 * Copyright 2009 Ken Shirriff
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
5 * For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.htm http://arcfn.com
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
6 * Edited by Mitra to add new controller SANYO
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
7 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
8 * Interrupt code based on NECIRrcv by Joe Knapp
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
9 * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
10 * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
11 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
12 * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
13 * LG added by Darryl Smith (based on the JVC protocol)
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
14 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
15
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
16 #ifndef IRremote_h
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
17 #define IRremote_h
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
18
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
19 // The following are compile-time library options.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
20 // If you change them, recompile the library.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
21 // If DEBUG is defined, a lot of debugging output will be printed during decoding.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
22 // TEST must be defined for the IRtest unittests to work. It will make some
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
23 // methods virtual, which will be slightly slower, which is why it is optional.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
24 // #define DEBUG
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
25 // #define TEST
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
26
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
27 // Results returned from the decoder
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
28 class decode_results {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
29 public:
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
30 int decode_type; // NEC, SONY, RC5, UNKNOWN
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
31 union { // This is used for decoding Panasonic and Sharp data
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
32 unsigned int panasonicAddress;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
33 unsigned int sharpAddress;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
34 };
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
35 unsigned long value; // Decoded value
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
36 int bits; // Number of bits in decoded value
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
37 volatile unsigned int *rawbuf; // Raw intervals in .5 us ticks
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
38 int rawlen; // Number of records in rawbuf.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
39 };
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
40
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
41 // Values for decode_type
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
42 #define NEC 1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
43 #define SONY 2
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
44 #define RC5 3
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
45 #define RC6 4
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
46 #define DISH 5
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
47 #define SHARP 6
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
48 #define PANASONIC 7
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
49 #define JVC 8
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
50 #define SANYO 9
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
51 #define MITSUBISHI 10
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
52 #define SAMSUNG 11
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
53 #define LG 12
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
54 #define UNKNOWN -1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
55
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
56 // Decoded value for NEC when a repeat code is received
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
57 #define REPEAT 0xffffffff
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
58
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
59 // main class for receiving IR
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
60 class IRrecv
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
61 {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
62 public:
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
63 IRrecv(int recvpin);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
64 void blink13(int blinkflag);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
65 int decode(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
66 void enableIRIn();
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
67 void resume();
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
68 private:
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
69 // These are called by decode
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
70 int getRClevel(decode_results *results, int *offset, int *used, int t1);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
71 long decodeNEC(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
72 long decodeSony(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
73 long decodeSanyo(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
74 long decodeMitsubishi(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
75 long decodeRC5(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
76 long decodeRC6(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
77 long decodePanasonic(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
78 long decodeLG(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
79 long decodeJVC(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
80 long decodeSAMSUNG(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
81 long decodeHash(decode_results *results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
82 int compare(unsigned int oldval, unsigned int newval);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
83
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
84 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
85 ;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
86
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
87 // Only used for testing; can remove virtual for shorter code
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
88 #ifdef TEST
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
89 #define VIRTUAL virtual
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
90 #else
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
91 #define VIRTUAL
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
92 #endif
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
93
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
94 class IRsend
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
95 {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
96 public:
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
97 IRsend() {}
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
98 void sendNEC(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
99 void sendSony(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
100 // Neither Sanyo nor Mitsubishi send is implemented yet
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
101 // void sendSanyo(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
102 // void sendMitsubishi(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
103 void sendRaw(unsigned int buf[], int len, int hz);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
104 void sendRC5(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
105 void sendRC6(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
106 void sendDISH(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
107 void sendSharp(unsigned int address, unsigned int command);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
108 void sendSharpRaw(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
109 void sendPanasonic(unsigned int address, unsigned long data);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
110 void sendJVC(unsigned long data, int nbits, int repeat); // *Note instead of sending the REPEAT constant if you want the JVC repeat signal sent, send the original code value and change the repeat argument from 0 to 1. JVC protocol repeats by skipping the header NOT by sending a separate code value like NEC does.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
111 // private:
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
112 void sendSAMSUNG(unsigned long data, int nbits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
113 void enableIROut(int khz);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
114 VIRTUAL void mark(int usec);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
115 VIRTUAL void space(int usec);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
116 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
117 ;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
118
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
119 // Some useful constants
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
120
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
121 #define USECPERTICK 50 // microseconds per clock interrupt tick
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
122 #define RAWBUF 100 // Length of raw duration buffer
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
123
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
124 // Marks tend to be 100us too long, and spaces 100us too short
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
125 // when received due to sensor lag.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
126 #define MARK_EXCESS 100
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
127
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
128 #endif