summaryrefslogtreecommitdiff
path: root/src/DisplayApp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DisplayApp')
-rw-r--r--src/DisplayApp/DisplayApp.cpp111
-rw-r--r--src/DisplayApp/DisplayApp.h34
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_005.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_005.pngbin0 -> 1540 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_010.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_010.pngbin0 -> 1859 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_020.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_020.pngbin0 -> 1558 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_030.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_030.pngbin0 -> 1553 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_040.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_040.pngbin0 -> 1542 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_050.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_050.pngbin0 -> 1539 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_060.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_060.pngbin0 -> 1543 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_070.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_070.pngbin0 -> 1545 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_080.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_080.pngbin0 -> 1549 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_090.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_090.pngbin0 -> 1554 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_100.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_100.pngbin0 -> 1574 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_error.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_battery_error.pngbin0 -> 2128 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_005.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_005.pngbin0 -> 1952 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_010.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_010.pngbin0 -> 1983 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_020.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_020.pngbin0 -> 1982 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_030.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_030.pngbin0 -> 1997 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_040.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_040.pngbin0 -> 1993 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_050.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_050.pngbin0 -> 2036 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_060.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_060.pngbin0 -> 2035 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_070.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_070.pngbin0 -> 2035 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_080.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_080.pngbin0 -> 2087 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_090.c58
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_090.pngbin0 -> 2100 bytes
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_100.c56
-rw-r--r--src/DisplayApp/Icons/battery/os_batterycharging_100.pngbin0 -> 1919 bytes
-rw-r--r--src/DisplayApp/Icons/bluetooth/ck_os_bt_connected.pngbin0 -> 2237 bytes
-rw-r--r--src/DisplayApp/Icons/bluetooth/ck_os_bt_disconnected.pngbin0 -> 2441 bytes
-rw-r--r--src/DisplayApp/Icons/bluetooth/os_bt_connected.c56
-rw-r--r--src/DisplayApp/Icons/bluetooth/os_bt_connected.pngbin0 -> 2237 bytes
-rw-r--r--src/DisplayApp/Icons/bluetooth/os_bt_disconnected.c58
-rw-r--r--src/DisplayApp/Icons/bluetooth/os_bt_disconnected.pngbin0 -> 2441 bytes
-rw-r--r--src/DisplayApp/Screens/BatteryIcon.cpp62
-rw-r--r--src/DisplayApp/Screens/BatteryIcon.h15
-rw-r--r--src/DisplayApp/Screens/BleIcon.cpp12
-rw-r--r--src/DisplayApp/Screens/BleIcon.h14
-rw-r--r--src/DisplayApp/Screens/Brightness.cpp92
-rw-r--r--src/DisplayApp/Screens/Brightness.h33
-rw-r--r--src/DisplayApp/Screens/Clock.cpp43
-rw-r--r--src/DisplayApp/Screens/Clock.h3
-rw-r--r--src/DisplayApp/Screens/Label.cpp28
-rw-r--r--src/DisplayApp/Screens/Label.h24
-rw-r--r--src/DisplayApp/Screens/Modal.cpp52
-rw-r--r--src/DisplayApp/Screens/Modal.h3
-rw-r--r--src/DisplayApp/Screens/Screen.h4
-rw-r--r--src/DisplayApp/Screens/ScreenList.cpp115
-rw-r--r--src/DisplayApp/Screens/ScreenList.h38
-rw-r--r--src/DisplayApp/Screens/Tile.cpp19
-rw-r--r--src/DisplayApp/Screens/Tile.h3
-rw-r--r--src/DisplayApp/TouchEvents.h8
72 files changed, 2020 insertions, 115 deletions
diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp
index 7464175e..1b4515e0 100644
--- a/src/DisplayApp/DisplayApp.cpp
+++ b/src/DisplayApp/DisplayApp.cpp
@@ -13,27 +13,31 @@
#include <DisplayApp/Screens/Message.h>
#include <DisplayApp/Screens/Meter.h>
#include <DisplayApp/Screens/Gauge.h>
+#include <DisplayApp/Screens/Brightness.h>
+#include <DisplayApp/Screens/ScreenList.h>
+#include <Components/Ble/NotificationManager.h>
#include "../SystemTask/SystemTask.h"
using namespace Pinetime::Applications;
-DisplayApp::DisplayApp(Pinetime::Drivers::St7789& lcd,
- Pinetime::Components::LittleVgl& lvgl,
- Pinetime::Drivers::Cst816S& touchPanel,
- Controllers::Battery &batteryController,
- Controllers::Ble &bleController,
- Controllers::DateTime &dateTimeController,
- Pinetime::System::SystemTask& systemTask) :
+DisplayApp::DisplayApp(Drivers::St7789 &lcd, Components::LittleVgl &lvgl, Drivers::Cst816S &touchPanel,
+ Controllers::Battery &batteryController, Controllers::Ble &bleController,
+ Controllers::DateTime &dateTimeController, Drivers::WatchdogView &watchdog,
+ System::SystemTask &systemTask,
+ Pinetime::Controllers::NotificationManager& notificationManager) :
lcd{lcd},
lvgl{lvgl},
- touchPanel{touchPanel},
batteryController{batteryController},
bleController{bleController},
dateTimeController{dateTimeController},
+ watchdog{watchdog},
+ touchPanel{touchPanel},
currentScreen{new Screens::Clock(this, dateTimeController, batteryController, bleController) },
- systemTask{systemTask} {
+ systemTask{systemTask},
+ notificationManager{notificationManager} {
msgQueue = xQueueCreate(queueSize, itemSize);
onClockApp = true;
+ modal.reset(new Screens::Modal(this));
}
void DisplayApp::Start() {
@@ -57,12 +61,7 @@ void DisplayApp::Process(void *instance) {
}
void DisplayApp::InitHw() {
- nrf_gpio_cfg_output(pinLcdBacklight1);
- nrf_gpio_cfg_output(pinLcdBacklight2);
- nrf_gpio_cfg_output(pinLcdBacklight3);
- nrf_gpio_pin_clear(pinLcdBacklight1);
- nrf_gpio_pin_clear(pinLcdBacklight2);
- nrf_gpio_pin_clear(pinLcdBacklight3);
+ brightnessController.Init();
}
uint32_t acc = 0;
@@ -85,11 +84,11 @@ void DisplayApp::Refresh() {
if (xQueueReceive(msgQueue, &msg, queueTimeout)) {
switch (msg) {
case Messages::GoToSleep:
- nrf_gpio_pin_set(pinLcdBacklight3);
- vTaskDelay(100);
- nrf_gpio_pin_set(pinLcdBacklight2);
- vTaskDelay(100);
- nrf_gpio_pin_set(pinLcdBacklight1);
+ brightnessController.Backup();
+ while(brightnessController.Level() != Controllers::BrightnessController::Levels::Off) {
+ brightnessController.Lower();
+ vTaskDelay(100);
+ }
lcd.DisplayOff();
lcd.Sleep();
touchPanel.Sleep();
@@ -100,12 +99,11 @@ void DisplayApp::Refresh() {
touchPanel.Wakeup();
lcd.DisplayOn();
- nrf_gpio_pin_clear(pinLcdBacklight3);
- nrf_gpio_pin_clear(pinLcdBacklight2);
- nrf_gpio_pin_clear(pinLcdBacklight1);
+ brightnessController.Restore();
state = States::Running;
break;
case Messages::UpdateDateTime:
+// modal->Show();
break;
case Messages::UpdateBleConnection:
// clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : Screens::Clock::BleConnectionStates::NotConnected);
@@ -113,20 +111,27 @@ void DisplayApp::Refresh() {
case Messages::UpdateBatteryLevel:
// clockScreen.SetBatteryPercentRemaining(batteryController.PercentRemaining());
break;
+ case Messages::NewNotification: {
+ auto notification = notificationManager.Pop();
+ modal->Show(notification.message.data());
+ }
+ break;
case Messages::TouchEvent: {
if (state != States::Running) break;
auto gesture = OnTouchEvent();
- switch (gesture) {
- case DisplayApp::TouchEvents::SwipeUp:
- currentScreen->OnButtonPushed();
- lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
- break;
- case DisplayApp::TouchEvents::SwipeDown:
- currentScreen->OnButtonPushed();
- lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
- break;
- default:
- break;
+ if(!currentScreen->OnTouchEvent(gesture)) {
+ switch (gesture) {
+ case TouchEvents::SwipeUp:
+ currentScreen->OnButtonPushed();
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
+ break;
+ case TouchEvents::SwipeDown:
+ currentScreen->OnButtonPushed();
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
+ break;
+ default:
+ break;
+ }
}
}
break;
@@ -171,9 +176,11 @@ void DisplayApp::RunningState() {
currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController));
onClockApp = true;
break;
- case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
+// case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
+ case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, watchdog)); break;
case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break;
case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break;
+ case Apps::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break;
}
nextApp = Apps::None;
}
@@ -194,34 +201,46 @@ void DisplayApp::PushMessage(DisplayApp::Messages msg) {
}
}
-DisplayApp::TouchEvents DisplayApp::OnTouchEvent() {
+TouchEvents DisplayApp::OnTouchEvent() {
auto info = touchPanel.GetTouchInfo();
if(info.isTouch) {
switch(info.gesture) {
case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
- // TODO set x,y to LittleVgl
lvgl.SetNewTapEvent(info.x, info.y);
- return DisplayApp::TouchEvents::Tap;
+ return TouchEvents::Tap;
case Pinetime::Drivers::Cst816S::Gestures::LongPress:
- return DisplayApp::TouchEvents::LongTap;
+ return TouchEvents::LongTap;
case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
- return DisplayApp::TouchEvents::DoubleTap;
+ return TouchEvents::DoubleTap;
case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
- return DisplayApp::TouchEvents::SwipeRight;
+ return TouchEvents::SwipeRight;
case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
- return DisplayApp::TouchEvents::SwipeLeft;
+ return TouchEvents::SwipeLeft;
case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
- return DisplayApp::TouchEvents::SwipeDown;
+ return TouchEvents::SwipeDown;
case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
- return DisplayApp::TouchEvents::SwipeUp;
+ return TouchEvents::SwipeUp;
case Pinetime::Drivers::Cst816S::Gestures::None:
default:
- return DisplayApp::TouchEvents::None;
+ return TouchEvents::None;
}
}
- return DisplayApp::TouchEvents::None;
+ return TouchEvents::None;
}
void DisplayApp::StartApp(DisplayApp::Apps app) {
nextApp = app;
}
+
+void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) {
+ switch(direction){
+ case DisplayApp::FullRefreshDirections::Down:
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down);
+ break;
+ case DisplayApp::FullRefreshDirections::Up:
+ lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up);
+ break;
+ default: break;
+ }
+
+}
diff --git a/src/DisplayApp/DisplayApp.h b/src/DisplayApp/DisplayApp.h
index eaad1baa..09f0d1cd 100644
--- a/src/DisplayApp/DisplayApp.h
+++ b/src/DisplayApp/DisplayApp.h
@@ -7,6 +7,7 @@
#include <bits/unique_ptr.h>
#include <queue.h>
#include <Components/Battery/BatteryController.h>
+#include <Components/Brightness/BrightnessController.h>
#include <Components/Ble/BleController.h>
#include <Components/DateTime/DateTimeController.h>
#include "Fonts/lcdfont14.h"
@@ -14,6 +15,10 @@
#include "LittleVgl.h"
#include <date/date.h>
#include <DisplayApp/Screens/Clock.h>
+#include <drivers/Watchdog.h>
+#include <DisplayApp/Screens/Modal.h>
+#include <Components/Ble/NotificationManager.h>
+#include "TouchEvents.h"
namespace Pinetime {
@@ -24,22 +29,24 @@ namespace Pinetime {
class DisplayApp {
public:
enum class States {Idle, Running};
- enum class Messages : uint8_t {GoToSleep, GoToRunning, UpdateDateTime, UpdateBleConnection, UpdateBatteryLevel, TouchEvent, SwitchScreen,ButtonPushed} ;
- enum class TouchEvents { None, Tap, SwipeLeft, SwipeRight, SwipeUp, SwipeDown, LongTap, DoubleTap
+ enum class Messages : uint8_t {GoToSleep, GoToRunning, UpdateDateTime, UpdateBleConnection, UpdateBatteryLevel, TouchEvent, SwitchScreen,ButtonPushed,
+ NewNotification
};
- DisplayApp(Pinetime::Drivers::St7789& lcd,
- Pinetime::Components::LittleVgl& lvgl,
- Pinetime::Drivers::Cst816S&,
- Controllers::Battery &batteryController,
- Controllers::Ble &bleController,
- Controllers::DateTime& dateTimeController,
- Pinetime::System::SystemTask& systemTask);
+ enum class FullRefreshDirections { None, Up, Down };
+
+
+ DisplayApp(Drivers::St7789 &lcd, Components::LittleVgl &lvgl, Drivers::Cst816S &,
+ Controllers::Battery &batteryController, Controllers::Ble &bleController,
+ Controllers::DateTime &dateTimeController, Drivers::WatchdogView &watchdog,
+ System::SystemTask &systemTask,
+ Pinetime::Controllers::NotificationManager& notificationManager);
void Start();
void PushMessage(Messages msg);
- enum class Apps {None, Launcher, Clock, Test, Meter, Gauge};
+ enum class Apps {None, Launcher, Clock, SysInfo, Meter, Gauge, Brightness};
void StartApp(Apps app);
+ void SetFullRefresh(FullRefreshDirections direction);
private:
TaskHandle_t taskHandle;
static void Process(void* instance);
@@ -59,20 +66,21 @@ namespace Pinetime {
Pinetime::Controllers::Battery &batteryController;
Pinetime::Controllers::Ble &bleController;
Pinetime::Controllers::DateTime& dateTimeController;
+ Pinetime::Drivers::WatchdogView& watchdog;
Pinetime::Drivers::Cst816S& touchPanel;
TouchEvents OnTouchEvent();
std::unique_ptr<Screens::Screen> currentScreen;
- static constexpr uint8_t pinLcdBacklight1 = 14;
- static constexpr uint8_t pinLcdBacklight2 = 22;
- static constexpr uint8_t pinLcdBacklight3 = 23;
bool isClock = true;
Pinetime::System::SystemTask& systemTask;
Apps nextApp = Apps::None;
bool onClockApp = false; // TODO find a better way to know that we should handle gestures and button differently for the Clock app.
+ Controllers::BrightnessController brightnessController;
+ std::unique_ptr<Screens::Modal> modal;
+ Pinetime::Controllers::NotificationManager& notificationManager;
};
}
}
diff --git a/src/DisplayApp/Icons/battery/os_battery_005.c b/src/DisplayApp/Icons/battery/os_battery_005.c
new file mode 100644
index 00000000..64832b5c
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_005.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 uint8_t ck_os_battery_005_map[] = {
+ 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+
+ 0xfc, 0x00, 0x3f,
+ 0xf8, 0x00, 0x1f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0x00,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+};
+
+const lv_img_dsc_t ck_os_battery_005 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_005_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_005.png b/src/DisplayApp/Icons/battery/os_battery_005.png
new file mode 100644
index 00000000..963767be
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_005.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_010.c b/src/DisplayApp/Icons/battery/os_battery_010.c
new file mode 100644
index 00000000..f36b684b
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_010.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 uint8_t ck_os_battery_010_map[] = {
+ 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+ 0x04, 0x7a, 0xf4, 0xff, /*Color of index 2*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 3*/
+
+ 0x55, 0x5f, 0xff, 0xff, 0xf5, 0x55, 0x55,
+ 0x55, 0x7f, 0xff, 0xff, 0xfd, 0x55, 0x55,
+ 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55,
+ 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55,
+ 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55,
+ 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55,
+ 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55,
+ 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xff, 0x55, 0x55, 0x6a, 0xaa, 0xaa, 0xa9,
+ 0xff, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x50, 0x05, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xff, 0x50, 0x05, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0xff, 0xf5, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0xff, 0xf5, 0xaa, 0xa5, 0x5a, 0xaa,
+ 0xff, 0xff, 0xf5, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xff, 0xff, 0xf5, 0x6a, 0xaa, 0xaa, 0xa9,
+};
+
+const lv_img_dsc_t ck_os_battery_010 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 240,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_battery_010_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_010.png b/src/DisplayApp/Icons/battery/os_battery_010.png
new file mode 100644
index 00000000..68a9f406
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_010.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_020.c b/src/DisplayApp/Icons/battery/os_battery_020.c
new file mode 100644
index 00000000..3f648fb9
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_020.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 uint8_t ck_os_battery_020_map[] = {
+ 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55,
+ 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa,
+ 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+};
+
+const lv_img_dsc_t ck_os_battery_020 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 208,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_battery_020_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_020.png b/src/DisplayApp/Icons/battery/os_battery_020.png
new file mode 100644
index 00000000..32eca651
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_020.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_030.c b/src/DisplayApp/Icons/battery/os_battery_030.c
new file mode 100644
index 00000000..4d5719b7
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_030.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 uint8_t ck_os_battery_030_map[] = {
+ 0x04, 0x7a, 0xf4, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55,
+ 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa,
+ 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa,
+ 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa,
+ 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+};
+
+const lv_img_dsc_t ck_os_battery_030 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 208,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_battery_030_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_030.png b/src/DisplayApp/Icons/battery/os_battery_030.png
new file mode 100644
index 00000000..aeb5eb1f
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_030.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_040.c b/src/DisplayApp/Icons/battery/os_battery_040.c
new file mode 100644
index 00000000..0606fc35
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_040.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 uint8_t ck_os_battery_040_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_battery_040 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_040_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_040.png b/src/DisplayApp/Icons/battery/os_battery_040.png
new file mode 100644
index 00000000..d84fda40
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_040.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_050.c b/src/DisplayApp/Icons/battery/os_battery_050.c
new file mode 100644
index 00000000..8732dc7a
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_050.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 uint8_t ck_os_battery_050_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_battery_050 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_050_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_050.png b/src/DisplayApp/Icons/battery/os_battery_050.png
new file mode 100644
index 00000000..224d38d6
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_050.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_060.c b/src/DisplayApp/Icons/battery/os_battery_060.c
new file mode 100644
index 00000000..a65936bf
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_060.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 uint8_t ck_os_battery_060_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_battery_060 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_060_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_060.png b/src/DisplayApp/Icons/battery/os_battery_060.png
new file mode 100644
index 00000000..e5e00eda
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_060.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_070.c b/src/DisplayApp/Icons/battery/os_battery_070.c
new file mode 100644
index 00000000..949c0b8b
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_070.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 uint8_t ck_os_battery_070_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_battery_070 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_070_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_070.png b/src/DisplayApp/Icons/battery/os_battery_070.png
new file mode 100644
index 00000000..dee969b8
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_070.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_080.c b/src/DisplayApp/Icons/battery/os_battery_080.c
new file mode 100644
index 00000000..f447370e
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_080.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 uint8_t ck_os_battery_080_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_battery_080 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_080_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_080.png b/src/DisplayApp/Icons/battery/os_battery_080.png
new file mode 100644
index 00000000..3b13fbb2
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_080.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_090.c b/src/DisplayApp/Icons/battery/os_battery_090.c
new file mode 100644
index 00000000..6fa41b20
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_090.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 uint8_t ck_os_battery_090_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_battery_090 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_battery_090_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_090.png b/src/DisplayApp/Icons/battery/os_battery_090.png
new file mode 100644
index 00000000..d79f396b
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_090.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_100.c b/src/DisplayApp/Icons/battery/os_battery_100.c
new file mode 100644
index 00000000..92cf9a41
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_100.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 uint8_t ck_os_battery_100_map[] = {
+ 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa,
+ 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+};
+
+const lv_img_dsc_t ck_os_battery_100 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 208,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_battery_100_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_100.png b/src/DisplayApp/Icons/battery/os_battery_100.png
new file mode 100644
index 00000000..dd0d306f
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_100.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_battery_error.c b/src/DisplayApp/Icons/battery/os_battery_error.c
new file mode 100644
index 00000000..af6aba5d
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_error.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR uint8_t ck_os_battery_error_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xc4, 0xc2, 0xc4, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x00, 0x05, 0x55, 0x55, 0x50, 0x00,
+ 0x00, 0x15, 0x55, 0x55, 0x54, 0x00,
+ 0x00, 0x55, 0x55, 0x55, 0x55, 0x00,
+ 0x00, 0x55, 0x55, 0x55, 0x55, 0x00,
+ 0x55, 0x55, 0x00, 0x00, 0x55, 0x55,
+ 0x55, 0x55, 0x00, 0x00, 0x55, 0x55,
+ 0x55, 0x55, 0x00, 0x00, 0x55, 0x55,
+ 0x55, 0x54, 0x00, 0x00, 0x15, 0x55,
+ 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55,
+ 0x55, 0x00, 0xaa, 0xaa, 0x00, 0x55,
+ 0x55, 0x02, 0xaa, 0xaa, 0x80, 0x55,
+ 0x55, 0x02, 0xaa, 0xaa, 0x80, 0x55,
+ 0x55, 0x0a, 0xa8, 0x2a, 0xa0, 0x55,
+ 0x55, 0x0a, 0xa0, 0x0a, 0xa0, 0x55,
+ 0x55, 0x00, 0x00, 0x0a, 0xa0, 0x55,
+ 0x55, 0x00, 0x00, 0x2a, 0xa0, 0x55,
+ 0x55, 0x00, 0x02, 0xaa, 0x80, 0x55,
+ 0x55, 0x00, 0x0a, 0xaa, 0x80, 0x55,
+ 0x55, 0x00, 0x0a, 0xaa, 0x00, 0x55,
+ 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55,
+ 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55,
+ 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55,
+ 0x55, 0x00, 0x00, 0x00, 0x00, 0x55,
+ 0x55, 0x00, 0x00, 0x00, 0x00, 0x55,
+ 0x55, 0x00, 0x02, 0x80, 0x00, 0x55,
+ 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55,
+ 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55,
+ 0x55, 0x00, 0x02, 0x80, 0x00, 0x55,
+ 0x55, 0x55, 0x40, 0x01, 0x55, 0x55,
+ 0x55, 0x55, 0x50, 0x05, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+};
+
+const lv_img_dsc_t ck_os_battery_error = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 208,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_battery_error_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_battery_error.png b/src/DisplayApp/Icons/battery/os_battery_error.png
new file mode 100644
index 00000000..4c7632fe
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_battery_error.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_005.c b/src/DisplayApp/Icons/battery/os_batterycharging_005.c
new file mode 100644
index 00000000..1b0c71df
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_005.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 uint8_t ck_os_batterycharging_005_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0, 0x00,
+ 0x07, 0xff, 0xe0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x07, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x1f, 0x00,
+ 0xf0, 0x00, 0x3e, 0x00,
+ 0xf0, 0x00, 0x7e, 0x00,
+ 0xf0, 0x00, 0xfc, 0x00,
+ 0xf0, 0x01, 0xff, 0xf0,
+ 0xf0, 0x03, 0xff, 0xf0,
+ 0xf0, 0x03, 0xff, 0xf0,
+ 0xf0, 0x03, 0xff, 0xe0,
+ 0xf0, 0x00, 0x0f, 0xc0,
+ 0xf0, 0x00, 0x1f, 0x80,
+ 0xff, 0xff, 0x3f, 0x00,
+ 0xff, 0xff, 0x3e, 0x00,
+ 0xff, 0xff, 0x3c, 0x00,
+ 0xff, 0xff, 0x38, 0x00,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_005 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 136,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_batterycharging_005_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_005.png b/src/DisplayApp/Icons/battery/os_batterycharging_005.png
new file mode 100644
index 00000000..f9545bc1
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_005.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_010.c b/src/DisplayApp/Icons/battery/os_batterycharging_010.c
new file mode 100644
index 00000000..304c0184
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_010.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 uint8_t ck_os_batterycharging_010_map[] = {
+ 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55,
+ 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55,
+ 0xaa, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5,
+ 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_010 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 240,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_batterycharging_010_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_010.png b/src/DisplayApp/Icons/battery/os_batterycharging_010.png
new file mode 100644
index 00000000..04d5f820
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_010.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_020.c b/src/DisplayApp/Icons/battery/os_batterycharging_020.c
new file mode 100644
index 00000000..1721be15
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_020.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 uint8_t ck_os_batterycharging_020_map[] = {
+ 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55,
+ 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55,
+ 0xaa, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5,
+ 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_020 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 240,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_batterycharging_020_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_020.png b/src/DisplayApp/Icons/battery/os_batterycharging_020.png
new file mode 100644
index 00000000..6416e1e6
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_020.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_030.c b/src/DisplayApp/Icons/battery/os_batterycharging_030.c
new file mode 100644
index 00000000..83101fd9
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_030.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 uint8_t ck_os_batterycharging_030_map[] = {
+ 0x04, 0x7a, 0xf4, 0xff, /*Color of index 0*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55,
+ 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55,
+ 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55,
+ 0xaa, 0x50, 0x00, 0x56, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5,
+ 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_030 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 240,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_batterycharging_030_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_030.png b/src/DisplayApp/Icons/battery/os_batterycharging_030.png
new file mode 100644
index 00000000..96b44d2e
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_030.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_040.c b/src/DisplayApp/Icons/battery/os_batterycharging_040.c
new file mode 100644
index 00000000..02af00e5
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_040.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 uint8_t ck_os_batterycharging_040_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0, 0x00,
+ 0x07, 0xff, 0xe0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x07, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x1f, 0x00,
+ 0xf0, 0x00, 0x3e, 0x00,
+ 0xf3, 0xf8, 0x7e, 0x00,
+ 0xf3, 0xf0, 0xfc, 0x00,
+ 0xf3, 0xf1, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xe0,
+ 0xf0, 0x00, 0x0f, 0xc0,
+ 0xf0, 0x00, 0x1f, 0x80,
+ 0xff, 0xff, 0x3f, 0x00,
+ 0xff, 0xff, 0x3e, 0x00,
+ 0xff, 0xff, 0x3c, 0x00,
+ 0xff, 0xff, 0x38, 0x00,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_040 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 136,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_batterycharging_040_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_040.png b/src/DisplayApp/Icons/battery/os_batterycharging_040.png
new file mode 100644
index 00000000..5a42caf2
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_040.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_050.c b/src/DisplayApp/Icons/battery/os_batterycharging_050.c
new file mode 100644
index 00000000..d2eea829
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_050.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 uint8_t ck_os_batterycharging_050_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0, 0x00,
+ 0x07, 0xff, 0xe0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x07, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf3, 0xfe, 0x1f, 0x00,
+ 0xf3, 0xfc, 0x3e, 0x00,
+ 0xf3, 0xf8, 0x7e, 0x00,
+ 0xf3, 0xf0, 0xfc, 0x00,
+ 0xf3, 0xf1, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xe0,
+ 0xf0, 0x00, 0x0f, 0xc0,
+ 0xf0, 0x00, 0x1f, 0x80,
+ 0xff, 0xff, 0x3f, 0x00,
+ 0xff, 0xff, 0x3e, 0x00,
+ 0xff, 0xff, 0x3c, 0x00,
+ 0xff, 0xff, 0x38, 0x00,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_050 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 136,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_batterycharging_050_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_050.png b/src/DisplayApp/Icons/battery/os_batterycharging_050.png
new file mode 100644
index 00000000..ca0e04dd
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_050.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_060.c b/src/DisplayApp/Icons/battery/os_batterycharging_060.c
new file mode 100644
index 00000000..05f8b975
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_060.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 uint8_t ck_os_batterycharging_060_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0, 0x00,
+ 0x07, 0xff, 0xe0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf0, 0x00, 0x00, 0x00,
+ 0xf3, 0xff, 0x87, 0x00,
+ 0xf3, 0xff, 0x0f, 0x00,
+ 0xf3, 0xfe, 0x1f, 0x00,
+ 0xf3, 0xfc, 0x3e, 0x00,
+ 0xf3, 0xf8, 0x7e, 0x00,
+ 0xf3, 0xf0, 0xfc, 0x00,
+ 0xf3, 0xf1, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xe0,
+ 0xf0, 0x00, 0x0f, 0xc0,
+ 0xf0, 0x00, 0x1f, 0x80,
+ 0xff, 0xff, 0x3f, 0x00,
+ 0xff, 0xff, 0x3e, 0x00,
+ 0xff, 0xff, 0x3c, 0x00,
+ 0xff, 0xff, 0x38, 0x00,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_060 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 136,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_batterycharging_060_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_060.png b/src/DisplayApp/Icons/battery/os_batterycharging_060.png
new file mode 100644
index 00000000..2930068a
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_060.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_070.c b/src/DisplayApp/Icons/battery/os_batterycharging_070.c
new file mode 100644
index 00000000..ac3e319c
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_070.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 uint8_t ck_os_batterycharging_070_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0, 0x00,
+ 0x07, 0xff, 0xe0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xff, 0x00, 0xff, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf0, 0x00, 0x0f, 0x00,
+ 0xf3, 0xff, 0xc0, 0x00,
+ 0xf3, 0xff, 0xc0, 0x00,
+ 0xf3, 0xff, 0x87, 0x00,
+ 0xf3, 0xff, 0x0f, 0x00,
+ 0xf3, 0xfe, 0x1f, 0x00,
+ 0xf3, 0xfc, 0x3e, 0x00,
+ 0xf3, 0xf8, 0x7e, 0x00,
+ 0xf3, 0xf0, 0xfc, 0x00,
+ 0xf3, 0xf1, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xf0,
+ 0xf3, 0xf3, 0xff, 0xe0,
+ 0xf0, 0x00, 0x0f, 0xc0,
+ 0xf0, 0x00, 0x1f, 0x80,
+ 0xff, 0xff, 0x3f, 0x00,
+ 0xff, 0xff, 0x3e, 0x00,
+ 0xff, 0xff, 0x3c, 0x00,
+ 0xff, 0xff, 0x38, 0x00,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_070 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 136,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_batterycharging_070_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_070.png b/src/DisplayApp/Icons/battery/os_batterycharging_070.png
new file mode 100644
index 00000000..7d5f55d7
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_070.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_080.c b/src/DisplayApp/Icons/battery/os_batterycharging_080.c
new file mode 100644
index 00000000..cc1c1d23
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_080.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 uint8_t ck_os_batterycharging_080_map[] = {
+ 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, 0xaa,
+ 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x2a, 0x95, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x02, 0xa9, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x0a, 0xa5, 0x56, 0xaa,
+ 0x55, 0xa0, 0x00, 0x2a, 0x95, 0x56, 0xaa,
+ 0x55, 0xa0, 0x00, 0xaa, 0x55, 0x5a, 0xaa,
+ 0x55, 0xa0, 0x00, 0xa9, 0x55, 0x55, 0x55,
+ 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55,
+ 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55,
+ 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x56,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x5a,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xa9, 0x55, 0x6a,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x55, 0xaa,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x56, 0xaa,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x5a, 0xaa,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x6a, 0xaa,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_080 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 240,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_batterycharging_080_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_080.png b/src/DisplayApp/Icons/battery/os_batterycharging_080.png
new file mode 100644
index 00000000..cce5052f
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_080.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_090.c b/src/DisplayApp/Icons/battery/os_batterycharging_090.c
new file mode 100644
index 00000000..85e1c260
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_090.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 uint8_t ck_os_batterycharging_090_map[] = {
+ 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, 0xaa,
+ 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa,
+ 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0x2a, 0x95, 0xaa,
+ 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x02, 0xa9, 0x55, 0xaa,
+ 0x55, 0xa0, 0x00, 0x0a, 0xa5, 0x56, 0xaa,
+ 0x55, 0xa0, 0x00, 0x2a, 0x95, 0x56, 0xaa,
+ 0x55, 0xa0, 0x00, 0xaa, 0x55, 0x5a, 0xaa,
+ 0x55, 0xa0, 0x00, 0xa9, 0x55, 0x55, 0x55,
+ 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55,
+ 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55,
+ 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x56,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x5a,
+ 0x55, 0xaa, 0xaa, 0xaa, 0xa9, 0x55, 0x6a,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x55, 0xaa,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x56, 0xaa,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x5a, 0xaa,
+ 0x55, 0x55, 0x55, 0x55, 0xa5, 0x6a, 0xaa,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_090 = {
+ .header.always_zero = 0,
+ .header.w = 28,
+ .header.h = 32,
+ .data_size = 240,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_batterycharging_090_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_090.png b/src/DisplayApp/Icons/battery/os_batterycharging_090.png
new file mode 100644
index 00000000..fc7b443d
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_090.png
Binary files differ
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_100.c b/src/DisplayApp/Icons/battery/os_batterycharging_100.c
new file mode 100644
index 00000000..8dec0cb5
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_100.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100
+#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 uint8_t ck_os_batterycharging_100_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x03, 0xff, 0xc0,
+ 0x07, 0xff, 0xe0,
+ 0x0f, 0xff, 0xf0,
+ 0x0f, 0xff, 0xf0,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0xff,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x07, 0x0f,
+ 0xf0, 0x0f, 0x0f,
+ 0xf0, 0x1f, 0x0f,
+ 0xf0, 0x3e, 0x0f,
+ 0xf0, 0x7e, 0x0f,
+ 0xf0, 0xfc, 0x0f,
+ 0xf1, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0xcf,
+ 0xf3, 0xff, 0x8f,
+ 0xf0, 0x3f, 0x0f,
+ 0xf0, 0x7e, 0x0f,
+ 0xf0, 0x7c, 0x0f,
+ 0xf0, 0xf8, 0x0f,
+ 0xf0, 0xf0, 0x0f,
+ 0xf0, 0xe0, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xf0, 0x00, 0x0f,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+};
+
+const lv_img_dsc_t ck_os_batterycharging_100 = {
+ .header.always_zero = 0,
+ .header.w = 24,
+ .header.h = 32,
+ .data_size = 104,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_batterycharging_100_map,
+};
diff --git a/src/DisplayApp/Icons/battery/os_batterycharging_100.png b/src/DisplayApp/Icons/battery/os_batterycharging_100.png
new file mode 100644
index 00000000..7c8ce0c4
--- /dev/null
+++ b/src/DisplayApp/Icons/battery/os_batterycharging_100.png
Binary files differ
diff --git a/src/DisplayApp/Icons/bluetooth/ck_os_bt_connected.png b/src/DisplayApp/Icons/bluetooth/ck_os_bt_connected.png
new file mode 100644
index 00000000..53716115
--- /dev/null
+++ b/src/DisplayApp/Icons/bluetooth/ck_os_bt_connected.png
Binary files differ
diff --git a/src/DisplayApp/Icons/bluetooth/ck_os_bt_disconnected.png b/src/DisplayApp/Icons/bluetooth/ck_os_bt_disconnected.png
new file mode 100644
index 00000000..3275895d
--- /dev/null
+++ b/src/DisplayApp/Icons/bluetooth/ck_os_bt_disconnected.png
Binary files differ
diff --git a/src/DisplayApp/Icons/bluetooth/os_bt_connected.c b/src/DisplayApp/Icons/bluetooth/os_bt_connected.c
new file mode 100644
index 00000000..d30dc9d0
--- /dev/null
+++ b/src/DisplayApp/Icons/bluetooth/os_bt_connected.c
@@ -0,0 +1,56 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED
+#define LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED uint8_t ck_os_bt_connected_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/
+
+ 0x00, 0x0e, 0x00, 0x00,
+ 0x00, 0x0f, 0x00, 0x00,
+ 0x00, 0x0f, 0x80, 0x00,
+ 0x00, 0x0f, 0xc0, 0x00,
+ 0x00, 0x0f, 0xe0, 0x00,
+ 0x00, 0x0f, 0xf0, 0x00,
+ 0x03, 0x8f, 0xf8, 0x00,
+ 0x03, 0xcf, 0x7c, 0x00,
+ 0x03, 0xef, 0x3e, 0x00,
+ 0x01, 0xff, 0x1f, 0x00,
+ 0x00, 0xff, 0x1f, 0x00,
+ 0x00, 0x7f, 0x3e, 0x00,
+ 0x00, 0x3f, 0x7c, 0x00,
+ 0x00, 0x1f, 0xf8, 0x00,
+ 0x00, 0x0f, 0xf0, 0x00,
+ 0x00, 0x0f, 0xe0, 0x00,
+ 0x00, 0x0f, 0xe0, 0x00,
+ 0x00, 0x0f, 0xf0, 0x00,
+ 0x00, 0x1f, 0xf8, 0x00,
+ 0x00, 0x3f, 0x7c, 0x00,
+ 0x00, 0x7f, 0x3e, 0x00,
+ 0x00, 0xff, 0x1f, 0x00,
+ 0x01, 0xff, 0x1f, 0x00,
+ 0x03, 0xef, 0x3e, 0x00,
+ 0x03, 0xcf, 0x7c, 0x00,
+ 0x03, 0x8f, 0xf8, 0x00,
+ 0x00, 0x0f, 0xf0, 0x00,
+ 0x00, 0x0f, 0xe0, 0x00,
+ 0x00, 0x0f, 0xc0, 0x00,
+ 0x00, 0x0f, 0x80, 0x00,
+ 0x00, 0x0f, 0x00, 0x00,
+ 0x00, 0x0e, 0x00, 0x00,
+};
+
+const lv_img_dsc_t ck_os_bt_connected = {
+ .header.always_zero = 0,
+ .header.w = 32,
+ .header.h = 32,
+ .data_size = 136,
+ .header.cf = LV_IMG_CF_INDEXED_1BIT,
+ .data = ck_os_bt_connected_map,
+};
diff --git a/src/DisplayApp/Icons/bluetooth/os_bt_connected.png b/src/DisplayApp/Icons/bluetooth/os_bt_connected.png
new file mode 100644
index 00000000..53716115
--- /dev/null
+++ b/src/DisplayApp/Icons/bluetooth/os_bt_connected.png
Binary files differ
diff --git a/src/DisplayApp/Icons/bluetooth/os_bt_disconnected.c b/src/DisplayApp/Icons/bluetooth/os_bt_disconnected.c
new file mode 100644
index 00000000..930179b6
--- /dev/null
+++ b/src/DisplayApp/Icons/bluetooth/os_bt_disconnected.c
@@ -0,0 +1,58 @@
+#include "lvgl/lvgl.h"
+
+#ifndef LV_ATTRIBUTE_MEM_ALIGN
+#define LV_ATTRIBUTE_MEM_ALIGN
+#endif
+
+#ifndef LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED
+#define LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED
+#endif
+
+const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED uint8_t ck_os_bt_disconnected_map[] = {
+ 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/
+ 0xc4, 0xc2, 0xc4, 0xff, /*Color of index 1*/
+ 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/
+ 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/
+
+ 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00,
+ 0x2a, 0x80, 0x00, 0x55, 0x40, 0x00, 0x00, 0x00,
+ 0x2a, 0xa0, 0x00, 0x55, 0x50, 0x00, 0x00, 0x00,
+ 0x0a, 0xa8, 0x00, 0x55, 0x54, 0x00, 0x00, 0x00,
+ 0x02, 0xaa, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00,
+ 0x00, 0xaa, 0x80, 0x55, 0x55, 0x40, 0x00, 0x00,
+ 0x00, 0x2a, 0xa0, 0x55, 0x15, 0x50, 0x00, 0x00,
+ 0x00, 0x0a, 0xa8, 0x15, 0x05, 0x54, 0x00, 0x00,
+ 0x00, 0x02, 0xaa, 0x05, 0x01, 0x55, 0x00, 0x00,
+ 0x00, 0x00, 0xaa, 0x81, 0x01, 0x55, 0x00, 0x00,
+ 0x00, 0x00, 0x2a, 0xa0, 0x05, 0x54, 0x00, 0x00,
+ 0x00, 0x00, 0x0a, 0xa8, 0x15, 0x50, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0xaa, 0x05, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xaa, 0x81, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2a, 0xa0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0a, 0xa8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0xaa, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x50, 0xaa, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x54, 0x2a, 0xa0, 0x00, 0x00,
+ 0x00, 0x00, 0x15, 0x55, 0x0a, 0xa8, 0x00, 0x00,
+ 0x00, 0x00, 0x55, 0x55, 0x02, 0xaa, 0x00, 0x00,
+ 0x00, 0x01, 0x55, 0x55, 0x00, 0xaa, 0x80, 0x00,
+ 0x00, 0x05, 0x54, 0x55, 0x04, 0x2a, 0xa0, 0x00,
+ 0x00, 0x05, 0x50, 0x55, 0x15, 0x0a, 0xa8, 0x00,
+ 0x00, 0x05, 0x40, 0x55, 0x55, 0x42, 0xaa, 0x00,
+ 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0xaa, 0x80,
+ 0x00, 0x00, 0x00, 0x55, 0x54, 0x00, 0x2a, 0xa0,
+ 0x00, 0x00, 0x00, 0x55, 0x50, 0x00, 0x0a, 0xa8,
+ 0x00, 0x00, 0x00, 0x55, 0x40, 0x00, 0x02, 0xa8,
+ 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0xa0,
+ 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00,
+};
+
+const lv_img_dsc_t ck_os_bt_disconnected = {
+ .header.always_zero = 0,
+ .header.w = 32,
+ .header.h = 32,
+ .data_size = 272,
+ .header.cf = LV_IMG_CF_INDEXED_2BIT,
+ .data = ck_os_bt_disconnected_map,
+};
diff --git a/src/DisplayApp/Icons/bluetooth/os_bt_disconnected.png b/src/DisplayApp/Icons/bluetooth/os_bt_disconnected.png
new file mode 100644
index 00000000..3275895d
--- /dev/null
+++ b/src/DisplayApp/Icons/bluetooth/os_bt_disconnected.png
Binary files differ
diff --git a/src/DisplayApp/Screens/BatteryIcon.cpp b/src/DisplayApp/Screens/BatteryIcon.cpp
new file mode 100644
index 00000000..e20167d8
--- /dev/null
+++ b/src/DisplayApp/Screens/BatteryIcon.cpp
@@ -0,0 +1,62 @@
+#include "BatteryIcon.h"
+
+using namespace Pinetime::Applications::Screens;
+
+
+extern lv_img_dsc_t ck_os_battery_error;
+extern lv_img_dsc_t ck_os_batterycharging_100;
+extern lv_img_dsc_t ck_os_batterycharging_090;
+extern lv_img_dsc_t ck_os_batterycharging_080;
+extern lv_img_dsc_t ck_os_batterycharging_070;
+extern lv_img_dsc_t ck_os_batterycharging_060;
+extern lv_img_dsc_t ck_os_batterycharging_050;
+extern lv_img_dsc_t ck_os_batterycharging_040;
+extern lv_img_dsc_t ck_os_batterycharging_030;
+extern lv_img_dsc_t ck_os_batterycharging_020;
+extern lv_img_dsc_t ck_os_batterycharging_010;
+extern lv_img_dsc_t ck_os_batterycharging_005;
+
+extern lv_img_dsc_t ck_os_battery_100;
+extern lv_img_dsc_t ck_os_battery_090;
+extern lv_img_dsc_t ck_os_battery_080;
+extern lv_img_dsc_t ck_os_battery_070;
+extern lv_img_dsc_t ck_os_battery_060;
+extern lv_img_dsc_t ck_os_battery_050;
+extern lv_img_dsc_t ck_os_battery_040;
+extern lv_img_dsc_t ck_os_battery_030;
+extern lv_img_dsc_t ck_os_battery_020;
+extern lv_img_dsc_t ck_os_battery_010;
+extern lv_img_dsc_t ck_os_battery_005;
+
+
+lv_img_dsc_t *BatteryIcon::GetIcon(bool isCharging, float batteryPercent) {
+ if(isCharging) {
+ if(batteryPercent > 90.0f) return &ck_os_batterycharging_100;
+ else if(batteryPercent > 80.0f) return &ck_os_batterycharging_090;
+ else if(batteryPercent > 70.0f) return &ck_os_batterycharging_080;
+ else if(batteryPercent > 60.0f) return &ck_os_batterycharging_070;
+ else if(batteryPercent > 50.0f) return &ck_os_batterycharging_060;
+ else if(batteryPercent > 40.0f) return &ck_os_batterycharging_050;
+ else if(batteryPercent > 30.0f) return &ck_os_batterycharging_040;
+ else if(batteryPercent > 20.0f) return &ck_os_batterycharging_030;
+ else if(batteryPercent > 10.0f) return &ck_os_batterycharging_020;
+ else if(batteryPercent > 5.0f) return &ck_os_batterycharging_010;
+ else return &ck_os_batterycharging_005;
+ } else {
+ if(batteryPercent > 90.0f) return &ck_os_battery_100;
+ else if(batteryPercent > 80.0f) return &ck_os_battery_090;
+ else if(batteryPercent > 70.0f) return &ck_os_battery_080;
+ else if(batteryPercent > 60.0f) return &ck_os_battery_070;
+ else if(batteryPercent > 50.0f) return &ck_os_battery_060;
+ else if(batteryPercent > 40.0f) return &ck_os_battery_050;
+ else if(batteryPercent > 30.0f) return &ck_os_battery_040;
+ else if(batteryPercent > 20.0f) return &ck_os_battery_030;
+ else if(batteryPercent > 10.0f) return &ck_os_battery_020;
+ else if(batteryPercent > 5.0f) return &ck_os_battery_010;
+ else return &ck_os_battery_005;
+ }
+}
+
+lv_img_dsc_t *BatteryIcon::GetUnknownIcon() {
+ return &ck_os_battery_error;
+}
diff --git a/src/DisplayApp/Screens/BatteryIcon.h b/src/DisplayApp/Screens/BatteryIcon.h
new file mode 100644
index 00000000..4e2a3a03
--- /dev/null
+++ b/src/DisplayApp/Screens/BatteryIcon.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#include <libs/lvgl/src/lv_draw/lv_img_decoder.h>
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class BatteryIcon {
+ public:
+ static lv_img_dsc_t* GetUnknownIcon();
+ static lv_img_dsc_t* GetIcon(bool isCharging, float batteryPercent);
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/BleIcon.cpp b/src/DisplayApp/Screens/BleIcon.cpp
new file mode 100644
index 00000000..28a7727c
--- /dev/null
+++ b/src/DisplayApp/Screens/BleIcon.cpp
@@ -0,0 +1,12 @@
+#include "BleIcon.h"
+
+using namespace Pinetime::Applications::Screens;
+
+
+extern lv_img_dsc_t ck_os_bt_connected;
+extern lv_img_dsc_t ck_os_bt_disconnected;
+
+lv_img_dsc_t *BleIcon::GetIcon(bool isConnected) {
+ if(isConnected) return &ck_os_bt_connected;
+ else return &ck_os_bt_disconnected;
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/BleIcon.h b/src/DisplayApp/Screens/BleIcon.h
new file mode 100644
index 00000000..ee090f96
--- /dev/null
+++ b/src/DisplayApp/Screens/BleIcon.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include <libs/lvgl/src/lv_draw/lv_img_decoder.h>
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class BleIcon {
+ public:
+ static lv_img_dsc_t* GetIcon(bool isConnected);
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/Brightness.cpp b/src/DisplayApp/Screens/Brightness.cpp
new file mode 100644
index 00000000..9e3416c0
--- /dev/null
+++ b/src/DisplayApp/Screens/Brightness.cpp
@@ -0,0 +1,92 @@
+#include <libs/lvgl/lvgl.h>
+#include "Brightness.h"
+
+using namespace Pinetime::Applications::Screens;
+
+void slider_event_cb(lv_obj_t * slider, lv_event_t event) {
+ if(event == LV_EVENT_VALUE_CHANGED) {
+ auto* brightnessSlider = static_cast<Brightness*>(slider->user_data);
+ brightnessSlider->OnValueChanged();
+ }
+}
+
+Brightness::Brightness(Pinetime::Applications::DisplayApp *app, Controllers::BrightnessController& brightness) : Screen(app), brightness{brightness} {
+ slider = lv_slider_create(lv_scr_act(), NULL);
+ lv_obj_set_user_data(slider, this);
+ lv_obj_set_width(slider, LV_DPI * 2);
+ lv_obj_align(slider, NULL, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_set_event_cb(slider, slider_event_cb);
+ lv_slider_set_range(slider, 0, 2);
+ lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF);
+
+ slider_label = lv_label_create(lv_scr_act(), NULL);
+ lv_label_set_text(slider_label, LevelToString(brightness.Level()));
+ lv_obj_set_auto_realign(slider_label, true);
+ lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+}
+
+Brightness::~Brightness() {
+ lv_obj_clean(lv_scr_act());
+}
+
+bool Brightness::Refresh() {
+ return running;
+}
+
+bool Brightness::OnButtonPushed() {
+ running = false;
+ return true;
+}
+
+const char *Brightness::LevelToString(Pinetime::Controllers::BrightnessController::Levels level) {
+ switch(level) {
+ case Pinetime::Controllers::BrightnessController::Levels::Off: return "Off";
+ case Pinetime::Controllers::BrightnessController::Levels::Low: return "Low";
+ case Pinetime::Controllers::BrightnessController::Levels::Medium: return "Medium";
+ case Pinetime::Controllers::BrightnessController::Levels::High: return "High";
+ default : return "???";
+ }
+}
+
+void Brightness::OnValueChanged() {
+ SetValue(lv_slider_get_value(slider));
+}
+
+void Brightness::SetValue(uint8_t value) {
+ switch(value) {
+ case 0: brightness.Set(Controllers::BrightnessController::Levels::Low); break;
+ case 1: brightness.Set(Controllers::BrightnessController::Levels::Medium); break;
+ case 2: brightness.Set(Controllers::BrightnessController::Levels::High); break;
+ }
+ lv_label_set_text(slider_label, LevelToString(brightness.Level()));
+}
+
+uint8_t Brightness::LevelToInt(Pinetime::Controllers::BrightnessController::Levels level) {
+ switch(level) {
+ case Pinetime::Controllers::BrightnessController::Levels::Off: return 0;
+ case Pinetime::Controllers::BrightnessController::Levels::Low: return 0;
+ case Pinetime::Controllers::BrightnessController::Levels::Medium: return 1;
+ case Pinetime::Controllers::BrightnessController::Levels::High: return 2;
+ default : return 0;
+ }
+}
+
+bool Brightness::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
+ switch(event) {
+ case TouchEvents::SwipeLeft:
+ brightness.Lower();
+ SetValue();
+ return true;
+ case TouchEvents::SwipeRight:
+ brightness.Higher();
+ SetValue();
+ return true;
+ default:
+ return false;
+ }
+}
+
+void Brightness::SetValue() {
+ lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF);
+ lv_label_set_text(slider_label, LevelToString(brightness.Level()));
+}
diff --git a/src/DisplayApp/Screens/Brightness.h b/src/DisplayApp/Screens/Brightness.h
new file mode 100644
index 00000000..37cbcd7e
--- /dev/null
+++ b/src/DisplayApp/Screens/Brightness.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <libs/lvgl/src/lv_core/lv_obj.h>
+#include <Components/Brightness/BrightnessController.h>
+#include "Screen.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class Brightness : public Screen {
+ public:
+ Brightness(DisplayApp* app, Controllers::BrightnessController& brightness);
+ ~Brightness() override;
+ bool Refresh() override;
+ bool OnButtonPushed() override;
+ bool OnTouchEvent(TouchEvents event) override;
+
+ void OnValueChanged();
+ private:
+ bool running = true;
+ Controllers::BrightnessController& brightness;
+
+ lv_obj_t * slider_label;
+ lv_obj_t * slider;
+
+ const char* LevelToString(Controllers::BrightnessController::Levels level);
+ uint8_t LevelToInt(Controllers::BrightnessController::Levels level);
+ void SetValue(uint8_t value);
+ void SetValue();
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/Clock.cpp b/src/DisplayApp/Screens/Clock.cpp
index abc4d627..07db83ee 100644
--- a/src/DisplayApp/Screens/Clock.cpp
+++ b/src/DisplayApp/Screens/Clock.cpp
@@ -5,11 +5,14 @@
#include <libs/lvgl/lvgl.h>
#include "Clock.h"
#include "../DisplayApp.h"
+#include "BatteryIcon.h"
+#include "BleIcon.h"
using namespace Pinetime::Applications::Screens;
extern lv_font_t jetbrains_mono_extrabold_compressed;
extern lv_font_t jetbrains_mono_bold_20;
+
static void event_handler(lv_obj_t * obj, lv_event_t event) {
Clock* screen = static_cast<Clock *>(obj->user_data);
screen->OnObjectEvent(obj, event);
@@ -26,30 +29,30 @@ Clock::Clock(DisplayApp* app,
displayedChar[3] = 0;
displayedChar[4] = 0;
- label_battery = lv_label_create(lv_scr_act(), NULL);
- lv_obj_align(label_battery, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, -80, 0);
+ batteryIcon = lv_img_create(lv_scr_act(), NULL);
+ lv_img_set_src(batteryIcon, BatteryIcon::GetUnknownIcon());
+ lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0);
+
+ bleIcon = lv_img_create(lv_scr_act(), NULL);
+ lv_img_set_src(bleIcon, BleIcon::GetIcon(false));
+ lv_obj_align(bleIcon, batteryIcon, LV_ALIGN_OUT_LEFT_MID, 0, 0);
+
+ label_date = lv_label_create(lv_scr_act(), NULL);
- labelStyle = const_cast<lv_style_t *>(lv_label_get_style(label_battery, LV_LABEL_STYLE_MAIN));
+ lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, 60);
+
+ labelStyle = const_cast<lv_style_t *>(lv_label_get_style(label_date, LV_LABEL_STYLE_MAIN));
labelStyle->text.font = &jetbrains_mono_bold_20;
lv_style_copy(&labelBigStyle, labelStyle);
labelBigStyle.text.font = &jetbrains_mono_extrabold_compressed;
- lv_label_set_style(label_battery, LV_LABEL_STYLE_MAIN, labelStyle);
-
- label_ble = lv_label_create(lv_scr_act(), NULL);
- lv_label_set_style(label_ble, LV_LABEL_STYLE_MAIN, labelStyle);
- lv_obj_align(label_ble, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 10, 0);
+ lv_label_set_style(label_date, LV_LABEL_STYLE_MAIN, labelStyle);
label_time = lv_label_create(lv_scr_act(), NULL);
lv_label_set_style(label_time, LV_LABEL_STYLE_MAIN, &labelBigStyle);
lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- label_date = lv_label_create(lv_scr_act(), NULL);
- lv_label_set_style(label_date, LV_LABEL_STYLE_MAIN, labelStyle);
- lv_obj_align(label_date, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, 60);
-
backgroundLabel = lv_label_create(lv_scr_act(), NULL);
backgroundLabel->user_data = this;
lv_label_set_style(backgroundLabel, LV_LABEL_STYLE_MAIN, labelStyle);
@@ -68,22 +71,16 @@ Clock::~Clock() {
bool Clock::Refresh() {
batteryPercentRemaining = batteryController.PercentRemaining();
if (batteryPercentRemaining.IsUpdated()) {
- char batteryChar[11];
- auto newBatteryValue = batteryPercentRemaining.Get();
- newBatteryValue = (newBatteryValue > 100) ? 100 : newBatteryValue;
- newBatteryValue = (newBatteryValue < 0) ? 0 : newBatteryValue;
-
- sprintf(batteryChar, "BAT: %d%%", newBatteryValue);
- lv_label_set_text(label_battery, batteryChar);
+ auto batteryPercent = batteryPercentRemaining.Get();
+ lv_img_set_src(batteryIcon, BatteryIcon::GetIcon(batteryController.IsCharging() || batteryController.IsPowerPresent(), batteryPercent));
}
bleState = bleController.IsConnected();
if (bleState.IsUpdated()) {
if(bleState.Get() == true) {
- lv_obj_set_hidden(label_ble, false);
- lv_label_set_text(label_ble, "BLE");
+ lv_img_set_src(bleIcon, BleIcon::GetIcon(true));
} else {
- lv_obj_set_hidden(label_ble, true);
+ lv_img_set_src(bleIcon, BleIcon::GetIcon(false));
}
}
diff --git a/src/DisplayApp/Screens/Clock.h b/src/DisplayApp/Screens/Clock.h
index d14595b0..7c4a09df 100644
--- a/src/DisplayApp/Screens/Clock.h
+++ b/src/DisplayApp/Screens/Clock.h
@@ -76,6 +76,9 @@ namespace Pinetime {
lv_obj_t* label_version;
lv_obj_t* backgroundLabel;
+ lv_obj_t * batteryIcon;
+ lv_obj_t * bleIcon;
+
Controllers::DateTime& dateTimeController;
Controllers::Battery& batteryController;
Controllers::Ble& bleController;
diff --git a/src/DisplayApp/Screens/Label.cpp b/src/DisplayApp/Screens/Label.cpp
new file mode 100644
index 00000000..ba35279d
--- /dev/null
+++ b/src/DisplayApp/Screens/Label.cpp
@@ -0,0 +1,28 @@
+#include <libs/lvgl/lvgl.h>
+#include "Label.h"
+
+using namespace Pinetime::Applications::Screens;
+
+
+Label::Label(const char* text) : text{text} {
+
+}
+
+Label::~Label() {
+
+}
+
+void Label::Refresh() {
+
+}
+
+void Label::Show() {
+ label = lv_label_create(lv_scr_act(), NULL);
+ lv_label_set_align(label, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_size(label, 240, 240);
+ lv_label_set_text(label, text);
+}
+
+void Label::Hide() {
+ lv_obj_clean(lv_scr_act());
+}
diff --git a/src/DisplayApp/Screens/Label.h b/src/DisplayApp/Screens/Label.h
new file mode 100644
index 00000000..b73540f4
--- /dev/null
+++ b/src/DisplayApp/Screens/Label.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <vector>
+#include "Screen.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class Label {
+ public:
+ Label() = default;
+ explicit Label(const char* text);
+ ~Label();
+ void Refresh();
+
+ void Hide();
+ void Show();
+ private:
+ lv_obj_t * label = nullptr;
+ const char* text = nullptr;
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/Modal.cpp b/src/DisplayApp/Screens/Modal.cpp
index fc353c49..63ae70c0 100644
--- a/src/DisplayApp/Screens/Modal.cpp
+++ b/src/DisplayApp/Screens/Modal.cpp
@@ -25,7 +25,31 @@ bool Modal::OnButtonPushed() {
return true;
}
-void Modal::Show() {
+void Modal::Hide() {
+ /* Delete the parent modal background */
+ lv_obj_del_async(lv_obj_get_parent(mbox));
+ mbox = NULL; /* happens before object is actually deleted! */
+ isVisible = false;
+}
+
+void Modal::mbox_event_cb(lv_obj_t *obj, lv_event_t evt) {
+ auto* m = static_cast<Modal *>(obj->user_data);
+ m->OnEvent(obj, evt);
+}
+
+void Modal::OnEvent(lv_obj_t *event_obj, lv_event_t evt) {
+ if(evt == LV_EVENT_DELETE && event_obj == mbox) {
+ Hide();
+ } else if(evt == LV_EVENT_VALUE_CHANGED) {
+ /* A button was clicked */
+ lv_mbox_start_auto_close(mbox, 0);
+// Hide();
+ }
+}
+
+void Modal::Show(const char* msg) {
+ if(isVisible) return;
+ isVisible = true;
lv_style_copy(&modal_style, &lv_style_plain_color);
modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
modal_style.body.opa = LV_OPA_50;
@@ -41,10 +65,7 @@ void Modal::Show() {
/* Create the message box as a child of the modal background */
mbox = lv_mbox_create(obj, NULL);
lv_mbox_add_btns(mbox, btns2);
- char versionStr[20];
- sprintf(versionStr, "VERSION: %d.%d.%d", Version::Major(), Version::Minor(), Version::Patch());
- lv_mbox_set_text(mbox, versionStr);
-// lv_mbox_set_text(mbox, "Hello world!");
+ lv_mbox_set_text(mbox, msg);
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_event_cb(mbox, Modal::mbox_event_cb);
@@ -58,24 +79,3 @@ void Modal::Show() {
lv_anim_set_exec_cb(&a, obj, (lv_anim_exec_xcb_t)lv_obj_set_opa_scale);
lv_anim_create(&a);
}
-
-void Modal::Hide() {
- /* Delete the parent modal background */
- lv_obj_del_async(lv_obj_get_parent(mbox));
- mbox = NULL; /* happens before object is actually deleted! */
-}
-
-void Modal::mbox_event_cb(lv_obj_t *obj, lv_event_t evt) {
- auto* m = static_cast<Modal *>(obj->user_data);
- m->OnEvent(obj, evt);
-}
-
-void Modal::OnEvent(lv_obj_t *event_obj, lv_event_t evt) {
- if(evt == LV_EVENT_DELETE && event_obj == mbox) {
- Hide();
- } else if(evt == LV_EVENT_VALUE_CHANGED) {
- /* A button was clicked */
- lv_mbox_start_auto_close(mbox, 0);
-// Hide();
- }
-}
diff --git a/src/DisplayApp/Screens/Modal.h b/src/DisplayApp/Screens/Modal.h
index de287293..b5425906 100644
--- a/src/DisplayApp/Screens/Modal.h
+++ b/src/DisplayApp/Screens/Modal.h
@@ -22,7 +22,7 @@ namespace Pinetime {
Modal(DisplayApp* app);
~Modal() override;
- void Show();
+ void Show(const char* msg);
void Hide();
bool Refresh() override;
@@ -37,6 +37,7 @@ namespace Pinetime {
lv_obj_t *mbox;
lv_obj_t *info;
bool running = true;
+ bool isVisible = false;
};
}
diff --git a/src/DisplayApp/Screens/Screen.h b/src/DisplayApp/Screens/Screen.h
index 6cbd41ad..d8902317 100644
--- a/src/DisplayApp/Screens/Screen.h
+++ b/src/DisplayApp/Screens/Screen.h
@@ -1,4 +1,5 @@
#pragma once
+#include "../TouchEvents.h"
namespace Pinetime {
namespace Applications {
@@ -15,6 +16,9 @@ namespace Pinetime {
// Return false if the button hasn't been handled by the app, true if it has been handled
virtual bool OnButtonPushed() { return false; }
+ // Return false if the event hasn't been handled by the app, true if it has been handled
+ virtual bool OnTouchEvent(TouchEvents event) { return false; }
+
protected:
DisplayApp* app;
};
diff --git a/src/DisplayApp/Screens/ScreenList.cpp b/src/DisplayApp/Screens/ScreenList.cpp
new file mode 100644
index 00000000..93a91212
--- /dev/null
+++ b/src/DisplayApp/Screens/ScreenList.cpp
@@ -0,0 +1,115 @@
+#include <libs/lvgl/lvgl.h>
+#include <DisplayApp/DisplayApp.h>
+#include "ScreenList.h"
+
+using namespace Pinetime::Applications::Screens;
+
+// TODO this class must be improved to receive the list of "sub screens" via pointer or
+// move operation.
+// It should accept many type of "sub screen" (it only supports Label for now).
+// The number of sub screen it supports must be dynamic.
+ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController,
+ Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Drivers::WatchdogView& watchdog) :
+ Screen(app),
+ dateTimeController{dateTimeController}, batteryController{batteryController}, brightnessController{brightnessController}, watchdog{watchdog} {
+ screens.reserve(3);
+
+ // TODO all of this is far too heavy (string processing). This should be improved.
+ // TODO the info (battery, time,...) should be updated in the Refresh method.
+
+
+ auto batteryPercent = static_cast<int16_t>(batteryController.PercentRemaining());
+ if(batteryPercent > 100) batteryPercent = 100;
+ else if(batteryPercent < 0) batteryPercent = 0;
+
+ uint8_t brightness = 0;
+ switch(brightnessController.Level()) {
+ 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 = [&watchdog]() {
+ 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 "?";
+ }
+ }();
+
+
+ sprintf(t1, "Pinetime\n"
+ "Version:%d.%d.%d\n"
+ "Build: xx/xx/xxxx\n"
+ "Time: %02d:%02d:%02d\n"
+ "date: %02d/%02d/%04d\n"
+ "Uptime: xd xxhxx:xx\n"
+ "Battery: %d%%\n"
+ "Backlight: %d/3\n"
+ "Last reset: %s\n"
+ "BLE MAC: \n AA:BB:CC:DD:EE:FF", Version::Major(), Version::Minor(), Version::Patch(),
+ dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(),
+ dateTimeController.Day(), dateTimeController.Month(), dateTimeController.Year(),
+ batteryPercent, brightness, resetReason);
+
+ screens.emplace_back(t1);
+
+ strncpy(t2, "Hello from\nthe developper!", 27);
+ screens.emplace_back(t2);
+
+ strncpy(t3, "Place holder\nin case we need\nmore room!", 40);
+ screens.emplace_back(t3);
+
+ auto &screen = screens[screenIndex];
+ screen.Show();
+}
+
+ScreenList::~ScreenList() {
+ lv_obj_clean(lv_scr_act());
+}
+
+bool ScreenList::Refresh() {
+ auto &screen = screens[screenIndex];
+ screen.Refresh();
+
+ return running;
+}
+
+bool ScreenList::OnButtonPushed() {
+ running = false;
+ return true;
+}
+
+bool ScreenList::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
+ switch (event) {
+ case TouchEvents::SwipeDown:
+ if (screenIndex > 0) {
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down);
+ auto &oldScreen = screens[screenIndex];
+ oldScreen.Hide();
+ screenIndex--;
+ auto &newScreen = screens[screenIndex];
+ newScreen.Show();
+ }
+ return true;
+ case TouchEvents::SwipeUp:
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up);
+ if (screenIndex < screens.size() - 1) {
+ auto &oldScreen = screens[screenIndex];
+ oldScreen.Hide();
+ screenIndex++;
+ auto &newScreen = screens[screenIndex];
+ newScreen.Show();
+ }
+ return true;
+ default:
+ return false;
+ }
+ return false;
+}
diff --git a/src/DisplayApp/Screens/ScreenList.h b/src/DisplayApp/Screens/ScreenList.h
new file mode 100644
index 00000000..ad093d35
--- /dev/null
+++ b/src/DisplayApp/Screens/ScreenList.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include <vector>
+#include "Screen.h"
+#include "Label.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ class ScreenList : public Screen {
+ public:
+ explicit ScreenList(DisplayApp* app,
+ Pinetime::Controllers::DateTime& dateTimeController,
+ Pinetime::Controllers::Battery& batteryController,
+ Pinetime::Controllers::BrightnessController& brightnessController,
+ Pinetime::Drivers::WatchdogView& watchdog);
+ ~ScreenList() override;
+ bool Refresh() override;
+ bool OnButtonPushed() override;
+ bool OnTouchEvent(TouchEvents event) override;
+ private:
+ bool running = true;
+ uint8_t screenIndex = 0;
+
+ // TODO choose another container without dynamic alloc
+ std::vector<Screens::Label> screens;
+ Pinetime::Controllers::DateTime& dateTimeController;
+ Pinetime::Controllers::Battery& batteryController;
+ Pinetime::Controllers::BrightnessController& brightnessController;
+ Pinetime::Drivers::WatchdogView& watchdog;
+
+ char t1[200];
+ char t2[30];
+ char t3[42];
+ };
+ }
+ }
+} \ No newline at end of file
diff --git a/src/DisplayApp/Screens/Tile.cpp b/src/DisplayApp/Screens/Tile.cpp
index 004c8d31..6c225c9d 100644
--- a/src/DisplayApp/Screens/Tile.cpp
+++ b/src/DisplayApp/Screens/Tile.cpp
@@ -16,7 +16,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
screen->OnObjectEvent(obj, event, eventData);
}
-static const char * btnm_map1[] = {"Meter", "Gauge", "Clock", "\n", "Soft\nversion", "App2", "App3", ""};
+static const char * btnm_map1[] = {"Meter", "Gauge", "Clock", "\n", "Soft\nversion", "App2", "Brightness", ""};
Tile::Tile(DisplayApp* app) : Screen(app) {
modal.reset(new Modal(app));
@@ -123,11 +123,15 @@ void Tile::OnObjectEvent(lv_obj_t *obj, lv_event_t event, uint32_t buttonId) {
tile->StartClockApp();
break;
case 3:
- modal->Show();
+ char versionStr[20];
+ sprintf(versionStr, "VERSION: %d.%d.%d", Version::Major(), Version::Minor(), Version::Patch());
+ modal->Show(versionStr);
break;
case 4:
+ tile->StartSysInfoApp();
+ break;
case 5:
- tile->StartTestApp();
+ tile->StartBrightnessApp();
break;
}
@@ -146,8 +150,13 @@ void Tile::StartClockApp() {
running = false;
}
-void Tile::StartTestApp() {
- app->StartApp(DisplayApp::Apps::Test);
+void Tile::StartSysInfoApp() {
+ app->StartApp(DisplayApp::Apps::SysInfo);
+ running = false;
+}
+
+void Tile::StartBrightnessApp() {
+ app->StartApp(DisplayApp::Apps::Brightness);
running = false;
}
diff --git a/src/DisplayApp/Screens/Tile.h b/src/DisplayApp/Screens/Tile.h
index eb253435..fa2d6db0 100644
--- a/src/DisplayApp/Screens/Tile.h
+++ b/src/DisplayApp/Screens/Tile.h
@@ -52,12 +52,13 @@ namespace Pinetime {
uint32_t clickCount = 0 ;
uint32_t previousClickCount = 0;
void StartClockApp();
- void StartTestApp();
+ void StartSysInfoApp();
void StartMeterApp();
void StartGaugeApp();
bool running = true;
std::unique_ptr<Modal> modal;
+ void StartBrightnessApp();
};
}
}
diff --git a/src/DisplayApp/TouchEvents.h b/src/DisplayApp/TouchEvents.h
new file mode 100644
index 00000000..cf2f88dd
--- /dev/null
+++ b/src/DisplayApp/TouchEvents.h
@@ -0,0 +1,8 @@
+#pragma once
+
+namespace Pinetime {
+ namespace Applications {
+
+ enum class TouchEvents { None, Tap, SwipeLeft, SwipeRight, SwipeUp, SwipeDown, LongTap, DoubleTap};
+ }
+} \ No newline at end of file