IR remote receiver

Dependents:   experience

Committer:
Wimpie
Date:
Sun Apr 17 17:51:34 2011 +0000
Revision:
0:62d8d73b3c38
Remote IR library with IR codes from Sony

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wimpie 0:62d8d73b3c38 1 /**
Wimpie 0:62d8d73b3c38 2 * IR receiver (Version 0.0.4)
Wimpie 0:62d8d73b3c38 3 *
Wimpie 0:62d8d73b3c38 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
Wimpie 0:62d8d73b3c38 5 * http://shinta.main.jp/
Wimpie 0:62d8d73b3c38 6 */
Wimpie 0:62d8d73b3c38 7
Wimpie 0:62d8d73b3c38 8 #ifndef _RECEIVER_IR_H_
Wimpie 0:62d8d73b3c38 9 #define _RECEIVER_IR_H_
Wimpie 0:62d8d73b3c38 10
Wimpie 0:62d8d73b3c38 11 #include <mbed.h>
Wimpie 0:62d8d73b3c38 12
Wimpie 0:62d8d73b3c38 13 #include "RemoteIR.h"
Wimpie 0:62d8d73b3c38 14
Wimpie 0:62d8d73b3c38 15 /**
Wimpie 0:62d8d73b3c38 16 * IR receiver class.
Wimpie 0:62d8d73b3c38 17 */
Wimpie 0:62d8d73b3c38 18 class ReceiverIR {
Wimpie 0:62d8d73b3c38 19 public:
Wimpie 0:62d8d73b3c38 20
Wimpie 0:62d8d73b3c38 21 /**
Wimpie 0:62d8d73b3c38 22 * Constructor.
Wimpie 0:62d8d73b3c38 23 *
Wimpie 0:62d8d73b3c38 24 * @param rxpin Pin for receive IR signal.
Wimpie 0:62d8d73b3c38 25 */
Wimpie 0:62d8d73b3c38 26 explicit ReceiverIR(PinName rxpin);
Wimpie 0:62d8d73b3c38 27
Wimpie 0:62d8d73b3c38 28 /**
Wimpie 0:62d8d73b3c38 29 * Destructor.
Wimpie 0:62d8d73b3c38 30 */
Wimpie 0:62d8d73b3c38 31 ~ReceiverIR();
Wimpie 0:62d8d73b3c38 32
Wimpie 0:62d8d73b3c38 33 /**
Wimpie 0:62d8d73b3c38 34 * State.
Wimpie 0:62d8d73b3c38 35 */
Wimpie 0:62d8d73b3c38 36 typedef enum {
Wimpie 0:62d8d73b3c38 37 Idle,
Wimpie 0:62d8d73b3c38 38 Receiving,
Wimpie 0:62d8d73b3c38 39 Received
Wimpie 0:62d8d73b3c38 40 } State;
Wimpie 0:62d8d73b3c38 41
Wimpie 0:62d8d73b3c38 42 /**
Wimpie 0:62d8d73b3c38 43 * Get state.
Wimpie 0:62d8d73b3c38 44 *
Wimpie 0:62d8d73b3c38 45 * @return Current state.
Wimpie 0:62d8d73b3c38 46 */
Wimpie 0:62d8d73b3c38 47 State getState();
Wimpie 0:62d8d73b3c38 48
Wimpie 0:62d8d73b3c38 49 /**
Wimpie 0:62d8d73b3c38 50 * Get data.
Wimpie 0:62d8d73b3c38 51 *
Wimpie 0:62d8d73b3c38 52 * @param format Pointer to format.
Wimpie 0:62d8d73b3c38 53 * @param buf Buffer of a data.
Wimpie 0:62d8d73b3c38 54 * @param bitlength Bit length of the buffer.
Wimpie 0:62d8d73b3c38 55 *
Wimpie 0:62d8d73b3c38 56 * @return Data bit length.
Wimpie 0:62d8d73b3c38 57 */
Wimpie 0:62d8d73b3c38 58 int getData(RemoteIR::Format *format, uint8_t *buf, int bitlength);
Wimpie 0:62d8d73b3c38 59
Wimpie 0:62d8d73b3c38 60 private:
Wimpie 0:62d8d73b3c38 61
Wimpie 0:62d8d73b3c38 62 typedef struct {
Wimpie 0:62d8d73b3c38 63 RemoteIR::Format format;
Wimpie 0:62d8d73b3c38 64 int bitcount;
Wimpie 0:62d8d73b3c38 65 uint8_t buffer[64];
Wimpie 0:62d8d73b3c38 66 } data_t;
Wimpie 0:62d8d73b3c38 67
Wimpie 0:62d8d73b3c38 68 typedef struct {
Wimpie 0:62d8d73b3c38 69 State state;
Wimpie 0:62d8d73b3c38 70 int c1;
Wimpie 0:62d8d73b3c38 71 int c2;
Wimpie 0:62d8d73b3c38 72 int c3;
Wimpie 0:62d8d73b3c38 73 int d1;
Wimpie 0:62d8d73b3c38 74 int d2;
Wimpie 0:62d8d73b3c38 75 } work_t;
Wimpie 0:62d8d73b3c38 76
Wimpie 0:62d8d73b3c38 77 InterruptIn evt; /**< Interrupt based input for input. */
Wimpie 0:62d8d73b3c38 78 Timer timer; /**< Timer for WDT. */
Wimpie 0:62d8d73b3c38 79 Ticker ticker; /**< Tciker for tick. */
Wimpie 0:62d8d73b3c38 80 Timeout timeout; /**< Timeout for tail. */
Wimpie 0:62d8d73b3c38 81
Wimpie 0:62d8d73b3c38 82 data_t data;
Wimpie 0:62d8d73b3c38 83 work_t work;
Wimpie 0:62d8d73b3c38 84
Wimpie 0:62d8d73b3c38 85 void init_state(void);
Wimpie 0:62d8d73b3c38 86
Wimpie 0:62d8d73b3c38 87 void isr_wdt(void);
Wimpie 0:62d8d73b3c38 88 void isr_fall(void);
Wimpie 0:62d8d73b3c38 89 void isr_rise(void);
Wimpie 0:62d8d73b3c38 90
Wimpie 0:62d8d73b3c38 91 /**
Wimpie 0:62d8d73b3c38 92 * ISR timeout for tail detection.
Wimpie 0:62d8d73b3c38 93 */
Wimpie 0:62d8d73b3c38 94 void isr_timeout(void);
Wimpie 0:62d8d73b3c38 95
Wimpie 0:62d8d73b3c38 96 };
Wimpie 0:62d8d73b3c38 97
Wimpie 0:62d8d73b3c38 98 #endif