IRRemote fuer Yamaha Reciever
[svn42.git] / rf433ctl / IRremote / examples / IRtest / IRtest.pde
diff --git a/rf433ctl/IRremote/examples/IRtest/IRtest.pde b/rf433ctl/IRremote/examples/IRtest/IRtest.pde
new file mode 100644 (file)
index 0000000..b1cb522
--- /dev/null
@@ -0,0 +1,190 @@
+/*\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