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:35:20 2014 +0000
Revision:
0:d3ab05ed8142
Child:
3:db269462ad1c
1st tiny build.;

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 0:d3ab05ed8142 50 clearFlags();
okini3939 0:d3ab05ed8142 51 putUart('T');
okini3939 0:d3ab05ed8142 52 putUart('X');
okini3939 0:d3ab05ed8142 53 putUart('D');
okini3939 0:d3ab05ed8142 54 putUart('A');
okini3939 0:d3ab05ed8142 55 putUart(' ');
okini3939 0:d3ab05ed8142 56 for (i = 0; i < len; i ++) {
okini3939 0:d3ab05ed8142 57 putUart(i2x((data[i]>>4) & 0x0f));
okini3939 0:d3ab05ed8142 58 putUart(i2x(data[i] & 0x0f));
okini3939 0:d3ab05ed8142 59 }
okini3939 0:d3ab05ed8142 60 putUart('\r');
okini3939 0:d3ab05ed8142 61 putUart('\n');
okini3939 0:d3ab05ed8142 62 unlockUart();
okini3939 0:d3ab05ed8142 63 INFO("data: TXDA %d\r\n", len);
okini3939 0:d3ab05ed8142 64
okini3939 0:d3ab05ed8142 65 if (timeout) {
okini3939 0:d3ab05ed8142 66 t.start();
okini3939 0:d3ab05ed8142 67 for (;;) {
okini3939 0:d3ab05ed8142 68 if (_state.ok) break;
okini3939 0:d3ab05ed8142 69 if (_state.failure || t.read_ms() > timeout) {
okini3939 0:d3ab05ed8142 70 WARN("failure or timeout\r\n");
okini3939 0:d3ab05ed8142 71 return -1;
okini3939 0:d3ab05ed8142 72 }
okini3939 0:d3ab05ed8142 73 }
okini3939 0:d3ab05ed8142 74 t.stop();
okini3939 0:d3ab05ed8142 75 }
okini3939 0:d3ab05ed8142 76
okini3939 0:d3ab05ed8142 77 return i;
okini3939 0:d3ab05ed8142 78 }
okini3939 0:d3ab05ed8142 79
okini3939 0:d3ab05ed8142 80 int IM920::cmdENWR () {
okini3939 0:d3ab05ed8142 81 return sendCommand("ENWR");
okini3939 0:d3ab05ed8142 82 }
okini3939 0:d3ab05ed8142 83
okini3939 0:d3ab05ed8142 84 int IM920::cmdDSWR () {
okini3939 0:d3ab05ed8142 85 return sendCommand("DSWR");
okini3939 0:d3ab05ed8142 86 }
okini3939 0:d3ab05ed8142 87
okini3939 0:d3ab05ed8142 88 int IM920::cmdRDID () {
okini3939 0:d3ab05ed8142 89 return sendCommand("RDID", RES_RDID);
okini3939 0:d3ab05ed8142 90 }
okini3939 0:d3ab05ed8142 91
okini3939 0:d3ab05ed8142 92 int IM920::cmdSTNN (int n) {
okini3939 0:d3ab05ed8142 93 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 94 sprintf(cmd, "STNN %02X", n);
okini3939 0:d3ab05ed8142 95 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 96 }
okini3939 0:d3ab05ed8142 97
okini3939 0:d3ab05ed8142 98 int IM920::cmdRDNN () {
okini3939 0:d3ab05ed8142 99 return sendCommand("RDNN", RES_RDNN);
okini3939 0:d3ab05ed8142 100 }
okini3939 0:d3ab05ed8142 101
okini3939 0:d3ab05ed8142 102 int IM920::cmdSRID (int n) {
okini3939 0:d3ab05ed8142 103 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 104 sprintf(cmd, "SRID %04X", n);
okini3939 0:d3ab05ed8142 105 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 106 }
okini3939 0:d3ab05ed8142 107
okini3939 0:d3ab05ed8142 108 int IM920::cmdERID () {
okini3939 0:d3ab05ed8142 109 return sendCommand("ERID");
okini3939 0:d3ab05ed8142 110 }
okini3939 0:d3ab05ed8142 111
okini3939 0:d3ab05ed8142 112 int IM920::cmdSTCH (int n) {
okini3939 0:d3ab05ed8142 113 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 114 sprintf(cmd, "STCH %02d", n);
okini3939 0:d3ab05ed8142 115 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 116 }
okini3939 0:d3ab05ed8142 117
okini3939 0:d3ab05ed8142 118 int IM920::cmdRDRS () {
okini3939 0:d3ab05ed8142 119 return sendCommand("RDRS", RES_RDRS);
okini3939 0:d3ab05ed8142 120 }
okini3939 0:d3ab05ed8142 121
okini3939 0:d3ab05ed8142 122 int IM920::cmdSTPO (int n) {
okini3939 0:d3ab05ed8142 123 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 124 sprintf(cmd, "STPO %d", n);
okini3939 0:d3ab05ed8142 125 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 126 }
okini3939 0:d3ab05ed8142 127
okini3939 0:d3ab05ed8142 128 int IM920::cmdSTRT (int n) {
okini3939 0:d3ab05ed8142 129 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 130 sprintf(cmd, "STRT %d", n);
okini3939 0:d3ab05ed8142 131 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 132 }
okini3939 0:d3ab05ed8142 133
okini3939 0:d3ab05ed8142 134 int IM920::cmdSBRT (int n) {
okini3939 0:d3ab05ed8142 135 char cmd[CFG_CMD_SIZE];
okini3939 0:d3ab05ed8142 136 sprintf(cmd, "SBRT %d", n);
okini3939 0:d3ab05ed8142 137 return sendCommand(cmd);
okini3939 0:d3ab05ed8142 138 }
okini3939 0:d3ab05ed8142 139
okini3939 0:d3ab05ed8142 140 int IM920::cmdDSRX () {
okini3939 0:d3ab05ed8142 141 return sendCommand("DSRX");
okini3939 0:d3ab05ed8142 142 }
okini3939 0:d3ab05ed8142 143
okini3939 0:d3ab05ed8142 144 int IM920::cmdENRX () {
okini3939 0:d3ab05ed8142 145 return sendCommand("ENRX");
okini3939 0:d3ab05ed8142 146 }