dev
Dependencies: MTS-Serial libmDot-mbed5
Fork of Dot-AT-Firmware by
Diff: CommandTerminal/CommandTerminal.h
- Revision:
- 14:f9a77400b622
- Parent:
- 9:ff62b20f7000
- Child:
- 16:d5cf2af81a6d
--- a/CommandTerminal/CommandTerminal.h Fri Nov 04 19:10:24 2016 +0000 +++ b/CommandTerminal/CommandTerminal.h Fri Nov 04 14:25:43 2016 -0500 @@ -1,37 +1,37 @@ /** - ****************************************************************************** - * File Name : command.h - * Date : 18/04/2014 10:57:12 - * Description : This file provides code for command line prompt - ****************************************************************************** - * - * COPYRIGHT(c) 2014 MultiTech Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - + ****************************************************************************** + * File Name : command.h + * Date : 18/04/2014 10:57:12 + * Description : This file provides code for command line prompt + ****************************************************************************** + * + * COPYRIGHT(c) 2014 MultiTech Systems, Inc. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + #include "mbed.h" #include "ATSerial.h" #include "MTSSerial.h" @@ -39,36 +39,89 @@ #include "Commands.h" #include "mDot.h" #include "mDotEvent.h" - + /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __command_terminal_H__ #define __command_terminal_H__ +typedef uint32_t (*action_ptr_t)(std::vector<std::string> args); +typedef bool (*verify_ptr_t)(std::vector<std::string> args); + +class Command; + class CommandTerminal { - class RadioEvent : public mDotEvent { + class RadioEvent : public mDotEvent { - mts::ATSerial& _serial; - public: - RadioEvent(mts::ATSerial& serial) : _serial(serial) {} + public: + RadioEvent() : _sendAck(false) {} virtual ~RadioEvent() {} - /*! - * MAC layer event callback prototype. - * - * \param [IN] flags Bit field indicating the MAC events occurred - * \param [IN] info Details about MAC events occurred - */ - virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info); + virtual void TxDone(uint8_t dr) { + mDotEvent::TxDone(dr); + + logDebug("RadioEvent - TxDone"); + } + + virtual void TxTimeout(void) { + mDotEvent::TxTimeout(); + + logDebug("RadioEvent - TxTimeout"); + } + + virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) { + mDotEvent::JoinAccept(payload, size, rssi, snr); + + logDebug("RadioEvent - JoinAccept"); + } + + virtual void PacketRx(uint8_t port, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot, uint8_t retries = 0); + + virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot) { + mDotEvent::RxDone(payload, size, rssi, snr, ctrl, slot); + + logDebug("RadioEvent - RxDone"); + } + + virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr) { + mDotEvent::Pong(m_rssi, m_snr, s_rssi, s_snr); + + logDebug("RadioEvent - Pong"); + } + + virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways) { + mDotEvent::NetworkLinkCheck(m_rssi, m_snr, s_snr, s_gateways); + + logDebug("RadioEvent - NetworkLinkCheck"); + } + + virtual void RxTimeout(uint8_t slot) { + mDotEvent::RxTimeout(slot); + + // logDebug("RadioEvent - RxTimeout"); + } + + virtual void RxError(uint8_t slot) { + mDotEvent::RxError(slot); + + logDebug("RadioEvent - RxError"); + } virtual uint8_t MeasureBattery(void) { return 255; } -}; + bool SendAck() { + bool val = _sendAck; + _sendAck = false; + return val; + } -public: + bool _sendAck; + }; + + public: enum WaitType { WAIT_JOIN, @@ -78,17 +131,19 @@ WAIT_NA }; - CommandTerminal(mts::ATSerial& serial, mDot* dot); + CommandTerminal(mts::ATSerial& serial); virtual ~CommandTerminal(); - + + void init(); + // Command prompt text... static const char banner[]; static const char helpline[]; static const char prompt[]; - + // Command error text... static const char command_error[]; - + // Response texts... static const char help[]; static const char cmd_error[]; @@ -100,47 +155,53 @@ // Escape sequence static const char escape_sequence[]; - + static std::string formatPacketData(const std::vector<uint8_t>& data, const uint8_t& format); static bool waitForEscape(int timeout, mDot* dot=NULL, WaitType wait=WAIT_NA); void start(); - -private: + + static mts::ATSerial* Serial() {return _serialp;} + static mDot* Dot() {return _dot;} + static mDot* _dot; - static void idle(void const* args) { - while (1) - __WFI(); - } + static void setErrorMessage(const char* message); + static void setErrorMessage(const std::string& message); + + protected: + + static std::string _errorMessage; + + private: mts::ATSerial& _serial; static mts::ATSerial* _serialp; - mDot* _dot; - CommandTerminal::RadioEvent* _events; + static CommandTerminal::RadioEvent* _events; mDot::Mode _mode; - std::vector<Command*> _commands; - Thread _idle_thread; + + static const Command _commands[NO_OF_COMMANDS]; + static const verify_ptr_t _verify[NO_OF_COMMANDS]; + static const action_ptr_t _action[NO_OF_COMMANDS]; + bool _sleep_standby; DigitalOut _xbee_on_sleep; + bool _autoOTAEnabled; - void addCommand(Command* cmd); - void serialLoop(); bool autoJoinCheck(); void printHelp(); - bool readable(); - bool writeable(); - char read(); - void write(const char* message); - void writef(const char* format, ... ); + static bool readable(); + static bool writeable(); + static char read(); + static void write(const char* message); + static void writef(const char* format, ... ); void sleep(bool standby); void wakeup(void); - + }; #endif // __command_terminal_H__ -