aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/ble/SimpleWeatherService.cpp
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2023-12-23 15:54:23 +0100
committerJF <JF002@users.noreply.github.com>2023-12-23 21:12:25 +0100
commitef2c43156928b659d02a4ac9412ee947d0cc4d27 (patch)
treea588c9b835d6cb4fb0c09c67746a78920224e283 /src/components/ble/SimpleWeatherService.cpp
parent199aefc617b8e655ad5edf97a0e6b00285512993 (diff)
Simple Weather Service
Code improvements : icon fields are now typed as Icons, move the location string when creating a new instance of CurrentWeather, fix SimpleWeatherService::CurrentWeather::operator== (location was missing from the comparison).
Diffstat (limited to 'src/components/ble/SimpleWeatherService.cpp')
-rw-r--r--src/components/ble/SimpleWeatherService.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/components/ble/SimpleWeatherService.cpp b/src/components/ble/SimpleWeatherService.cpp
index 61ad4926..2ba26321 100644
--- a/src/components/ble/SimpleWeatherService.cpp
+++ b/src/components/ble/SimpleWeatherService.cpp
@@ -19,6 +19,7 @@
#include "components/ble/SimpleWeatherService.h"
#include <algorithm>
+#include <array>
#include <cstring>
#include <nrf_log.h>
@@ -32,15 +33,15 @@ namespace {
}
SimpleWeatherService::CurrentWeather CreateCurrentWeather(const uint8_t* dataBuffer) {
- char cityName[33];
- std::memcpy(&cityName[0], &dataBuffer[13], 32);
+ SimpleWeatherService::Location cityName;
+ std::memcpy(cityName.data(), &dataBuffer[13], 32);
cityName[32] = '\0';
- return SimpleWeatherService::CurrentWeather {ToUInt64(&dataBuffer[2]),
+ return SimpleWeatherService::CurrentWeather (ToUInt64(&dataBuffer[2]),
dataBuffer[10],
dataBuffer[11],
dataBuffer[12],
- dataBuffer[13 + 32],
- cityName};
+ SimpleWeatherService::Icons{dataBuffer[13 + 32]},
+ std::move(cityName));
}
SimpleWeatherService::Forecast CreateForecast(const uint8_t* dataBuffer) {
@@ -50,7 +51,7 @@ namespace {
const uint8_t nbDaysInBuffer = dataBuffer[10];
const uint8_t nbDays = std::min(SimpleWeatherService::MaxNbForecastDays, nbDaysInBuffer);
for (int i = 0; i < nbDays; i++) {
- days[i] = SimpleWeatherService::Forecast::Day {dataBuffer[11 + (i * 3)], dataBuffer[12 + (i * 3)], dataBuffer[13 + (i * 3)]};
+ days[i] = SimpleWeatherService::Forecast::Day {dataBuffer[11 + (i * 3)], dataBuffer[12 + (i * 3)], SimpleWeatherService::Icons{dataBuffer[13 + (i * 3)]}};
}
return SimpleWeatherService::Forecast {timestamp, nbDays, days};
}
@@ -147,5 +148,6 @@ std::optional<SimpleWeatherService::Forecast> SimpleWeatherService::GetForecast(
bool SimpleWeatherService::CurrentWeather::operator==(const SimpleWeatherService::CurrentWeather& other) const {
return this->iconId == other.iconId && this->temperature == other.temperature && this->timestamp == other.timestamp &&
- this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature;
+ this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature &&
+ std::strcmp(this->location.data(), other.location.data()) == 0;
}