Skip to content

Commit f07699a

Browse files
committed
weather: Add function for converting to display temp
Handles rounding correctly.
1 parent c2c53bc commit f07699a

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

src/components/ble/SimpleWeatherService.h

+15-9
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,14 @@ namespace Pinetime {
6262
};
6363

6464
using Location = std::array<char, 33>; // 32 char + \0 (end of string)
65+
using PreciseTemp = int16_t;
66+
using DisplayTemp = int16_t;
6567

6668
struct CurrentWeather {
6769
CurrentWeather(uint64_t timestamp,
68-
int16_t temperature,
69-
int16_t minTemperature,
70-
int16_t maxTemperature,
70+
PreciseTemp temperature,
71+
PreciseTemp minTemperature,
72+
PreciseTemp maxTemperature,
7173
Icons iconId,
7274
Location&& location)
7375
: timestamp {timestamp},
@@ -79,9 +81,9 @@ namespace Pinetime {
7981
}
8082

8183
uint64_t timestamp;
82-
int16_t temperature;
83-
int16_t minTemperature;
84-
int16_t maxTemperature;
84+
PreciseTemp temperature;
85+
PreciseTemp minTemperature;
86+
PreciseTemp maxTemperature;
8587
Icons iconId;
8688
Location location;
8789

@@ -93,8 +95,8 @@ namespace Pinetime {
9395
uint8_t nbDays;
9496

9597
struct Day {
96-
int16_t minTemperature;
97-
int16_t maxTemperature;
98+
PreciseTemp minTemperature;
99+
PreciseTemp maxTemperature;
98100
Icons iconId;
99101

100102
bool operator==(const Day& other) const;
@@ -108,10 +110,14 @@ namespace Pinetime {
108110
std::optional<CurrentWeather> Current() const;
109111
std::optional<Forecast> GetForecast() const;
110112

111-
static int16_t CelsiusToFahrenheit(int16_t celsius) {
113+
static PreciseTemp CelsiusToFahrenheit(PreciseTemp celsius) {
112114
return celsius * 9 / 5 + 3200;
113115
}
114116

117+
static DisplayTemp Convert(PreciseTemp temp) {
118+
return temp = temp / 100 + (temp % 100 >= 50 ? 1 : 0);
119+
}
120+
115121
private:
116122
// 00050000-78fc-48fe-8e23-433b3a1942d0
117123
static constexpr ble_uuid128_t BaseUuid() {

src/displayapp/screens/WatchFaceDigital.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,14 @@ void WatchFaceDigital::Refresh() {
174174
if (currentWeather.IsUpdated()) {
175175
auto optCurrentWeather = currentWeather.Get();
176176
if (optCurrentWeather) {
177-
int16_t temp = optCurrentWeather->temperature;
177+
Controllers::SimpleWeatherService::PreciseTemp preciseTemp = optCurrentWeather->temperature;
178178
char tempUnit = 'C';
179179
if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) {
180-
temp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(temp);
180+
preciseTemp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(preciseTemp);
181181
tempUnit = 'F';
182182
}
183-
temp = temp / 100 + (temp % 100 >= 50 ? 1 : 0);
184-
lv_label_set_text_fmt(temperature, "%d°%c", temp, tempUnit);
183+
Controllers::SimpleWeatherService::DisplayTemp displayTemp = Controllers::SimpleWeatherService::Convert(preciseTemp);
184+
lv_label_set_text_fmt(temperature, "%d°%c", displayTemp, tempUnit);
185185
lv_label_set_text(weatherIcon, Symbols::GetSymbol(optCurrentWeather->iconId));
186186
} else {
187187
lv_label_set_text_static(temperature, "");

src/displayapp/screens/WatchFacePineTimeStyle.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -543,12 +543,12 @@ void WatchFacePineTimeStyle::Refresh() {
543543
if (currentWeather.IsUpdated()) {
544544
auto optCurrentWeather = currentWeather.Get();
545545
if (optCurrentWeather) {
546-
int16_t temp = optCurrentWeather->temperature;
546+
Controllers::SimpleWeatherService::PreciseTemp preciseTemp = optCurrentWeather->temperature;
547547
if (settingsController.GetWeatherFormat() == Controllers::Settings::WeatherFormat::Imperial) {
548-
temp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(temp);
548+
preciseTemp = Controllers::SimpleWeatherService::CelsiusToFahrenheit(preciseTemp);
549549
}
550-
temp = temp / 100 + (temp % 100 >= 50 ? 1 : 0);
551-
lv_label_set_text_fmt(temperature, "%d°", temp);
550+
Controllers::SimpleWeatherService::DisplayTemp displayTemp = Controllers::SimpleWeatherService::Convert(preciseTemp);
551+
lv_label_set_text_fmt(temperature, "%d°", displayTemp);
552552
lv_label_set_text(weatherIcon, Symbols::GetSymbol(optCurrentWeather->iconId));
553553
} else {
554554
lv_label_set_text(temperature, "--");

0 commit comments

Comments
 (0)