Fork to see if I can get working

Dependencies:   BufferedSerial OneWire WinbondSPIFlash libxDot-dev-mbed5-deprecated

Fork of xDotBridge_update_test20180823 by Matt Briggs

Revision:
75:600cb3a9f126
Child:
76:d1b20a259d8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xDotBridge/src/SerialTermMgr.cpp	Wed May 10 13:54:25 2017 -0600
@@ -0,0 +1,183 @@
+/*
+ * SerialTermMgr.cpp
+ *
+ *  Created on: May 8, 2017
+ *      Author: mbriggs
+ */
+
+#include "SerialTermMgr.h"
+#include "UserInterface.h"
+
+SerialTermMgr::SerialTermMgr(BaseboardIO *bbio, float fwVersion)
+{
+    mPc = NULL;
+    mFwVersion = fwVersion;
+    mCurrScreen = mainScreenId;
+    mBbio = bbio;
+}
+void SerialTermMgr::printScreen()
+{
+    switch (mCurrScreen) {
+    case mainScreenId:
+        printMainScreen();
+        break;
+    case genInfoScreenId:
+        printGenInfo();
+        break;
+    case settingsScreenId:
+    case statsScreenId:
+    case errorLogScreenId:
+    case liveLogScreenId:
+    case enterSerialBridgeScreenId:
+    case enterProgModeScreenId:
+        printMainScreen();
+    }
+}
+bool SerialTermMgr::input()
+{
+    if (mPc == NULL) {
+        return true;
+    }
+    bool quit = false;
+    char c = 10;
+    if (mPc->readable()) {
+        c = mPc->getc();
+    }
+    else {
+        return false;  // Do nothing if there is no input
+    }
+    switch (mCurrScreen) {
+    case mainScreenId:
+        quit = inputMainPage(c);
+        break;
+    case genInfoScreenId:
+        inputGenInfo(c);
+        break;
+    case settingsScreenId:
+    case statsScreenId:
+    case errorLogScreenId:
+    case liveLogScreenId:
+    case enterSerialBridgeScreenId:
+    case enterProgModeScreenId:
+        inputMainPage(c);
+    }
+    return quit;
+}
+
+// private methods
+bool SerialTermMgr::inputMainPage (char in) {
+    bool quit = false;
+    switch (in) {
+    case '1':
+        mCurrScreen = genInfoScreenId;
+        break;
+    case '2':
+        mPc->printf("\r\nNot implemented yet.\r\n");
+//        mCurrScreen = settingsScreenId;
+        break;
+    case '3':
+        mPc->printf("\r\nNot implemented yet.\r\n");
+//        mCurrScreen = statsScreenId;
+        break;
+    case '4':
+        mPc->printf("\r\nNot implemented yet.\r\n");
+//        mCurrScreen = errorLogScreenId;
+        break;
+    case '5':
+        mPc->printf("\r\nNot implemented yet.\r\n");
+//        mCurrScreen = liveLogScreenId;
+        break;
+    case '6':
+        mPc->printf("\r\nNot implemented yet.\r\n");
+//        mCurrScreen = enterSerialBridgeScreenId;
+        break;
+    case '7':
+        mPc->printf("\r\nNot implemented yet.\r\n");
+//        mCurrScreen = enterProgModeScreenId;
+        break;
+    case 0x11: // ctrl-q
+        quit=true;
+        break;
+    default:
+        mCurrScreen = mainScreenId;
+    }
+    if (!quit) {
+        printScreen();
+    }
+    return quit;
+}
+
+void SerialTermMgr::printMainScreen()
+{
+    if (mPc == NULL) {
+        return;
+    }
+    mPc->printf("\r\n\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Wireless Bridge Terminal (Firmware: v%0.2f)  =\r\n", mFwVersion);
+    mPc->printf("===============================================\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Selection Options                           =\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= 0: Refresh (Enter and space also work)      =\r\n");
+    mPc->printf("= 1: General information                      =\r\n");
+    mPc->printf("= 2: Settings                                 =\r\n");
+    mPc->printf("= 3: Statistics                               =\r\n");
+    mPc->printf("= 4: Error log                                =\r\n");
+    mPc->printf("= 5: Live log                                 =\r\n");
+    mPc->printf("= 6: Enter serial bridge mode                 =\r\n");
+    mPc->printf("= 7: Enter programming mode                   =\r\n");
+    mPc->printf("= <ctrl>-q: Exit terminal                     =\r\n");
+    mPc->printf("===============================================\r\n");
+}
+
+void SerialTermMgr::inputGenInfo (char in) {
+    if (mPc == NULL) {
+        return;
+    }
+    switch (in) {
+    case 0x1B:
+        mCurrScreen = mainScreenId;
+        break;
+    case 'r':
+        mBbio->sampleUserSwitches();
+        mPc->printf("User switches sampled.\r\n");
+        break;
+    default:
+        mPc->printf("Invalid key.\r\n");
+    }
+    printScreen();
+}
+
+void SerialTermMgr::printGenInfo()
+{
+    if (mPc == NULL) {
+        return;
+    }
+    mPc->printf("\r\n\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= General Info (ESC to return to main menu)   =\r\n", mFwVersion);
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Press r to sample user switch values        =\r\n"); // FIXME
+    mPc->printf("===============================================\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Firmware version: v%0.2f                     =\r\n", mFwVersion);
+    //TODO
+//    mPc->printf("= Radio EUI: %s =\r\n", mts::Text::bin2hexString(dot->getDeviceId()).c_str());
+    mPc->printf("= Contact closure: %s            =\r\n", mBbio->isCCNO() ? "Normally open  " :
+                                                                            "Normally closed");
+    mPc->printf("= WB Mode: %s                        =\r\n", mBbio->isTx() ? "Transmitter" :
+                                                                              "Receiver   ");
+    mPc->printf("= Comm Mode: %s                     =\r\n", mBbio->isLoRaWANMode() ? "LoRaWAN     " :
+                                                                                      "Peer-to-peer");
+    mPc->printf("= Serial Mode: %s                       =\r\n", mBbio->isSerialEnabled() ? "Enabled " :
+                                                                                            "Disabled");
+    if (mBbio->isTx()) {
+        mPc->printf("= Currently no rotary switches apply for TX   =\r\n");
+    }
+    else {
+        mPc->printf("= Rotary 1 hold setting is %0.1f seconds        =\r\n", HoldTimeSetting::rotVal2Sec(mBbio->rotarySwitch1()));
+        mPc->printf("= Rotary 2 currently does not apply for RX    =\r\n");
+    }
+    mPc->printf("===============================================\r\n");
+}