diff service/busyboxArduino/IRremote/examples/IRtest/IRtest.ino @ 155:e88308cea843

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