dev

Dependencies:   MTS-Serial libmDot-mbed5

Fork of Dot-AT-Firmware by MultiTech

Committer:
Mike Fiore
Date:
Mon Apr 04 09:00:31 2016 -0500
Revision:
9:ff62b20f7000
Parent:
4:666017851052
Child:
14:f9a77400b622
update to version 1.0.8 of AT firmware

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike Fiore 1:e52ae6584f1c 1 #include "CmdSendStringOnInterval.h"
Mike Fiore 1:e52ae6584f1c 2 #include "CommandTerminal.h"
Mike Fiore 1:e52ae6584f1c 3
Mike Fiore 1:e52ae6584f1c 4 CmdSendStringOnInterval::CmdSendStringOnInterval(mDot* dot, mts::MTSSerial& serial)
Mike Fiore 1:e52ae6584f1c 5 :
Mike Fiore 9:ff62b20f7000 6 Command(dot, "Send On Interval", "AT+SENDI", "Sends supplied packet data on interval between sends, output any received packets (escape sequence: +++)"),
Mike Fiore 1:e52ae6584f1c 7 _serial(serial) {
Mike Fiore 1:e52ae6584f1c 8 _help = std::string(text()) + ": " + std::string(desc());
Mike Fiore 1:e52ae6584f1c 9 _usage = "(100-2147483647) ms,(string:242)";
Mike Fiore 1:e52ae6584f1c 10 }
Mike Fiore 1:e52ae6584f1c 11
Mike Fiore 1:e52ae6584f1c 12 uint32_t CmdSendStringOnInterval::action(std::vector<std::string> args) {
Mike Fiore 1:e52ae6584f1c 13 int32_t code;
Mike Fiore 9:ff62b20f7000 14 int interval;
Mike Fiore 2:e5eebd74d36d 15 std::string text;
Mike Fiore 1:e52ae6584f1c 16
Mike Fiore 9:ff62b20f7000 17 sscanf(args[1].c_str(), "%d", &interval);
Mike Fiore 1:e52ae6584f1c 18
Mike Fiore 2:e5eebd74d36d 19 for (size_t i = 2; i < args.size(); i++) {
Mike Fiore 2:e5eebd74d36d 20 text.append(args[i]);
Mike Fiore 2:e5eebd74d36d 21 if (i != args.size() - 1)
Mike Fiore 2:e5eebd74d36d 22 text.append(",");
Mike Fiore 2:e5eebd74d36d 23 }
Mike Fiore 2:e5eebd74d36d 24 std::vector<uint8_t> data(text.begin(), text.end());
Mike Fiore 2:e5eebd74d36d 25
Mike Fiore 1:e52ae6584f1c 26 while (true) {
Mike Fiore 1:e52ae6584f1c 27 if (_dot->getJoinMode() == mDot::AUTO_OTA) {
Mike Fiore 1:e52ae6584f1c 28 Timer timer;
Mike Fiore 1:e52ae6584f1c 29 timer.start();
Mike Fiore 1:e52ae6584f1c 30 while (!_dot->getNetworkJoinStatus()) {
Mike Fiore 1:e52ae6584f1c 31 _serial.writef("Joining network... ");
Mike Fiore 1:e52ae6584f1c 32 if (_dot->joinNetworkOnce() == mDot::MDOT_OK) {
Mike Fiore 1:e52ae6584f1c 33 _serial.writef("Network Joined\r\n");
Mike Fiore 1:e52ae6584f1c 34 } else {
Mike Fiore 9:ff62b20f7000 35 _serial.writef("%s\r\n", _dot->getLastError().c_str());
Mike Fiore 1:e52ae6584f1c 36 }
Mike Fiore 1:e52ae6584f1c 37
Mike Fiore 9:ff62b20f7000 38 if (CommandTerminal::waitForEscape(_dot->getNextTxMs())) {
Mike Fiore 1:e52ae6584f1c 39 return 0;
Mike Fiore 1:e52ae6584f1c 40 }
Mike Fiore 1:e52ae6584f1c 41 }
Mike Fiore 1:e52ae6584f1c 42 } else if (!_dot->getNetworkJoinStatus()) {
Mike Fiore 1:e52ae6584f1c 43 setErrorMessage(mDot::getReturnCodeString(mDot::MDOT_NOT_JOINED));
Mike Fiore 1:e52ae6584f1c 44 return 1;
Mike Fiore 1:e52ae6584f1c 45 }
Mike Fiore 1:e52ae6584f1c 46
Mike Fiore 1:e52ae6584f1c 47 if ((code = _dot->send(data, _dot->getTxWait())) != mDot::MDOT_OK) {
Mike Fiore 9:ff62b20f7000 48 std::string error = _dot->getLastError();
Mike Fiore 1:e52ae6584f1c 49
Mike Fiore 1:e52ae6584f1c 50 if (code == mDot::MDOT_INVALID_PARAM) {
Mike Fiore 9:ff62b20f7000 51 setErrorMessage(_dot->getLastError());;
Mike Fiore 1:e52ae6584f1c 52 return 1;
Mike Fiore 1:e52ae6584f1c 53 } else {
Mike Fiore 1:e52ae6584f1c 54 _serial.writef("%s\r\n", error.c_str());
Mike Fiore 1:e52ae6584f1c 55 }
Mike Fiore 1:e52ae6584f1c 56 }
Mike Fiore 1:e52ae6584f1c 57
Mike Fiore 1:e52ae6584f1c 58 if (code == mDot::MDOT_OK) {
Mike Fiore 1:e52ae6584f1c 59 if (CommandTerminal::waitForEscape(3000, _dot, CommandTerminal::WAIT_SEND)) {
Mike Fiore 1:e52ae6584f1c 60 return 0;
Mike Fiore 1:e52ae6584f1c 61 }
Mike Fiore 1:e52ae6584f1c 62
Mike Fiore 1:e52ae6584f1c 63 if (_dot->getTxWait() || _dot->getAck() > 0) {
Mike Fiore 1:e52ae6584f1c 64 std::vector<uint8_t> rx_data;
Mike Fiore 1:e52ae6584f1c 65
Mike Fiore 1:e52ae6584f1c 66 if (_dot->recv(rx_data) == mDot::MDOT_OK) {
Mike Fiore 1:e52ae6584f1c 67 if (!rx_data.empty()) {
Mike Fiore 1:e52ae6584f1c 68 if (_dot->getVerbose())
Mike Fiore 1:e52ae6584f1c 69 _serial.writef("Packet data:\r\n");
Mike Fiore 1:e52ae6584f1c 70 _serial.writef("%s\r\n", CommandTerminal::formatPacketData(rx_data, _dot->getRxOutput()).c_str());
Mike Fiore 1:e52ae6584f1c 71 }
Mike Fiore 1:e52ae6584f1c 72 }
Mike Fiore 1:e52ae6584f1c 73 }
Mike Fiore 1:e52ae6584f1c 74 }
Mike Fiore 1:e52ae6584f1c 75
Mike Fiore 1:e52ae6584f1c 76 if (CommandTerminal::waitForEscape(interval)) {
Mike Fiore 1:e52ae6584f1c 77 return 0;
Mike Fiore 1:e52ae6584f1c 78 }
Mike Fiore 1:e52ae6584f1c 79 }
Mike Fiore 1:e52ae6584f1c 80
Mike Fiore 1:e52ae6584f1c 81 return 0;
Mike Fiore 1:e52ae6584f1c 82 }
Mike Fiore 1:e52ae6584f1c 83
Mike Fiore 1:e52ae6584f1c 84 bool CmdSendStringOnInterval::verify(std::vector<std::string> args) {
Mike Fiore 2:e5eebd74d36d 85 if (args.size() >= 3) {
Mike Fiore 9:ff62b20f7000 86 int interval;
Mike Fiore 2:e5eebd74d36d 87 size_t size = 0;
Mike Fiore 2:e5eebd74d36d 88
Mike Fiore 9:ff62b20f7000 89 if (sscanf(args[1].c_str(), "%d", &interval) != 1) {
Mike Fiore 1:e52ae6584f1c 90 setErrorMessage("Invalid argument");
Mike Fiore 1:e52ae6584f1c 91 return false;
Mike Fiore 1:e52ae6584f1c 92 }
Mike Fiore 1:e52ae6584f1c 93
Mike Fiore 1:e52ae6584f1c 94 if (interval < 100 || interval > INT_MAX) {
Mike Fiore 1:e52ae6584f1c 95 setErrorMessage("Invalid interval, expects (100-2147483647) ms");
Mike Fiore 1:e52ae6584f1c 96 return false;
Mike Fiore 1:e52ae6584f1c 97 }
Mike Fiore 1:e52ae6584f1c 98
Mike Fiore 9:ff62b20f7000 99 for (size_t i = 2; i < args.size() - 1; i++)
Mike Fiore 4:666017851052 100 size += args[i].size() + 1;
Mike Fiore 2:e5eebd74d36d 101 if (size > 242) {
Mike Fiore 1:e52ae6584f1c 102 setErrorMessage("Invalid packet, expects (string:242)");
Mike Fiore 1:e52ae6584f1c 103 return false;
Mike Fiore 1:e52ae6584f1c 104 }
Mike Fiore 1:e52ae6584f1c 105
Mike Fiore 1:e52ae6584f1c 106 return true;
Mike Fiore 1:e52ae6584f1c 107 }
Mike Fiore 1:e52ae6584f1c 108
Mike Fiore 1:e52ae6584f1c 109 setErrorMessage("Invalid arguments");
Mike Fiore 1:e52ae6584f1c 110 return false;
Mike Fiore 1:e52ae6584f1c 111 }