Interplan IM920 library, 920MHz module
Dependents: IM920_sample IM920_SDlog IM920_sample IM920_sample3 ... more
IM920 ライブラリ
データモード、低速、長距離 の設定で通信するライブラリです。
920MHz無線モジュール
- mbedとモジュールとは、シリアル(TX,RX)、BUSY、RESET端子を接続します。
- モジュールはあらかじめ、コマンドでノード番号などを設定しておきます。
IM920_cmd.cpp@0:d3ab05ed8142, 2014-12-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |