+++ /dev/null
-/*\r
- * IRremote: IRtest unittest\r
- * Version 0.1 July, 2009\r
- * Copyright 2009 Ken Shirriff\r
- * http://arcfn.com\r
- *\r
- * Note: to run these tests, edit IRremote/IRremote.h to add "#define TEST"\r
- * You must then recompile the library by removing IRremote.o and restarting\r
- * the arduino IDE.\r
- */\r
-\r
-#include <IRremote.h>\r
-#include <IRremoteInt.h>\r
-\r
-// Dumps out the decode_results structure.\r
-// Call this after IRrecv::decode()\r
-// void * to work around compiler issue\r
-//void dump(void *v) {\r
-// decode_results *results = (decode_results *)v\r
-void dump(decode_results *results) {\r
- int count = results->rawlen;\r
- if (results->decode_type == UNKNOWN) {\r
- Serial.println("Could not decode message");\r
- } \r
- else {\r
- if (results->decode_type == NEC) {\r
- Serial.print("Decoded NEC: ");\r
- } \r
- else if (results->decode_type == SONY) {\r
- Serial.print("Decoded SONY: ");\r
- } \r
- else if (results->decode_type == RC5) {\r
- Serial.print("Decoded RC5: ");\r
- } \r
- else if (results->decode_type == RC6) {\r
- Serial.print("Decoded RC6: ");\r
- }\r
- Serial.print(results->value, HEX);\r
- Serial.print(" (");\r
- Serial.print(results->bits, DEC);\r
- Serial.println(" bits)");\r
- }\r
- Serial.print("Raw (");\r
- Serial.print(count, DEC);\r
- Serial.print("): ");\r
-\r
- for (int i = 0; i < count; i++) {\r
- if ((i % 2) == 1) {\r
- Serial.print(results->rawbuf[i]*USECPERTICK, DEC);\r
- } \r
- else {\r
- Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);\r
- }\r
- Serial.print(" ");\r
- }\r
- Serial.println("");\r
-}\r
-\r
-IRrecv irrecv(0);\r
-decode_results results;\r
-\r
-class IRsendDummy : \r
-public IRsend\r
-{\r
-public:\r
- // For testing, just log the marks/spaces\r
-#define SENDLOG_LEN 128\r
- int sendlog[SENDLOG_LEN];\r
- int sendlogcnt;\r
- IRsendDummy() : \r
- IRsend() {\r
- }\r
- void reset() {\r
- sendlogcnt = 0;\r
- }\r
- void mark(int time) {\r
- sendlog[sendlogcnt] = time;\r
- if (sendlogcnt < SENDLOG_LEN) sendlogcnt++;\r
- }\r
- void space(int time) {\r
- sendlog[sendlogcnt] = -time;\r
- if (sendlogcnt < SENDLOG_LEN) sendlogcnt++;\r
- }\r
- // Copies the dummy buf into the interrupt buf\r
- void useDummyBuf() {\r
- int last = SPACE;\r
- irparams.rcvstate = STATE_STOP;\r
- irparams.rawlen = 1; // Skip the gap\r
- for (int i = 0 ; i < sendlogcnt; i++) {\r
- if (sendlog[i] < 0) {\r
- if (last == MARK) {\r
- // New space\r
- irparams.rawbuf[irparams.rawlen++] = (-sendlog[i] - MARK_EXCESS) / USECPERTICK;\r
- last = SPACE;\r
- } \r
- else {\r
- // More space\r
- irparams.rawbuf[irparams.rawlen - 1] += -sendlog[i] / USECPERTICK;\r
- }\r
- } \r
- else if (sendlog[i] > 0) {\r
- if (last == SPACE) {\r
- // New mark\r
- irparams.rawbuf[irparams.rawlen++] = (sendlog[i] + MARK_EXCESS) / USECPERTICK;\r
- last = MARK;\r
- } \r
- else {\r
- // More mark\r
- irparams.rawbuf[irparams.rawlen - 1] += sendlog[i] / USECPERTICK;\r
- }\r
- }\r
- }\r
- if (irparams.rawlen % 2) {\r
- irparams.rawlen--; // Remove trailing space\r
- }\r
- }\r
-};\r
-\r
-IRsendDummy irsenddummy;\r
-\r
-void verify(unsigned long val, int bits, int type) {\r
- irsenddummy.useDummyBuf();\r
- irrecv.decode(&results);\r
- Serial.print("Testing ");\r
- Serial.print(val, HEX);\r
- if (results.value == val && results.bits == bits && results.decode_type == type) {\r
- Serial.println(": OK");\r
- } \r
- else {\r
- Serial.println(": Error");\r
- dump(&results);\r
- }\r
-} \r
-\r
-void testNEC(unsigned long val, int bits) {\r
- irsenddummy.reset();\r
- irsenddummy.sendNEC(val, bits);\r
- verify(val, bits, NEC);\r
-}\r
-void testSony(unsigned long val, int bits) {\r
- irsenddummy.reset();\r
- irsenddummy.sendSony(val, bits);\r
- verify(val, bits, SONY);\r
-}\r
-void testRC5(unsigned long val, int bits) {\r
- irsenddummy.reset();\r
- irsenddummy.sendRC5(val, bits);\r
- verify(val, bits, RC5);\r
-}\r
-void testRC6(unsigned long val, int bits) {\r
- irsenddummy.reset();\r
- irsenddummy.sendRC6(val, bits);\r
- verify(val, bits, RC6);\r
-}\r
-\r
-void test() {\r
- Serial.println("NEC tests");\r
- testNEC(0x00000000, 32);\r
- testNEC(0xffffffff, 32);\r
- testNEC(0xaaaaaaaa, 32);\r
- testNEC(0x55555555, 32);\r
- testNEC(0x12345678, 32);\r
- Serial.println("Sony tests");\r
- testSony(0xfff, 12);\r
- testSony(0x000, 12);\r
- testSony(0xaaa, 12);\r
- testSony(0x555, 12);\r
- testSony(0x123, 12);\r
- Serial.println("RC5 tests");\r
- testRC5(0xfff, 12);\r
- testRC5(0x000, 12);\r
- testRC5(0xaaa, 12);\r
- testRC5(0x555, 12);\r
- testRC5(0x123, 12);\r
- Serial.println("RC6 tests");\r
- testRC6(0xfffff, 20);\r
- testRC6(0x00000, 20);\r
- testRC6(0xaaaaa, 20);\r
- testRC6(0x55555, 20);\r
- testRC6(0x12345, 20);\r
-}\r
-\r
-void setup()\r
-{\r
- Serial.begin(9600);\r
- test();\r
-}\r
-\r
-void loop() {\r
-}\r