mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[hardware_test] VBlank test
This commit is contained in:
@@ -12,4 +12,5 @@ app_src += $(addprefix apps/hardware_test/,\
|
||||
screen_test_controller.cpp \
|
||||
screen_test_controller.cpp \
|
||||
serial_number_controller.cpp \
|
||||
vblank_test_controller.cpp \
|
||||
)
|
||||
|
||||
@@ -28,16 +28,18 @@ App::WizardViewController::WizardViewController(Responder * parentResponder) :
|
||||
m_screenTestController(this),
|
||||
m_ledTestController(this),
|
||||
m_batteryTestController(this),
|
||||
m_serialNumberController(this)
|
||||
m_serialNumberController(this),
|
||||
m_vBlankTestController(this)
|
||||
{
|
||||
}
|
||||
|
||||
int App::WizardViewController::numberOfChildren() {
|
||||
return 5;
|
||||
return 6;
|
||||
}
|
||||
|
||||
ViewController * App::WizardViewController::childAtIndex(int i) {
|
||||
ViewController * children[] = {
|
||||
&m_vBlankTestController,
|
||||
&m_keyboardController,
|
||||
&m_screenTestController,
|
||||
&m_ledTestController,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "led_test_controller.h"
|
||||
#include "battery_test_controller.h"
|
||||
#include "serial_number_controller.h"
|
||||
#include "vblank_test_controller.h"
|
||||
|
||||
class AppsContainer;
|
||||
|
||||
@@ -32,6 +33,7 @@ private:
|
||||
LEDTestController m_ledTestController;
|
||||
BatteryTestController m_batteryTestController;
|
||||
SerialNumberController m_serialNumberController;
|
||||
VBlankTestController m_vBlankTestController;
|
||||
};
|
||||
|
||||
App(Container * container, Snapshot * snapshot);
|
||||
|
||||
53
apps/hardware_test/vblank_test_controller.cpp
Normal file
53
apps/hardware_test/vblank_test_controller.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#include "vblank_test_controller.h"
|
||||
#include "../apps_container.h"
|
||||
|
||||
using namespace Poincare;
|
||||
|
||||
namespace HardwareTest {
|
||||
|
||||
bool VBlankTestController::handleEvent(Ion::Events::Event event) {
|
||||
if (event == Ion::Events::OK) {
|
||||
if (strcmp(m_view.vBlankStateTextView()->text(), k_vBlankOKText) == 0) {
|
||||
// Handled in WizardViewController
|
||||
return false;
|
||||
}
|
||||
assert(strcmp(m_view.vBlankStateTextView()->text(), k_vBlankLaunchTest) == 0);
|
||||
m_view.setColor(KDColorRed);
|
||||
m_view.vBlankStateTextView()->setText(k_vBlankFailTest);
|
||||
static_cast<AppsContainer *>(const_cast<Container *>(app()->container()))->redrawWindow();
|
||||
/* We redraw the window with "VBLANK FAIL" before lauching the test. This
|
||||
* test might end up in an infinite loop, in which case "VBLANK fail" keeps
|
||||
* being displayed. If the test succeeds, the screen should change very
|
||||
* quickly to "VBLANK OK". */
|
||||
for (int i=0; i<6; i++) {
|
||||
Ion::Display::waitForVBlank();
|
||||
}
|
||||
m_view.setColor(KDColorGreen);
|
||||
m_view.vBlankStateTextView()->setText(k_vBlankOKText);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void VBlankTestController::viewWillAppear() {
|
||||
for (int i=0; i<6; i++) {
|
||||
Ion::Display::waitForVBlank();
|
||||
}
|
||||
m_view.vBlankStateTextView()->setText(k_vBlankLaunchTest);
|
||||
}
|
||||
|
||||
VBlankTestController::ContentView::ContentView() :
|
||||
SolidColorView(KDColorWhite),
|
||||
m_vBlankStateView(KDFont::LargeFont)
|
||||
{
|
||||
}
|
||||
|
||||
void VBlankTestController::ContentView::setColor(KDColor color) {
|
||||
SolidColorView::setColor(color);
|
||||
m_vBlankStateView.setBackgroundColor(color);
|
||||
}
|
||||
|
||||
void VBlankTestController::ContentView::layoutSubviews() {
|
||||
m_vBlankStateView.setFrame(KDRect(0, 0, Ion::Display::Width, Ion::Display::Height));
|
||||
}
|
||||
|
||||
}
|
||||
42
apps/hardware_test/vblank_test_controller.h
Normal file
42
apps/hardware_test/vblank_test_controller.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef HARDWARE_TEST_VBLANK_TEST_CONTROLLER_H
|
||||
#define HARDWARE_TEST_VBLANK_TEST_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#include <assert.h>
|
||||
|
||||
namespace HardwareTest {
|
||||
|
||||
class VBlankTestController : public ViewController {
|
||||
public:
|
||||
VBlankTestController(Responder * parentResponder) :
|
||||
ViewController(parentResponder),
|
||||
m_view()
|
||||
{}
|
||||
View * view() override { return &m_view; }
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void viewWillAppear() override;
|
||||
private:
|
||||
class ContentView : public SolidColorView {
|
||||
public:
|
||||
ContentView();
|
||||
BufferTextView * vBlankStateTextView() { return &m_vBlankStateView; }
|
||||
void setColor(KDColor color) override;
|
||||
private:
|
||||
void layoutSubviews() override;
|
||||
int numberOfSubviews() const override { return 1; }
|
||||
View * subviewAtIndex(int index) override {
|
||||
assert(index == 0);
|
||||
return &m_vBlankStateView;
|
||||
}
|
||||
BufferTextView m_vBlankStateView;
|
||||
};
|
||||
constexpr static const char * k_vBlankOKText = "VBLANK: OK";
|
||||
constexpr static const char * k_vBlankFailTest = "VBLANK: FAIL";
|
||||
constexpr static const char * k_vBlankLaunchTest = "Launch VBLANK test";
|
||||
ContentView m_view;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user