Merge pull request #84 from Informatic/sendsharp

sendSharp cleanup and API change
This commit is contained in:
joshua noble
2014-09-21 20:52:40 -07:00
3 changed files with 34 additions and 34 deletions

View File

@@ -1106,42 +1106,37 @@ i.e. use 0x1C10 instead of 0x0000000000001C10 which is listed in the
linked LIRC file. linked LIRC file.
*/ */
void IRsend::sendSharp(unsigned long data, int nbits) { void IRsend::sendSharpRaw(unsigned long data, int nbits) {
unsigned long invertdata = data ^ SHARP_TOGGLE_MASK;
enableIROut(38); enableIROut(38);
for (int i = 0; i < nbits; i++) {
if (data & 0x4000) {
mark(SHARP_BIT_MARK);
space(SHARP_ONE_SPACE);
}
else {
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
}
data <<= 1;
}
mark(SHARP_BIT_MARK); // Sending codes in bursts of 3 (normal, inverted, normal) makes transmission
space(SHARP_ZERO_SPACE); // much more reliable. That's the exact behaviour of CD-S6470 remote control.
delay(46); for (int n = 0; n < 3; n++) {
for (int i = 0; i < nbits; i++) { for (int i = 1 << (nbits-1); i > 0; i>>=1) {
if (invertdata & 0x4000) { if (data & i) {
mark(SHARP_BIT_MARK); mark(SHARP_BIT_MARK);
space(SHARP_ONE_SPACE); space(SHARP_ONE_SPACE);
}
else {
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
}
} }
else {
mark(SHARP_BIT_MARK); mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE); space(SHARP_ZERO_SPACE);
} delay(40);
invertdata <<= 1;
data = data ^ SHARP_TOGGLE_MASK;
} }
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
delay(46);
} }
void IRsend::sendDISH(unsigned long data, int nbits) // Sharp send compatible with data obtained through decodeSharp
{ void IRsend::sendSharp(unsigned int address, unsigned int command) {
sendSharpRaw((address << 10) | (command << 2) | 2, 15);
}
void IRsend::sendDISH(unsigned long data, int nbits) {
enableIROut(56); enableIROut(56);
mark(DISH_HDR_MARK); mark(DISH_HDR_MARK);
space(DISH_HDR_SPACE); space(DISH_HDR_SPACE);

View File

@@ -28,7 +28,10 @@
class decode_results { class decode_results {
public: public:
int decode_type; // NEC, SONY, RC5, UNKNOWN int decode_type; // NEC, SONY, RC5, UNKNOWN
unsigned int panasonicAddress; // This is only used for decoding Panasonic data union { // This is used for decoding Panasonic and Sharp data
unsigned int panasonicAddress;
unsigned int sharpAddress;
};
unsigned long value; // Decoded value unsigned long value; // Decoded value
int bits; // Number of bits in decoded value int bits; // Number of bits in decoded value
volatile unsigned int *rawbuf; // Raw intervals in .5 us ticks volatile unsigned int *rawbuf; // Raw intervals in .5 us ticks
@@ -101,7 +104,8 @@ public:
void sendRC5(unsigned long data, int nbits); void sendRC5(unsigned long data, int nbits);
void sendRC6(unsigned long data, int nbits); void sendRC6(unsigned long data, int nbits);
void sendDISH(unsigned long data, int nbits); void sendDISH(unsigned long data, int nbits);
void sendSharp(unsigned long data, int nbits); void sendSharp(unsigned int address, unsigned int command);
void sendSharpRaw(unsigned long data, int nbits);
void sendPanasonic(unsigned int address, unsigned long data); void sendPanasonic(unsigned int address, unsigned long data);
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. 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.
// private: // private:

View File

@@ -28,6 +28,7 @@ sendRC5 KEYWORD2
sendRC6 KEYWORD2 sendRC6 KEYWORD2
sendDISH KEYWORD2 sendDISH KEYWORD2
sendSharp KEYWORD2 sendSharp KEYWORD2
sendSharpRaw KEYWORD2
sendPanasonic KEYWORD2 sendPanasonic KEYWORD2
sendJVC KEYWORD2 sendJVC KEYWORD2