Fork to see if I can get working

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

Fork of xDotBridge_update_test20180823 by Matt Briggs

Files at this revision

API Documentation at this revision

Comitter:
mbriggs_vortex
Date:
Tue Nov 28 14:31:54 2017 -0700
Parent:
97:594e47206604
Child:
99:83b54c851187
Commit message:
Adding first cut of term settings.

Changed in this revision

xDotBridge/inc/BaseboardIO.h Show annotated file Show diff for this revision Revisions of this file
xDotBridge/inc/SerialTermMgr.h Show annotated file Show diff for this revision Revisions of this file
xDotBridge/src/BaseboardIO.cpp Show annotated file Show diff for this revision Revisions of this file
xDotBridge/src/SerialTermMgr.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/xDotBridge/inc/BaseboardIO.h	Tue Nov 28 16:19:57 2017 +0000
+++ b/xDotBridge/inc/BaseboardIO.h	Tue Nov 28 14:31:54 2017 -0700
@@ -202,6 +202,10 @@
     */
     bool isCCNO();
 
+    void setIsCCNO(bool val);
+
+    void setIsCCNC(bool val) {setIsCCNO(!val);}
+
     /**
     * @brief Returns the current state of the NO/NC switch
     *
@@ -236,6 +240,10 @@
     */
     bool isRx();
 
+    void setIsRx(bool val);
+
+    void setIsTx(bool val) {setIsRx(!val);}
+
     /**
     * @brief Returns the current state of the Rx/Tx switch
     *
@@ -297,6 +305,8 @@
     */
     uint8_t rotarySwitch1();
 
+    void setRotarySwitch1(uint8_t val);
+
     /**
     * @brief Returns value of a rotary switch (TODO give board location)
     *
@@ -309,6 +319,8 @@
     */
     uint8_t rotarySwitch2();
 
+//    void setRotarySwitch2(uint8_t val);
+
     ////////////
     // Output //
     ////////////
--- a/xDotBridge/inc/SerialTermMgr.h	Tue Nov 28 16:19:57 2017 +0000
+++ b/xDotBridge/inc/SerialTermMgr.h	Tue Nov 28 14:31:54 2017 -0700
@@ -45,10 +45,19 @@
     BufferedSerial *mPc;
     WinbondSPIFlash *mFlash;
 
+    // Hold for seeding new values
+    bool mSaveIsCCNO;
+    bool mSaveIsTx;
+    uint8_t mSaveRot1;
+
     bool inputMainPage(char in);
     void printMainScreen();
     void inputGenInfo (char in);
     void printGenInfo();
+    void inputSettings (char in);
+    void printSettings();
+    void seedSaveSettings();
+    void applySaveSettings();
     void inputEnterProgMode (char in);
     void printEnterProgMode();
     bool xmodem2Flash();
--- a/xDotBridge/src/BaseboardIO.cpp	Tue Nov 28 16:19:57 2017 +0000
+++ b/xDotBridge/src/BaseboardIO.cpp	Tue Nov 28 14:31:54 2017 -0700
@@ -210,11 +210,31 @@
     // When DIP switch is not closed (i.e. value reads high) assume NO
     return (mPortExpanderVal1 & pEx1NoNcSel) != 0; // Open NO, closed NC
 }
+void BaseboardIO::setIsCCNO(bool val)
+{
+    // When DIP switch is not closed (i.e. value reads high) assume NO
+	if (val) {
+		mPortExpanderVal1 |= pEx1NoNcSel; // Set bit
+	}
+	else {
+		mPortExpanderVal1 &= ~pEx1NoNcSel; // Clear bit
+	}
+}
 bool BaseboardIO::isRx()
 {
     // When DIP switch is not closed (i.e. value reads high) assume RX
     return (mPortExpanderVal1 & pEx1RxTxSel) != 0;
 }
+void BaseboardIO::setIsRx(bool val)
+{
+    // When DIP switch is not closed (i.e. value reads high) assume RX
+	if (val) {
+		mPortExpanderVal1 |= pEx1RxTxSel; // Set bit
+	}
+	else {
+		mPortExpanderVal1 &= ~pEx1RxTxSel; // Clear bit
+	}
+}
 bool BaseboardIO::isLoRaWANMode()
 {
     // When DIP switch is not closed (i.e. value reads high) assume P2P not WAN
@@ -239,6 +259,21 @@
         val |= 0x01;
     return val;
 }
