東北大学学友会準加盟団体 From The Earth の高高度ロケットFTE-06(通称:海豚)にて使用したソフトウェアです.ご自由にお使いください.このプログラムによって生じた損害について当団体は一切責任を負いません.また,各モジュールのライブラリは当団体が作成したものではないので再配布は禁止します.
Dependencies: mbed FATFileSystem
Fork of FTE-06 by
IM920/IM920_cmd.cpp@23:9be034083282, 2017-08-14 (annotated)
- Committer:
- mizuki_akaike
- Date:
- Mon Aug 14 04:56:52 2017 +0000
- Revision:
- 23:9be034083282
?????????????;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mizuki_akaike | 23:9be034083282 | 1 | #include "IM920.h" |
mizuki_akaike | 23:9be034083282 | 2 | |
mizuki_akaike | 23:9be034083282 | 3 | void IM920::clearFlags () { |
mizuki_akaike | 23:9be034083282 | 4 | _state.ok = false; |
mizuki_akaike | 23:9be034083282 | 5 | _state.failure = false; |
mizuki_akaike | 23:9be034083282 | 6 | _state.res = RES_NULL; |
mizuki_akaike | 23:9be034083282 | 7 | _state.n = 0; |
mizuki_akaike | 23:9be034083282 | 8 | } |
mizuki_akaike | 23:9be034083282 | 9 | |
mizuki_akaike | 23:9be034083282 | 10 | int IM920::sendCommand (const char * cmd, Response res, int timeout) { |
mizuki_akaike | 23:9be034083282 | 11 | int i; |
mizuki_akaike | 23:9be034083282 | 12 | Timer t; |
mizuki_akaike | 23:9be034083282 | 13 | |
mizuki_akaike | 23:9be034083282 | 14 | if (lockUart(timeout)) return -1; |
mizuki_akaike | 23:9be034083282 | 15 | |
mizuki_akaike | 23:9be034083282 | 16 | clearFlags(); |
mizuki_akaike | 23:9be034083282 | 17 | _state.res = res; |
mizuki_akaike | 23:9be034083282 | 18 | for (i = 0; i < strlen(cmd); i ++) { |
mizuki_akaike | 23:9be034083282 | 19 | putUart(cmd[i]); |
mizuki_akaike | 23:9be034083282 | 20 | } |
mizuki_akaike | 23:9be034083282 | 21 | putUart('\r'); |
mizuki_akaike | 23:9be034083282 | 22 | putUart('\n'); |
mizuki_akaike | 23:9be034083282 | 23 | unlockUart(); |
mizuki_akaike | 23:9be034083282 | 24 | INFO("command: '%s'\r\n", cmd); |
mizuki_akaike | 23:9be034083282 | 25 | |
mizuki_akaike | 23:9be034083282 | 26 | if (timeout) { |
mizuki_akaike | 23:9be034083282 | 27 | t.start(); |
mizuki_akaike | 23:9be034083282 | 28 | for (;;) { |
mizuki_akaike | 23:9be034083282 | 29 | if (_state.ok && _state.res == RES_NULL) break; |
mizuki_akaike | 23:9be034083282 | 30 | if (_state.failure || t.read_ms() > timeout) { |
mizuki_akaike | 23:9be034083282 | 31 | WARN("failure or timeout\r\n"); |
mizuki_akaike | 23:9be034083282 | 32 | _state.res = RES_NULL; |
mizuki_akaike | 23:9be034083282 | 33 | return -1; |
mizuki_akaike | 23:9be034083282 | 34 | } |
mizuki_akaike | 23:9be034083282 | 35 | } |
mizuki_akaike | 23:9be034083282 | 36 | t.stop(); |
mizuki_akaike | 23:9be034083282 | 37 | } |
mizuki_akaike | 23:9be034083282 | 38 | INFO("ok\r\n"); |
mizuki_akaike | 23:9be034083282 | 39 | _state.res = RES_NULL; |
mizuki_akaike | 23:9be034083282 | 40 | |
mizuki_akaike | 23:9be034083282 | 41 | return 0; |
mizuki_akaike | 23:9be034083282 | 42 | } |
mizuki_akaike | 23:9be034083282 | 43 | |
mizuki_akaike | 23:9be034083282 | 44 | int IM920::sendData(const char * data, int len, int timeout) { |
mizuki_akaike | 23:9be034083282 | 45 | int i; |
mizuki_akaike | 23:9be034083282 | 46 | Timer t; |
mizuki_akaike | 23:9be034083282 | 47 | |
mizuki_akaike | 23:9be034083282 | 48 | if (lockUart(timeout)) return -1; |
mizuki_akaike | 23:9be034083282 | 49 | |
mizuki_akaike | 23:9be034083282 | 50 | if (len > 64) len = 64; |
mizuki_akaike | 23:9be034083282 | 51 | clearFlags(); |
mizuki_akaike | 23:9be034083282 | 52 | putUart('T'); |
mizuki_akaike | 23:9be034083282 | 53 | putUart('X'); |
mizuki_akaike | 23:9be034083282 | 54 | putUart('D'); |
mizuki_akaike | 23:9be034083282 | 55 | putUart('A'); |
mizuki_akaike | 23:9be034083282 | 56 | putUart(' '); |
mizuki_akaike | 23:9be034083282 | 57 | for (i = 0; i < len; i ++) { |
mizuki_akaike | 23:9be034083282 | 58 | putUart(i2x((data[i]>>4) & 0x0f)); |
mizuki_akaike | 23:9be034083282 | 59 | putUart(i2x(data[i] & 0x0f)); |
mizuki_akaike | 23:9be034083282 | 60 | } |
mizuki_akaike | 23:9be034083282 | 61 | putUart('\r'); |
mizuki_akaike | 23:9be034083282 | 62 | putUart('\n'); |
mizuki_akaike | 23:9be034083282 | 63 | unlockUart(); |
mizuki_akaike | 23:9be034083282 | 64 | INFO("data: TXDA %d\r\n", len); |
mizuki_akaike | 23:9be034083282 | 65 | |
mizuki_akaike | 23:9be034083282 | 66 | if (timeout) { |
mizuki_akaike | 23:9be034083282 | 67 | t.start(); |
mizuki_akaike | 23:9be034083282 | 68 | for (;;) { |
mizuki_akaike | 23:9be034083282 | 69 | if (_state.ok) break; |
mizuki_akaike | 23:9be034083282 | 70 | if (_state.failure || t.read_ms() > timeout) { |
mizuki_akaike | 23:9be034083282 | 71 | WARN("failure or timeout\r\n"); |
mizuki_akaike | 23:9be034083282 | 72 | return -1; |
mizuki_akaike | 23:9be034083282 | 73 | } |
mizuki_akaike | 23:9be034083282 | 74 | } |
mizuki_akaike | 23:9be034083282 | 75 | t.stop(); |
mizuki_akaike | 23:9be034083282 | 76 | } |
mizuki_akaike | 23:9be034083282 | 77 | |
mizuki_akaike | 23:9be034083282 | 78 | return i; |
mizuki_akaike | 23:9be034083282 | 79 | } |
mizuki_akaike | 23:9be034083282 | 80 | |
mizuki_akaike | 23:9be034083282 | 81 | int IM920::cmdENWR () { |
mizuki_akaike | 23:9be034083282 | 82 | return sendCommand("ENWR"); |
mizuki_akaike | 23:9be034083282 | 83 | } |
mizuki_akaike | 23:9be034083282 | 84 | |
mizuki_akaike | 23:9be034083282 | 85 | int IM920::cmdDSWR () { |
mizuki_akaike | 23:9be034083282 | 86 | return sendCommand("DSWR"); |
mizuki_akaike | 23:9be034083282 | 87 | } |
mizuki_akaike | 23:9be034083282 | 88 | |
mizuki_akaike | 23:9be034083282 | 89 | int IM920::cmdRDID () { |
mizuki_akaike | 23:9be034083282 | 90 | return sendCommand("RDID", RES_RDID); |
mizuki_akaike | 23:9be034083282 | 91 | } |
mizuki_akaike | 23:9be034083282 | 92 | |
mizuki_akaike | 23:9be034083282 | 93 | int IM920::cmdSTNN (int n) { |
mizuki_akaike | 23:9be034083282 | 94 | char cmd[CFG_CMD_SIZE]; |
mizuki_akaike | 23:9be034083282 | 95 | sprintf(cmd, "STNN %02X", n); |
mizuki_akaike | 23:9be034083282 | 96 | return sendCommand(cmd); |
mizuki_akaike | 23:9be034083282 | 97 | } |
mizuki_akaike | 23:9be034083282 | 98 | |
mizuki_akaike | 23:9be034083282 | 99 | int IM920::cmdRDNN () { |
mizuki_akaike | 23:9be034083282 | 100 | return sendCommand("RDNN", RES_RDNN); |
mizuki_akaike | 23:9be034083282 | 101 | } |
mizuki_akaike | 23:9be034083282 | 102 | |
mizuki_akaike | 23:9be034083282 | 103 | int IM920::cmdSRID (int n) { |
mizuki_akaike | 23:9be034083282 | 104 | char cmd[CFG_CMD_SIZE]; |
mizuki_akaike | 23:9be034083282 | 105 | sprintf(cmd, "SRID %04X", n); |
mizuki_akaike | 23:9be034083282 | 106 | return sendCommand(cmd); |
mizuki_akaike | 23:9be034083282 | 107 | } |
mizuki_akaike | 23:9be034083282 | 108 | |
mizuki_akaike | 23:9be034083282 | 109 | int IM920::cmdERID () { |
mizuki_akaike | 23:9be034083282 | 110 | return sendCommand("ERID"); |
mizuki_akaike | 23:9be034083282 | 111 | } |
mizuki_akaike | 23:9be034083282 | 112 | |
mizuki_akaike | 23:9be034083282 | 113 | int IM920::cmdSTCH (int n) { |
mizuki_akaike | 23:9be034083282 | 114 | char cmd[CFG_CMD_SIZE]; |
mizuki_akaike | 23:9be034083282 | 115 | sprintf(cmd, "STCH %02d", n); |
mizuki_akaike | 23:9be034083282 | 116 | return sendCommand(cmd); |
mizuki_akaike | 23:9be034083282 | 117 | } |
mizuki_akaike | 23:9be034083282 | 118 | |
mizuki_akaike | 23:9be034083282 | 119 | int IM920::cmdRDRS () { |
mizuki_akaike | 23:9be034083282 | 120 | return sendCommand("RDRS", RES_RDRS); |
mizuki_akaike | 23:9be034083282 | 121 | } |
mizuki_akaike | 23:9be034083282 | 122 | |
mizuki_akaike | 23:9be034083282 | 123 | int IM920::cmdSTPO (int n) { |
mizuki_akaike | 23:9be034083282 | 124 | char cmd[CFG_CMD_SIZE]; |
mizuki_akaike | 23:9be034083282 | 125 | sprintf(cmd, "STPO %d", n); |
mizuki_akaike | 23:9be034083282 | 126 | return sendCommand(cmd); |
mizuki_akaike | 23:9be034083282 | 127 | } |
mizuki_akaike | 23:9be034083282 | 128 | |
mizuki_akaike | 23:9be034083282 | 129 | int IM920::cmdSTRT (int n) { |
mizuki_akaike | 23:9be034083282 | 130 | char cmd[CFG_CMD_SIZE]; |
mizuki_akaike | 23:9be034083282 | 131 | sprintf(cmd, "STRT %d", n); |
mizuki_akaike | 23:9be034083282 | 132 | return sendCommand(cmd); |
mizuki_akaike | 23:9be034083282 | 133 | } |
mizuki_akaike | 23:9be034083282 | 134 | |
mizuki_akaike | 23:9be034083282 | 135 | int IM920::cmdSBRT (int n) { |
mizuki_akaike | 23:9be034083282 | 136 | char cmd[CFG_CMD_SIZE]; |
mizuki_akaike | 23:9be034083282 | 137 | sprintf(cmd, "SBRT %d", n); |
mizuki_akaike | 23:9be034083282 | 138 | return sendCommand(cmd); |
mizuki_akaike | 23:9be034083282 | 139 | } |
mizuki_akaike | 23:9be034083282 | 140 | |
mizuki_akaike | 23:9be034083282 | 141 | int IM920::cmdDSRX () { |
mizuki_akaike | 23:9be034083282 | 142 | return sendCommand("DSRX"); |
mizuki_akaike | 23:9be034083282 | 143 | } |
mizuki_akaike | 23:9be034083282 | 144 | |
mizuki_akaike | 23:9be034083282 | 145 | int IM920::cmdENRX () { |
mizuki_akaike | 23:9be034083282 | 146 | return sendCommand("ENRX"); |
mizuki_akaike | 23:9be034083282 | 147 | } |
mizuki_akaike | 23:9be034083282 | 148 | |
mizuki_akaike | 23:9be034083282 | 149 | int IM920::cmdEGRX () { |
mizuki_akaike | 23:9be034083282 | 150 | return sendCommand("EGRX"); |
mizuki_akaike | 23:9be034083282 | 151 | } |