@@ -854,7 +854,7 @@ class Framework {
854854 void set_forecast (
855855 uint64_t timestamp,
856856 std::array<
857- Pinetime::Controllers::SimpleWeatherService::Forecast::Day,
857+ std::optional< Pinetime::Controllers::SimpleWeatherService::Forecast::Day> ,
858858 Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days)
859859 {
860860 std::array<uint8_t , 36 > dataBuffer {};
@@ -871,10 +871,13 @@ class Framework {
871871 dataBuffer.at (10 ) = static_cast <uint8_t >(days.size ());
872872 for (int i = 0 ; i < days.size (); i++)
873873 {
874- const Pinetime::Controllers::SimpleWeatherService::Forecast::Day &day = days.at (i);
875- write_int16 (data.subspan (11 +(i*5 )), day.minTemperature );
876- write_int16 (data.subspan (13 +(i*5 )), day.maxTemperature );
877- dataBuffer.at (15 +(i*5 )) = static_cast <uint8_t >(day.iconId );
874+ const std::optional<Pinetime::Controllers::SimpleWeatherService::Forecast::Day> &day = days.at (i);
875+ if (!day.has_value ()) {
876+ continue ;
877+ }
878+ write_int16 (data.subspan (11 +(i*5 )), day->minTemperature .PreciseCelsius ());
879+ write_int16 (data.subspan (13 +(i*5 )), day->maxTemperature .PreciseCelsius ());
880+ dataBuffer.at (15 +(i*5 )) = static_cast <uint8_t >(day->iconId );
878881 }
879882 // send Forecast to SimpleWeatherService
880883 systemTask.nimble ().weather ().OnCommand (&ctxt);
@@ -883,7 +886,7 @@ class Framework {
883886 void generate_weather_data (bool clear) {
884887 if (clear) {
885888 set_current_weather (0 , 0 , 0 );
886- std::array<Pinetime::Controllers::SimpleWeatherService::Forecast::Day, Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days;
889+ std::array<std::optional< Pinetime::Controllers::SimpleWeatherService::Forecast::Day> , Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days;
887890 set_forecast (0 , days);
888891 return ;
889892 }
@@ -895,10 +898,12 @@ class Framework {
895898 set_current_weather ((uint64_t )timestamp, temperature, rand () % 9 );
896899
897900 // Generate forecast data
898- std::array<Pinetime::Controllers::SimpleWeatherService::Forecast::Day, Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days;
901+ std::array<std::optional< Pinetime::Controllers::SimpleWeatherService::Forecast::Day> , Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days;
899902 for (int i = 0 ; i < Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays; i++) {
900903 days[i] = Pinetime::Controllers::SimpleWeatherService::Forecast::Day {
901- (int16_t )(temperature - rand () % 10 * 100 ), (int16_t )(temperature + rand () % 10 * 100 ), Pinetime::Controllers::SimpleWeatherService::Icons (rand () % 9 )
904+ Pinetime::Controllers::SimpleWeatherService::Temperature (temperature - rand () % 10 * 100 ),
905+ Pinetime::Controllers::SimpleWeatherService::Temperature (temperature + rand () % 10 * 100 ),
906+ Pinetime::Controllers::SimpleWeatherService::Icons (rand () % 9 ),
902907 };
903908 }
904909 set_forecast ((uint64_t )timestamp, days);
0 commit comments