Renamed displayapp/Screens to displayapp/screens
This commit is contained in:
116
src/displayapp/screens/SystemInfo.cpp
Normal file
116
src/displayapp/screens/SystemInfo.cpp
Normal file
@@ -0,0 +1,116 @@
|
||||
#include <libs/lvgl/lvgl.h>
|
||||
#include <DisplayApp/DisplayApp.h>
|
||||
#include <functional>
|
||||
#include "SystemInfo.h"
|
||||
#include "../../Version.h"
|
||||
#include "Tile.h"
|
||||
|
||||
using namespace Pinetime::Applications::Screens;
|
||||
|
||||
SystemInfo::SystemInfo(Pinetime::Applications::DisplayApp *app,
|
||||
Pinetime::Controllers::DateTime &dateTimeController,
|
||||
Pinetime::Controllers::Battery& batteryController,
|
||||
Pinetime::Controllers::BrightnessController& brightnessController,
|
||||
Pinetime::Controllers::Ble& bleController,
|
||||
Pinetime::Drivers::WatchdogView& watchdog) :
|
||||
Screen(app),
|
||||
dateTimeController{dateTimeController}, batteryController{batteryController},
|
||||
brightnessController{brightnessController}, bleController{bleController}, watchdog{watchdog},
|
||||
screens{app, {
|
||||
[this]() -> std::unique_ptr<Screen> { return CreateScreen1(); },
|
||||
[this]() -> std::unique_ptr<Screen> { return CreateScreen2(); },
|
||||
[this]() -> std::unique_ptr<Screen> { return CreateScreen3(); }
|
||||
}
|
||||
} {}
|
||||
|
||||
|
||||
SystemInfo::~SystemInfo() {
|
||||
lv_obj_clean(lv_scr_act());
|
||||
}
|
||||
|
||||
bool SystemInfo::Refresh() {
|
||||
screens.Refresh();
|
||||
return running;
|
||||
}
|
||||
|
||||
bool SystemInfo::OnButtonPushed() {
|
||||
running = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SystemInfo::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
|
||||
return screens.OnTouchEvent(event);
|
||||
}
|
||||
|
||||
std::unique_ptr<Screen> SystemInfo::CreateScreen1() {
|
||||
auto batteryPercentF = batteryController.PercentRemaining();
|
||||
uint16_t batteryPercent = 0;
|
||||
if(batteryPercentF > 100.0f) batteryPercent = 100;
|
||||
else if(batteryPercentF < 0.0f) batteryPercent = 0;
|
||||
|
||||
uint8_t brightness = 0;
|
||||
switch(brightnessController.Level()) {
|
||||
case Controllers::BrightnessController::Levels::Off: brightness = 0; break;
|
||||
case Controllers::BrightnessController::Levels::Low: brightness = 1; break;
|
||||
case Controllers::BrightnessController::Levels::Medium: brightness = 2; break;
|
||||
case Controllers::BrightnessController::Levels::High: brightness = 3; break;
|
||||
}
|
||||
auto resetReason = [this]() {
|
||||
switch (watchdog.ResetReason()) {
|
||||
case Drivers::Watchdog::ResetReasons::Watchdog: return "wtdg";
|
||||
case Drivers::Watchdog::ResetReasons::HardReset: return "hardr";
|
||||
case Drivers::Watchdog::ResetReasons::NFC: return "nfc";
|
||||
case Drivers::Watchdog::ResetReasons::SoftReset: return "softr";
|
||||
case Drivers::Watchdog::ResetReasons::CpuLockup: return "cpulock";
|
||||
case Drivers::Watchdog::ResetReasons::SystemOff: return "off";
|
||||
case Drivers::Watchdog::ResetReasons::LpComp: return "lpcomp";
|
||||
case Drivers::Watchdog::ResetReasons::DebugInterface: return "dbg";
|
||||
case Drivers::Watchdog::ResetReasons::ResetPin: return "rst";
|
||||
default: return "?";
|
||||
}
|
||||
}();
|
||||
|
||||
// uptime
|
||||
static constexpr uint32_t secondsInADay = 60*60*24;
|
||||
static constexpr uint32_t secondsInAnHour = 60*60;
|
||||
static constexpr uint32_t secondsInAMinute = 60;
|
||||
uint32_t uptimeSeconds = dateTimeController.Uptime().count();
|
||||
uint32_t uptimeDays = (uptimeSeconds / secondsInADay);
|
||||
uptimeSeconds = uptimeSeconds % secondsInADay;
|
||||
uint32_t uptimeHours = uptimeSeconds / secondsInAnHour;
|
||||
uptimeSeconds = uptimeSeconds % secondsInAnHour;
|
||||
uint32_t uptimeMinutes = uptimeSeconds / secondsInAMinute;
|
||||
uptimeSeconds = uptimeSeconds % secondsInAMinute;
|
||||
// TODO handle more than 100 days of uptime
|
||||
|
||||
sprintf(t1, "Pinetime\n"
|
||||
"Version:%ld.%ld.%ld\n"
|
||||
"Build: %s\n"
|
||||
" %s\n"
|
||||
"Date: %02d/%02d/%04d\n"
|
||||
"Time: %02d:%02d:%02d\n"
|
||||
"Uptime: %02lud %02lu:%02lu:%02lu\n"
|
||||
"Battery: %d%%\n"
|
||||
"Backlight: %d/3\n"
|
||||
"Last reset: %s\n",
|
||||
Version::Major(), Version::Minor(), Version::Patch(),
|
||||
__DATE__, __TIME__,
|
||||
dateTimeController.Day(), static_cast<uint8_t>(dateTimeController.Month()), dateTimeController.Year(),
|
||||
dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(),
|
||||
uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds,
|
||||
batteryPercent, brightness, resetReason);
|
||||
|
||||
return std::unique_ptr<Screen>(new Screens::Label(app, t1));
|
||||
}
|
||||
|
||||
std::unique_ptr<Screen> SystemInfo::CreateScreen2() {
|
||||
auto& bleAddr = bleController.Address();
|
||||
sprintf(t2, "BLE MAC: \n %2x:%2x:%2x:%2x:%2x:%2x",
|
||||
bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]);
|
||||
return std::unique_ptr<Screen>(new Screens::Label(app, t2));
|
||||
}
|
||||
|
||||
std::unique_ptr<Screen> SystemInfo::CreateScreen3() {
|
||||
strncpy(t3, "Hello from\nthe developper!", 27);
|
||||
return std::unique_ptr<Screen>(new Screens::Label(app, t3));
|
||||
}
|
Reference in New Issue
Block a user