SimpleWeatherService: Generate forecast data

This commit is contained in:
Victor Kareh
2024-02-01 10:56:34 -05:00
parent bb18300c9e
commit 30abc55b6c
3 changed files with 42 additions and 7 deletions

View File

@@ -77,6 +77,13 @@ void SimpleWeatherService::SetCurrentWeather(uint64_t timestamp, int16_t tempera
printf("currentWeather: timestamp=%d, temperature=%d, icon=%d\n", currentWeather->timestamp, currentWeather->temperature, currentWeather->iconId);
}
void SimpleWeatherService::SetForecast(uint64_t timestamp, std::array<SimpleWeatherService::Forecast::Day, SimpleWeatherService::MaxNbForecastDays> days) {
forecast = SimpleWeatherService::Forecast {timestamp, SimpleWeatherService::MaxNbForecastDays, days};
for (int i = 0; i < SimpleWeatherService::MaxNbForecastDays; i++) {
printf("forecast: day=%d. min=%d, max=%d icon=%d\n", i, days[i].minTemperature, days[i].maxTemperature, days[i].iconId);
}
}
int SimpleWeatherService::OnCommand(struct ble_gatt_access_ctxt* ctxt) {
return 0;
@@ -115,3 +122,17 @@ bool SimpleWeatherService::CurrentWeather::operator==(const SimpleWeatherService
this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature &&
std::strcmp(this->location.data(), other.location.data()) == 0;
}
bool SimpleWeatherService::Forecast::Day::operator==(const SimpleWeatherService::Forecast::Day& other) const {
return this->iconId == other.iconId &&
this->maxTemperature == other.maxTemperature && this->minTemperature == other.maxTemperature;
}
bool SimpleWeatherService::Forecast::operator==(const SimpleWeatherService::Forecast& other) const {
for (int i = 0; i < this->nbDays; i++) {
if (this->days[i] != other.days[i]) {
return false;
}
}
return this->timestamp == other.timestamp && this->nbDays == other.nbDays;
}

View File

@@ -27,7 +27,6 @@ public:
explicit SimpleWeatherService(const DateTime& dateTimeController);
void Init();
void SetCurrentWeather(uint64_t timestamp, int16_t temperature, int iconId);
int OnCommand(struct ble_gatt_access_ctxt* ctxt);
@@ -81,11 +80,18 @@ public:
int16_t minTemperature;
int16_t maxTemperature;
Icons iconId;
bool operator==(const Day& other) const;
};
std::array<Day, MaxNbForecastDays> days;
bool operator==(const Forecast& other) const;
};
void SetCurrentWeather(uint64_t timestamp, int16_t temperature, int iconId);
void SetForecast(uint64_t timestamp, std::array<Forecast::Day, MaxNbForecastDays> days);
std::optional<CurrentWeather> Current() const;
std::optional<Forecast> GetForecast() const;