diff options
| author | Jean-François Milants <jf@codingfield.com> | 2023-12-09 20:39:08 +0100 |
|---|---|---|
| committer | JF <JF002@users.noreply.github.com> | 2023-12-23 21:12:25 +0100 |
| commit | c94a59e7d3e0f9929171263412033a56872c168a (patch) | |
| tree | f9e3d4c1915b91f57ff8d96b18e10f0fbb998aa4 /src/displayapp/screens | |
| parent | 088082d32db483ac5326bed09d5d47847fb5bf9b (diff) | |
SimpleWeather service : new weather implementation
This new implementation of the weather feature provides a new BLE API and a new weather service.
The API uses a single characteristic that allows companion apps to write the weather conditions (current and forecast for the next 5 days).
The SimpleWeather service exposes those data as std::optional fields.
This new implementation replaces the previous WeahterService.
The API is documented in docs/SimpleWeatherService.md.
Diffstat (limited to 'src/displayapp/screens')
| -rw-r--r-- | src/displayapp/screens/StopWatch.cpp | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/WatchFacePineTimeStyle.cpp | 46 | ||||
| -rw-r--r-- | src/displayapp/screens/WatchFacePineTimeStyle.h | 10 | ||||
| -rw-r--r-- | src/displayapp/screens/Weather.cpp | 2 | ||||
| -rw-r--r-- | src/displayapp/screens/Weather.h | 2 |
5 files changed, 33 insertions, 29 deletions
diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index f0359da4..bdb3fde6 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -5,6 +5,8 @@ using namespace Pinetime::Applications::Screens; +constexpr int Pinetime::Applications::Screens::StopWatch::maxLapCount; + namespace { TimeSeparated_t convertTicksToTimeSegments(const TickType_t timeElapsed) { // Centiseconds diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index 250a745c..65122493 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -33,7 +33,7 @@ #include "components/motion/MotionController.h" #include "components/settings/Settings.h" #include "displayapp/DisplayApp.h" -#include "components/ble/weather/WeatherService.h" +#include "components/ble/SimpleWeatherService.h" using namespace Pinetime::Applications::Screens; @@ -42,6 +42,21 @@ namespace { auto* screen = static_cast<WatchFacePineTimeStyle*>(obj->user_data); screen->UpdateSelected(obj, event); } + + const char* GetIcon(const Pinetime::Controllers::SimpleWeatherService::Icons icon) { + switch (icon) { + case Pinetime::Controllers::SimpleWeatherService::Icons::Sun: return Symbols::sun; break; + case Pinetime::Controllers::SimpleWeatherService::Icons::CloudsSun: return Symbols::cloudSun; break; + case Pinetime::Controllers::SimpleWeatherService::Icons::Clouds: return Symbols::cloud; break; + case Pinetime::Controllers::SimpleWeatherService::Icons::BrokenClouds: return Symbols::cloud; break; // TODO missing symbol + case Pinetime::Controllers::SimpleWeatherService::Icons::Thunderstorm: return Symbols::cloud; break; // TODO missing symbol + case Pinetime::Controllers::SimpleWeatherService::Icons::Snow: return Symbols::cloud; break; // TODO missing symbol + case Pinetime::Controllers::SimpleWeatherService::Icons::CloudShowerHeavy: return Symbols::cloudShowersHeavy; break; + case Pinetime::Controllers::SimpleWeatherService::Icons::CloudSunRain: return Symbols::cloudSunRain; break; + case Pinetime::Controllers::SimpleWeatherService::Icons::Smog: return Symbols::smog; break; + default: return Symbols::ban; break; + } + } } WatchFacePineTimeStyle::WatchFacePineTimeStyle(Controllers::DateTime& dateTimeController, @@ -50,7 +65,7 @@ WatchFacePineTimeStyle::WatchFacePineTimeStyle(Controllers::DateTime& dateTimeCo Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController, Controllers::MotionController& motionController, - Controllers::WeatherService& weatherService) + Controllers::SimpleWeatherService& weatherService) : currentDateTime {{}}, batteryIcon(false), dateTimeController {dateTimeController}, @@ -537,29 +552,18 @@ void WatchFacePineTimeStyle::Refresh() { } } - if (weatherService.GetCurrentTemperature()->timestamp != 0 && weatherService.GetCurrentClouds()->timestamp != 0 && - weatherService.GetCurrentPrecipitation()->timestamp != 0) { - nowTemp = (weatherService.GetCurrentTemperature()->temperature / 100); - clouds = (weatherService.GetCurrentClouds()->amount); - precip = (weatherService.GetCurrentPrecipitation()->amount); - if (nowTemp.IsUpdated()) { - lv_label_set_text_fmt(temperature, "%d°", nowTemp.Get()); - if ((clouds <= 30) && (precip == 0)) { - lv_label_set_text(weatherIcon, Symbols::sun); - } else if ((clouds >= 70) && (clouds <= 90) && (precip == 1)) { - lv_label_set_text(weatherIcon, Symbols::cloudSunRain); - } else if ((clouds > 90) && (precip == 0)) { - lv_label_set_text(weatherIcon, Symbols::cloud); - } else if ((clouds > 70) && (precip >= 2)) { - lv_label_set_text(weatherIcon, Symbols::cloudShowersHeavy); - } else { - lv_label_set_text(weatherIcon, Symbols::cloudSun); - }; + currentWeather = weatherService.Current(); + + if (currentWeather.IsUpdated()) { + auto optCurrentWeather = currentWeather.Get(); + if (optCurrentWeather) { + lv_label_set_text_fmt(temperature, "%d°", optCurrentWeather->temperature); + lv_label_set_text(weatherIcon, GetIcon(optCurrentWeather->iconId)); lv_obj_realign(temperature); lv_obj_realign(weatherIcon); } } else { - lv_label_set_text_static(temperature, "--"); + lv_label_set_text(temperature, "--"); lv_label_set_text(weatherIcon, Symbols::ban); lv_obj_realign(temperature); lv_obj_realign(weatherIcon); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h index dd079fed..72537095 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.h +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -9,7 +9,7 @@ #include "displayapp/screens/BatteryIcon.h" #include "displayapp/Colors.h" #include "components/datetime/DateTimeController.h" -#include "components/ble/weather/WeatherService.h" +#include "components/ble/SimpleWeatherService.h" #include "components/ble/BleController.h" #include "utility/DirtyValue.h" @@ -33,7 +33,7 @@ namespace Pinetime { Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController, Controllers::MotionController& motionController, - Controllers::WeatherService& weather); + Controllers::SimpleWeatherService& weather); ~WatchFacePineTimeStyle() override; bool OnTouchEvent(TouchEvents event) override; @@ -61,9 +61,7 @@ namespace Pinetime { Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>> currentDateTime {}; Utility::DirtyValue<uint32_t> stepCount {}; Utility::DirtyValue<bool> notificationState {}; - Utility::DirtyValue<int16_t> nowTemp {}; - int16_t clouds = 0; - int16_t precip = 0; + Utility::DirtyValue<std::optional<Pinetime::Controllers::SimpleWeatherService::CurrentWeather>> currentWeather {}; static Pinetime::Controllers::Settings::Colors GetNext(Controllers::Settings::Colors color); static Pinetime::Controllers::Settings::Colors GetPrevious(Controllers::Settings::Colors color); @@ -114,7 +112,7 @@ namespace Pinetime { Controllers::NotificationManager& notificationManager; Controllers::Settings& settingsController; Controllers::MotionController& motionController; - Controllers::WeatherService& weatherService; + Controllers::SimpleWeatherService& weatherService; void SetBatteryIcon(); void CloseMenu(); diff --git a/src/displayapp/screens/Weather.cpp b/src/displayapp/screens/Weather.cpp index 4921174c..dfeb1d41 100644 --- a/src/displayapp/screens/Weather.cpp +++ b/src/displayapp/screens/Weather.cpp @@ -17,7 +17,7 @@ */ #include "Weather.h" #include <lvgl/lvgl.h> -#include <components/ble/weather/WeatherService.h> +#include <components/ble/weather/SimpleWeatherService.h> #include "Label.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" diff --git a/src/displayapp/screens/Weather.h b/src/displayapp/screens/Weather.h index 84177ea6..6b2599c8 100644 --- a/src/displayapp/screens/Weather.h +++ b/src/displayapp/screens/Weather.h @@ -1,7 +1,7 @@ #pragma once #include <memory> -#include "components/ble/weather/WeatherService.h" +#include "components/ble/weather/SimpleWeatherService.h" #include "Screen.h" #include "ScreenList.h" #include "displayapp/Apps.h" |
