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:
idealtechlab
Date:
Fri Apr 24 03:59:13 2015 +0000
Revision:
5:2fd9b1725283
Parent:
4:ba939555ed35
fix buffer over run

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:d3ab05ed8142 1 #include "IM920.h"
okini3939 0:d3ab05ed8142 2
okini3939 0:d3ab05ed8142 3 void IM920::clearFlags () {
okini3939 0:d3ab05ed8142 4 _state.ok = false;
okini3939 0:d3ab05ed8142 5 _state.failure = false;
okini3939 0:d3ab05ed8142 6 _state.res = RES_NULL;
okini3939 0:d3ab05ed8142 7 _state.n = 0;
okini3939 0:d3ab05ed8142 8 }
okini3939 0:d3ab05ed8142 9
okini3939 0:d3ab05ed8142 10 int IM920::sendCommand (const char * cmd, Response res, int timeout) {
okini3939 0:d3ab05ed8142 11 int i;
okini3939 0:d3ab05ed8142 12 Timer t;
okini3939 0:d3ab05ed8142 13
okini3939 0:d3ab05ed8142 14 if (lockUart(timeout)) return -1;
okini3939 0:d3ab05ed8142 15
okini3939 0:d3ab05ed8142 16 clearFlags();
okini3939 0:d3ab05ed8142 17 _state.res = res;
okini3939 0:d3ab05ed8142 18 for (i = 0; i < strlen(cmd); i ++) {
okini3939 0:d3ab05ed8142 19 putUart(cmd[i]);
okini3939 0:d3ab05ed8142 20 }
okini3939 0:d3ab05ed8142 21 putUart('\r');
okini3939 0:d3ab05ed8142 22 putUart('\n');
okini3939 0:d3ab05ed8142 23 unlockUart();
okini3939 0:d3ab05ed8142 24 INFO("command: '%s'\r\n", cmd);
okini3939 0:d3ab05ed8142 25
okini3939 0:d3ab05ed8142 26 if (timeout) {
okini3939 0:d3ab05ed8142 27 t.start();
okini3939 0:d3ab05ed8142 28 for (;;) {
okini3939 0:d3ab05ed8142 29 if (_state.ok && _state.res == RES_NULL) break;
okini3939 0:d3ab05ed8142 30 if (_state.failure || t.read_ms() > timeout) {
okini3939 0:d3ab05ed8142 31 WARN("failure or timeout\r\n");
okini3939 0:d3ab05ed8142 32 _state.res = RES_NULL;
okini3939 0:d3ab05ed8142 33 return -1;
okini3939 0:d3ab05ed8142 34 }
okini3939 0:d3ab05ed8142 35 }
okini3939 0:d3ab05ed8142 36 t.stop();
okini3939 0:d3ab05ed8142 37 }
okini3939 0:d3ab05ed8142 38 INFO("ok\r\n");
okini3939 0:d3ab05ed8142 39 _state.res = RES_NULL;
okini3939 0:d3ab05ed8142 40
okini3939 0:d3ab05ed8142 41 return 0;
okini3939 0:d3ab05ed8142 42 }
okini3939 0:d3ab05ed8142 43
okini3939 0:d3ab05ed8142 44 int IM920::sendData(const char * data, int len, int timeout) {
okini3939 0:d3ab05ed8142 45 int i;
okini3939 0:d3ab05ed8142 46 Timer t;
okini3939 0:d3ab05ed8142 47
okini3939 0:d3ab05ed8142 48 if (lockUart(timeout)) return -1;
okini3939 0:d3ab05ed8142 49
okini3939 3:db269462ad1c 50 if (len > 64) len = 64;
okini3939 0:d3ab05ed8142 51 clearFlags();
okini3939 0:d3ab05ed8142 52 putUart('T');
okini3939 0:d3ab05ed8142 53 putUart('X');
okini3939 0:d3ab05ed8142 54 putUart('D');
okini3939 0:d3ab05ed8142 55 putUart('A');
okini3939 0:d3ab05ed8142 56 putUart(' ');
okini3939 0:d3ab05ed8142 57 for (i = 0; i < len; i ++) {
okini3939 0:d3ab05ed8142 58 putUart(i2x((data[i]>>4) & 0x0f));
okini3939 0:d3ab05ed8142 59 putUart(i2x(data[i] & 0x0f));
okini3939 0:d3ab05ed8142 60 }
okini3939 0:d3ab05ed8142 61 putUart('\r');
okini3939 0:d3ab05ed8142 62 putUart('\n');
okini3939 0:d3ab05ed8142 63 unlockUart();
okini3939 0:d3ab05ed8142 64 INFO("data: TXDA %d\r\n", len);
okini3939 0:d3ab05ed8142 65
okini3939 0:d3ab05ed8142 66 if (timeout) {
okini3939 0:d3ab05ed8142 67 t.start();
okini3939 0:d3ab05ed8142 68 for (;;) {
okini3939 0:d3ab05ed8142 69 if (_state.ok) break;
okini3939 0:d3ab05ed8142 70 if (_state.failure || t.read_ms() > timeout) {
okini3939 0:d3ab05ed8142 71 WARN("failure or timeout\r\n");
okini3939 0:d3ab05ed8142 72 return -1;
okini3939 0:d3ab05ed8142 73 }
okini3939 0:d3ab05ed8142 74 }
okini3939 0:d3ab05ed8142 75 t.stop();
okini3939 0:d3ab05ed8142 76 }
okini3939 0:d3ab05ed8142 77
okini3939 0:d3ab05ed8142 78 return i;
okini3939 0:d3ab05ed8142 79 }
okini3939 0:d3ab05ed8142 80
okini3939 0:d3ab05ed8142 81 int IM920::cmdENWR () {
okini3939 0:d3ab05ed8142 82 return sendCommand("ENWR");
okini3939 0:d3ab05ed8142 83 }
okini3939 0:d3ab05ed8142 84
okini3939 0:d3ab05ed8142 85 int IM920::cmdDSWR () {
okini3939 0:d3ab05ed8142 86 return sendCommand("DSWR");
okini3939 0:d3ab05ed8142 87 }
okini3939 0:d3ab05ed8142 88
okini3939 0:d3ab05ed8142 89 int IM920::cmdRDID () {
okini3939 0:d3ab05ed8142 90 return sendCommand("RDID", RES_RDID);
okini3939 0:d3ab05ed8142 91 }
okini3939 0:d3ab05ed8142 92
okini3939 0:d3ab05ed8142 93 int IM920::cmdSTNN (int n) {
okini3939 0:d3ab05ed8142 94 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 95 sprintf(cmd, "STNN %02X", n);
okini3939 0:d3ab05ed8142 96 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 97 }
okini3939 0:d3ab05ed8142 98
okini3939 0:d3ab05ed8142 99 int IM920::cmdRDNN () {
okini3939 0:d3ab05ed8142 100 return sendCommand("RDNN", RES_RDNN);
okini3939 0:d3ab05ed8142 101 }
okini3939 0:d3ab05ed8142 102
okini3939 0:d3ab05ed8142 103 int IM920::cmdSRID (int n) {
okini3939 0:d3ab05ed8142 104 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 105 sprintf(cmd, "SRID %04X", n);
okini3939 0:d3ab05ed8142 106 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 107 }
okini3939 0:d3ab05ed8142 108
okini3939 0:d3ab05ed8142 109 int IM920::cmdERID () {
okini3939 0:d3ab05ed8142 110 return sendCommand("ERID");
okini3939 0:d3ab05ed8142 111 }
okini3939 0:d3ab05ed8142 112
okini3939 0:d3ab05ed8142 113 int IM920::cmdSTCH (int n) {
okini3939 0:d3ab05ed8142 114 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 115 sprintf(cmd, "STCH %02d", n);
okini3939 0:d3ab05ed8142 116 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 117 }
okini3939 0:d3ab05ed8142 118
okini3939 0:d3ab05ed8142 119 int IM920::cmdRDRS () {
okini3939 0:d3ab05ed8142 120 return sendCommand("RDRS", RES_RDRS);
okini3939 0:d3ab05ed8142 121 }
okini3939 0:d3ab05ed8142 122
okini3939 0:d3ab05ed8142 123 int IM920::cmdSTPO (int n) {
okini3939 0:d3ab05ed8142 124 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 125 sprintf(cmd, "STPO %d", n);
okini3939 0:d3ab05ed8142 126 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 127 }
okini3939 0:d3ab05ed8142 128
okini3939 0:d3ab05ed8142 129 int IM920::cmdSTRT (int n) {
okini3939 0:d3ab05ed8142 130 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 131 sprintf(cmd, "STRT %d", n);
okini3939 0:d3ab05ed8142 132 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 133 }
okini3939 0:d3ab05ed8142 134
okini3939 0:d3ab05ed8142 135 int IM920::cmdSBRT (int n) {
okini3939 0:d3ab05ed8142 136 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 137 sprintf(cmd, "SBRT %d", n);
okini3939 0:d3ab05ed8142 138 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 139 }
okini3939 0:d3ab05ed8142 140
okini3939 0:d3ab05ed8142 141 int IM920::cmdDSRX () {
okini3939 0:d3ab05ed8142 142 return sendCommand("DSRX");
okini3939 0:d3ab05ed8142 143 }
okini3939 0:d3ab05ed8142 144
okini3939 0:d3ab05ed8142 145 int IM920::cmdENRX () {
okini3939 0:d3ab05ed8142 146 return sendCommand("ENRX");
okini3939 0:d3ab05ed8142 147 }
idealtechlab 4:ba939555ed35 148
idealtechlab 4:ba939555ed35 149 int IM920::cmdEGRX () {
idealtechlab 4:ba939555ed35 150 return sendCommand("EGRX");
idealtechlab 4:ba939555ed35 151 }