AppleRemote receive library.

Revision:
0:a5f26ed3f510
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AppleRemote.h	Sun Aug 08 11:19:56 2010 +0000
@@ -0,0 +1,142 @@
+/**
+ * @section LICENSE
+ *
+ * This source code is "zlib" license. 
+ * Of course, this is not a part of the zlib software. 
+ * The license is zlib license. 
+ *
+ * Copyright (C) 2010 tosihisa
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * @section DESCRIPTION
+ *
+ * Apple Remote Decoder
+ * http://en.wikipedia.org/wiki/Apple_Remote
+ *
+ */
+#ifndef APPLEREMOTE_H
+#define APPLEREMOTE_H
+
+class AppleRemote {
+public:
+    /**
+     * Constructor.
+     *
+     * Because "_ir mbed pin" is processed by the interruption(use InterruptIn class),
+     * the thing set excluding p19 and p20 .
+     *
+     * @param _ir mbed pin to use for Apple Remote.
+     */
+    AppleRemote( PinName _ir );
+
+    /**
+     * Reading is started. 
+     *
+     * The interruption of "_ir mbed pin" is effectively done.  
+     */
+    void start();
+
+    /**
+     * Reading is stopped. 
+     *
+     * The interrupt of "_ir mbed pin" is stopped. 
+     */
+    void stop();
+
+    /**
+     * Reading is reset. 
+     *
+     * This resets reading processing it now. 
+     */
+    void reset();
+
+    /**
+     * Determine if there is a key-code available to read
+     *
+     * @return 1 if there is a key-code available to read, else 0
+     */
+    int readable();
+
+    /**
+     * Read a key-code
+     *
+     * key-code does buffering. The size of the buffer is 15. 
+     * The 16 bits of key-code consist of a one byte remote ID , a one byte command.
+     *
+     * @return The key-code read from the Apple Remote.
+     */
+    int getc();
+
+    /**
+     * Setting of repeat
+     *
+     * The repeat code of Apple Remote is not used by default. 
+     * Please call this function when you use the repeat code.  
+     * (The same key code returns while the key is being pushed.)
+     *
+     * @param enable 1 if use the repeat code. else 0
+     */
+    void repeat(int enable);
+
+    enum KEY_CODE {
+        MENU_1ST   = 0x02,
+        PLAY_1ST   = 0x04,
+        RIGHT_1ST  = 0x07,
+        LEFT_1ST   = 0x08,
+        UP_1ST     = 0x0B,
+        DOWN_1ST   = 0x0D,
+        /* --- */
+        CENTER_2ND = 0x5C,
+        MENU_2ND   = 0x03,
+        PLAY_2ND   = 0x5F,
+        RIGHT_2ND  = 0x06,
+        LEFT_2ND   = 0x09,
+        UP_2ND     = 0x0A,
+        DOWN_2ND   = 0x0C,
+    };
+
+private:
+    static const int ID = 0x87EE;
+    static const int bufsize = 0x10;
+
+    enum IR_SCAN_STAT {
+        WAIT_READER,
+        CHK_READER_1ST,
+        CHK_READER_2ND,
+        CHK_CODE_1ST,
+        CHK_CODE_2ND,
+        CHK_STOP_1ST,
+        CHK_STOP_2ND,
+    };
+    InterruptIn IR;
+    int nowStart;
+    Timer IR_Timer;
+    volatile enum IR_SCAN_STAT cjobst;
+    volatile int bit_index;
+    volatile unsigned long IR_code;
+    unsigned long pre_IR_code;
+    volatile int pre_timer;
+    volatile unsigned short buf[bufsize];
+    volatile unsigned char widx;
+    volatile unsigned char ridx;
+    int _repeatEnable;
+    void IR_fall();
+    void IR_rise();
+};
+
+#endif /* APPLEREMOTE_H */