summaryrefslogtreecommitdiff
path: root/Layout/Layout.cpp
blob: e58ffadf54d749093f82f9bb5e6057ecf32bd682 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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());
}