+void BaseboardIO::setRotarySwitch1(uint8_t val)
+{
+	if ((val & 0x08) == 1) {
+		mPortExpanderVal0 &= ~pEx0Rot1B8;
+	}
+	if ((val & 0x04) == 1) {
+		mPortExpanderVal0 &= ~pEx0Rot1B4;
+	}
+	if ((val & 0x02) == 1) {
+		mPortExpanderVal0 &= ~pEx0Rot1B2;
+	}
+	if ((val & 0x01) == 1) {
+		mPortExpanderVal0 &= ~pEx0Rot1B1;
+	}
+}
 uint8_t BaseboardIO::rotarySwitch2()
 {
     // If a bit of a nibble is asserted then the port expander line is switched low.
--- a/xDotBridge/src/SerialTermMgr.cpp	Tue Nov 28 16:19:57 2017 +0000
+++ b/xDotBridge/src/SerialTermMgr.cpp	Tue Nov 28 14:31:54 2017 -0700
@@ -22,7 +22,6 @@
     mCurrScreen = mainScreenId;
     mBbio = bbio;
     mFlash = flash;
-
 }
 void SerialTermMgr::printScreen()
 {
@@ -34,6 +33,8 @@
         printGenInfo();
         break;
     case settingsScreenId:
+    	printSettings();
+    	break;
     case statsScreenId:
     case errorLogScreenId:
     case liveLogScreenId:
@@ -65,6 +66,8 @@
         inputGenInfo(c);
         break;
     case settingsScreenId:
+    	inputSettings(c);
+    	break;
     case statsScreenId:
     case errorLogScreenId:
     case liveLogScreenId:
@@ -88,8 +91,7 @@
         mCurrScreen = enterProgModeScreenId;
         break;
     case '3':
-        mPc->printf("\r\nNot implemented yet.\r\n");
-//        mCurrScreen = settingsScreenId;
+        mCurrScreen = settingsScreenId;
         break;
     // Future
 //    case '4':
@@ -196,6 +198,81 @@
     mPc->printf("===============================================\r\n");
 }
 
+void SerialTermMgr::inputSettings (char in) {
+    if (mPc == NULL) {
+        return;
+    }
+    switch (in) {
+    case 0x1B: // esc
+        mCurrScreen = mainScreenId;
+        break;
+    case 0x13: // ctrl-s
+    	applySaveSettings();
+    	mPc->printf("Settings saved \r\n");
+        mCurrScreen = mainScreenId;
+        break;
+    case 'r':
+        mBbio->sampleUserSwitches();
+        mPc->printf("User switches sampled.\r\n");
+        break;
+    case '1':
+    	mSaveIsCCNO = !mSaveIsCCNO;
+    case '2':
+    	mSaveIsTx = !mSaveIsTx;
+    case '3':
+    	mSaveRot1 = (++mSaveRot1) % 10;
+    default:
+        mPc->printf("Invalid key.\r\n");
+    }
+    printScreen();
+}
+
+void SerialTermMgr::printSettings()
+{
+    if (mPc == NULL) {
+        return;
+    }
+    mPc->printf("\r\n\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Settings (ESC to return to main menu)   	   =\r\n", mFwVersion);
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Press r to sample user switch values        =\r\n");
+    mPc->printf("= Press <ctrl>-s to save values   		       =\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("===============================================\r\n");
+    mPc->printf("= Setting: current value [Modify Key], save value          =\r\n", mFwVersion);
+    mPc->printf("= Contact closure [1]: %s, %s 				   =\r\n",
+    		mBbio->isCCNO() ? "NO" : "NC",
+    		mSaveIsCCNO ? "NO" : "NC");
+    mPc->printf("= WB Mode [2]: %s, %s 				           =\r\n",
+    		mBbio->isTx() ? "Transmitter" : "Receiver   ",
+    		mSaveIsTx ? "Transmitter" : "Receiver   ");
+    if (mSaveIsTx) {
+        mPc->printf("= Currently no rotary switches apply for TX   =\r\n");
+    }
+    else {
+        mPc->printf("= Rotary 1 hold setting: %0.1f secs, %0.1f     =\r\n",
+        		HoldTimeSetting::rotVal2Sec(mBbio->rotarySwitch1()),
+        		HoldTimeSetting::rotVal2Sec(mSaveRot1));
+        mPc->printf("= Rotary 2 currently does not apply for RX    =\r\n");
+    }
+    mPc->printf("===============================================\r\n");
+}
+
+void SerialTermMgr::seedSaveSettings()
+{
+	mSaveIsCCNO = mBbio->isCCNO();
+	mSaveIsTx = mBbio->isTx();
+	mSaveRot1 = mBbio->rotarySwitch1();
+}
+
+void SerialTermMgr::applySaveSettings()
+{
+	mBbio->setIsCCNO(mSaveIsCCNO);
+	mBbio->setIsTx(mSaveIsTx);
+	mBbio->setRotarySwitch1(mSaveRot1);
+}
+
 void SerialTermMgr::printEnterProgMode()
 {
     if (mPc == NULL) {