Interplan IM920 library, 920MHz module

Dependents:   IM920_sample IM920_SDlog IM920_sample IM920_sample3 ... more

IM920 ライブラリ

データモード、低速、長距離 の設定で通信するライブラリです。

920MHz無線モジュール

http://www.interplan.co.jp/images/contents/solution/im920.png IM920 (インタープラン製)

  • mbedとモジュールとは、シリアル(TX,RX)、BUSY、RESET端子を接続します。
  • モジュールはあらかじめ、コマンドでノード番号などを設定しておきます。

NECの920MHz近距離無線モジュールもおすすめ

Committer:
okini3939
Date:
Fri Dec 26 15:51:37 2014 +0000
Revision:
1:81b2fd407327
Parent:
0:d3ab05ed8142
Child:
2:0b47f6b25cc4
delete debug potion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 1:81b2fd407327 1 /* Copyright (C) 2014 Suga, MIT License
okini3939 1:81b2fd407327 2 *
okini3939 1:81b2fd407327 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
okini3939 1:81b2fd407327 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
okini3939 1:81b2fd407327 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
okini3939 1:81b2fd407327 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
okini3939 1:81b2fd407327 7 * furnished to do so, subject to the following conditions:
okini3939 1:81b2fd407327 8 *
okini3939 1:81b2fd407327 9 * The above copyright notice and this permission notice shall be included in all copies or
okini3939 1:81b2fd407327 10 * substantial portions of the Software.
okini3939 1:81b2fd407327 11 *
okini3939 1:81b2fd407327 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
okini3939 1:81b2fd407327 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
okini3939 1:81b2fd407327 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
okini3939 1:81b2fd407327 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
okini3939 1:81b2fd407327 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
okini3939 1:81b2fd407327 17 */
okini3939 0:d3ab05ed8142 18 #ifndef _IM920_h_
okini3939 0:d3ab05ed8142 19 #define _IM920_h_
okini3939 0:d3ab05ed8142 20
okini3939 0:d3ab05ed8142 21 #include "IM920_conf.h"
okini3939 0:d3ab05ed8142 22
okini3939 0:d3ab05ed8142 23 #include "mbed.h"
okini3939 0:d3ab05ed8142 24 #include "CBuffer.h"
okini3939 0:d3ab05ed8142 25 #include <ctype.h>
okini3939 0:d3ab05ed8142 26 #include <stdlib.h>
okini3939 0:d3ab05ed8142 27 #include <string.h>
okini3939 0:d3ab05ed8142 28
okini3939 0:d3ab05ed8142 29 //Debug is disabled by default
okini3939 0:d3ab05ed8142 30 #if defined(DEBUG) and (!defined(TARGET_LPC11U24))
okini3939 0:d3ab05ed8142 31 #define DBG(x, ...) std::printf("[DBG]" x "\r\n", ##__VA_ARGS__);
okini3939 0:d3ab05ed8142 32 #define WARN(x, ...) std::printf("[WARN]" x "\r\n", ##__VA_ARGS__);
okini3939 0:d3ab05ed8142 33 #define ERR(x, ...) std::printf("[ERR]" x "\r\n", ##__VA_ARGS__);
okini3939 0:d3ab05ed8142 34 #define INFO(x, ...) std::printf("[INFO]" x "\r\n", ##__VA_ARGS__);
okini3939 0:d3ab05ed8142 35 #else
okini3939 0:d3ab05ed8142 36 #define DBG(x, ...)
okini3939 0:d3ab05ed8142 37 #define WARN(x, ...)
okini3939 0:d3ab05ed8142 38 #define ERR(x, ...)
okini3939 0:d3ab05ed8142 39 #define INFO(x, ...)
okini3939 0:d3ab05ed8142 40 #endif
okini3939 0:d3ab05ed8142 41
okini3939 0:d3ab05ed8142 42 class IM920 {
okini3939 0:d3ab05ed8142 43 public:
okini3939 0:d3ab05ed8142 44 enum Response {
okini3939 0:d3ab05ed8142 45 RES_NULL,
okini3939 0:d3ab05ed8142 46 RES_RDID,
okini3939 0:d3ab05ed8142 47 RES_RDNN,
okini3939 0:d3ab05ed8142 48 RES_RDRS,
okini3939 0:d3ab05ed8142 49 };
okini3939 0:d3ab05ed8142 50
okini3939 0:d3ab05ed8142 51 enum Mode {
okini3939 0:d3ab05ed8142 52 MODE_COMMAND,
okini3939 0:d3ab05ed8142 53 MODE_DATA_RX,
okini3939 0:d3ab05ed8142 54 };
okini3939 0:d3ab05ed8142 55
okini3939 0:d3ab05ed8142 56 enum Status {
okini3939 0:d3ab05ed8142 57 STAT_NONE,
okini3939 0:d3ab05ed8142 58 STAT_SLEEP,
okini3939 0:d3ab05ed8142 59 };
okini3939 0:d3ab05ed8142 60
okini3939 0:d3ab05ed8142 61 IM920 (PinName tx, PinName rx, PinName busy = NC, PinName reset = NC, int baud = IM920_BAUD);
okini3939 0:d3ab05ed8142 62
okini3939 0:d3ab05ed8142 63 int init (int node, void(*func)() = NULL);
okini3939 0:d3ab05ed8142 64
okini3939 0:d3ab05ed8142 65 void poll ();
okini3939 0:d3ab05ed8142 66
okini3939 0:d3ab05ed8142 67 int send (char *buf, int len);
okini3939 0:d3ab05ed8142 68 int recv (char *buf, int len);
okini3939 0:d3ab05ed8142 69
okini3939 0:d3ab05ed8142 70 int setCh (int ch);
okini3939 0:d3ab05ed8142 71 int getRssi ();
okini3939 0:d3ab05ed8142 72 int sleep ();
okini3939 0:d3ab05ed8142 73 int wakeup ();
okini3939 0:d3ab05ed8142 74
okini3939 1:81b2fd407327 75 // ----- IM920_cmd.cpp -----
okini3939 0:d3ab05ed8142 76 int sendCommand(const char * cmd, Response res = RES_NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
okini3939 0:d3ab05ed8142 77 int sendData(const char * data, int len, int timeout = CFG_TIMEOUT);
okini3939 0:d3ab05ed8142 78
okini3939 0:d3ab05ed8142 79 private:
okini3939 0:d3ab05ed8142 80 RawSerial _im;
okini3939 0:d3ab05ed8142 81 DigitalIn *_busy;
okini3939 0:d3ab05ed8142 82 DigitalOut *_reset;
okini3939 0:d3ab05ed8142 83 int _baud;
okini3939 0:d3ab05ed8142 84
okini3939 0:d3ab05ed8142 85 struct STATE {
okini3939 0:d3ab05ed8142 86 int id, node, rssi;
okini3939 0:d3ab05ed8142 87
okini3939 0:d3ab05ed8142 88 time_t time;
okini3939 0:d3ab05ed8142 89 bool initialized;
okini3939 0:d3ab05ed8142 90 volatile Mode mode;
okini3939 0:d3ab05ed8142 91 volatile Status status;
okini3939 0:d3ab05ed8142 92 volatile bool ok, failure;
okini3939 0:d3ab05ed8142 93 volatile Response res;
okini3939 0:d3ab05ed8142 94 int n;
okini3939 0:d3ab05ed8142 95 char buf[CFG_BUF_SIZE];
okini3939 0:d3ab05ed8142 96
okini3939 0:d3ab05ed8142 97 CircBuffer<char> *data;
okini3939 0:d3ab05ed8142 98 volatile bool received;
okini3939 0:d3ab05ed8142 99 void(*func)();
okini3939 0:d3ab05ed8142 100 } _state;
okini3939 0:d3ab05ed8142 101
okini3939 1:81b2fd407327 102 // ----- IM920_util.cpp -----
okini3939 0:d3ab05ed8142 103 int x2i (char c);
okini3939 0:d3ab05ed8142 104 char i2x (int i);
okini3939 0:d3ab05ed8142 105
okini3939 1:81b2fd407327 106 // ----- IM920_msg.cpp -----
okini3939 0:d3ab05ed8142 107 void recvData (char c);
okini3939 0:d3ab05ed8142 108 int parseMessage ();
okini3939 0:d3ab05ed8142 109 void msgOk (const char*);
okini3939 0:d3ab05ed8142 110 void msgError (const char*);
okini3939 0:d3ab05ed8142 111 void msgConnect (const char*);
okini3939 0:d3ab05ed8142 112 void resRDID (const char *buf);
okini3939 0:d3ab05ed8142 113 void resRDNN (const char *buf);
okini3939 0:d3ab05ed8142 114 void resRDRS (const char *buf);
okini3939 0:d3ab05ed8142 115
okini3939 1:81b2fd407327 116 // ----- IM920_cmd.cpp -----
okini3939 0:d3ab05ed8142 117 void clearFlags ();
okini3939 0:d3ab05ed8142 118 int cmdENWR ();
okini3939 0:d3ab05ed8142 119 int cmdDSWR ();
okini3939 0:d3ab05ed8142 120 int cmdRDID ();
okini3939 0:d3ab05ed8142 121 int cmdSTNN (int n);
okini3939 0:d3ab05ed8142 122 int cmdRDNN ();
okini3939 0:d3ab05ed8142 123 int cmdSRID (int n);
okini3939 0:d3ab05ed8142 124 int cmdERID ();
okini3939 0:d3ab05ed8142 125 int cmdSTCH (int n);
okini3939 0:d3ab05ed8142 126 int cmdRDRS ();
okini3939 0:d3ab05ed8142 127 int cmdSTPO (int n);
okini3939 0:d3ab05ed8142 128 int cmdSTRT (int n);
okini3939 0:d3ab05ed8142 129 int cmdSBRT (int n);
okini3939 0:d3ab05ed8142 130 int cmdDSRX ();
okini3939 0:d3ab05ed8142 131 int cmdENRX ();
okini3939 0:d3ab05ed8142 132
okini3939 1:81b2fd407327 133 // ----- IM920_hal.cpp -----
okini3939 0:d3ab05ed8142 134 void setReset (bool flg);
okini3939 0:d3ab05ed8142 135 void isrUart ();
okini3939 0:d3ab05ed8142 136 int getUart ();
okini3939 0:d3ab05ed8142 137 void putUart (char c);
okini3939 0:d3ab05ed8142 138 int lockUart (int ms);
okini3939 0:d3ab05ed8142 139 void unlockUart ();
okini3939 0:d3ab05ed8142 140 void initUart (PinName busy, PinName reset, int baud);
okini3939 0:d3ab05ed8142 141 };
okini3939 0:d3ab05ed8142 142
okini3939 0:d3ab05ed8142 143 #endif