summaryrefslogtreecommitdiff
path: root/Layout
diff options
context:
space:
mode:
authorMike Fiore <mfiore@multitech.com>2015-11-17 13:04:00 -0600
committerMike Fiore <mfiore@multitech.com>2015-11-17 13:04:00 -0600
commit11ac166f3476116b08eeaffc25d80b163573089b (patch)
tree0675e50c2377dbffc37ce3906967b17478f225c0 /Layout
parentb86c62d46385ff454a939f23277761b8ee6b8a0d (diff)
downloadmtdot-box-evb-factory-firmware-11ac166f3476116b08eeaffc25d80b163573089b.tar.gz
mtdot-box-evb-factory-firmware-11ac166f3476116b08eeaffc25d80b163573089b.tar.bz2
mtdot-box-evb-factory-firmware-11ac166f3476116b08eeaffc25d80b163573089b.zip
join works, but only once - added object for running LoRa operations in a thread, lots of misc updates
Diffstat (limited to 'Layout')
-rw-r--r--Layout/Layout.cpp29
-rw-r--r--Layout/Layout.h2
-rw-r--r--Layout/LayoutJoin.cpp93
-rw-r--r--Layout/LayoutJoin.h43
4 files changed, 167 insertions, 0 deletions
diff --git a/Layout/Layout.cpp b/Layout/Layout.cpp
index a38cc4f..7b0c375 100644
--- a/Layout/Layout.cpp
+++ b/Layout/Layout.cpp
@@ -46,6 +46,7 @@ bool Layout::writeField(const Field& field, const std::string& value, bool apply
if (apply)
startUpdate();
+ // fill the whole length with blank space in case the previous value was longer than this one
while (v.size() < field._maxSize)
v += " ";
@@ -57,6 +58,27 @@ bool Layout::writeField(const Field& field, const std::string& value, bool apply
return true;
}
+bool Layout::writeField(const Field& field, const char* value, size_t size, bool apply) {
+ bool ret;
+ char buf[32];
+ size_t s = (field._maxSize > size) ? size : field._maxSize;
+
+ // fill the whole length with blank space in case the previous value was longer than this one
+ memset(buf, 0x20, sizeof(buf));
+
+ if (apply)
+ startUpdate();
+
+ snprintf(buf, s, "%s", value);
+
+ ret = writeText(field._col, field._row, value, field._maxSize);
+
+ if (apply)
+ endUpdate();
+
+ return true;
+}
+
bool Layout::writeImage(const Image& image, bool apply) {
bool ret;
@@ -71,6 +93,13 @@ bool Layout::writeImage(const Image& image, bool apply) {
return ret;
}
+void Layout::removeField(const Field& field) {
+ startUpdate();
+ std::string s(' ', field._maxSize);
+ writeText(field._row, field._col, s.c_str(), s.size());
+ endUpdate();
+}
+
bool Layout::writeText(uint8_t col, uint8_t row, const char* value, size_t size) {
_lcd->writeText(col*6, row, font_6x8, value, size);
diff --git a/Layout/Layout.h b/Layout/Layout.h
index 5e7ece2..29d59ff 100644
--- a/Layout/Layout.h
+++ b/Layout/Layout.h
@@ -44,7 +44,9 @@ class Layout {
void endUpdate();
bool writeLabel(const Label& label);
bool writeField(const Field& field, const std::string& value, bool apply = false);
+ bool writeField(const Field& field, const char* value, size_t size, bool apply = false);
bool writeImage(const Image& image, bool apply = false);
+ void removeField(const Field& field);
private:
bool writeText(uint8_t col, uint8_t row, const char* value, size_t size);
diff --git a/Layout/LayoutJoin.cpp b/Layout/LayoutJoin.cpp
new file mode 100644
index 0000000..1b0fb20
--- /dev/null
+++ b/Layout/LayoutJoin.cpp
@@ -0,0 +1,93 @@
+#include "LayoutJoin.h"
+
+LayoutJoin::LayoutJoin(DOGS102* lcd, uint8_t band)
+ : Layout(lcd),
+ _lId(0, 1, "NI="),
+ _lKey(0, 2, "NK="),
+ _lFsb(0, 3, "FSB="),
+ _lRate(0, 5, "DR="),
+ _lPower(6, 5, "P="),
+ _fStatus(0, 0, 17),
+ _fId(3, 1, 14),
+ _fKey(3, 2, 14),
+ _fFsb(4, 3, 2),
+ _fRate(3, 5, 2),
+ _fPower(8, 5, 2),
+ _fCountdown(0, 7, 9),
+ _fCountdownLabel(0, 6, 17),
+ _fCancel(11, 7, 6),
+ _band(band)
+{}
+
+LayoutJoin::~LayoutJoin() {}
+
+void LayoutJoin::display() {
+ clear();
+ startUpdate();
+
+ writeLabel(_lId);
+ writeLabel(_lKey);
+ if (_band == mDot::FB_915) {
+ writeLabel(_lFsb);
+ }
+ writeLabel(_lRate);
+ writeLabel(_lPower);
+
+ displayCancel();
+
+ endUpdate();
+}
+
+void LayoutJoin::updateId(std::string id) {
+ writeField(_fId, id, true);
+}
+
+void LayoutJoin::updateKey(std::string key) {
+ writeField(_fKey, key, true);
+}
+
+void LayoutJoin::updateFsb(uint8_t band) {
+ char buf[8];
+ size_t size;
+
+ size = snprintf(buf, sizeof(buf), "%u", band);
+ writeField(_fFsb, buf, size, true);
+}
+
+void LayoutJoin::updateRate(std::string rate) {
+ writeField(_fRate, rate);
+}
+
+void LayoutJoin::updatePower(uint32_t power) {
+ char buf[16];
+ size_t size;
+
+ size = snprintf(buf, sizeof(buf), "%lu", power);
+ writeField(_fPower, buf, size, true);
+}
+
+void LayoutJoin::updateStatus(std::string status) {
+ writeField(_fStatus, status, true);
+}
+
+void LayoutJoin::updateCountdown(uint32_t seconds) {
+ char buf[16];
+ size_t size;
+
+ writeField(_fCountdownLabel, "No Free Channel");
+ size = snprintf(buf, sizeof(buf), "%lu", seconds);
+ writeField(_fPower, buf, size, true);
+}
+
+void LayoutJoin::removeCountdown() {
+ removeField(_fCountdownLabel);
+ removeField(_fCountdown);
+}
+
+void LayoutJoin::displayCancel(bool display) {
+ if (display)
+ writeField(_fCancel, "Cancel", true);
+ else
+ removeField(_fCancel);
+}
+
diff --git a/Layout/LayoutJoin.h b/Layout/LayoutJoin.h
new file mode 100644
index 0000000..f2b7e41
--- /dev/null
+++ b/Layout/LayoutJoin.h
@@ -0,0 +1,43 @@
+#ifndef __LAYOUTJOIN_H__
+#define __LAYOUTJOIN_H__
+
+#include "Layout.h"
+#include "mDot.h"
+
+class LayoutJoin : public Layout {
+ public:
+ LayoutJoin(DOGS102* lcd, uint8_t band);
+ ~LayoutJoin();
+
+ void display();
+
+ void updateId(std::string id);
+ void updateKey(std::string key);
+ void updateFsb(uint8_t band);
+ void updateRate(std::string rate);
+ void updatePower(uint32_t power);
+ void updateStatus(std::string status);
+ void updateCountdown(uint32_t seconds);
+ void removeCountdown();
+ void displayCancel(bool display = true);
+
+ private:
+ Label _lId;
+ Label _lKey;
+ Label _lFsb;
+ Label _lRate;
+ Label _lPower;
+
+ Field _fStatus;
+ Field _fId;
+ Field _fKey;
+ Field _fFsb;
+ Field _fRate;
+ Field _fPower;
+ Field _fCountdown;
+ Field _fCountdownLabel;
+ Field _fCancel;
+ uint8_t _band;
+};
+
+#endif