東北大学学友会準加盟団体 From The Earth の高高度ロケットFTE-06(通称:海豚)にて使用したソフトウェアです.ご自由にお使いください.このプログラムによって生じた損害について当団体は一切責任を負いません.また,各モジュールのライブラリは当団体が作成したものではないので再配布は禁止します.

Dependencies:   mbed FATFileSystem

Fork of FTE-06 by Tetsushi Amano

Committer:
mizuki_akaike
Date:
Mon Aug 14 04:56:52 2017 +0000
Revision:
23:9be034083282
?????????????;

Who changed what in which revision?

UserRevisionLine numberNew 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 }