[apps/hardware_test] Clean plugging USB test

Change-Id: I4fcc116c4d498bbc3510c9d9be4596c4e3472f4f
This commit is contained in:
Émilie Feral
2017-06-30 13:42:34 +02:00
parent e0f2fcb2f6
commit cb8a18e551
6 changed files with 50 additions and 39 deletions

View File

@@ -18,8 +18,22 @@ App::Descriptor * App::Snapshot::descriptor() {
App::App(Container * container, Snapshot * snapshot) :
::App(container, snapshot, &m_keyboardController),
m_keyboardController(&m_modalViewController)
m_keyboardController(&m_modalViewController),
m_USBTestController(nullptr)
{
}
ViewController * App::USBController() {
return &m_USBTestController;
}
int App::numberOfTimers() {
return firstResponder() == &m_USBTestController;
}
Timer * App::timerAtIndex(int i) {
assert(i == 0);
return &m_USBTestController;
}
}

View File

@@ -2,6 +2,7 @@
#define HARDWARE_TEST_APP_H
#include <escher.h>
#include "usb_test_controller.h"
#include "keyboard_test_controller.h"
class AppsContainer;
@@ -15,9 +16,13 @@ public:
App * unpack(Container * container) override;
Descriptor * descriptor() override;
};
ViewController * USBController();
int numberOfTimers() override;
Timer * timerAtIndex(int i) override;
private:
App(Container * container, Snapshot * snapshot);
KeyboardTestController m_keyboardController;
USBTestController m_USBTestController;
};
}

View File

@@ -1,5 +1,6 @@
#include "battery_test_controller.h"
#include "../constant.h"
#include "app.h"
extern "C" {
#include <assert.h>
}
@@ -11,8 +12,7 @@ namespace HardwareTest {
BatteryTestController::BatteryTestController(Responder * parentResponder) :
ViewController(parentResponder),
m_view(),
m_usbTestController(this)
m_view()
{
}
@@ -24,7 +24,8 @@ bool BatteryTestController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK) {
if (strcmp(m_view.batteryStateTextView()->text(), k_batteryOKText) == 0) {
ModalViewController * modal = (ModalViewController *)parentResponder();
modal->displayModalViewController(&m_usbTestController, 0.0f, 0.0f);
App * a = (App *)app();
modal->displayModalViewController(a->USBController(), 0.0f, 0.0f);
}
}
updateBatteryState(Ion::Battery::voltage(), Ion::Battery::isCharging());

View File

@@ -2,7 +2,6 @@
#define HARDWARE_TEST_BATTERY_TEST_CONTROLLER_H
#include <escher.h>
#include "usb_test_controller.h"
namespace HardwareTest {
@@ -35,7 +34,6 @@ private:
constexpr static const char * k_batteryNeedChargingText = "BATTERY: NEED RECHARGE";
void updateBatteryState(float batteryLevel, bool batteryCharging);
ContentView m_view;
USBTestController m_usbTestController;
};
}

View File

@@ -10,7 +10,9 @@ namespace HardwareTest {
USBTestController::USBTestController(Responder * parentResponder) :
ViewController(parentResponder),
Timer(1),
m_view(),
m_shouldPlugUSB(true),
m_resetController(this)
{
}
@@ -19,41 +21,31 @@ View * USBTestController::view() {
return &m_view;
}
bool USBTestController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::UpperM) {
return true;
}
if (event == Ion::Events::OK) {
if (Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBPlugText) == 0) {
m_view.USBTextView()->setText(k_USBUnplugText);
m_view.arrowView()->setDirection(false);
m_view.arrowView()->setColor(KDColorRed);
}
if (!Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBUnplugText) == 0) {
ModalViewController * modal = (ModalViewController *)parentResponder();
modal->displayModalViewController(&m_resetController, 0.0f, 0.0f);
}
}
bool USBTestController::handleEvent(Ion::Events::Event e) {
return true;
}
void USBTestController::viewWillAppear() {
m_view.USBTextView()->setText(k_USBPlugText);
m_view.arrowView()->setDirection(true);
m_view.arrowView()->setColor(KDColorGreen);
bool USBTestController::fire() {
if (Ion::USB::isPlugged() && m_shouldPlugUSB) {
m_view.USBTextView()->setText(k_USBUnplugText);
m_view.arrowView()->setDirection(false);
m_view.arrowView()->setColor(KDColorRed);
m_shouldPlugUSB = false;
return true;
}
if (!Ion::USB::isPlugged() && !m_shouldPlugUSB) {
ModalViewController * modal = (ModalViewController *)parentResponder();
modal->displayModalViewController(&m_resetController, 0.0f, 0.0f);
return true;
}
return false;
}
void USBTestController::didBecomeFirstResponder() {
Container * c = (Container *)app()->container();
/* We dispatch a random event that is caught by the hardware test application
* to force the window redraw. */
c->dispatchEvent(Ion::Events::UpperM);
while (!Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBPlugText) == 0) {}
/* We dispatch an event to force the window to redraw (and update the drawn
* instructions at the same type) */
c->dispatchEvent(Ion::Events::OK);
while (Ion::USB::isPlugged() && strcmp(m_view.USBTextView()->text(), k_USBUnplugText) == 0) {}
c->dispatchEvent(Ion::Events::OK);
void USBTestController::viewWillAppear() {
m_shouldPlugUSB = true;
m_view.USBTextView()->setText(k_USBPlugText);
m_view.arrowView()->setDirection(true);
m_view.arrowView()->setColor(KDColorGreen);
}
void USBTestController::ContentView::USBView::drawRect(KDContext * ctx, KDRect rect) const {

View File

@@ -7,14 +7,14 @@
namespace HardwareTest {
class USBTestController : public ViewController {
class USBTestController : public ViewController, public Timer {
public:
USBTestController(Responder * parentResponder);
View * view() override;
bool handleEvent(Ion::Events::Event event) override;
void viewWillAppear() override;
void didBecomeFirstResponder() override;
bool handleEvent(Ion::Events::Event e) override;
private:
bool fire() override;
class ContentView : public SolidColorView {
public:
ContentView();
@@ -39,6 +39,7 @@ private:
constexpr static const char * k_USBPlugText = "PLUG USB";
constexpr static const char * k_USBUnplugText = "OK, UNPLUG USB";
ContentView m_view;
bool m_shouldPlugUSB;
ResetController m_resetController;
};