1
0

add screen library

This commit is contained in:
2024-01-13 19:15:18 +01:00
parent 7b660f0fe2
commit 65ff5de90f
533 changed files with 113575 additions and 2 deletions

View File

@ -0,0 +1,7 @@
#include <gui/common/FrontendApplication.hpp>
FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
: FrontendApplicationBase(m, heap)
{
}

View File

@ -0,0 +1,34 @@
#include <gui/mainview_screen/MainViewView.hpp>
#include <gui/mainview_screen/MainViewPresenter.hpp>
MainViewPresenter::MainViewPresenter(MainViewView& v)
: view(v)
{
}
void MainViewPresenter::activate()
{
}
void MainViewPresenter::deactivate()
{
}
void MainViewPresenter::notifyModeChanged(std::string newMode){
view.setModeSignal(newMode);
}
void MainViewPresenter::notifyFreqChanged(std::string newFreq){
view.setFreqSignal(newFreq);
}
void MainViewPresenter::notifyDivTimChanged(std::string newDivTim){
view.setLabelDivTime(newDivTim);
}
void MainViewPresenter::notifyDrawGraph(uint16_t * values, uint16_t maxSize, float xScale /* = 1 */){
view.drawGraph(values, maxSize, xScale);
};

View File

@ -0,0 +1,75 @@
#include <cassert>
#include "gui/mainview_screen/MainViewView.hpp"
#include "app/gui.h"
MainViewView* MainViewView::_instance = nullptr;
MainViewView::MainViewView()
{
assert(!_instance);
if(_instance==nullptr){
_instance = this;
}
}
MainViewView* MainViewView::getInstance() {
return _instance;
}
void MainViewView::setupScreen()
{
MainViewViewBase::setupScreen();
}
void MainViewView::tearDownScreen()
{
MainViewViewBase::tearDownScreen();
}
void MainViewView::onBtnPlusPressed(){
oscilloscope::Gui::getInstance()->onButtonTimePlusPressed();
}
void MainViewView::onBtnMinusPressed(){
oscilloscope::Gui::getInstance()->onButtonTimeMinusPressed();
}
void MainViewView::onCheckBoxTriggerPressed(){
// Get actual state of the trigger checkbox by reading the status of the red LED
const bool checked = !redLedDisable.isVisible();
// Notify GUI
oscilloscope::Gui::getInstance()->onCheckBoxTriggerCheckState(checked);
}
void MainViewView::setModeSignal(const std::string str){
Unicode::fromUTF8((const unsigned char *)str.c_str(),labelSignalBuffer1,LABELSIGNALBUFFER1_SIZE);
labelSignal.invalidate();
}
void MainViewView::setFreqSignal(const std::string str){
Unicode::fromUTF8((const unsigned char *)str.c_str(),labelSignalBuffer2,LABELSIGNALBUFFER2_SIZE);
labelSignal.invalidate();
}
void MainViewView::setLabelDivTime(const std::string str){
Unicode::fromUTF8((const unsigned char *)str.c_str(),labelDivTimeBuffer,LABELDIVTIME_SIZE);
labelDivTime.invalidate();
}
void MainViewView::drawGraph(uint16_t* values, uint16_t maxSize, float xScale /* = 1 */){
chart.clear();
chartMajorXAxisGrid.setInterval(460/8); // Show 8 division on the chart
chart.setGraphRangeX(0, 460-1);
for(float addedPoints = 0, valuesIndex = 0;
(uint32_t)valuesIndex < maxSize and addedPoints < 460;
addedPoints++)
{
chart.addDataPoint(values[(uint32_t)valuesIndex]);
valuesIndex = addedPoints * xScale;
}
chart.invalidate();
}

View File

@ -0,0 +1,124 @@
#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>
Model* Model::_instance = nullptr;
Model::Model() :
modelListener(0),
values(nullptr),
maxSize(0),
xScale(1.0f)
{
if(_instance==nullptr){
_instance = this;
}
#if (TOUCHGFX_FREERTOS != 0)
gui_msg_q = xQueueGenericCreate(5, sizeof(GUI_EVENT), 0);
#endif // TOUCHGFX_FREERTOS
#if (TOUCHGFX_BAREMETAL != 0)
flagMode = flagDivTim = flagFreq = flagGraph = false;
#endif // TOUCHGFX_BAREMETAL
}
Model* Model::getInstance() {
return _instance;
}
void Model::tick()
{
//*******************************************************
//
// HANDLE MESSAGES
//
// Check for messages from backend, with zero timeout to
// avoid blocking the UI.
//
//*******************************************************
//
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg;
if (xQueueReceive(gui_msg_q, &msg, 0) == pdTRUE)
{
if(msg==FREQUENCY_EVENT){
modelListener->notifyFreqChanged(textFreq);
}
if(msg==MODE_EVENT){
modelListener->notifyModeChanged(textMode);
}
if(msg==DIVTIM_EVENT){
modelListener->notifyDivTimChanged(textDivTim);
}
if(msg==GRAPH_EVENT){
modelListener->notifyDrawGraph(values, maxSize);
}
}
#endif // TOUCHGFX_FREERTOS
#if (TOUCHGFX_BAREMETAL != 0)
if(this->flagFreq){
flagFreq=false;
modelListener->notifyFreqChanged(textFreq);
}
if(this->flagMode){
flagMode=false;
modelListener->notifyModeChanged(textMode);
}
if(this->flagDivTim){
flagDivTim=false;
modelListener->notifyDivTimChanged(textDivTim);
}
if(this->flagGraph){
flagGraph=false;
modelListener->notifyDrawGraph(values, maxSize, xScale);
}
#endif // TOUCHGFX_BAREMETAL
}
void Model::setGraphPoints(uint16_t * values, uint16_t maxSize, float xScale /* = 1 */){
this->values=values;
this->maxSize=maxSize;
this->xScale = xScale;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagGraph=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = GRAPH_EVENT;
if(uxQueueMessagesWaiting(gui_msg_q)==0){
xQueueSend(gui_msg_q, &msg, 0);
}
#endif // TOUCHGFX_FREERTOS
// Makes async call to modelListener->notifyDrawGraph(...) see Model::tick()
}
void Model::setDivTimLabel(const std::string str){
textDivTim = str;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagDivTim=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = DIVTIM_EVENT;
xQueueSend(gui_msg_q, &msg, 0);
#endif // TOUCHGFX_FREERTOS
}
void Model::setModeSignal(const std::string str){
textMode = str;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagMode=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = MODE_EVENT;
xQueueSend(gui_msg_q, &msg, 0);
#endif // TOUCHGFX_FREERTOS
}
void Model::setFreqSignal(const std::string str){
textFreq = str;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagFreq=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = FREQUENCY_EVENT;
xQueueSend(gui_msg_q, &msg, 0);
#endif // TOUCHGFX_FREERTOS
}