diff options
| author | Jean-François Milants <jf@codingfield.com> | 2023-12-23 15:54:23 +0100 |
|---|---|---|
| committer | JF <JF002@users.noreply.github.com> | 2023-12-23 21:12:25 +0100 |
| commit | ef2c43156928b659d02a4ac9412ee947d0cc4d27 (patch) | |
| tree | a588c9b835d6cb4fb0c09c67746a78920224e283 /src/components/ble | |
| parent | 199aefc617b8e655ad5edf97a0e6b00285512993 (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')
| -rw-r--r-- | src/components/ble/SimpleWeatherService.cpp | 16 | ||||
| -rw-r--r-- | src/components/ble/SimpleWeatherService.h | 14 |
2 files changed, 16 insertions, 14 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; } diff --git a/src/components/ble/SimpleWeatherService.h b/src/components/ble/SimpleWeatherService.h index 890497d7..561917eb 100644 --- a/src/components/ble/SimpleWeatherService.h +++ b/src/components/ble/SimpleWeatherService.h @@ -61,20 +61,20 @@ namespace Pinetime { Unknown = 255 }; + using Location = std::array<char, 33>; // 32 char + \0 (end of string) struct CurrentWeather { CurrentWeather(uint64_t timestamp, uint8_t temperature, uint8_t minTemperature, uint8_t maxTemperature, - uint8_t iconId, - const char* location) + Icons iconId, + Location&& location) : timestamp {timestamp}, temperature {temperature}, minTemperature {minTemperature}, maxTemperature {maxTemperature}, - iconId {iconId} { - std::memcpy(this->location, location, 32); - this->location[32] = 0; + iconId {iconId}, + location{std::move(location)} { } uint64_t timestamp; @@ -82,7 +82,7 @@ namespace Pinetime { uint8_t minTemperature; uint8_t maxTemperature; Icons iconId; - char location[33]; // 32 char + \0 (end of string) + Location location; bool operator==(const CurrentWeather& other) const; }; @@ -94,7 +94,7 @@ namespace Pinetime { struct Day { uint8_t minTemperature; uint8_t maxTemperature; - uint8_t iconId; + Icons iconId; }; std::array<Day, MaxNbForecastDays> days; |
