MTDOT-BOX-EVB-Factory-Firmware

Dependencies:   NCP5623B GpsParser ISL29011 libmDot-mbed5 MTS-Serial MMA845x DOGS102 MPL3115A2

Revision:
12:05435282f899
Parent:
7:a31236c2e75c
--- a/CommandTerminal/CmdFrequencyBand.cpp	Thu Nov 10 22:10:58 2016 +0000
+++ b/CommandTerminal/CmdFrequencyBand.cpp	Tue Oct 09 13:49:30 2018 -0500
@@ -1,96 +1,104 @@
-/* Copyright (c) <2016> <MultiTech Systems>, MIT License
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
- * and associated documentation files (the "Software"), to deal in the Software without restriction, 
- * including without limitation the rights to use, copy, modify, merge, publish, distribute, 
- * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all copies or 
- * substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
- * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
 #include "CmdFrequencyBand.h"
-
-CmdFrequencyBand::CmdFrequencyBand(mDot* dot, mts::MTSSerial& serial) :
-        Command(dot, "Frequency Band", "AT+FREQ", "Configured Frequency Band 'EU868', 'AU915' or 'US915'"), _serial(serial)
+#include "ChannelPlans.h"
+CmdFrequencyBand::CmdFrequencyBand(mDot* dot, mts::MTSSerial& serial)
+    : Command(dot,"Current Frequency Band", "AT+FREQ", "Select Frequency Band 'US915', 'AU915', 'EU868', 'AS923', 'AS923-JAPAN','KR920', or 'IN865'")
+    , _serial(serial)
 {
-    _help = std::string(text()) + ": " + std::string(desc());
-    _usage = "(EU868,AU915,US915)";
-    _queryable = true;
+      _help = std::string(text()) + ": " + std::string(desc());
+      _usage = "";
+      _queryable = true;
 }
 
 uint32_t CmdFrequencyBand::action(std::vector<std::string> args)
-{
+                                  {
     if (args.size() == 1)
     {
-        if (_dot->getVerbose())
+        // using getChannelPlanName here instead of mDot::FrequencyBandStr allows AT firmware to properly display custom channel plan names
+        if(_dot->getVerbose())
             _serial.writef("Frequency Band: ");
 
-        _serial.writef("%s\r\n", mDot::FrequencyBandStr(_dot->getFrequencyBand()).c_str());
+        _serial.writef("%s\r\n", _dot->getChannelPlanName().c_str());
     }
-
-#ifdef DEBUG_MAC
-    else if (args.size() == 2)
+         
+     else if (args.size() == 2)
     {
-        int32_t code;
+        std::string band_str = mts::Text::toUpper(args[1]);
+        lora::ChannelPlan* plan = _dot->getChannelPlan();
+        mDot::mdot_file file = _dot->openUserFile("ChannelPlan", mDot::FM_RDWR);
+        _dot->seekUserFile(file, 0, SEEK_SET);
+        uint8_t cp[] = {0};
 
-        std::string text = mts::Text::toUpper(args[1]);
-
-        uint8_t band = mDot::FB_US915;
-
-
-        if (mDot::FrequencyBandStr(mDot::FB_EU868).find(text) != std::string::npos) {
-            band = mDot::FB_EU868;
+        if (mDot::FrequencyBandStr(lora::ChannelPlan::US915) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_US915();
+            cp[0] = CP_US915;
+        }
+        else if (mDot::FrequencyBandStr(lora::ChannelPlan::AU915) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_AU915();
+            cp[0] = CP_AU915;
+        }
+        else if (mDot::FrequencyBandStr(lora::ChannelPlan::EU868) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_EU868();
+             cp[0] = CP_EU868;
+        }
+        else if (mDot::FrequencyBandStr(lora::ChannelPlan::AS923) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_AS923();
+             cp[0] = CP_AS923;
+	}
+        else if (mDot::FrequencyBandStr(lora::ChannelPlan::KR920) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_KR920();
+             cp[0] = CP_KR920;
+        }
+        else if (mDot::FrequencyBandStr(lora::ChannelPlan::IN865) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_IN865();
+             cp[0] = CP_IN865;
+        }
+	else if (mDot::FrequencyBandStr(lora::ChannelPlan::AS923_JAPAN) == band_str) {
+            if(plan != NULL) delete plan;
+            plan = new lora::ChannelPlan_AS923_Japan();
+             cp[0] = CP_AS923_JAPAN;
         }
 
-        if (mDot::FrequencyBandStr(mDot::FB_AU915).find(text) != std::string::npos) {
-            band = mDot::FB_AU915;
+        if(cp[0] > 0) {
+            _dot->writeUserFile(file, cp, 1);
         }
+        _dot->closeUserFile(file);
 
-        if (mDot::FrequencyBandStr(mDot::FB_US915).find(text) != std::string::npos) {
-            band = mDot::FB_US915;
-        }
+        _serial.writef("Setting Plan \r\n");
 
-        if ((code = _dot->setFrequencyBand(band)) != mDot::MDOT_OK) {
-            std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
-            setErrorMessage(error);
+        if (_dot->setChannelPlan(plan) != mDot::MDOT_OK) {
+            setErrorMessage(_dot->getLastError());
             return 1;
         }
     }
-#endif
-
     return 0;
 }
 
 bool CmdFrequencyBand::verify(std::vector<std::string> args)
-{
+                              {
     if (args.size() == 1)
         return true;
 
-#ifdef DEBUG_MAC
     if (args.size() == 2)
     {
         std::string band = mts::Text::toUpper(args[1]);
 
-        if (mDot::FrequencyBandStr(mDot::FB_EU868).find(band) == std::string::npos &&
-            mDot::FrequencyBandStr(mDot::FB_US915).find(band) == std::string::npos &&
-            mDot::FrequencyBandStr(mDot::FB_AU915).find(band) == std::string::npos)
+        if (mDot::FrequencyBandStr(lora::ChannelPlan::US915) != band &&
+            mDot::FrequencyBandStr(lora::ChannelPlan::AU915) != band &&
+            mDot::FrequencyBandStr(lora::ChannelPlan::EU868) != band &&
+            mDot::FrequencyBandStr(lora::ChannelPlan::AS923) != band &&
+            mDot::FrequencyBandStr(lora::ChannelPlan::KR920) != band &&
+            mDot::FrequencyBandStr(lora::ChannelPlan::IN865) != band &&
+            mDot::FrequencyBandStr(lora::ChannelPlan::AS923_JAPAN) != band)
         {
-            setErrorMessage("Invalid parameter, expects (EU868,AU915,US915)");
+            setErrorMessage("Invalid parameter, expects (US915,AU915,EU868,AS923,AS923-JAPAN,KR920,IN865)");
             return false;
         }
-
-        return true;
+    return true;
     }
-#endif
-
-    setErrorMessage("Invalid arguments");
-    return false;
 }