summaryrefslogtreecommitdiff
path: root/Layout
diff options
context:
space:
mode:
Diffstat (limited to 'Layout')
-rw-r--r--Layout/Layout.cpp59
-rw-r--r--Layout/Layout.h48
2 files changed, 107 insertions, 0 deletions
diff --git a/Layout/Layout.cpp b/Layout/Layout.cpp
new file mode 100644
index 0000000..e58ffad
--- /dev/null
+++ b/Layout/Layout.cpp
@@ -0,0 +1,59 @@
+#include "DisplayManager.h"
+#include "font_6x8.h"
+#include "MultiTech_Logo.h"
+#include "MTSLog.h"
+#include "version.h"
+
+// product and version information
+std::string DisplayManager::_product_name = "MTDOT-BOX/EVB";
+std::string DisplayManager::_program_name = "Factory Firmware";
+std::string DisplayManager::_program_version = std::string("Version ") + MTDOT_BOX_VERSION;
+
+DisplayManager::DisplayManager(DOGS102* lcd) : _lcd(lcd) {}
+
+DisplayManager::DisplayManager(DOGS102* lcd, const Layout layout) : _lcd(lcd), _layout(layout) {}
+
+DisplayManager::~DisplayManager() {}
+
+void DisplayManager::displaySplashScreen() {
+ _lcd->startUpdate();
+ _lcd->writeBitmap(0, 0, MultiTech_Logo);
+ _lcd->writeText(0, 3, font_6x8, _product_name.c_str(), _product_name.size());
+ _lcd->writeText(0, 4, font_6x8, _program_name.c_str(), _program_name.size());
+ _lcd->writeText(0, 5, font_6x8, _program_version.c_str(), _program_version.size());
+ _lcd->endUpdate();
+}
+
+bool DisplayManager::addLayout(Layout layout) {
+ _lcd->clearBuffer();
+
+ _layout = layout;
+
+ _lcd->startUpdate();
+ Labels l = _layout.first;
+ for (Labels::iterator it = l.begin(); it != l.end(); it++)
+ _lcd->writeText(it->column, it->page, font_6x8, it->value, it->size);
+ _lcd->endUpdate();
+
+ return true;
+}
+
+bool DisplayManager::updateField(const int32_t& id, const char* field, const uint32_t& fieldSize) {
+ Fields f = _layout.second;
+ for (Fields::iterator it = f.begin(); it!= f.end(); it++) {
+ if (it->id == id) {
+ _lcd->startUpdate();
+ uint8_t size = (fieldSize > it->maxSize) ? it->maxSize : fieldSize;
+ _lcd->writeText(it->column, it->page, font_6x8, field, size);
+ _lcd->endUpdate();
+ return true;
+ }
+ }
+
+ logError("field ID not found");
+ return false;
+}
+
+bool DisplayManager::updateField(const int32_t& id, const std::string& field) {
+ return updateField(id, field.c_str(), field.size());
+}
diff --git a/Layout/Layout.h b/Layout/Layout.h
new file mode 100644
index 0000000..c8dc4f3
--- /dev/null
+++ b/Layout/Layout.h
@@ -0,0 +1,48 @@
+#ifndef __DISPLAYMANAGER_H__
+#define __DISPLAYMANAGER_H__
+
+#include "DOGS102.h"
+
+#include <string>
+#include <vector>
+
+typedef struct field {
+ int32_t id;
+ uint8_t column;
+ uint8_t page;
+ uint8_t maxSize;
+} Field;
+
+typedef struct label {
+ uint8_t column;
+ uint8_t page;
+ const char* value;
+ uint8_t size;
+} Label;
+
+typedef std::vector<Field> Fields;
+typedef std::vector<Label> Labels;
+typedef std::pair<Labels, Fields> Layout;
+
+class DisplayManager {
+ public:
+ DisplayManager(DOGS102* lcd);
+ DisplayManager(DOGS102* lcd, const Layout layout);
+ ~DisplayManager();
+
+ void displaySplashScreen();
+
+ bool addLayout(const Layout layout);
+
+ bool updateField(const int32_t& id, const char* field, const uint32_t& fieldSize);
+ bool updateField(const int32_t& id, const std::string& field);
+
+ private:
+ Layout _layout;
+ DOGS102* _lcd;
+ static std::string _product_name;
+ static std::string _program_name;
+ static std::string _program_version;
+};
+
+#endif