summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IR-Data/Dbox.txt52
-rw-r--r--IR-Data/Nokia.txt1
-rw-r--r--IR-Data/test-suite.sh14
-rw-r--r--README.txt4
-rw-r--r--irmp.c724
-rw-r--r--irmp.exebin22016 -> 22528 bytes
-rw-r--r--irmp.h48
-rw-r--r--irmpconfig.h3
-rw-r--r--irsnd.c347
-rw-r--r--irsnd.exebin12800 -> 12800 bytes
-rw-r--r--irsndconfig.h3
11 files changed, 691 insertions, 505 deletions
diff --git a/IR-Data/Dbox.txt b/IR-Data/Dbox.txt
new file mode 100644
index 0000000..b4f7199
--- /dev/null
+++ b/IR-Data/Dbox.txt
@@ -0,0 +1,52 @@
+# Power
+00000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111000000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000001111111111000001111100000000001111100000111111111100000111110000011111000001111100000111110000011111000000000011111000001111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111111111111111111111
+# 1
+00000011111111111111111111111100000011111111100000000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000011111000001111100000111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111110000011111111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111000000111100000011110000001111000000111100000011110000001111000000111100000111110000011111000001111100000111110000011111000001111100000111111111111111111111
+# 2
+00000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000001111111111000000000011111111110000011111000001111100000111110000011111000001111100000111110000011111000000000011111000001111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111111111111111111111000001111111111000000000011111000001111100000111110000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111111111111111111111
+# 3
+00000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111100000011110000001111000000111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111100000011110000001111111110000011111000001111100000111110000011111000001111100000111110000011111000000000011111000001111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111100000011110000001111000000111100000011110000001111000000111111111111111111111
+# HOME
+0000001111111111111111111111110000001111111110000000000011110000001111000000111100000011110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111110000011111111110000011111000001111100000111110000011111000000000011111111110000011110000001111000000111100000000000111100000011110000001111111110000000000011111111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111100000011111111100000011110000001111000000111100000011110000000000011111111100000011110000001111000000111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111
+# 4
+000001111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000001111111111111111111111110000001111111110000001111000000000001111111110000001111000000111100000011110000001111000001111100000111110000000000111110000011111000001111111111000000000011111111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000001111111111111111111111110000011111111110000011111000000000011111111110000011111000001111100000111110000011111000001111100000111110000000000111110000011111000001111111111000000000011111111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111110000011111111110000000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+# 5
+0000011111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011110000001111000000111100000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011110000001111111110000000000111111111100000111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111110000011111111110000000000111111111100000111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000001111100000111110000011111000001111100000111111111111111111
+# 6
+0000001111111111111111111111110000001111111110000000000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111110000011111111110000000000111110000011111111110000011111000001111100000111110000011111000001111100000111110000000000111110000011110000001111111110000000000011111111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111110000011111111100000000000111100000011111111100000011110000001111000000111100000011110000001111000000111100000000000111100000011110000001111111110000000000011111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111
+# EXIT
+00000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111000000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000001111100000111110000011111000001111111111000001111100000000001111111111000001111100000111110000011111000000000011111000001111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111111111111111111111000001111111111000000000011111000001111100000111110000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111111111111111111111
+# 7
+0000011111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011110000001111000000111100000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011110000001111000000111100000111111111100000111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111110000011111000001111100000111111111100000111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000001111100000111110000011111000001111100000111111111111111111
+# 8
+00000011111111111111111111111110000011111111110000000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000111110000011111000000000011111111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000001111100000111111111111111111111
+# 9
+0000011111111111111111111111100000011111111100000000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000111110000011111000001111100000111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111110000011111111110000011111000000000011111111110000011111000001111100000111110000011111000001111100000000001111100000111100000011111111100000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111100000111100000011111111100000011110000000000011111111100000011110000001111000000111100000011110000001111000000000001111000000111100000011111111100000000000111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111
+# 0
+0000001111111111111111111111110000001111111110000000000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111110000011111111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000000000111110000011111000001111111110000000000011111111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111110000011111111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000000000111100000011110000001111111110000000000011111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111
+# Rot
+0000001111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111110000011110000001111111110000000000011110000001111111110000000000011111111100000011110000001111000000111100000000000111100000011110000001111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011110000001111111110000000000111110000011111111110000000000111111111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111
+# Grün
+00000011111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111100000011111111100000000000111111111000000000001111111110000000000011111111100000011110000001111000000000001111000000111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111111
+# Gelb
+00000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011110000001111000000111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111111110000001111000000000011111111110000000000111111111100000111110000011111000000000011111000001111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000001111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011110000001111000000111100000011110000001111000000111111111111111111111
+# Blau
+00000011111111111111111111111100000011111111100000000000111100000011110000001111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111110000011111000001111111111000000000011111000001111100000111111111000000111100000011110000001111000000000001111000000111100000011111111100000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111111
+# Hoch
+0000011111111111111111111111110000011111111110000000000111110000011111000001111100000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000000001111100000111110000011111111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111111110000011111000001111100000111110000011111000001111000000000001111000000111100000011111111100000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111000000111100000011110000001111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111
+# Links
+00000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111100000011110000001111000000111100000011111111100000000000111111111000000111100000011110000011111000000000011111000001111100000111111111100000000001111111111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000001111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111111
+# OK
+0000001111111111111111111111110000001111111110000000000011110000001111000000111100000011110000001111000000111100000011110000001111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111110000011111111110000011111000001111100000111110000000000111110000011111111110000011111000001111100000111110000000000111100000011110000001111111110000000000011111111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000011111111111111111111111100000011111111100000011110000001111000000111100000000000111100000011111111100000011110000001111000000111100000000000111100000011110000001111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111111111111111
+# Rechts
+0000011111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000000001111100000111110000011111111110000000000111111111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111111110000000000111111111100000111110000011111000001111100000000001111000000111100000011111111100000000000111111111000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000001111000000111100000011110000001111000000111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111
+# Runter
+0000001111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111110000011110000001111000000111100000011110000001111111110000001111000000111100000011110000001111000000111100000000000111100000011110000001111111110000000000011111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011110000001111000000111100000111110000011111111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111
+# Lauter
+0000001111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011111111100000000000111100000011111111100000000000111111111000000111100000011110000001111000000111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000000001111100000111111111100000000001111111111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111
+# Leiser
+0000011111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011110000001111000000111100000011111111100000000000111111111000000111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111110000011111000001111100000111111111100000000001111111111000001111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011111111111111111
+# Mute
+0000011111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011110000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011111111100000011110000001111000000000001111111110000000000011111111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000111111111100000111110000011111000000000011111111110000000000111111111100000111110000011111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111100000111111111000000000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000011110000001111000000111100000111111111111111111
+# Info
+0000001111111111111111111111110000011111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111110000011111111100000000000111111111000000111100000011110000001111000000111100000000000111111111000000111100000000000111100000011110000001111111110000000000011111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111100000011111111100000000000111111111000000111100000111110000011111000001111100000000001111111111000001111100000000001111100000111110000011111111110000000000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111111111100000000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111000000111100000011110000001111000000111100000011111111111111111
diff --git a/IR-Data/Nokia.txt b/IR-Data/Nokia.txt
new file mode 100644
index 0000000..346559d
--- /dev/null
+++ b/IR-Data/Nokia.txt
@@ -0,0 +1 @@
+0000001111111111111111111111110000001111111110000000000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000111111111111111111111111100000111110000011111111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000000001111100000111110000011111000001111100000111111111100000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000111111111111111111111111000000111111111000000000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111110000011111000001111100000111111111111111111111
diff --git a/IR-Data/test-suite.sh b/IR-Data/test-suite.sh
index 5891ae6..f4b192a 100644
--- a/IR-Data/test-suite.sh
+++ b/IR-Data/test-suite.sh
@@ -1,10 +1,24 @@
#! /bin/sh
+#----------------------------------------------------------------------------
+# test suite for IRMP
+#
+# usage:
+#
+# ./test-suite.sh
+#
+# Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de
+#
+# $Id: test-suite.sh,v 1.6 2010/05/25 14:44:41 fm Exp $
+#----------------------------------------------------------------------------
+
for j in \
+ Dbox.txt \
DK_Digital.txt \
Grundig_TP715.txt \
Grundig_TP715_SatTV.txt \
Grundig_TP715_Video.txt \
Matsushita.txt \
+ Nokia.txt \
Panasonic-Blue-Ray.txt \
RC5-Taste.txt \
Samsung_DVD_Rec_00062C.txt \
diff --git a/README.txt b/README.txt
index b6bab6a..ef53ab8 100644
--- a/README.txt
+++ b/README.txt
@@ -1,8 +1,8 @@
IRMP - Infrared Multi Protocol Decoder
--------------------------------------
-Version IRMP: 1.3.1 17.05.2010
-Version IRSND: 1.3.1 17.05.2010
+Version IRMP: 1.4.0 26.05.2010
+Version IRSND: 1.4.0 26.05.2010
Dokumentation:
diff --git a/irmp.c b/irmp.c
index f4e2ef7..74aa156 100644
--- a/irmp.c
+++ b/irmp.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de
*
- * $Id: irmp.c,v 1.25 2010/05/17 10:31:43 fm Exp $
+ * $Id: irmp.c,v 1.31 2010/05/26 08:34:30 fm Exp $
*
* ATMEGA88 @ 8 MHz
*
@@ -23,7 +23,8 @@
* NUBERT - Nubert Subwoofer System
* B&O - Bang & Olufsen
* PANASONIC - Panasonic (older, yet not implemented)
- * Grundig - Grundig
+ * GRUNDIG - Grundig
+ * NOKIA - Nokia
*
*---------------------------------------------------------------------------------------------------------------------------------------------------
*
@@ -209,14 +210,16 @@
*
*---------------------------------------------------------------------------------------------------------------------------------------------------
*
- * Grundig
+ * GRUNDIG
* -------
*
- * frame: 1 start packet + n info packets + 1 stop packet
- * packet: 1 pre bit + 1 start bit + 9 data bits + no stop bit
- * data of start packet: 9 x 1
- * data of info packet: 9 command bits
- * data of stop packet: 9 x 1
+ * packet: 1 start frame + 19,968ms pause + N info frames + 117,76ms pause + 1 stop frame
+ * frame: 1 pre bit + 1 start bit + 9 data bits + no stop bit
+ * pause between info frames: 117,76ms
+ *
+ * data of start frame: 9 x 1
+ * data of info frame: 9 command bits
+ * data of stop frame: 9 x 1
*
* pre bit: start bit data "0": data "1":
* ------____________ ------______ ______------ ------______
@@ -224,6 +227,14 @@
*
*---------------------------------------------------------------------------------------------------------------------------------------------------
*
+ * NOKIA:
+ * ------
+ *
+ * Timing similar to Grundig, but 16 data bits:
+ * frame: 1 pre bit + 1 start bit + 8 command bits + 8 address bits + no stop bit
+ *
+ *---------------------------------------------------------------------------------------------------------------------------------------------------
+ *
* PANASONIC (older protocol, yet not implemented, see also MATSUSHITA, timing very similar)
* -----------------------------------------------------------------------------------------
*
@@ -304,9 +315,15 @@ typedef unsigned int16 uint16_t;
#include "irmp.h"
#include "irmpconfig.h"
+#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1 || IRMP_SUPPORT_NOKIA_PROTOCOL == 1
+#define IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL 1
+#else
+#define IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL 0
+#endif
+
#define IRMP_TIMEOUT_TIME 16500.0e-6 // timeout after 16.5 ms darkness
#define IRMP_TIMEOUT_LEN (uint8_t)(F_INTERRUPTS * IRMP_TIMEOUT_TIME + 0.5)
-#define IRMP_REPETITION_TIME (uint16_t)(F_INTERRUPTS * 100.0e-3 + 0.5) // autodetect key repetition within 100 msec
+#define IRMP_KEY_REPETITION_LEN (uint16_t)(F_INTERRUPTS * 150.0e-3 + 0.5) // autodetect key repetition within 150 msec
#define MIN_TOLERANCE_00 1.0 // -0%
#define MAX_TOLERANCE_00 1.0 // +0%
@@ -403,10 +420,10 @@ typedef unsigned int16 uint16_t;
#define RECS80_0_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * RECS80_0_PAUSE_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
#define RECS80_0_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * RECS80_0_PAUSE_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
-#define RC5_START_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
-#define RC5_START_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
-#define RC5_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
-#define RC5_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
+#define RC5_START_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
+#define RC5_START_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
+#define RC5_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MIN_TOLERANCE_10 + 0.5) - 1)
+#define RC5_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * RC5_BIT_TIME * MAX_TOLERANCE_10 + 0.5) + 1)
#define DENON_PULSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
#define DENON_PULSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * DENON_PULSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
@@ -475,14 +492,14 @@ typedef unsigned int16 uint16_t;
#define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MIN_TOLERANCE_05 + 0.5) - 1)
#define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME * MAX_TOLERANCE_05 + 0.5) + 1)
-#define GRUNDIG_START_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * GRUNDIG_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
-#define GRUNDIG_START_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * GRUNDIG_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
-#define GRUNDIG_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * GRUNDIG_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
-#define GRUNDIG_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * GRUNDIG_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
-#define GRUNDIG_PRE_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * GRUNDIG_PRE_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) + 1)
-#define GRUNDIG_PRE_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * GRUNDIG_PRE_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
+#define GRUNDIG_OR_NOKIA_START_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
+#define GRUNDIG_OR_NOKIA_START_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
+#define GRUNDIG_OR_NOKIA_BIT_LEN_MIN ((uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_BIT_TIME * MIN_TOLERANCE_20 + 0.5) - 1)
+#define GRUNDIG_OR_NOKIA_BIT_LEN_MAX ((uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_BIT_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
+#define GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MIN ((uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_PRE_PAUSE_TIME * MIN_TOLERANCE_20 + 0.5) + 1)
+#define GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MAX ((uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_PRE_PAUSE_TIME * MAX_TOLERANCE_20 + 0.5) + 1)
-#define AUTO_REPETITION_LEN (uint16_t)(F_INTERRUPTS * AUTO_REPETITION_TIME + 0.5) // use uint16_t!
+#define AUTO_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * AUTO_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
#ifdef DEBUG
#define DEBUG_PUTCHAR(a) { if (! silent) { putchar (a); } }
@@ -495,28 +512,17 @@ static int time_counter;
#endif
#if IRMP_LOGGING == 1
-#define irmp_logIsr(x) irmp_logIr((x) ? 1:0)
#define UART_BAUD 9600L
// calculate real baud rate:
#define UBRR_VAL ((F_CPU + UART_BAUD * 8) / (UART_BAUD * 16) - 1) // round
#define BAUD_REAL (F_CPU / (16 * (UBRR_VAL + 1))) // real baudrate
+#define BAUD_ERROR ((BAUD_REAL * 1000) / UART_BAUD) // error in promille
-#ifdef CODEVISION
-#if ((BAUD_REAL * 1000) / UART_BAUD - 1000) > 10
-# error Error of baud rate of RS232 UARTx is more than 1%. That is too high!
-#endif
-
-#else // not CODEVISION
-
-#define BAUD_ERROR ((BAUD_REAL * 1000) / UART_BAUD - 1000) // error in promille
-
-#if ((BAUD_ERROR > 10) || (-BAUD_ERROR < 10))
+#if ((BAUD_ERROR < 990) || (BAUD_ERROR > 1010))
# error Error of baud rate of RS232 UARTx is more than 1%. That is too high!
#endif
-#endif // CODEVISION
-
/*---------------------------------------------------------------------------------------------------------------------------------------------------
* Initialize UART
* @details Initializes UART
@@ -551,59 +557,62 @@ irmp_uart_putc (unsigned char ch)
* Log IR signal
*---------------------------------------------------------------------------------------------------------------------------------------------------
*/
-#define c_startcycles 2 // min count of zeros before start of logging
-#define c_endBits 1000 // log buffer size
-#define c_datalen 700 // number of sequenced highbits to detect end
+
+#define STARTCYCLES 2 // min count of zeros before start of logging
+#define ENDBITS 1000 // number of sequenced highbits to detect end
+#define DATALEN 700 // log buffer size
static void
-irmp_logIr (uint8_t val)
+irmp_log (uint8_t val)
{
- static uint8_t s_data[c_datalen]; // logging buffer
- static uint16_t s_dataIdx; // number of written bits
- static uint8_t s_startcycles; // current number of start-zeros
- static uint16_t s_ctr; // counts sequenced highbits - to detect end
+ static uint8_t buf[DATALEN]; // logging buffer
+ static uint16_t buf_idx; // number of written bits
+ static uint8_t startcycles; // current number of start-zeros
+ static uint16_t cnt; // counts sequenced highbits - to detect end
- if ((val == 0) && (s_startcycles < c_startcycles) && !s_dataIdx) // prevent that single random zeros init logging
+ if (! val && (startcycles < STARTCYCLES) && !buf_idx) // prevent that single random zeros init logging
{
- ++s_startcycles;
+ startcycles++;
}
else
{
- s_startcycles = 0;
+ startcycles = 0;
- if ( (val == 0) // start or continue logging on "0"
- || ((val == 1) && (s_dataIdx != 0))) // "1" cannot init logging
+ if (! val || (val && buf_idx != 0)) // start or continue logging on "0", "1" cannot init logging
{
- if (val)
- { // set or clear bit in bitarray
- s_data[(s_dataIdx / 8)] |= (1<<(s_dataIdx % 8));
- }
- else
- {
- s_data[(s_dataIdx / 8)] &= ~(1<<(s_dataIdx % 8));
- }
+ if (buf_idx < DATALEN * 8) // index in range?
+ { // yes
+ if (val)
+ {
+ buf[(buf_idx / 8)] |= (1<<(buf_idx % 8)); // set bit
+ }
+ else
+ {
+ buf[(buf_idx / 8)] &= ~(1<<(buf_idx % 8)); // reset bit
+ }
- ++s_dataIdx;
+ buf_idx++;
+ }
if (val)
{ // if high received then look at log-stop condition
- ++s_ctr;
+ cnt++;
- if (s_ctr > c_endBits)
- { // if stop condition (200 sequenced ones) meets, output on uart
+ if (cnt > ENDBITS)
+ { // if stop condition is true, output on uart
uint16_t i;
- for (i = 0; i < c_startcycles; ++i)
+ for (i = 0; i < STARTCYCLES; i++)
{
irmp_uart_putc ('0'); // the ignored starting zeros
}
- for (i = 0;i < (s_dataIdx - c_endBits + 20) / 8; ++i) // transform bitset into uart chars
+ for (i = 0; i < (buf_idx - ENDBITS + 20) / 8; i++) // transform bitset into uart chars
{
- uint8_t d = s_data[i];
+ uint8_t d = buf[i];
uint8_t j;
- for (j = 0;j<8;++j)
+ for (j = 0; j < 8; j++)
{
irmp_uart_putc ((d & 1) + '0');
d >>= 1;
@@ -611,19 +620,19 @@ irmp_logIr (uint8_t val)
}
irmp_uart_putc ('\n');
- s_dataIdx = 0;
+ buf_idx = 0;
}
}
else
{
- s_ctr = 0;
+ cnt = 0;
}
}
}
}
#else
-#define irmp_logIsr(x)
+#define irmp_log(val)
#endif
typedef struct
@@ -650,22 +659,22 @@ typedef struct
static PROGMEM IRMP_PARAMETER sircs_param =
{
- IRMP_SIRCS_PROTOCOL,
- SIRCS_1_PULSE_LEN_MIN,
- SIRCS_1_PULSE_LEN_MAX,
- SIRCS_PAUSE_LEN_MIN,
- SIRCS_PAUSE_LEN_MAX,
- SIRCS_0_PULSE_LEN_MIN,
- SIRCS_0_PULSE_LEN_MAX,
- SIRCS_PAUSE_LEN_MIN,
- SIRCS_PAUSE_LEN_MAX,
- SIRCS_ADDRESS_OFFSET,
- SIRCS_ADDRESS_OFFSET + SIRCS_ADDRESS_LEN,
- SIRCS_COMMAND_OFFSET,
- SIRCS_COMMAND_OFFSET + SIRCS_COMMAND_LEN,
- SIRCS_COMPLETE_DATA_LEN,
- SIRCS_STOP_BIT,
- SIRCS_LSB
+ IRMP_SIRCS_PROTOCOL, // protocol: ir protocol
+ SIRCS_1_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ SIRCS_1_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ SIRCS_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ SIRCS_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ SIRCS_0_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ SIRCS_0_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ SIRCS_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ SIRCS_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ SIRCS_ADDRESS_OFFSET, // address_offset: address offset
+ SIRCS_ADDRESS_OFFSET + SIRCS_ADDRESS_LEN, // address_end: end of address
+ SIRCS_COMMAND_OFFSET, // command_offset: command offset
+ SIRCS_COMMAND_OFFSET + SIRCS_COMMAND_LEN, // command_end: end of command
+ SIRCS_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ SIRCS_STOP_BIT, // stop_bit: flag: frame has stop bit
+ SIRCS_LSB // lsb_first: flag: LSB first
};
#endif
@@ -674,42 +683,42 @@ static PROGMEM IRMP_PARAMETER sircs_param =
static PROGMEM IRMP_PARAMETER nec_param =
{
- IRMP_NEC_PROTOCOL,
- NEC_PULSE_LEN_MIN,
- NEC_PULSE_LEN_MAX,
- NEC_1_PAUSE_LEN_MIN,
- NEC_1_PAUSE_LEN_MAX,
- NEC_PULSE_LEN_MIN,
- NEC_PULSE_LEN_MAX,
- NEC_0_PAUSE_LEN_MIN,
- NEC_0_PAUSE_LEN_MAX,
- NEC_ADDRESS_OFFSET,
- NEC_ADDRESS_OFFSET + NEC_ADDRESS_LEN,
- NEC_COMMAND_OFFSET,
- NEC_COMMAND_OFFSET + NEC_COMMAND_LEN,
- NEC_COMPLETE_DATA_LEN,
- NEC_STOP_BIT,
- NEC_LSB
+ IRMP_NEC_PROTOCOL, // protocol: ir protocol
+ NEC_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ NEC_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ NEC_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ NEC_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ NEC_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ NEC_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ NEC_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ NEC_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ NEC_ADDRESS_OFFSET, // address_offset: address offset
+ NEC_ADDRESS_OFFSET + NEC_ADDRESS_LEN, // address_end: end of address
+ NEC_COMMAND_OFFSET, // command_offset: command offset
+ NEC_COMMAND_OFFSET + NEC_COMMAND_LEN, // command_end: end of command
+ NEC_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ NEC_STOP_BIT, // stop_bit: flag: frame has stop bit
+ NEC_LSB // lsb_first: flag: LSB first
};
static PROGMEM IRMP_PARAMETER nec_rep_param =
{
- IRMP_NEC_PROTOCOL,
- NEC_PULSE_LEN_MIN,
- NEC_PULSE_LEN_MAX,
- NEC_1_PAUSE_LEN_MIN,
- NEC_1_PAUSE_LEN_MAX,
- NEC_PULSE_LEN_MIN,
- NEC_PULSE_LEN_MAX,
- NEC_0_PAUSE_LEN_MIN,
- NEC_0_PAUSE_LEN_MAX,
- 0,
- 0,
- 0,
- 0,
- 0,
- NEC_STOP_BIT,
- NEC_LSB
+ IRMP_NEC_PROTOCOL, // protocol: ir protocol
+ NEC_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ NEC_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ NEC_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ NEC_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ NEC_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ NEC_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ NEC_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ NEC_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ 0, // address_offset: address offset
+ 0, // address_end: end of address
+ 0, // command_offset: command offset
+ 0, // command_end: end of command
+ 0, // complete_len: complete length of frame
+ NEC_STOP_BIT, // stop_bit: flag: frame has stop bit
+ NEC_LSB // lsb_first: flag: LSB first
};
#endif
@@ -718,22 +727,22 @@ static PROGMEM IRMP_PARAMETER nec_rep_param =
static PROGMEM IRMP_PARAMETER samsung_param =
{
- IRMP_SAMSUNG_PROTOCOL,
- SAMSUNG_PULSE_LEN_MIN,
- SAMSUNG_PULSE_LEN_MAX,
- SAMSUNG_1_PAUSE_LEN_MIN,
- SAMSUNG_1_PAUSE_LEN_MAX,
- SAMSUNG_PULSE_LEN_MIN,
- SAMSUNG_PULSE_LEN_MAX,
- SAMSUNG_0_PAUSE_LEN_MIN,
- SAMSUNG_0_PAUSE_LEN_MAX,
- SAMSUNG_ADDRESS_OFFSET,
- SAMSUNG_ADDRESS_OFFSET + SAMSUNG_ADDRESS_LEN,
- SAMSUNG_COMMAND_OFFSET,
- SAMSUNG_COMMAND_OFFSET + SAMSUNG_COMMAND_LEN,
- SAMSUNG_COMPLETE_DATA_LEN,
- SAMSUNG_STOP_BIT,
- SAMSUNG_LSB
+ IRMP_SAMSUNG_PROTOCOL, // protocol: ir protocol
+ SAMSUNG_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ SAMSUNG_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ SAMSUNG_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ SAMSUNG_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ SAMSUNG_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ SAMSUNG_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ SAMSUNG_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ SAMSUNG_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ SAMSUNG_ADDRESS_OFFSET, // address_offset: address offset
+ SAMSUNG_ADDRESS_OFFSET + SAMSUNG_ADDRESS_LEN, // address_end: end of address
+ SAMSUNG_COMMAND_OFFSET, // command_offset: command offset
+ SAMSUNG_COMMAND_OFFSET + SAMSUNG_COMMAND_LEN, // command_end: end of command
+ SAMSUNG_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ SAMSUNG_STOP_BIT, // stop_bit: flag: frame has stop bit
+ SAMSUNG_LSB // lsb_first: flag: LSB first
};
#endif
@@ -742,22 +751,22 @@ static PROGMEM IRMP_PARAMETER samsung_param =
static PROGMEM IRMP_PARAMETER matsushita_param =
{
- IRMP_MATSUSHITA_PROTOCOL,
- MATSUSHITA_PULSE_LEN_MIN,
- MATSUSHITA_PULSE_LEN_MAX,
- MATSUSHITA_1_PAUSE_LEN_MIN,
- MATSUSHITA_1_PAUSE_LEN_MAX,
- MATSUSHITA_PULSE_LEN_MIN,
- MATSUSHITA_PULSE_LEN_MAX,
- MATSUSHITA_0_PAUSE_LEN_MIN,
- MATSUSHITA_0_PAUSE_LEN_MAX,
- MATSUSHITA_ADDRESS_OFFSET,
- MATSUSHITA_ADDRESS_OFFSET + MATSUSHITA_ADDRESS_LEN,
- MATSUSHITA_COMMAND_OFFSET,
- MATSUSHITA_COMMAND_OFFSET + MATSUSHITA_COMMAND_LEN,
- MATSUSHITA_COMPLETE_DATA_LEN,
- MATSUSHITA_STOP_BIT,
- MATSUSHITA_LSB
+ IRMP_MATSUSHITA_PROTOCOL, // protocol: ir protocol
+ MATSUSHITA_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ MATSUSHITA_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ MATSUSHITA_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ MATSUSHITA_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ MATSUSHITA_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ MATSUSHITA_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ MATSUSHITA_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ MATSUSHITA_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ MATSUSHITA_ADDRESS_OFFSET, // address_offset: address offset
+ MATSUSHITA_ADDRESS_OFFSET + MATSUSHITA_ADDRESS_LEN, // address_end: end of address
+ MATSUSHITA_COMMAND_OFFSET, // command_offset: command offset
+ MATSUSHITA_COMMAND_OFFSET + MATSUSHITA_COMMAND_LEN, // command_end: end of command
+ MATSUSHITA_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ MATSUSHITA_STOP_BIT, // stop_bit: flag: frame has stop bit
+ MATSUSHITA_LSB // lsb_first: flag: LSB first
};
#endif
@@ -766,22 +775,22 @@ static PROGMEM IRMP_PARAMETER matsushita_param =
static PROGMEM IRMP_PARAMETER kaseikyo_param =
{
- IRMP_KASEIKYO_PROTOCOL,
- KASEIKYO_PULSE_LEN_MIN,
- KASEIKYO_PULSE_LEN_MAX,
- KASEIKYO_1_PAUSE_LEN_MIN,
- KASEIKYO_1_PAUSE_LEN_MAX,
- KASEIKYO_PULSE_LEN_MIN,
- KASEIKYO_PULSE_LEN_MAX,
- KASEIKYO_0_PAUSE_LEN_MIN,
- KASEIKYO_0_PAUSE_LEN_MAX,
- KASEIKYO_ADDRESS_OFFSET,
- KASEIKYO_ADDRESS_OFFSET + KASEIKYO_ADDRESS_LEN,
- KASEIKYO_COMMAND_OFFSET,
- KASEIKYO_COMMAND_OFFSET + KASEIKYO_COMMAND_LEN,
- KASEIKYO_COMPLETE_DATA_LEN,
- KASEIKYO_STOP_BIT,
- KASEIKYO_LSB
+ IRMP_KASEIKYO_PROTOCOL, // protocol: ir protocol
+ KASEIKYO_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ KASEIKYO_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ KASEIKYO_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ KASEIKYO_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ KASEIKYO_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ KASEIKYO_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ KASEIKYO_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ KASEIKYO_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ KASEIKYO_ADDRESS_OFFSET, // address_offset: address offset
+ KASEIKYO_ADDRESS_OFFSET + KASEIKYO_ADDRESS_LEN, // address_end: end of address
+ KASEIKYO_COMMAND_OFFSET, // command_offset: command offset
+ KASEIKYO_COMMAND_OFFSET + KASEIKYO_COMMAND_LEN, // command_end: end of command
+ KASEIKYO_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ KASEIKYO_STOP_BIT, // stop_bit: flag: frame has stop bit
+ KASEIKYO_LSB // lsb_first: flag: LSB first
};
#endif
@@ -790,22 +799,22 @@ static PROGMEM IRMP_PARAMETER kaseikyo_param =
static PROGMEM IRMP_PARAMETER recs80_param =
{
- IRMP_RECS80_PROTOCOL,
- RECS80_PULSE_LEN_MIN,
- RECS80_PULSE_LEN_MAX,
- RECS80_1_PAUSE_LEN_MIN,
- RECS80_1_PAUSE_LEN_MAX,
- RECS80_PULSE_LEN_MIN,
- RECS80_PULSE_LEN_MAX,
- RECS80_0_PAUSE_LEN_MIN,
- RECS80_0_PAUSE_LEN_MAX,
- RECS80_ADDRESS_OFFSET,
- RECS80_ADDRESS_OFFSET + RECS80_ADDRESS_LEN,
- RECS80_COMMAND_OFFSET,
- RECS80_COMMAND_OFFSET + RECS80_COMMAND_LEN,
- RECS80_COMPLETE_DATA_LEN,
- RECS80_STOP_BIT,
- RECS80_LSB
+ IRMP_RECS80_PROTOCOL, // protocol: ir protocol
+ RECS80_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ RECS80_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ RECS80_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ RECS80_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ RECS80_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ RECS80_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ RECS80_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ RECS80_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ RECS80_ADDRESS_OFFSET, // address_offset: address offset
+ RECS80_ADDRESS_OFFSET + RECS80_ADDRESS_LEN, // address_end: end of address
+ RECS80_COMMAND_OFFSET, // command_offset: command offset
+ RECS80_COMMAND_OFFSET + RECS80_COMMAND_LEN, // command_end: end of command
+ RECS80_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ RECS80_STOP_BIT, // stop_bit: flag: frame has stop bit
+ RECS80_LSB // lsb_first: flag: LSB first
};
#endif
@@ -814,22 +823,22 @@ static PROGMEM IRMP_PARAMETER recs80_param =
static PROGMEM IRMP_PARAMETER rc5_param =
{
- IRMP_RC5_PROTOCOL,
- RC5_BIT_LEN_MIN,
- RC5_BIT_LEN_MAX,
- RC5_BIT_LEN_MIN,
- RC5_BIT_LEN_MAX,
- 1, // tricky: use this as stop bit length
- 1,
- 1,
- 1,
- RC5_ADDRESS_OFFSET,
- RC5_ADDRESS_OFFSET + RC5_ADDRESS_LEN,
- RC5_COMMAND_OFFSET,
- RC5_COMMAND_OFFSET + RC5_COMMAND_LEN,
- RC5_COMPLETE_DATA_LEN,
- RC5_STOP_BIT,
- RC5_LSB
+ IRMP_RC5_PROTOCOL, // protocol: ir protocol
+ RC5_BIT_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ RC5_BIT_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ RC5_BIT_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ RC5_BIT_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ 1, // tricky: use this as stop bit length // pulse_0_len_min: minimum length of pulse with bit value 0
+ 1, // pulse_0_len_max: maximum length of pulse with bit value 0
+ 1, // pause_0_len_min: minimum length of pause with bit value 0
+ 1, // pause_0_len_max: maximum length of pause with bit value 0
+ RC5_ADDRESS_OFFSET, // address_offset: address offset
+ RC5_ADDRESS_OFFSET + RC5_ADDRESS_LEN, // address_end: end of address
+ RC5_COMMAND_OFFSET, // command_offset: command offset
+ RC5_COMMAND_OFFSET + RC5_COMMAND_LEN, // command_end: end of command
+ RC5_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ RC5_STOP_BIT, // stop_bit: flag: frame has stop bit
+ RC5_LSB // lsb_first: flag: LSB first
};
#endif
@@ -838,22 +847,22 @@ static PROGMEM IRMP_PARAMETER rc5_param =
static PROGMEM IRMP_PARAMETER denon_param =
{
- IRMP_DENON_PROTOCOL,
- DENON_PULSE_LEN_MIN,
- DENON_PULSE_LEN_MAX,
- DENON_1_PAUSE_LEN_MIN,
- DENON_1_PAUSE_LEN_MAX,
- DENON_PULSE_LEN_MIN,
- DENON_PULSE_LEN_MAX,
- DENON_0_PAUSE_LEN_MIN,
- DENON_0_PAUSE_LEN_MAX,
- DENON_ADDRESS_OFFSET,
- DENON_ADDRESS_OFFSET + DENON_ADDRESS_LEN,
- DENON_COMMAND_OFFSET,
- DENON_COMMAND_OFFSET + DENON_COMMAND_LEN,
- DENON_COMPLETE_DATA_LEN,
- DENON_STOP_BIT,
- DENON_LSB
+ IRMP_DENON_PROTOCOL, // protocol: ir protocol
+ DENON_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ DENON_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ DENON_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ DENON_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ DENON_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ DENON_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ DENON_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ DENON_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ DENON_ADDRESS_OFFSET, // address_offset: address offset
+ DENON_ADDRESS_OFFSET + DENON_ADDRESS_LEN, // address_end: end of address
+ DENON_COMMAND_OFFSET, // command_offset: command offset
+ DENON_COMMAND_OFFSET + DENON_COMMAND_LEN, // command_end: end of command
+ DENON_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ DENON_STOP_BIT, // stop_bit: flag: frame has stop bit
+ DENON_LSB // lsb_first: flag: LSB first
};
#endif
@@ -862,22 +871,22 @@ static PROGMEM IRMP_PARAMETER denon_param =
static PROGMEM IRMP_PARAMETER rc6_param =
{
- IRMP_RC6_PROTOCOL,
- RC6_BIT_LEN_MIN,
- RC6_BIT_LEN_MAX,
- RC6_BIT_LEN_MIN,
- RC6_BIT_LEN_MAX,
- 1, // tricky: use this as stop bit length
- 1,
- 1,
- 1,
- RC6_ADDRESS_OFFSET,
- RC6_ADDRESS_OFFSET + RC6_ADDRESS_LEN,
- RC6_COMMAND_OFFSET,
- RC6_COMMAND_OFFSET + RC6_COMMAND_LEN,
- RC6_COMPLETE_DATA_LEN_SHORT,
- RC6_STOP_BIT,
- RC6_LSB
+ IRMP_RC6_PROTOCOL, // protocol: ir protocol
+ RC6_BIT_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ RC6_BIT_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ RC6_BIT_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ RC6_BIT_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ 1, // tricky: use this as stop bit length // pulse_0_len_min: minimum length of pulse with bit value 0
+ 1, // pulse_0_len_max: maximum length of pulse with bit value 0
+ 1, // pause_0_len_min: minimum length of pause with bit value 0
+ 1, // pause_0_len_max: maximum length of pause with bit value 0
+ RC6_ADDRESS_OFFSET, // address_offset: address offset
+ RC6_ADDRESS_OFFSET + RC6_ADDRESS_LEN, // address_end: end of address
+ RC6_COMMAND_OFFSET, // command_offset: command offset
+ RC6_COMMAND_OFFSET + RC6_COMMAND_LEN, // command_end: end of command
+ RC6_COMPLETE_DATA_LEN_SHORT, // complete_len: complete length of frame
+ RC6_STOP_BIT, // stop_bit: flag: frame has stop bit
+ RC6_LSB // lsb_first: flag: LSB first
};
#endif
@@ -886,22 +895,22 @@ static PROGMEM IRMP_PARAMETER rc6_param =
static PROGMEM IRMP_PARAMETER recs80ext_param =
{
- IRMP_RECS80EXT_PROTOCOL,
- RECS80EXT_PULSE_LEN_MIN,
- RECS80EXT_PULSE_LEN_MAX,
- RECS80EXT_1_PAUSE_LEN_MIN,
- RECS80EXT_1_PAUSE_LEN_MAX,
- RECS80EXT_PULSE_LEN_MIN,
- RECS80EXT_PULSE_LEN_MAX,
- RECS80EXT_0_PAUSE_LEN_MIN,
- RECS80EXT_0_PAUSE_LEN_MAX,
- RECS80EXT_ADDRESS_OFFSET,
- RECS80EXT_ADDRESS_OFFSET + RECS80EXT_ADDRESS_LEN,
- RECS80EXT_COMMAND_OFFSET,
- RECS80EXT_COMMAND_OFFSET + RECS80EXT_COMMAND_LEN,
- RECS80EXT_COMPLETE_DATA_LEN,
- RECS80EXT_STOP_BIT,
- RECS80EXT_LSB
+ IRMP_RECS80EXT_PROTOCOL, // protocol: ir protocol
+ RECS80EXT_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ RECS80EXT_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ RECS80EXT_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ RECS80EXT_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ RECS80EXT_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ RECS80EXT_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ RECS80EXT_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ RECS80EXT_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ RECS80EXT_ADDRESS_OFFSET, // address_offset: address offset
+ RECS80EXT_ADDRESS_OFFSET + RECS80EXT_ADDRESS_LEN, // address_end: end of address
+ RECS80EXT_COMMAND_OFFSET, // command_offset: command offset
+ RECS80EXT_COMMAND_OFFSET + RECS80EXT_COMMAND_LEN, // command_end: end of command
+ RECS80EXT_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ RECS80EXT_STOP_BIT, // stop_bit: flag: frame has stop bit
+ RECS80EXT_LSB // lsb_first: flag: LSB first
};
#endif
@@ -910,22 +919,22 @@ static PROGMEM IRMP_PARAMETER recs80ext_param =
static PROGMEM IRMP_PARAMETER nubert_param =
{
- IRMP_NUBERT_PROTOCOL,
- NUBERT_1_PULSE_LEN_MIN,
- NUBERT_1_PULSE_LEN_MAX,
- NUBERT_1_PAUSE_LEN_MIN,
- NUBERT_1_PAUSE_LEN_MAX,
- NUBERT_0_PULSE_LEN_MIN,
- NUBERT_0_PULSE_LEN_MAX,
- NUBERT_0_PAUSE_LEN_MIN,
- NUBERT_0_PAUSE_LEN_MAX,
- NUBERT_ADDRESS_OFFSET,
- NUBERT_ADDRESS_OFFSET + NUBERT_ADDRESS_LEN,
- NUBERT_COMMAND_OFFSET,
- NUBERT_COMMAND_OFFSET + NUBERT_COMMAND_LEN,
- NUBERT_COMPLETE_DATA_LEN,
- NUBERT_STOP_BIT,
- NUBERT_LSB
+ IRMP_NUBERT_PROTOCOL, // protocol: ir protocol
+ NUBERT_1_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ NUBERT_1_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ NUBERT_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ NUBERT_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ NUBERT_0_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ NUBERT_0_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ NUBERT_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ NUBERT_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ NUBERT_ADDRESS_OFFSET, // address_offset: address offset
+ NUBERT_ADDRESS_OFFSET + NUBERT_ADDRESS_LEN, // address_end: end of address
+ NUBERT_COMMAND_OFFSET, // command_offset: command offset
+ NUBERT_COMMAND_OFFSET + NUBERT_COMMAND_LEN, // command_end: end of command
+ NUBERT_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ NUBERT_STOP_BIT, // stop_bit: flag: frame has stop bit
+ NUBERT_LSB // lsb_first: flag: LSB first
};
#endif
@@ -934,58 +943,58 @@ static PROGMEM IRMP_PARAMETER nubert_param =
static PROGMEM IRMP_PARAMETER bang_olufsen_param =
{
- IRMP_BANG_OLUFSEN_PROTOCOL,
- BANG_OLUFSEN_PULSE_LEN_MIN,
- BANG_OLUFSEN_PULSE_LEN_MAX,
- BANG_OLUFSEN_1_PAUSE_LEN_MIN,
- BANG_OLUFSEN_1_PAUSE_LEN_MAX,
- BANG_OLUFSEN_PULSE_LEN_MIN,
- BANG_OLUFSEN_PULSE_LEN_MAX,
- BANG_OLUFSEN_0_PAUSE_LEN_MIN,
- BANG_OLUFSEN_0_PAUSE_LEN_MAX,
- BANG_OLUFSEN_ADDRESS_OFFSET,
- BANG_OLUFSEN_ADDRESS_OFFSET + BANG_OLUFSEN_ADDRESS_LEN,
- BANG_OLUFSEN_COMMAND_OFFSET,
- BANG_OLUFSEN_COMMAND_OFFSET + BANG_OLUFSEN_COMMAND_LEN,
- BANG_OLUFSEN_COMPLETE_DATA_LEN,
- BANG_OLUFSEN_STOP_BIT,
- BANG_OLUFSEN_LSB
+ IRMP_BANG_OLUFSEN_PROTOCOL, // protocol: ir protocol
+ BANG_OLUFSEN_PULSE_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ BANG_OLUFSEN_PULSE_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ BANG_OLUFSEN_1_PAUSE_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ BANG_OLUFSEN_1_PAUSE_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ BANG_OLUFSEN_PULSE_LEN_MIN, // pulse_0_len_min: minimum length of pulse with bit value 0
+ BANG_OLUFSEN_PULSE_LEN_MAX, // pulse_0_len_max: maximum length of pulse with bit value 0
+ BANG_OLUFSEN_0_PAUSE_LEN_MIN, // pause_0_len_min: minimum length of pause with bit value 0
+ BANG_OLUFSEN_0_PAUSE_LEN_MAX, // pause_0_len_max: maximum length of pause with bit value 0
+ BANG_OLUFSEN_ADDRESS_OFFSET, // address_offset: address offset
+ BANG_OLUFSEN_ADDRESS_OFFSET + BANG_OLUFSEN_ADDRESS_LEN, // address_end: end of address
+ BANG_OLUFSEN_COMMAND_OFFSET, // command_offset: command offset
+ BANG_OLUFSEN_COMMAND_OFFSET + BANG_OLUFSEN_COMMAND_LEN, // command_end: end of command
+ BANG_OLUFSEN_COMPLETE_DATA_LEN, // complete_len: complete length of frame
+ BANG_OLUFSEN_STOP_BIT, // stop_bit: flag: frame has stop bit
+ BANG_OLUFSEN_LSB // lsb_first: flag: LSB first
};
#endif
-#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
+#if IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
static PROGMEM IRMP_PARAMETER grundig_param =
{
- IRMP_GRUNDIG_PROTOCOL,
- GRUNDIG_BIT_LEN_MIN,
- GRUNDIG_BIT_LEN_MAX,
- GRUNDIG_BIT_LEN_MIN,
- GRUNDIG_BIT_LEN_MAX,
- 1, // tricky: use this as stop bit length
- 1,
- 1,
- 1,
- GRUNDIG_ADDRESS_OFFSET,
- GRUNDIG_ADDRESS_OFFSET + GRUNDIG_ADDRESS_LEN,
- GRUNDIG_COMMAND_OFFSET,
- GRUNDIG_COMMAND_OFFSET + GRUNDIG_COMMAND_LEN,
- GRUNDIG_COMPLETE_DATA_LEN,
- GRUNDIG_STOP_BIT,
- GRUNDIG_LSB
+ IRMP_GRUNDIG_PROTOCOL, // protocol: ir protocol
+ GRUNDIG_OR_NOKIA_BIT_LEN_MIN, // pulse_1_len_min: minimum length of pulse with bit value 1
+ GRUNDIG_OR_NOKIA_BIT_LEN_MAX, // pulse_1_len_max: maximum length of pulse with bit value 1
+ GRUNDIG_OR_NOKIA_BIT_LEN_MIN, // pause_1_len_min: minimum length of pause with bit value 1
+ GRUNDIG_OR_NOKIA_BIT_LEN_MAX, // pause_1_len_max: maximum length of pause with bit value 1
+ 1, // tricky: use this as stop bit length // pulse_0_len_min: minimum length of pulse with bit value 0
+ 1, // pulse_0_len_max: maximum length of pulse with bit value 0
+ 1, // pause_0_len_min: minimum length of pause with bit value 0
+ 1, // pause_0_len_max: maximum length of pause with bit value 0
+ GRUNDIG_ADDRESS_OFFSET, // address_offset: address offset
+ GRUNDIG_ADDRESS_OFFSET + GRUNDIG_ADDRESS_LEN, // address_end: end of address
+ GRUNDIG_COMMAND_OFFSET, // command_offset: command offset
+ GRUNDIG_COMMAND_OFFSET + GRUNDIG_COMMAND_LEN + 1, // command_end: end of command (USE 1 bit MORE to STORE NOKIA DATA!)
+ NOKIA_COMPLETE_DATA_LEN, // complete_len: complete length of frame, here: NOKIA instead of GRUNDIG!
+ GRUNDIG_OR_NOKIA_STOP_BIT, // stop_bit: flag: frame has stop bit
+ GRUNDIG_OR_NOKIA_LSB // lsb_first: flag: LSB first
};
#endif
-static uint8_t irmp_bit; // current bit position
+static uint8_t irmp_bit; // current bit position
static IRMP_PARAMETER irmp_param;
static volatile uint8_t irmp_ir_detected;
static volatile uint8_t irmp_protocol;
static volatile uint16_t irmp_address;
static volatile uint16_t irmp_command;
-static volatile uint16_t irmp_id; // only used for SAMSUNG protocol
+static volatile uint16_t irmp_id; // only used for SAMSUNG protocol
static volatile uint8_t irmp_flags;
#ifdef DEBUG
@@ -1002,8 +1011,8 @@ void
irmp_init (void)
{
#ifndef PIC_CCS_COMPILER
- IRMP_PORT &= ~(1<<IRMP_BIT); // deactivate pullup
- IRMP_DDR &= ~(1<<IRMP_BIT); // set pin to input
+ IRMP_PORT &= ~(1<<IRMP_BIT); // deactivate pullup
+ IRMP_DDR &= ~(1<<IRMP_BIT); // set pin to input
#endif // PIC_CCS_COMPILER
#if IRMP_LOGGING == 1
@@ -1151,7 +1160,7 @@ irmp_ISR (void)
#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_RC6_PROTOCOL == 1
static uint8_t last_pause; // last pause value
#endif
-#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_RC6_PROTOCOL == 1 || IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
+#if IRMP_SUPPORT_RC5_PROTOCOL == 1 || IRMP_SUPPORT_RC6_PROTOCOL == 1 || IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 || IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
static uint8_t last_value; // last bit value
#endif
uint8_t irmp_input; // input value
@@ -1162,14 +1171,20 @@ irmp_ISR (void)
irmp_input = input(IRMP_PIN);
- irmp_logIsr(irmp_input); // log ir signal, if IRMP_LOGGING defined
+ irmp_log(irmp_input); // log ir signal, if IRMP_LOGGING defined
if (! irmp_ir_detected) // ir code already detected?
{ // no...
if (! irmp_start_bit_detected) // start bit detected?
{ // no...
- if (!irmp_input) // receiving burst?
+ if (! irmp_input) // receiving burst?
{ // yes...
+#ifdef DEBUG
+ if (! irmp_pulse_time)
+ {
+ DEBUG_PRINTF("%8d [starting pulse]\n", time_counter);
+ }
+#endif
irmp_pulse_time++; // increment counter
}
else
@@ -1397,19 +1412,19 @@ irmp_ISR (void)
else
#endif // IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
-#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
- if (irmp_pulse_time >= GRUNDIG_START_BIT_LEN_MIN && irmp_pulse_time <= GRUNDIG_START_BIT_LEN_MAX &&
- irmp_pause_time >= GRUNDIG_PRE_PAUSE_LEN_MIN && irmp_pause_time <= GRUNDIG_PRE_PAUSE_LEN_MAX)
+#if IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
+ if (irmp_pulse_time >= GRUNDIG_OR_NOKIA_START_BIT_LEN_MIN && irmp_pulse_time <= GRUNDIG_OR_NOKIA_START_BIT_LEN_MAX &&
+ irmp_pause_time >= GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MIN && irmp_pause_time <= GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MAX)
{ // it's GRUNDIG
DEBUG_PRINTF ("protocol = GRUNDIG, pre bit timings: pulse: %3d - %3d, pause: %3d - %3d\n",
- GRUNDIG_START_BIT_LEN_MIN, GRUNDIG_START_BIT_LEN_MAX,
- GRUNDIG_PRE_PAUSE_LEN_MIN, GRUNDIG_PRE_PAUSE_LEN_MAX);
+ GRUNDIG_OR_NOKIA_START_BIT_LEN_MIN, GRUNDIG_OR_NOKIA_START_BIT_LEN_MAX,
+ GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MIN, GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MAX);
irmp_param_p = (IRMP_PARAMETER *) &grundig_param;
last_pause = irmp_pause_time;
last_value = 1;
}
else
-#endif // IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
+#endif // IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
{
DEBUG_PRINTF ("protocol = UNKNOWN\n");
@@ -1469,10 +1484,10 @@ irmp_ISR (void)
else
#endif // IRMP_SUPPORT_RC5_PROTOCOL == 1
-#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
- if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL)
+#if IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
+ if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL || irmp_param.protocol == IRMP_NOKIA_PROTOCOL)
{
- if (irmp_pause_time > GRUNDIG_START_BIT_LEN_MAX && irmp_pause_time <= 2 * GRUNDIG_START_BIT_LEN_MAX)
+ if (irmp_pause_time > GRUNDIG_OR_NOKIA_START_BIT_LEN_MAX && irmp_pause_time <= 2 * GRUNDIG_OR_NOKIA_START_BIT_LEN_MAX)
{
DEBUG_PRINTF ("%8d [bit %2d: pulse = %3d, pause = %3d] ", time_counter, irmp_bit, irmp_pulse_time, irmp_pause_time);
DEBUG_PUTCHAR ('0');
@@ -1488,7 +1503,7 @@ irmp_ISR (void)
}
}
else
-#endif // IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
+#endif // IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
#if IRMP_SUPPORT_DENON_PROTOCOL == 1
if (irmp_param.protocol == IRMP_DENON_PROTOCOL)
@@ -1526,7 +1541,10 @@ irmp_ISR (void)
if (irmp_pulse_time >= irmp_param.pulse_0_len_min && irmp_pulse_time <= irmp_param.pulse_0_len_max)
{
#ifdef DEBUG
- if (irmp_param.protocol != IRMP_RC5_PROTOCOL)
+ if (irmp_param.protocol != IRMP_RC5_PROTOCOL &&
+ irmp_param.protocol != IRMP_RC6_PROTOCOL &&
+ irmp_param.protocol != IRMP_GRUNDIG_PROTOCOL &&
+ irmp_param.protocol != IRMP_NOKIA_PROTOCOL)
{
DEBUG_PRINTF ("stop bit detected\n");
}
@@ -1578,10 +1596,39 @@ irmp_ISR (void)
#endif
#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL &&
- irmp_pause_time > 2 * GRUNDIG_BIT_LEN_MAX && irmp_bit >= GRUNDIG_COMPLETE_DATA_LEN - 2 && !irmp_param.stop_bit)
- { // special rc5 decoder
- got_light = TRUE; // this is a lie, but generates a stop bit ;-)
- irmp_param.stop_bit = TRUE; // set flag
+ irmp_pause_time > 2 * GRUNDIG_OR_NOKIA_BIT_LEN_MAX && irmp_bit >= GRUNDIG_COMPLETE_DATA_LEN - 2 && !irmp_param.stop_bit)
+ { // special Grundig/Nokia decoder
+ irmp_param.complete_len = GRUNDIG_COMPLETE_DATA_LEN; // correct complete len
+ got_light = TRUE; // this is a lie, but generates a stop bit ;-)
+ irmp_param.stop_bit = TRUE; // set flag
+ }
+ else
+#endif
+#if IRMP_SUPPORT_NOKIA_PROTOCOL == 1
+ if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL &&
+ irmp_bit >= GRUNDIG_COMPLETE_DATA_LEN)
+ {
+ DEBUG_PRINTF ("Switching to NOKIA protocol\n");
+ irmp_param.protocol = IRMP_NOKIA_PROTOCOL; // change protocol
+ irmp_param.address_offset = NOKIA_ADDRESS_OFFSET;
+ irmp_param.address_end = NOKIA_ADDRESS_OFFSET + NOKIA_ADDRESS_LEN;
+ irmp_param.command_offset = NOKIA_COMMAND_OFFSET;
+ irmp_param.command_end = NOKIA_COMMAND_OFFSET + NOKIA_COMMAND_LEN;
+
+ if (irmp_tmp_command & 0x300)
+ {
+ irmp_tmp_address = (irmp_tmp_command >> 8);
+ irmp_tmp_command &= 0xFF;
+ }
+ }
+ else
+#endif
+#if IRMP_SUPPORT_NOKIA_PROTOCOL == 1
+ if (irmp_param.protocol == IRMP_NOKIA_PROTOCOL &&
+ irmp_pause_time > 2 * GRUNDIG_OR_NOKIA_BIT_LEN_MAX && irmp_bit >= NOKIA_COMPLETE_DATA_LEN - 2 && !irmp_param.stop_bit)
+ { // special Grundig/Nokia decoder
+ got_light = TRUE; // this is a lie, but generates a stop bit ;-)
+ irmp_param.stop_bit = TRUE; // set flag
}
else
#endif
@@ -1649,10 +1696,11 @@ irmp_ISR (void)
else
#endif
-#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
- if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL) // special Grundig decoder
+#if IRMP_SUPPORT_GRUNDIG_OR_NOKIA_PROTOCOL == 1
+ if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL || // special Grundig decoder
+ irmp_param.protocol == IRMP_NOKIA_PROTOCOL) // special Nokia decoder
{
- if (irmp_pulse_time > GRUNDIG_BIT_LEN_MAX && irmp_pulse_time <= 2 * GRUNDIG_BIT_LEN_MAX)
+ if (irmp_pulse_time > GRUNDIG_OR_NOKIA_BIT_LEN_MAX && irmp_pulse_time <= 2 * GRUNDIG_OR_NOKIA_BIT_LEN_MAX)
{
DEBUG_PUTCHAR ('0');
irmp_store_bit (0);
@@ -1662,11 +1710,11 @@ irmp_ISR (void)
last_value = 1;
}
- else // if (irmp_pulse_time >= GRUNDIG_BIT_LEN_MIN && irmp_pulse_time <= GRUNDIG_BIT_LEN_MAX)
+ else // if (irmp_pulse_time >= GRUNDIG_BIT_LEN_MIN && irmp_pulse_time <= GRUNDIG_OR_NOKIA_BIT_LEN_MAX)
{
uint8_t grundig_value;
- if (last_pause > GRUNDIG_BIT_LEN_MAX && last_pause <= 2 * GRUNDIG_BIT_LEN_MAX)
+ if (last_pause > GRUNDIG_OR_NOKIA_BIT_LEN_MAX && last_pause <= 2 * GRUNDIG_OR_NOKIA_BIT_LEN_MAX)
{
grundig_value = last_value ? 0 : 1;
last_value = grundig_value;
@@ -1810,7 +1858,7 @@ irmp_ISR (void)
irmp_bit++;
}
else
- { // timing incorrect!
+ { // timing incorrect!
DEBUG_PRINTF ("error 3a B&O: timing not correct: data bit %d, pulse: %d, pause: %d\n", irmp_bit, irmp_pulse_time, irmp_pause_time);
irmp_start_bit_detected = 0; // reset flags and wait for next start bit
irmp_pause_time = 0;
@@ -1903,7 +1951,7 @@ irmp_ISR (void)
}
else
{ // counting the pulse length ...
- if (!irmp_input) // still light?
+ if (! irmp_input) // still light?
{ // yes...
irmp_pulse_time++; // increment counter
}
@@ -1916,7 +1964,7 @@ irmp_ISR (void)
if (irmp_bit == irmp_param.complete_len && irmp_param.stop_bit == 0) // enough bits received?
{
- if (last_irmp_command == irmp_tmp_command && repetition_counter < AUTO_REPETITION_LEN)
+ if (last_irmp_command == irmp_tmp_command && repetition_counter < AUTO_FRAME_REPETITION_LEN)
{
repetition_frame_number++;
}
@@ -1930,7 +1978,7 @@ irmp_ISR (void)
if (irmp_param.protocol == IRMP_SIRCS_PROTOCOL && (repetition_frame_number == 1 || repetition_frame_number == 2))
{
DEBUG_PRINTF ("code skipped: SIRCS auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
- repetition_frame_number + 1, repetition_counter, AUTO_REPETITION_LEN);
+ repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN);
repetition_counter = 0;
}
else
@@ -1941,18 +1989,18 @@ irmp_ISR (void)
if (irmp_param.protocol == IRMP_SAMSUNG32_PROTOCOL && (repetition_frame_number & 0x01))
{
DEBUG_PRINTF ("code skipped: SAMSUNG32 auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
- repetition_frame_number + 1, repetition_counter, AUTO_REPETITION_LEN);
+ repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN);
repetition_counter = 0;
}
else
#endif
#if IRMP_SUPPORT_NUBERT_PROTOCOL == 1
- // if NUBERT protocol and the code will be repeated within 50 ms, we will ignore it.
+ // if NUBERT protocol and the code will be repeated within 50 ms, we will ignore every 2nd frame
if (irmp_param.protocol == IRMP_NUBERT_PROTOCOL && (repetition_frame_number & 0x01))
{
DEBUG_PRINTF ("code skipped: NUBERT auto repetition frame #%d, counter = %d, auto repetition len = %d\n",
- repetition_frame_number + 1, repetition_counter, AUTO_REPETITION_LEN);
+ repetition_frame_number + 1, repetition_counter, AUTO_FRAME_REPETITION_LEN);
repetition_counter = 0;
}
else
@@ -1984,14 +2032,22 @@ irmp_ISR (void)
#endif // IRMP_SUPPORT_DENON_PROTOCOL
#if IRMP_SUPPORT_GRUNDIG_PROTOCOL == 1
- if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL && irmp_tmp_command == 0x01ff) // only start frame?
- {
- DEBUG_PRINTF ("Detected start frame, ignoring it\n");
+ if (irmp_param.protocol == IRMP_GRUNDIG_PROTOCOL && irmp_tmp_command == 0x01ff)
+ { // Grundig start frame?
+ DEBUG_PRINTF ("Detected GRUNDIG start frame, ignoring it\n");
irmp_ir_detected = FALSE;
- // last_irmp_grundig_command = irmp_tmp_command;
}
else
-#endif // IRMP_SUPPORT_DENON_PROTOCOL
+#endif // IRMP_SUPPORT_GRUNDIG_PROTOCOL
+
+#if IRMP_SUPPORT_NOKIA_PROTOCOL == 1
+ if (irmp_param.protocol == IRMP_NOKIA_PROTOCOL && irmp_tmp_address == 0x00ff && irmp_tmp_command == 0x00fe)
+ { // Nokia start frame?
+ DEBUG_PRINTF ("Detected NOKIA start frame, ignoring it\n");
+ irmp_ir_detected = FALSE;
+ }
+ else
+#endif // IRMP_SUPPORT_NOKIA_PROTOCOL
{
#if IRMP_SUPPORT_NEC_PROTOCOL == 1
if (irmp_param.protocol == IRMP_NEC_PROTOCOL && irmp_bit == 0) // repetition frame
@@ -2022,7 +2078,7 @@ irmp_ISR (void)
{
if (last_irmp_command == irmp_command &&
last_irmp_address == irmp_address &&
- repetition_counter < IRMP_REPETITION_TIME)
+ repetition_counter < IRMP_KEY_REPETITION_LEN)
{
irmp_flags |= IRMP_FLAG_REPETITION;
}
@@ -2049,7 +2105,7 @@ irmp_ISR (void)
// Compile it under linux with:
// cc irmp.c -o irmp
//
-// usage: ./irmp [-v|-s|-a] < file
+// usage: ./irmp [-v|-s|-a|-p] < file
static void
print_timings (void)
@@ -2088,8 +2144,8 @@ print_timings (void)
BANG_OLUFSEN_START_BIT3_PULSE_LEN_MIN, BANG_OLUFSEN_START_BIT3_PULSE_LEN_MAX, BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MIN, BANG_OLUFSEN_START_BIT3_PAUSE_LEN_MAX);
printf ("BANG_OLUFSEN 4 %3d - %3d %3d - %3d\n",
BANG_OLUFSEN_START_BIT4_PULSE_LEN_MIN, BANG_OLUFSEN_START_BIT4_PULSE_LEN_MAX, BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MIN, BANG_OLUFSEN_START_BIT4_PAUSE_LEN_MAX);
- printf ("GRUNDIG 1 %3d - %3d %3d - %3d\n",
- GRUNDIG_START_BIT_LEN_MIN, GRUNDIG_START_BIT_LEN_MAX, GRUNDIG_PRE_PAUSE_LEN_MIN, GRUNDIG_PRE_PAUSE_LEN_MAX);
+ printf ("GRUNDIG/NOKIA 1 %3d - %3d %3d - %3d\n",
+ GRUNDIG_OR_NOKIA_START_BIT_LEN_MIN, GRUNDIG_OR_NOKIA_START_BIT_LEN_MAX, GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MIN, GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN_MAX);
}
int
@@ -2313,7 +2369,7 @@ main (int argc, char ** argv)
while ((ch = getchar()) != '\n' && ch != EOF)
{
- if (ch != '\r') // ignore CR in DOS/Windows files
+ if (ch != '\r') // ignore CR in DOS/Windows files
{
putchar (ch);
}
diff --git a/irmp.exe b/irmp.exe
index 9dc5f4b..66afcf9 100644
--- a/irmp.exe
+++ b/irmp.exe
Binary files differ
diff --git a/irmp.h b/irmp.h
index 4233a6f..03430a2 100644
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2009-2010 Frank Meyer - frank(at)fli4l.de
*
- * $Id: irmp.h,v 1.15 2010/05/17 10:31:43 fm Exp $
+ * $Id: irmp.h,v 1.18 2010/05/26 08:34:30 fm Exp $
*
* ATMEGA88 @ 8 MHz
*
@@ -41,14 +41,15 @@ extern "C"
#define IRMP_NUBERT_PROTOCOL 13 // Nubert
#define IRMP_BANG_OLUFSEN_PROTOCOL 14 // Bang & Olufsen
#define IRMP_GRUNDIG_PROTOCOL 15 // Grundig
+#define IRMP_NOKIA_PROTOCOL 16 // Nokia
#define SIRCS_START_BIT_PULSE_TIME 2400.0e-6 // 2400 usec pulse
#define SIRCS_START_BIT_PAUSE_TIME 600.0e-6 // 600 usec pause
#define SIRCS_1_PULSE_TIME 1200.0e-6 // 1200 usec pulse
#define SIRCS_0_PULSE_TIME 600.0e-6 // 600 usec pulse
#define SIRCS_PAUSE_TIME 600.0e-6 // 600 usec pause
-#define SIRCS_REPETITION_CNT 3 // SIRCS sends each frame 3 times
-#define SIRCS_REPETITION_TIME 25.0e-3 // repetition after 25ms
+#define SIRCS_FRAMES 3 // SIRCS sends each frame 3 times
+#define SIRCS_FRAME_REPETITION_TIME 25.0e-3 // repetition after 25ms
#define SIRCS_ADDRESS_OFFSET 15 // skip 15 bits
#define SIRCS_ADDRESS_LEN 5 // read up to 5 address bits
#define SIRCS_COMMAND_OFFSET 0 // skip 0 bits
@@ -90,8 +91,8 @@ extern "C"
#define SAMSUNG32_COMMAND_OFFSET 16 // skip 16 bits
#define SAMSUNG32_COMMAND_LEN 16 // read 16 command bits
#define SAMSUNG32_COMPLETE_DATA_LEN 32 // complete length
-#define SAMSUNG32_REPETITION_CNT 2 // SAMSUNG32 sends each frame 2 times
-#define SAMSUNG32_REPETITION_TIME 47.0e-3 // repetition after 47 ms
+#define SAMSUNG32_FRAMES 2 // SAMSUNG32 sends each frame 2 times
+#define SAMSUNG32_FRAME_REPETITION_TIME 47.0e-3 // repetition after 47 ms
#define MATSUSHITA_START_BIT_PULSE_TIME 3488.0e-6 // 3488 usec pulse
#define MATSUSHITA_START_BIT_PAUSE_TIME 3488.0e-6 // 3488 usec pause
@@ -144,8 +145,8 @@ extern "C"
#define DENON_PULSE_TIME 275.0e-6 // 275 usec pulse
#define DENON_1_PAUSE_TIME 1900.0e-6 // 1900 usec pause
#define DENON_0_PAUSE_TIME 1050.0e-6 // 1050 usec pause
-#define DENON_REPETITION_CNT 2 // DENON sends each frame 2 times
-#define DENON_REPETITION_TIME 65.0e-3 // inverted repetition after 65ms
+#define DENON_FRAMES 2 // DENON sends each frame 2 times
+#define DENON_FRAME_REPETITION_TIME 65.0e-3 // inverted repetition after 65ms
#define DENON_ADDRESS_OFFSET 0 // skip 0 bits
#define DENON_ADDRESS_LEN 5 // read 5 address bits
#define DENON_COMMAND_OFFSET 5 // skip 5
@@ -186,8 +187,8 @@ extern "C"
#define NUBERT_1_PAUSE_TIME 340.0e-6 // 340 usec pause
#define NUBERT_0_PULSE_TIME 500.0e-6 // 500 usec pulse
#define NUBERT_0_PAUSE_TIME 1300.0e-6 // 1300 usec pause
-#define NUBERT_REPETITION_CNT 2 // Nubert sends 2 frames
-#define NUBERT_REPETITION_TIME 35.0e-3 // repetition after 35ms
+#define NUBERT_FRAMES 2 // Nubert sends 2 frames
+#define NUBERT_FRAME_REPETITION_TIME 35.0e-3 // repetition after 35ms
#define NUBERT_ADDRESS_OFFSET 0 // skip 0 bits
#define NUBERT_ADDRESS_LEN 0 // read 0 address bits
#define NUBERT_COMMAND_OFFSET 0 // skip 0 bits
@@ -217,19 +218,28 @@ extern "C"
#define BANG_OLUFSEN_STOP_BIT 1 // has stop bit
#define BANG_OLUFSEN_LSB 0 // MSB...LSB
-#define GRUNDIG_BIT_TIME 528.0e-6 // 528 usec pulse/pause
-#define GRUNDIG_PRE_PAUSE_TIME 2639.0e-6 // 2639 usec pause after pre bit
-#define GRUNDIG_REPETITION_CNT 2 // SIRCS sends each frame 3 times
-#define GRUNDIG_REPETITION_TIME 20.0e-3 // repetition after 20ms
-#define GRUNDIG_ADDRESS_OFFSET 0 // skip 2 bits (2nd start + 1 toggle)
-#define GRUNDIG_ADDRESS_LEN 0 // read 5 address bits
-#define GRUNDIG_COMMAND_OFFSET 1 // skip 2 bits (1 start bit)
+#define GRUNDIG_OR_NOKIA_BIT_TIME 528.0e-6 // 528 usec pulse/pause
+#define GRUNDIG_OR_NOKIA_PRE_PAUSE_TIME 2639.0e-6 // 2639 usec pause after pre bit
+#define GRUNDIG_OR_NOKIA_STOP_BIT 0 // has no stop bit
+#define GRUNDIG_OR_NOKIA_LSB 1 // MSB...LSB
+
+#define GRUNDIG_FRAMES 2 // GRUNDIG sends each frame 1+1 times
+#define GRUNDIG_FRAME_REPETITION_TIME 20.0e-3 // repetition after 20ms
+#define GRUNDIG_ADDRESS_OFFSET 0 // no address
+#define GRUNDIG_ADDRESS_LEN 0 // no address
+#define GRUNDIG_COMMAND_OFFSET 1 // skip 1 start bit
#define GRUNDIG_COMMAND_LEN 9 // read 9 command bits
#define GRUNDIG_COMPLETE_DATA_LEN 10 // complete length: 1 start bit + 9 data bits
-#define GRUNDIG_STOP_BIT 0 // has no stop bit
-#define GRUNDIG_LSB 1 // MSB...LSB
-#define AUTO_REPETITION_TIME 50.0e-3 // SIRCS/SAMSUNG32/NUBERT: automatic repetition after 45-50ms
+#define NOKIA_FRAMES 3 // NOKIA sends each frame 1 + 1 + 1 times
+#define NOKIA_FRAME_REPETITION_TIME 20.0e-3 // repetition after 20ms
+#define NOKIA_ADDRESS_OFFSET 9 // skip 9 bits (1 start bit + 8 data bits)
+#define NOKIA_ADDRESS_LEN 8 // 7 address bits
+#define NOKIA_COMMAND_OFFSET 1 // skip 1 bit (1 start bit)
+#define NOKIA_COMMAND_LEN 8 // read 8 command bits
+#define NOKIA_COMPLETE_DATA_LEN 17 // complete length: 1 start bit + 8 address bits + 8 command bits
+
+#define AUTO_FRAME_REPETITION_TIME 50.0e-3 // SIRCS/SAMSUNG32/NUBERT: automatic repetition after 25-50ms
#define TRUE 1
#define FALSE 0
diff --git a/irmpconfig.h b/irmpconfig.h
index bc9d972..a22ebf2 100644
--- a/irmpconfig.h
+++ b/irmpconfig.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de
*
- * $Id: irmpconfig.h,v 1.5 2010/05/15 17:56:24 fm Exp $
+ * $Id: irmpconfig.h,v 1.6 2010/05/25 14:45:39 fm Exp $
*
* ATMEGA88 @ 8 MHz
*
@@ -43,6 +43,7 @@
#define IRMP_SUPPORT_NUBERT_PROTOCOL 1 // flag: support NUBERT uses ~50 bytes
#define IRMP_SUPPORT_BANG_OLUFSEN_PROTOCOL 1 // flag: support Bang & Olufsen uses ~200 bytes
#define IRMP_SUPPORT_GRUNDIG_PROTOCOL 1 // flag: support Grundig uses ~150 bytes
+#define IRMP_SUPPORT_NOKIA_PROTOCOL 1 // flag: support Nokia uses ~150 bytes
/*---------------------------------------------------------------------------------------------------------------------------------------------------
* Change hardware pin here:
diff --git a/irsnd.c b/irsnd.c
index eb3e29f..86cc94f 100644
--- a/irsnd.c
+++ b/irsnd.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de
*
- * $Id: irsnd.c,v 1.10 2010/05/17 10:31:43 fm Exp $
+ * $Id: irsnd.c,v 1.12 2010/05/26 08:34:30 fm Exp $
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -56,7 +56,7 @@ typedef unsigned short uint16_t;
#define SIRCS_1_PULSE_LEN (uint8_t)(F_INTERRUPTS * SIRCS_1_PULSE_TIME + 0.5)
#define SIRCS_0_PULSE_LEN (uint8_t)(F_INTERRUPTS * SIRCS_0_PULSE_TIME + 0.5)
#define SIRCS_PAUSE_LEN (uint8_t)(F_INTERRUPTS * SIRCS_PAUSE_TIME + 0.5)
-#define SIRCS_REPETITION_LEN (uint16_t)(F_INTERRUPTS * SIRCS_REPETITION_TIME + 0.5) // use uint16_t!
+#define SIRCS_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * SIRCS_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
#define NEC_START_BIT_PULSE_LEN (uint8_t)(F_INTERRUPTS * NEC_START_BIT_PULSE_TIME + 0.5)
#define NEC_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * NEC_START_BIT_PAUSE_TIME + 0.5)
@@ -70,7 +70,7 @@ typedef unsigned short uint16_t;
#define SAMSUNG_1_PAUSE_LEN (uint8_t)(F_INTERRUPTS * SAMSUNG_1_PAUSE_TIME + 0.5)
#define SAMSUNG_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * SAMSUNG_0_PAUSE_TIME + 0.5)
-#define SAMSUNG32_REPETITION_LEN (uint16_t)(F_INTERRUPTS * SAMSUNG32_REPETITION_TIME + 0.5) // use uint16_t!
+#define SAMSUNG32_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * SAMSUNG32_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
#define MATSUSHITA_START_BIT_PULSE_LEN (uint8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PULSE_TIME + 0.5)
#define MATSUSHITA_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PAUSE_TIME + 0.5)
@@ -95,7 +95,7 @@ typedef unsigned short uint16_t;
#define DENON_PULSE_LEN (uint8_t)(F_INTERRUPTS * DENON_PULSE_TIME + 0.5)
#define DENON_1_PAUSE_LEN (uint8_t)(F_INTERRUPTS * DENON_1_PAUSE_TIME + 0.5)
#define DENON_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * DENON_0_PAUSE_TIME + 0.5)
-#define DENON_REPETITION_LEN (uint16_t)(F_INTERRUPTS * DENON_REPETITION_TIME + 0.5) // use uint16_t!
+#define DENON_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * DENON_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
#define RECS80EXT_START_BIT_PULSE_LEN (uint8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PULSE_TIME + 0.5)
#define RECS80EXT_START_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * RECS80EXT_START_BIT_PAUSE_TIME + 0.5)
@@ -109,7 +109,7 @@ typedef unsigned short uint16_t;
#define NUBERT_1_PAUSE_LEN (uint8_t)(F_INTERRUPTS * NUBERT_1_PAUSE_TIME + 0.5)
#define NUBERT_0_PULSE_LEN (uint8_t)(F_INTERRUPTS * NUBERT_0_PULSE_TIME + 0.5)
#define NUBERT_0_PAUSE_LEN (uint8_t)(F_INTERRUPTS * NUBERT_0_PAUSE_TIME + 0.5)
-#define NUBERT_REPETITION_LEN (uint16_t)(F_INTERRUPTS * NUBERT_REPETITION_TIME + 0.5) // use uint16_t!
+#define NUBERT_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * NUBERT_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
#define BANG_OLUFSEN_START_BIT1_PULSE_LEN (uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PULSE_TIME + 0.5)
#define BANG_OLUFSEN_START_BIT1_PAUSE_LEN (uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_START_BIT1_PAUSE_TIME + 0.5)
@@ -123,9 +123,10 @@ typedef unsigned short uint16_t;
#define BANG_OLUFSEN_R_PAUSE_LEN (uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_R_PAUSE_TIME + 0.5)
#define BANG_OLUFSEN_TRAILER_BIT_PAUSE_LEN (uint8_t)(F_INTERRUPTS * BANG_OLUFSEN_TRAILER_BIT_PAUSE_TIME + 0.5)
-#define GRUNDIG_PRE_PAUSE_LEN (uint8_t)(F_INTERRUPTS * GRUNDIG_PRE_PAUSE_TIME + 0.5)
-#define GRUNDIG_BIT_LEN (uint8_t)(F_INTERRUPTS * GRUNDIG_BIT_TIME + 0.5)
-#define GRUNDIG_REPETITION_LEN (uint16_t)(F_INTERRUPTS * GRUNDIG_REPETITION_TIME + 0.5) // use uint16_t!
+#define GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN (uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_PRE_PAUSE_TIME + 0.5)
+#define GRUNDIG_OR_NOKIA_BIT_LEN (uint8_t)(F_INTERRUPTS * GRUNDIG_OR_NOKIA_BIT_TIME + 0.5)
+#define GRUNDIG_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * GRUNDIG_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
+#define NOKIA_FRAME_REPETITION_LEN (uint16_t)(F_INTERRUPTS * NOKIA_FRAME_REPETITION_TIME + 0.5) // use uint16_t!
#define IRSND_FREQ_32_KHZ (uint8_t) ((F_CPU / 32000 / 2) - 1)
#define IRSND_FREQ_36_KHZ (uint8_t) ((F_CPU / 36000 / 2) - 1)
@@ -136,7 +137,7 @@ typedef unsigned short uint16_t;
static volatile uint8_t irsnd_busy;
static volatile uint8_t irsnd_protocol;
-static volatile uint8_t irsnd_buffer[5];
+static volatile uint8_t irsnd_buffer[6];
static volatile uint8_t irsnd_is_on = FALSE;
/*---------------------------------------------------------------------------------------------------------------------------------------------------
@@ -387,10 +388,10 @@ irsnd_send_data (IRMP_DATA * irmp_data_p)
#if IRSND_SUPPORT_DENON_PROTOCOL == 1
case IRMP_DENON_PROTOCOL:
{
- irsnd_buffer[0] = ((irmp_data_p->address & 0x1F) << 3) | ((irmp_data_p->command & 0x0380) >> 7); // AAAAACCC
- irsnd_buffer[1] = (irmp_data_p->command & 0x7F) << 1; // CCCCCCC0
- irsnd_buffer[2] = ((irmp_data_p->address & 0x1F) << 3) | (((~irmp_data_p->command) & 0x0380) >> 7); // AAAAACCC
- irsnd_buffer[3] = (~(irmp_data_p->command) & 0x7F) << 1; // CCCCCCC0
+ irsnd_buffer[0] = ((irmp_data_p->address & 0x1F) << 3) | ((irmp_data_p->command & 0x0380) >> 7); // AAAAACCC (1st frame)
+ irsnd_buffer[1] = (irmp_data_p->command & 0x7F) << 1; // CCCCCCC
+ irsnd_buffer[2] = ((irmp_data_p->address & 0x1F) << 3) | (((~irmp_data_p->command) & 0x0380) >> 7); // AAAAACCC (2nd frame)
+ irsnd_buffer[3] = (~(irmp_data_p->command) & 0x7F) << 1; // CCCCCCC
irsnd_busy = TRUE;
break;
}
@@ -419,10 +420,27 @@ irsnd_send_data (IRMP_DATA * irmp_data_p)
{
command = bitsrevervse (irmp_data_p->command, GRUNDIG_COMMAND_LEN);
- irsnd_buffer[0] = 0xFF; // S1111111
- irsnd_buffer[1] = 0xC0; // 11000000
- irsnd_buffer[2] = 0x80 | (command >> 2); // SCCCCCCC
- irsnd_buffer[3] = (command << 6) & 0xC0; // CC000000
+ irsnd_buffer[0] = 0xFF; // S1111111 (1st frame)
+ irsnd_buffer[1] = 0xC0; // 11
+ irsnd_buffer[2] = 0x80 | (command >> 2); // SCCCCCCC (2nd frame)
+ irsnd_buffer[3] = (command << 6) & 0xC0; // CC
+
+ irsnd_busy = TRUE;
+ break;
+ }
+#endif
+#if IRSND_SUPPORT_NOKIA_PROTOCOL == 1
+ case IRMP_NOKIA_PROTOCOL:
+ {
+ address = bitsrevervse (irmp_data_p->address, NOKIA_ADDRESS_LEN);
+ command = bitsrevervse (irmp_data_p->command, NOKIA_COMMAND_LEN);
+
+ irsnd_buffer[0] = 0xBF; // S0111111 (1st + 3rd frame)
+ irsnd_buffer[1] = 0xFF; // 11111111
+ irsnd_buffer[2] = 0x80; // 1
+ irsnd_buffer[3] = 0x80 | command >> 1; // SCCCCCCC (2nd frame)
+ irsnd_buffer[4] = (command << 7) | (address >> 1); // CAAAAAAA
+ irsnd_buffer[5] = (address << 7); // A
irsnd_busy = TRUE;
break;
@@ -459,7 +477,7 @@ irsnd_ISR (void)
static uint8_t complete_data_len;
static uint8_t n_frames; // number of repetitions
static uint8_t frame_counter; // repetition counter
- static uint16_t repetition_pause; // pause before repetition, uint16_t!
+ static uint16_t repetition_pause_len; // pause before repetition, uint16_t!
static uint16_t repetition_pause_counter; // pause before repetition, uint16_t!
#if IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
static uint8_t last_bit_value;
@@ -475,7 +493,7 @@ irsnd_ISR (void)
{
repetition_pause_counter++;
- if (repetition_pause_counter >= repetition_pause)
+ if (repetition_pause_counter >= repetition_pause_len)
{
repetition_pause_counter = 0;
@@ -489,6 +507,19 @@ irsnd_ISR (void)
current_bit = 15;
complete_data_len = 16 + GRUNDIG_COMPLETE_DATA_LEN;
}
+ else if (irsnd_protocol == IRMP_NOKIA_PROTOCOL)
+ {
+ if (frame_counter == 1)
+ {
+ current_bit = 23;
+ complete_data_len = 24 + NOKIA_COMPLETE_DATA_LEN;
+ }
+ else // if (frame_counter == 2)
+ {
+ current_bit = 0xFF;
+ complete_data_len = NOKIA_COMPLETE_DATA_LEN;
+ }
+ }
}
else
{
@@ -515,16 +546,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_SIRCS_PROTOCOL == 1
case IRMP_SIRCS_PROTOCOL:
{
- startbit_pulse_len = SIRCS_START_BIT_PULSE_LEN;
- startbit_pause_len = SIRCS_START_BIT_PAUSE_LEN;
- pulse_1_len = SIRCS_1_PULSE_LEN;
- pause_1_len = SIRCS_PAUSE_LEN;
- pulse_0_len = SIRCS_0_PULSE_LEN;
- pause_0_len = SIRCS_PAUSE_LEN;
- has_stop_bit = SIRCS_STOP_BIT;
- complete_data_len = SIRCS_MINIMUM_DATA_LEN;
- n_frames = SIRCS_REPETITION_CNT; // 3 frames
- repetition_pause = SIRCS_REPETITION_LEN; // 25ms pause
+ startbit_pulse_len = SIRCS_START_BIT_PULSE_LEN;
+ startbit_pause_len = SIRCS_START_BIT_PAUSE_LEN;
+ pulse_1_len = SIRCS_1_PULSE_LEN;
+ pause_1_len = SIRCS_PAUSE_LEN;
+ pulse_0_len = SIRCS_0_PULSE_LEN;
+ pause_0_len = SIRCS_PAUSE_LEN;
+ has_stop_bit = SIRCS_STOP_BIT;
+ complete_data_len = SIRCS_MINIMUM_DATA_LEN;
+ n_frames = SIRCS_FRAMES; // 3 frames
+ repetition_pause_len = SIRCS_FRAME_REPETITION_LEN; // 25ms pause
irsnd_set_freq (IRSND_FREQ_40_KHZ);
break;
}
@@ -532,16 +563,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_NEC_PROTOCOL == 1
case IRMP_NEC_PROTOCOL:
{
- startbit_pulse_len = NEC_START_BIT_PULSE_LEN;
- startbit_pause_len = NEC_START_BIT_PAUSE_LEN;
- pulse_1_len = NEC_PULSE_LEN;
- pause_1_len = NEC_1_PAUSE_LEN;
- pulse_0_len = NEC_PULSE_LEN;
- pause_0_len = NEC_0_PAUSE_LEN;
- has_stop_bit = NEC_STOP_BIT;
- complete_data_len = NEC_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
+ startbit_pulse_len = NEC_START_BIT_PULSE_LEN;
+ startbit_pause_len = NEC_START_BIT_PAUSE_LEN;
+ pulse_1_len = NEC_PULSE_LEN;
+ pause_1_len = NEC_1_PAUSE_LEN;
+ pulse_0_len = NEC_PULSE_LEN;
+ pause_0_len = NEC_0_PAUSE_LEN;
+ has_stop_bit = NEC_STOP_BIT;
+ complete_data_len = NEC_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
irsnd_set_freq (IRSND_FREQ_38_KHZ);
break;
}
@@ -549,32 +580,32 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1
case IRMP_SAMSUNG_PROTOCOL:
{
- startbit_pulse_len = SAMSUNG_START_BIT_PULSE_LEN;
- startbit_pause_len = SAMSUNG_START_BIT_PAUSE_LEN;
- pulse_1_len = SAMSUNG_PULSE_LEN;
- pause_1_len = SAMSUNG_1_PAUSE_LEN;
- pulse_0_len = SAMSUNG_PULSE_LEN;
- pause_0_len = SAMSUNG_0_PAUSE_LEN;
- has_stop_bit = SAMSUNG_STOP_BIT;
- complete_data_len = SAMSUNG_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
+ startbit_pulse_len = SAMSUNG_START_BIT_PULSE_LEN;
+ startbit_pause_len = SAMSUNG_START_BIT_PAUSE_LEN;
+ pulse_1_len = SAMSUNG_PULSE_LEN;
+ pause_1_len = SAMSUNG_1_PAUSE_LEN;
+ pulse_0_len = SAMSUNG_PULSE_LEN;
+ pause_0_len = SAMSUNG_0_PAUSE_LEN;
+ has_stop_bit = SAMSUNG_STOP_BIT;
+ complete_data_len = SAMSUNG_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
irsnd_set_freq (IRSND_FREQ_38_KHZ);
break;
}
case IRMP_SAMSUNG32_PROTOCOL:
{
- startbit_pulse_len = SAMSUNG_START_BIT_PULSE_LEN;
- startbit_pause_len = SAMSUNG_START_BIT_PAUSE_LEN;
- pulse_1_len = SAMSUNG_PULSE_LEN;
- pause_1_len = SAMSUNG_1_PAUSE_LEN;
- pulse_0_len = SAMSUNG_PULSE_LEN;
- pause_0_len = SAMSUNG_0_PAUSE_LEN;
- has_stop_bit = SAMSUNG_STOP_BIT;
- complete_data_len = SAMSUNG32_COMPLETE_DATA_LEN;
- n_frames = SAMSUNG32_REPETITION_CNT; // 2 frames
- repetition_pause = SAMSUNG32_REPETITION_LEN; // 47 ms pause
+ startbit_pulse_len = SAMSUNG_START_BIT_PULSE_LEN;
+ startbit_pause_len = SAMSUNG_START_BIT_PAUSE_LEN;
+ pulse_1_len = SAMSUNG_PULSE_LEN;
+ pause_1_len = SAMSUNG_1_PAUSE_LEN;
+ pulse_0_len = SAMSUNG_PULSE_LEN;
+ pause_0_len = SAMSUNG_0_PAUSE_LEN;
+ has_stop_bit = SAMSUNG_STOP_BIT;
+ complete_data_len = SAMSUNG32_COMPLETE_DATA_LEN;
+ n_frames = SAMSUNG32_FRAMES; // 2 frames
+ repetition_pause_len = SAMSUNG32_FRAME_REPETITION_LEN; // 47 ms pause
irsnd_set_freq (IRSND_FREQ_38_KHZ);
break;
}
@@ -582,16 +613,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1
case IRMP_MATSUSHITA_PROTOCOL:
{
- startbit_pulse_len = MATSUSHITA_START_BIT_PULSE_LEN;
- startbit_pause_len = MATSUSHITA_START_BIT_PAUSE_LEN;
- pulse_1_len = MATSUSHITA_PULSE_LEN;
- pause_1_len = MATSUSHITA_1_PAUSE_LEN;
- pulse_0_len = MATSUSHITA_PULSE_LEN;
- pause_0_len = MATSUSHITA_0_PAUSE_LEN;
- has_stop_bit = MATSUSHITA_STOP_BIT;
- complete_data_len = MATSUSHITA_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
+ startbit_pulse_len = MATSUSHITA_START_BIT_PULSE_LEN;
+ startbit_pause_len = MATSUSHITA_START_BIT_PAUSE_LEN;
+ pulse_1_len = MATSUSHITA_PULSE_LEN;
+ pause_1_len = MATSUSHITA_1_PAUSE_LEN;
+ pulse_0_len = MATSUSHITA_PULSE_LEN;
+ pause_0_len = MATSUSHITA_0_PAUSE_LEN;
+ has_stop_bit = MATSUSHITA_STOP_BIT;
+ complete_data_len = MATSUSHITA_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
irsnd_set_freq (IRSND_FREQ_36_KHZ);
break;
}
@@ -599,16 +630,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_RECS80_PROTOCOL == 1
case IRMP_RECS80_PROTOCOL:
{
- startbit_pulse_len = RECS80_START_BIT_PULSE_LEN;
- startbit_pause_len = RECS80_START_BIT_PAUSE_LEN;
- pulse_1_len = RECS80_PULSE_LEN;
- pause_1_len = RECS80_1_PAUSE_LEN;
- pulse_0_len = RECS80_PULSE_LEN;
- pause_0_len = RECS80_0_PAUSE_LEN;
- has_stop_bit = RECS80_STOP_BIT;
- complete_data_len = RECS80_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
+ startbit_pulse_len = RECS80_START_BIT_PULSE_LEN;
+ startbit_pause_len = RECS80_START_BIT_PAUSE_LEN;
+ pulse_1_len = RECS80_PULSE_LEN;
+ pause_1_len = RECS80_1_PAUSE_LEN;
+ pulse_0_len = RECS80_PULSE_LEN;
+ pause_0_len = RECS80_0_PAUSE_LEN;
+ has_stop_bit = RECS80_STOP_BIT;
+ complete_data_len = RECS80_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
irsnd_set_freq (IRSND_FREQ_38_KHZ);
break;
}
@@ -616,16 +647,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_RECS80EXT_PROTOCOL == 1
case IRMP_RECS80EXT_PROTOCOL:
{
- startbit_pulse_len = RECS80EXT_START_BIT_PULSE_LEN;
- startbit_pause_len = RECS80EXT_START_BIT_PAUSE_LEN;
- pulse_1_len = RECS80EXT_PULSE_LEN;
- pause_1_len = RECS80EXT_1_PAUSE_LEN;
- pulse_0_len = RECS80EXT_PULSE_LEN;
- pause_0_len = RECS80EXT_0_PAUSE_LEN;
- has_stop_bit = RECS80EXT_STOP_BIT;
- complete_data_len = RECS80EXT_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
+ startbit_pulse_len = RECS80EXT_START_BIT_PULSE_LEN;
+ startbit_pause_len = RECS80EXT_START_BIT_PAUSE_LEN;
+ pulse_1_len = RECS80EXT_PULSE_LEN;
+ pause_1_len = RECS80EXT_1_PAUSE_LEN;
+ pulse_0_len = RECS80EXT_PULSE_LEN;
+ pause_0_len = RECS80EXT_0_PAUSE_LEN;
+ has_stop_bit = RECS80EXT_STOP_BIT;
+ complete_data_len = RECS80EXT_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
irsnd_set_freq (IRSND_FREQ_38_KHZ);
break;
}
@@ -633,16 +664,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_RC5_PROTOCOL == 1
case IRMP_RC5_PROTOCOL:
{
- startbit_pulse_len = RC5_BIT_LEN;
- startbit_pause_len = RC5_BIT_LEN;
- pulse_1_len = RC5_BIT_LEN;
- pause_1_len = RC5_BIT_LEN;
- pulse_0_len = RC5_BIT_LEN;
- pause_0_len = RC5_BIT_LEN;
- has_stop_bit = RC5_STOP_BIT;
- complete_data_len = RC5_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
+ startbit_pulse_len = RC5_BIT_LEN;
+ startbit_pause_len = RC5_BIT_LEN;
+ pulse_1_len = RC5_BIT_LEN;
+ pause_1_len = RC5_BIT_LEN;
+ pulse_0_len = RC5_BIT_LEN;
+ pause_0_len = RC5_BIT_LEN;
+ has_stop_bit = RC5_STOP_BIT;
+ complete_data_len = RC5_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
irsnd_set_freq (IRSND_FREQ_36_KHZ);
break;
}
@@ -650,16 +681,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_DENON_PROTOCOL == 1
case IRMP_DENON_PROTOCOL:
{
- startbit_pulse_len = 0x00;
- startbit_pause_len = 0x00;
- pulse_1_len = DENON_PULSE_LEN;
- pause_1_len = DENON_1_PAUSE_LEN;
- pulse_0_len = DENON_PULSE_LEN;
- pause_0_len = DENON_0_PAUSE_LEN;
- has_stop_bit = DENON_STOP_BIT;
- complete_data_len = DENON_COMPLETE_DATA_LEN;
- n_frames = DENON_REPETITION_CNT; // 2 frames, 2nd with inverted command
- repetition_pause = DENON_REPETITION_LEN; // 65 ms pause after 1st frame
+ startbit_pulse_len = 0x00;
+ startbit_pause_len = 0x00;
+ pulse_1_len = DENON_PULSE_LEN;
+ pause_1_len = DENON_1_PAUSE_LEN;
+ pulse_0_len = DENON_PULSE_LEN;
+ pause_0_len = DENON_0_PAUSE_LEN;
+ has_stop_bit = DENON_STOP_BIT;
+ complete_data_len = DENON_COMPLETE_DATA_LEN;
+ n_frames = DENON_FRAMES; // 2 frames, 2nd with inverted command
+ repetition_pause_len = DENON_FRAME_REPETITION_LEN; // 65 ms pause after 1st frame
irsnd_set_freq (IRSND_FREQ_32_KHZ);
break;
}
@@ -667,16 +698,16 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_NUBERT_PROTOCOL == 1
case IRMP_NUBERT_PROTOCOL:
{
- startbit_pulse_len = NUBERT_START_BIT_PULSE_LEN;
- startbit_pause_len = NUBERT_START_BIT_PAUSE_LEN;
- pulse_1_len = NUBERT_1_PULSE_LEN;
- pause_1_len = NUBERT_1_PAUSE_LEN;
- pulse_0_len = NUBERT_0_PULSE_LEN;
- pause_0_len = NUBERT_0_PAUSE_LEN;
- has_stop_bit = NUBERT_STOP_BIT;
- complete_data_len = NUBERT_COMPLETE_DATA_LEN;
- n_frames = NUBERT_REPETITION_CNT; // 2 frames
- repetition_pause = NUBERT_REPETITION_LEN; // 35 ms pause
+ startbit_pulse_len = NUBERT_START_BIT_PULSE_LEN;
+ startbit_pause_len = NUBERT_START_BIT_PAUSE_LEN;
+ pulse_1_len = NUBERT_1_PULSE_LEN;
+ pause_1_len = NUBERT_1_PAUSE_LEN;
+ pulse_0_len = NUBERT_0_PULSE_LEN;
+ pause_0_len = NUBERT_0_PAUSE_LEN;
+ has_stop_bit = NUBERT_STOP_BIT;
+ complete_data_len = NUBERT_COMPLETE_DATA_LEN;
+ n_frames = NUBERT_FRAMES; // 2 frames
+ repetition_pause_len = NUBERT_FRAME_REPETITION_LEN; // 35 ms pause
irsnd_set_freq (IRSND_FREQ_36_KHZ);
break;
}
@@ -684,17 +715,17 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1
case IRMP_BANG_OLUFSEN_PROTOCOL:
{
- startbit_pulse_len = BANG_OLUFSEN_START_BIT1_PULSE_LEN;
- startbit_pause_len = BANG_OLUFSEN_START_BIT1_PAUSE_LEN;
- pulse_1_len = BANG_OLUFSEN_PULSE_LEN;
- pause_1_len = BANG_OLUFSEN_1_PAUSE_LEN;
- pulse_0_len = BANG_OLUFSEN_PULSE_LEN;
- pause_0_len = BANG_OLUFSEN_0_PAUSE_LEN;
- has_stop_bit = BANG_OLUFSEN_STOP_BIT;
- complete_data_len = BANG_OLUFSEN_COMPLETE_DATA_LEN;
- n_frames = 1; // 1 frame
- repetition_pause = 0;
- last_bit_value = 0;
+ startbit_pulse_len = BANG_OLUFSEN_START_BIT1_PULSE_LEN;
+ startbit_pause_len = BANG_OLUFSEN_START_BIT1_PAUSE_LEN;
+ pulse_1_len = BANG_OLUFSEN_PULSE_LEN;
+ pause_1_len = BANG_OLUFSEN_1_PAUSE_LEN;
+ pulse_0_len = BANG_OLUFSEN_PULSE_LEN;
+ pause_0_len = BANG_OLUFSEN_0_PAUSE_LEN;
+ has_stop_bit = BANG_OLUFSEN_STOP_BIT;
+ complete_data_len = BANG_OLUFSEN_COMPLETE_DATA_LEN;
+ n_frames = 1; // 1 frame
+ repetition_pause_len = 0;
+ last_bit_value = 0;
irsnd_set_freq (IRSND_FREQ_455_KHZ);
break;
}
@@ -702,17 +733,34 @@ irsnd_ISR (void)
#if IRSND_SUPPORT_GRUNDIG_PROTOCOL == 1
case IRMP_GRUNDIG_PROTOCOL:
{
- startbit_pulse_len = GRUNDIG_BIT_LEN;
- startbit_pause_len = GRUNDIG_PRE_PAUSE_LEN;
- pulse_1_len = GRUNDIG_BIT_LEN;
- pause_1_len = GRUNDIG_BIT_LEN;
- pulse_0_len = GRUNDIG_BIT_LEN;
- pause_0_len = GRUNDIG_BIT_LEN;
- has_stop_bit = GRUNDIG_STOP_BIT;
- complete_data_len = GRUNDIG_COMPLETE_DATA_LEN;
- n_frames = GRUNDIG_REPETITION_CNT; // 2 frames
- repetition_pause = GRUNDIG_REPETITION_LEN; // 20msec pause
- irsnd_set_freq (IRSND_FREQ_36_KHZ);
+ startbit_pulse_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ startbit_pause_len = GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN;
+ pulse_1_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ pause_1_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ pulse_0_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ pause_0_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ has_stop_bit = GRUNDIG_OR_NOKIA_STOP_BIT;
+ complete_data_len = GRUNDIG_COMPLETE_DATA_LEN;
+ n_frames = GRUNDIG_FRAMES; // 2 frames
+ repetition_pause_len = GRUNDIG_FRAME_REPETITION_LEN; // 20msec pause
+ irsnd_set_freq (IRSND_FREQ_38_KHZ);
+ break;
+ }
+#endif
+#if IRSND_SUPPORT_NOKIA_PROTOCOL == 1
+ case IRMP_NOKIA_PROTOCOL:
+ {
+ startbit_pulse_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ startbit_pause_len = GRUNDIG_OR_NOKIA_PRE_PAUSE_LEN;
+ pulse_1_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ pause_1_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ pulse_0_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ pause_0_len = GRUNDIG_OR_NOKIA_BIT_LEN;
+ has_stop_bit = GRUNDIG_OR_NOKIA_STOP_BIT;
+ complete_data_len = NOKIA_COMPLETE_DATA_LEN;
+ n_frames = NOKIA_FRAMES; // 2 frames
+ repetition_pause_len = NOKIA_FRAME_REPETITION_LEN; // 20msec pause
+ irsnd_set_freq (IRSND_FREQ_38_KHZ);
break;
}
#endif
@@ -980,12 +1028,15 @@ irsnd_ISR (void)
}
#endif // IRSND_SUPPORT_RC5_PROTOCOL
-#if IRSND_SUPPORT_GRUNDIG_PROTOCOL == 1
+#if IRSND_SUPPORT_GRUNDIG_PROTOCOL == 1 || IRSND_SUPPORT_NOKIA_PROTOCOL == 1
case IRMP_GRUNDIG_PROTOCOL:
+ case IRMP_NOKIA_PROTOCOL:
{
uint8_t next_bit = FALSE;
- if (current_bit == 0xFF || current_bit == 15) // start bit of 1st or 2nd frame
+ if (current_bit == 0xFF || // start bit of 1st frame
+ (irsnd_protocol == IRMP_GRUNDIG_PROTOCOL && current_bit == 15) || // start bit of 2nd frame (Grundig)
+ (irsnd_protocol == IRMP_NOKIA_PROTOCOL && (current_bit == 23 || current_bit == 47))) // start bit of 2nd/3rd frame (Nokia)
{
if (pulse_counter == 0)
{
@@ -1024,7 +1075,7 @@ irsnd_ISR (void)
if (first_pulse)
{
- if (pulse_counter < GRUNDIG_BIT_LEN)
+ if (pulse_counter < GRUNDIG_OR_NOKIA_BIT_LEN)
{
if (pulse_counter == 0)
{
@@ -1032,7 +1083,7 @@ irsnd_ISR (void)
}
pulse_counter++;
}
- else if (pause_counter < GRUNDIG_BIT_LEN)
+ else if (pause_counter < GRUNDIG_OR_NOKIA_BIT_LEN)
{
if (pause_counter == 0)
{
@@ -1047,7 +1098,7 @@ irsnd_ISR (void)
}
else
{
- if (pause_counter < GRUNDIG_BIT_LEN)
+ if (pause_counter < GRUNDIG_OR_NOKIA_BIT_LEN)
{
if (pause_counter == 0)
{
@@ -1055,7 +1106,7 @@ irsnd_ISR (void)
}
pause_counter++;
}
- else if (pulse_counter < GRUNDIG_BIT_LEN)
+ else if (pulse_counter < GRUNDIG_OR_NOKIA_BIT_LEN)
{
if (pulse_counter == 0)
{
@@ -1094,7 +1145,7 @@ irsnd_ISR (void)
}
break;
}
-#endif // IRSND_SUPPORT_GRUNDIG_PROTOCOL
+#endif // IRSND_SUPPORT_GRUNDIG_PROTOCOL || IRSND_SUPPORT_NOKIA_PROTOCOL
default:
{
diff --git a/irsnd.exe b/irsnd.exe
index 5bce0d7..e265b35 100644
--- a/irsnd.exe
+++ b/irsnd.exe
Binary files differ
diff --git a/irsndconfig.h b/irsndconfig.h
index 81772bf..f08506e 100644
--- a/irsndconfig.h
+++ b/irsndconfig.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2010 Frank Meyer - frank(at)fli4l.de
*
- * $Id: irsndconfig.h,v 1.2 2010/05/17 10:31:43 fm Exp $
+ * $Id: irsndconfig.h,v 1.3 2010/05/26 08:34:30 fm Exp $
*
* ATMEGA88 @ 8 MHz
*
@@ -34,6 +34,7 @@
#define IRSND_SUPPORT_NUBERT_PROTOCOL 1 // flag: support NUBERT uses ~100 bytes
#define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL 1 // flag: support Bang&Olufsen uses ~250 bytes
#define IRSND_SUPPORT_GRUNDIG_PROTOCOL 1 // flag: support Grundig uses ~250 bytes
+#define IRSND_SUPPORT_NOKIA_PROTOCOL 1 // flag: support Nokia uses ~150 bytes
/*---------------------------------------------------------------------------------------------------------------------------------------------------