Added a new Brand "Kamoona" to be used for other applications that are not a known brand.

Fork of RemoteIR by Shinichiro Nakamura

Revision:
12:0651f02169ee
Parent:
11:268cc2ab63bd
Child:
14:257b2f794dc4
--- a/TransmitterIR.cpp	Mon Sep 20 00:54:59 2010 +0000
+++ b/TransmitterIR.cpp	Sun Apr 19 19:11:32 2015 +0000
@@ -89,6 +89,14 @@
             ticker.detach();
             ticker.attach_us(this, &TransmitterIR::tick, RemoteIR::TUS_SONY);
             break;
+        case RemoteIR::Samsung:
+            ticker.detach();
+            ticker.attach_us(this, &TransmitterIR::tick, RemoteIR::TUS_Samsung);
+            break;    
+        case RemoteIR::Nikon:
+            ticker.detach();
+            ticker.attach_us(this, &TransmitterIR::tick, RemoteIR::TUS_Nikon);
+            break;
     }
 
     UNLOCK();
@@ -150,6 +158,36 @@
                 if ((LEADER_SONY_HEAD + LEADER_SONY_TAIL) <= work.leader) {
                     work.state = Data;
                 }
+            } else if (data.format == RemoteIR::Samsung) {
+                /*
+                 * SONY.
+                 */
+                static const int LEADER_Samsung_HEAD = 8;
+                static const int LEADER_Samsung_TAIL = 8;
+                if (work.leader < LEADER_Samsung_HEAD) {
+                    tx.write(0.5);
+                } else {
+                    tx.write(0.0);
+                }
+                work.leader++;
+                if ((LEADER_Samsung_HEAD + LEADER_Samsung_TAIL) <= work.leader) {
+                    work.state = Data;
+                }    
+            } else if (data.format == RemoteIR::Nikon) {
+                /*
+                 * Nikon.
+                 */
+                static const int LEADER_Nikon_HEAD = 0;
+                static const int LEADER_Nikon_TAIL = 0;
+                if (work.leader < LEADER_Nikon_HEAD) {
+                    tx.write(0.5);
+                } else {
+                    tx.write(0.0);
+                }
+                work.leader++;
+                if ((LEADER_Nikon_HEAD + LEADER_Nikon_TAIL) <= work.leader) {
+                    work.state = Data;
+                }
             } else {
             }
             break;
@@ -238,7 +276,34 @@
                 if (data.bitlength <= work.bitcount) {
                     work.state = Trailer;
                 }
-            } else {
+            }else if (data.format == RemoteIR::Samsung) {
+                /*
+                 * Samsung.
+                 */
+                if (work.data == 0) {
+                    tx.write(0.5);
+                    work.data++;
+                } else {
+                    tx.write(0.0);
+                    if (0 != (data.buffer[work.bitcount / 8] & (1 << work.bitcount % 8))) {
+                        if (1 <= work.data) {
+                            work.bitcount++;
+                            work.data = 0;
+                        } else {
+                            work.data++;
+                        }
+                    } else {
+                        if (3 <= work.data) {
+                            work.bitcount++;
+                            work.data = 0;
+                        } else {
+                            work.data++;
+                        }
+                    }
+                }
+                if (data.bitlength <= work.bitcount) {
+                    work.state = Trailer;
+                } else {
             }
             break;
         case Trailer:
@@ -290,6 +355,22 @@
                     work.state = Idle;
                     //ticker.detach();
                 }
+            }else if (data.format == RemoteIR::Samsung) {
+                /*
+                 * Samsung.
+                 */
+                static const int TRAILER_Samsung_HEAD = 1;
+                static const int TRAILER_Samsung_TAIL = 55;
+                if (work.trailer < TRAILER_Samsung_HEAD) {
+                    tx.write(0.5);
+                } else {
+                    tx.write(0.0);
+                }
+                work.trailer++;
+                if ((TRAILER_Samsung_HEAD + TRAILER_Samsung_TAIL) <= work.trailer) {
+                    work.state = Idle;
+                    //ticker.detach();
+                }
             } else {
             }
             break;
@@ -298,3 +379,4 @@
     }
     UNLOCK();
 }
+}