00001 #ifndef __CPHIDGETIR
00002 #define __CPHIDGETIR
00003 #include "cphidget.h"
00004
00011 DPHANDLE(IR)
00012 CHDRSTANDARD(IR)
00013
00014
00015 #define IR_MAX_CODE_BIT_COUNT 128
00016 #define IR_MAX_CODE_DATA_LENGTH (IR_MAX_CODE_BIT_COUNT / 8)
00017 #define IR_MAX_REPEAT_LENGTH 26
00022 typedef enum {
00023 PHIDGET_IR_ENCODING_UNKNOWN = 1,
00024 PHIDGET_IR_ENCODING_SPACE,
00025 PHIDGET_IR_ENCODING_PULSE,
00026 PHIDGET_IR_ENCODING_BIPHASE,
00027 PHIDGET_IR_ENCODING_RC5,
00028 PHIDGET_IR_ENCODING_RC6
00029 } CPhidgetIR_Encoding;
00030
00034 typedef enum {
00035 PHIDGET_IR_LENGTH_UNKNOWN = 1,
00036 PHIDGET_IR_LENGTH_CONSTANT,
00037 PHIDGET_IR_LENGTH_VARIABLE
00038 } CPhidgetIR_Length;
00039
00040
00045 typedef struct _CPhidgetIR_CodeInfo
00046 {
00047 int bitCount;
00048 CPhidgetIR_Encoding encoding;
00049 CPhidgetIR_Length length;
00050 int gap;
00051 int trail;
00052 int header[2];
00053 int one[2];
00054 int zero[2];
00055 int repeat[IR_MAX_REPEAT_LENGTH];
00056 int min_repeat;
00057 unsigned char toggle_mask[IR_MAX_CODE_DATA_LENGTH];
00058 int carrierFrequency;
00059 int dutyCycle;
00060 } CPhidgetIR_CodeInfo, *CPhidgetIR_CodeInfoHandle;
00061
00068 PHIDGET21_API int CCONV CPhidgetIR_Transmit(CPhidgetIRHandle phid, unsigned char *data, CPhidgetIR_CodeInfoHandle codeInfo);
00074 PHIDGET21_API int CCONV CPhidgetIR_TransmitRepeat(CPhidgetIRHandle phid);
00084 PHIDGET21_API int CCONV CPhidgetIR_TransmitRaw(CPhidgetIRHandle phid, int *data, int length, int carrierFrequency, int dutyCycle, int gap);
00091 PHIDGET21_API int CCONV CPhidgetIR_getRawData(CPhidgetIRHandle phid, int *data, int *dataLength);
00099 PHIDGET21_API int CCONV CPhidgetIR_getLastCode(CPhidgetIRHandle phid, unsigned char *data, int *dataLength, int *bitCount);
00107 PHIDGET21_API int CCONV CPhidgetIR_getLastLearnedCode(CPhidgetIRHandle phid, unsigned char *data, int *dataLength, CPhidgetIR_CodeInfo *codeInfo);
00116 CHDREVENT(IR, Code, unsigned char *data, int dataLength, int bitCount, int repeat)
00124 CHDREVENT(IR, Learn, unsigned char *data, int dataLength, CPhidgetIR_CodeInfoHandle codeInfo)
00131 CHDREVENT(IR, RawData, int *data, int dataLength)
00132
00133 #ifndef EXTERNALPROTO
00134 PHIDGET21_API int CCONV codeInfoToString(CPhidgetIR_CodeInfoHandle codeInfo, char *string);
00135 PHIDGET21_API int CCONV stringToCodeInfo(char *string, CPhidgetIR_CodeInfoHandle codeInfo);
00136
00137 #define IR_MAX_DATA_PER_PACKET 31
00138
00139 #define IR_DATA_ARRAY_SIZE 2048
00140 #define IR_DATA_ARRAY_MASK 0x7ff
00141
00142
00143 #define IR_MAX_DATA_us 327670
00144
00145
00146 #define IR_MAX_GAP_LENGTH 100000 //us
00147 #define IR_MIN_GAP_LENGTH 20000 //us
00148
00149 #define IR_DEFINEDATA_PACKET 0
00150
00151 #define IR_STOP_RX_WHILE_TX_FLAG 0x01
00152
00153 #define IR_RAW_DATA_WS_KEYS_MAX 100
00154
00155 struct _CPhidgetIR {
00156 CPhidget phid;
00157
00158 int (CCONV *fptrCode)(CPhidgetIRHandle, void *, unsigned char *, int, int, int);
00159 int (CCONV *fptrRawData)(CPhidgetIRHandle, void *, int *, int);
00160 int (CCONV *fptrLearn)(CPhidgetIRHandle, void *, unsigned char *, int, CPhidgetIR_CodeInfoHandle);
00161
00162 void *fptrCodeptr;
00163 void *fptrRawDataptr;
00164 void *fptrLearnptr;
00165
00166 int dataBuffer[IR_DATA_ARRAY_SIZE];
00167 int dataBufferNormalized[IR_DATA_ARRAY_SIZE];
00168 int dataReadPtr, dataWritePtr;
00169 int userReadPtr;
00170 int learnReadPtr;
00171
00172 unsigned char polarity;
00173
00174 unsigned char lastCodeKnown;
00175 unsigned char lastCode[IR_MAX_CODE_BIT_COUNT/8];
00176 CPhidgetIR_CodeInfo lastCodeInfo;
00177 unsigned char lastRepeat;
00178 int lastGap;
00179
00180 unsigned char lastLearnedCodeKnown;
00181 unsigned char lastLearnedCode[IR_MAX_CODE_BIT_COUNT/8];
00182 CPhidgetIR_CodeInfo lastLearnedCodeInfo;
00183
00184 unsigned char lastSentCode[IR_MAX_CODE_BIT_COUNT/8];
00185 CPhidgetIR_CodeInfo lastSentCodeInfo;
00186
00187 TIME lastDataTime;
00188
00189 unsigned char delayCode;
00190
00191 char *tempString;
00192 int flip;
00193
00194 int rawDataSendWSCounter, rawDataSendWSKeys[IR_RAW_DATA_WS_KEYS_MAX];
00195
00196 unsigned char outputPacket[MAX_OUT_PACKET_SIZE];
00197 unsigned int outputPacketLen;
00198 } typedef CPhidgetIRInfo;
00199 #endif
00200
00203 #endif