Elmo Terminal provides functionality to test Lora radio and access SX1272 chip registers delivered with Elmo board. Also contains example ping-pong application.
Dependencies: SX1272lib mbed-src
Diff: Settings/Variable.cpp
- Revision:
- 2:8d8295a51f68
- Child:
- 3:bb58d4e78e68
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Settings/Variable.cpp Thu Oct 01 09:40:30 2015 +0200 @@ -0,0 +1,115 @@ +#include <sstream> +#include <limits> +#include "Variable.h" + +Variable::ValueDescription Variable::none[] = {{0,0}}; + +int32_t Variable::nonSetValue() +{ + return std::numeric_limits<int32_t>::min(); +} + +Variable::Variable() + : name_("") + , description_("") + , pValueDescriptions_(none) + , value_(nonSetValue()) +{ +} + +bool Variable::endGuard() const +{ + return value_ == nonSetValue(); +} + +Variable::Variable(const char* name, const char* description, int32_t value, const ValueDescription* const pValueDescriptions) + : name_(name) + , description_(description) + , pValueDescriptions_(pValueDescriptions) + , value_(value) +{ +} + +std::string Variable::name() const +{ + return name_; +} + +std::string Variable::help() const +{ + std::ostringstream temp; + + temp << description_ << "\r\n"; + + for (const ValueDescription* p = pValueDescriptions_; !p->isEnd(); ++p) + { + if (p->isEndRange()) + { + continue; + } + + temp << " "; + + if ((p+1)->isEndRange()) + { + temp << p->value << "..." << (p+1)->value << " " << p->description; + } + else + { + temp << p->value << ": " << p->description << " "; + } + + temp << "\r\n"; + } + + std::string s = temp.str(); + return s; +} + +std::string Variable::describe(int32_t value) const +{ + for (const ValueDescription* p = pValueDescriptions_; !p->isEnd(); ++p) + { + if (p->value > value || p->isEndRange()) + { + continue; + } + + if ((p+1)->isEndRange()) + { + if ((p->value <= value) && (value <= (p+1)->value)) + { + std::ostringstream temp; + temp << value << " " << p->description; + return temp.str(); + } + } else + if (p->value == value) + { + std::ostringstream temp; + temp << value << " - " << p->description; + return temp.str(); + } + } + return ""; +} + +bool Variable::set(int32_t value) +{ + if (describe(value).size() == 0) + { + return false; + } + value_ = value; + return true; +} + +int32_t Variable::get() const +{ + return value_; +} + +std::string Variable::describe() const +{ + return describe(get()); +}