with 36errors
Dependencies: MTS-Serial libxDot-dev-mbed5-deprecated
Fork of Dot-AT-Firmware by
CmdSendStringOnInterval.cpp
00001 #include "CmdSendStringOnInterval.h" 00002 #include "CommandTerminal.h" 00003 00004 CmdSendStringOnInterval::CmdSendStringOnInterval() 00005 : Command("Send On Interval", "AT+SENDI", "Sends supplied packet data on interval between sends, output any received packets (escape sequence: +++)", "(1-2147483647) ms,(string:242)") { 00006 00007 } 00008 00009 uint32_t CmdSendStringOnInterval::action(std::vector<std::string> args) { 00010 00011 int32_t code; 00012 int interval; 00013 std::string text; 00014 00015 sscanf(args[1].c_str(), "%d", &interval); 00016 00017 for (size_t i = 2; i < args.size(); i++) { 00018 text.append(args[i]); 00019 if (i != args.size() - 1) 00020 text.append(","); 00021 } 00022 std::vector<uint8_t> data(text.begin(), text.end()); 00023 00024 while (true) { 00025 if (CommandTerminal::Dot()->getJoinMode() == mDot::AUTO_OTA) { 00026 Timer timer; 00027 timer.start(); 00028 while (!CommandTerminal::Dot()->getNetworkJoinStatus()) { 00029 CommandTerminal::Serial()->writef("Joining network... "); 00030 if (CommandTerminal::Dot()->joinNetworkOnce() == mDot::MDOT_OK) { 00031 CommandTerminal::Serial()->writef("Network Joined\r\n"); 00032 } else { 00033 CommandTerminal::Serial()->writef("%s\r\n", CommandTerminal::Dot()->getLastError().c_str()); 00034 } 00035 00036 if (CommandTerminal::waitForEscape(CommandTerminal::Dot()->getNextTxMs())) { 00037 return 0; 00038 } 00039 } 00040 } else if (!CommandTerminal::Dot()->getNetworkJoinStatus()) { 00041 CommandTerminal::setErrorMessage(mDot::getReturnCodeString(mDot::MDOT_NOT_JOINED)); 00042 return 1; 00043 } 00044 00045 if ((code = CommandTerminal::Dot()->send(data, CommandTerminal::Dot()->getTxWait())) != mDot::MDOT_OK) { 00046 std::string error = CommandTerminal::Dot()->getLastError(); 00047 00048 if (code == mDot::MDOT_INVALID_PARAM) { 00049 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());; 00050 return 1; 00051 } else { 00052 CommandTerminal::Serial()->writef("%s\r\n", error.c_str()); 00053 } 00054 } 00055 00056 if (code == mDot::MDOT_OK) { 00057 if (CommandTerminal::waitForEscape(3000, CommandTerminal::Dot(), CommandTerminal::WAIT_SEND)) { 00058 return 0; 00059 } 00060 00061 if (CommandTerminal::Dot()->getTxWait() || CommandTerminal::Dot()->getAck() > 0) { 00062 std::vector<uint8_t> rx_data; 00063 00064 if (CommandTerminal::Dot()->recv(rx_data) == mDot::MDOT_OK) { 00065 if (!rx_data.empty()) { 00066 if (CommandTerminal::Dot()->getRxOutput() == mDot::HEXADECIMAL) { 00067 for (size_t i = 0; i < data.size(); i++) { 00068 CommandTerminal::Serial()->writef("%02x", data[i]); 00069 } 00070 CommandTerminal::Serial()->writef("\r\n"); 00071 } else { 00072 CommandTerminal::Serial()->writef("%s\r\n", CommandTerminal::formatPacketData(data, CommandTerminal::Dot()->getRxOutput()).c_str()); 00073 } 00074 } 00075 } 00076 } else if (!CommandTerminal::Dot()->getTxWait()) { 00077 CommandTerminal::Dot()->cancelRxWindow(); 00078 } 00079 } 00080 00081 if (CommandTerminal::waitForEscape(interval)) { 00082 return 0; 00083 } 00084 } 00085 00086 return 0; 00087 } 00088 00089 bool CmdSendStringOnInterval::verify(std::vector<std::string> args) { 00090 if (args.size() >= 3) { 00091 int interval; 00092 size_t size = 0; 00093 00094 if (sscanf(args[1].c_str(), "%d", &interval) != 1) { 00095 CommandTerminal::setErrorMessage("Invalid argument"); 00096 return false; 00097 } 00098 00099 if (interval < 1 || interval > INT_MAX-1) { 00100 CommandTerminal::setErrorMessage("Invalid interval, expects (1-2147483646) ms"); 00101 return false; 00102 } 00103 00104 for (size_t i = 2; i < args.size() - 1; i++) 00105 size += args[i].size() + 1; 00106 if (size > 242) { 00107 CommandTerminal::setErrorMessage("Invalid packet, expects (string:242)"); 00108 return false; 00109 } 00110 00111 return true; 00112 } 00113 00114 CommandTerminal::setErrorMessage("Invalid arguments"); 00115 return false; 00116 }
Generated on Wed Jul 13 2022 06:20:58 by 1.7.2