forked RemoteIR

Fork of RemoteIR by Shinichiro Nakamura

Committer:
misodengaku
Date:
Sat Mar 17 14:42:15 2018 +0000
Revision:
12:d86179332137
Parent:
11:268cc2ab63bd
support level inversion

Who changed what in which revision?

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