MTDOT-BOX-EVB-Factory-Firmware
Dependencies: NCP5623B GpsParser ISL29011 libmDot-mbed5 MTS-Serial MMA845x DOGS102 MPL3115A2
Diff: CommandTerminal/CmdFrequencyBand.cpp
- 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; }