IRC Helicopter "HonyBee" Propo decode test program

Dependencies:   RemoteIR mbed

これは、赤外線コントロールヘリコプター"HonyBee"のPropoからの送信データを解析して、PCに表示させるテストプログラムです。 詳しくは、 http://suupen-make.blogspot.jp/2013/06/irc-helicopter-honybeembedtest-program.html を参照してください。

Committer:
suupen
Date:
Sun Jun 23 07:28:06 2013 +0000
Revision:
0:f9e49220c97a
IRC Helicopter "HonyBee" Propo decode test program

Who changed what in which revision?

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