diff options
Diffstat (limited to 'Layout')
-rw-r--r-- | Layout/Layout.cpp | 59 | ||||
-rw-r--r-- | Layout/Layout.h | 48 |
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 |