added arduino, modified build
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/* IRLib_P02_Sony.h
|
||||
* Part of IRLib Library for Arduino receiving, decoding, and sending
|
||||
* infrared signals. See COPYRIGHT.txt and LICENSE.txt for more information.
|
||||
*/
|
||||
/*
|
||||
* Sony is backwards from most protocols. It uses a variable length mark and a fixed length
|
||||
* space rather than a fixed mark and a variable space. Our generic send will still work
|
||||
* however we need a custom decoding routine because it's difficult to get the generic
|
||||
* decoder to handle a variable length mark without cluttering up the code to much.
|
||||
* According to the protocol you must send Sony commands at least three times so we
|
||||
* automatically do it here. Sony can be 8, 12, 15, or 20 bits in length.
|
||||
* The 8 bit version uses a shorter trailing space at the end. The signal is modulated
|
||||
* at 40 kHz however most 38 kHz receivers are broad enough to receive it.
|
||||
*/
|
||||
|
||||
#ifndef IRLIB_PROTOCOL_02_H
|
||||
#define IRLIB_PROTOCOL_02_H
|
||||
#define IR_SEND_PROTOCOL_02 case 2: IRsendSony::send(data,data2); break;
|
||||
#define IR_DECODE_PROTOCOL_02 if(IRdecodeSony::decode()) return true;
|
||||
#ifdef IRLIB_HAVE_COMBO
|
||||
#define PV_IR_DECODE_PROTOCOL_02 ,public virtual IRdecodeSony
|
||||
#define PV_IR_SEND_PROTOCOL_02 ,public virtual IRsendSony
|
||||
#else
|
||||
#define PV_IR_DECODE_PROTOCOL_02 public virtual IRdecodeSony
|
||||
#define PV_IR_SEND_PROTOCOL_02 public virtual IRsendSony
|
||||
#endif
|
||||
|
||||
#ifdef IRLIBSENDBASE_H
|
||||
class IRsendSony: public virtual IRsendBase {
|
||||
public:
|
||||
void send(uint32_t data, uint8_t nbits) {
|
||||
for(uint8_t i=0; i<3;i++){
|
||||
sendGeneric(data,nbits, 600*4, 600, 600*2, 600, 600, 600, 40, false,45000);
|
||||
}
|
||||
}
|
||||
};
|
||||
#endif //IRLIBSENDBASE_H
|
||||
|
||||
#ifdef IRLIBDECODEBASE_H
|
||||
class IRdecodeSony: public virtual IRdecodeBase {
|
||||
public:
|
||||
virtual bool decode(void) {
|
||||
IRLIB_ATTEMPT_MESSAGE(F("Sony"));
|
||||
resetDecoder();//This used to be in the receiver getResults.
|
||||
if(recvGlobal.decodeLength!=2*8+2 && recvGlobal.decodeLength!=2*12+2 && recvGlobal.decodeLength!=2*15+2
|
||||
&& recvGlobal.decodeLength!=2*20+2) return RAW_COUNT_ERROR;
|
||||
if(!ignoreHeader) {
|
||||
if (!MATCH(recvGlobal.decodeBuffer[1],600*4)) return HEADER_MARK_ERROR(600*4);
|
||||
}
|
||||
offset=2;//skip initial gap plus header Mark.
|
||||
while (offset < recvGlobal.decodeLength) {
|
||||
if (!MATCH(recvGlobal.decodeBuffer[offset],600)) return DATA_SPACE_ERROR(600);
|
||||
offset++;
|
||||
if (MATCH(recvGlobal.decodeBuffer[offset],600*2)) {
|
||||
value = (value << 1) | 1;
|
||||
}
|
||||
else if (MATCH(recvGlobal.decodeBuffer[offset],600)) {
|
||||
value <<= 1;
|
||||
}
|
||||
else return DATA_MARK_ERROR(600);
|
||||
offset++;
|
||||
}
|
||||
bits = (offset - 1) / 2;
|
||||
protocolNum = SONY;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
#endif //IRLIBDECODEBASE_H
|
||||
|
||||
#define IRLIB_HAVE_COMBO
|
||||
|
||||
#endif //IRLIB_PROTOCOL_02_H
|
||||
Reference in New Issue
Block a user