63
63
#include < algorithm>
64
64
#include < array>
65
65
#include < vector>
66
+ #include < span>
66
67
#include < cmath> // std::pow
67
68
68
69
// additional includes for 'saveScreenshot()' function
@@ -812,21 +813,24 @@ class Framework {
812
813
batteryController.voltage = batteryController.percentRemaining * 50 ;
813
814
}
814
815
815
- void write_uint64 (uint8_t * data, uint64_t val)
816
+ void write_uint64 (std::span< uint8_t > data, uint64_t val)
816
817
{
818
+ assert (data.size () >= 8 );
817
819
for (int i=0 ; i<8 ; i++)
818
820
{
819
821
data[i] = (val >> (i*8 )) & 0xff ;
820
822
}
821
823
}
822
- void write_int16 (uint8_t * data, int16_t val)
824
+ void write_int16 (std::span< uint8_t > data, int16_t val)
823
825
{
826
+ assert (data.size () >= 2 );
824
827
data[0 ] = val & 0xff ;
825
828
data[1 ] = (val >> 8 ) & 0xff ;
826
829
}
827
830
void set_current_weather (uint64_t timestamp, int16_t temperature, int iconId)
828
831
{
829
832
std::array<uint8_t , 49 > dataBuffer {};
833
+ std::span<uint8_t > data (dataBuffer);
830
834
os_mbuf buffer;
831
835
ble_gatt_access_ctxt ctxt;
832
836
ctxt.om = &buffer;
@@ -837,10 +841,10 @@ class Framework {
837
841
int16_t maxTemperature = temperature;
838
842
dataBuffer.at (0 ) = 0 ; // MessageType::CurrentWeather
839
843
dataBuffer.at (1 ) = 0 ; // Vesion 0
840
- write_uint64 (&dataBuffer[ 2 ] , timestamp);
841
- write_int16 (&dataBuffer[ 10 ] , temperature);
842
- write_int16 (&dataBuffer[ 12 ] , minTemperature);
843
- write_int16 (&dataBuffer[ 14 ] , maxTemperature);
844
+ write_uint64 (data. subspan ( 2 ) , timestamp);
845
+ write_int16 (data. subspan ( 10 ) , temperature);
846
+ write_int16 (data. subspan ( 12 ) , minTemperature);
847
+ write_int16 (data. subspan ( 14 ) , maxTemperature);
844
848
dataBuffer.at (48 ) = static_cast <uint8_t >(iconId);
845
849
846
850
// send weather to SimpleWeatherService
@@ -853,6 +857,7 @@ class Framework {
853
857
Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days)
854
858
{
855
859
std::array<uint8_t , 36 > dataBuffer {};
860
+ std::span<uint8_t > data (dataBuffer);
856
861
os_mbuf buffer;
857
862
ble_gatt_access_ctxt ctxt;
858
863
ctxt.om = &buffer;
@@ -861,13 +866,13 @@ class Framework {
861
866
// fill buffer with specified format
862
867
dataBuffer.at (0 ) = 1 ; // MessageType::Forecast
863
868
dataBuffer.at (1 ) = 0 ; // Vesion 0
864
- write_uint64 (&dataBuffer[ 2 ] , timestamp);
869
+ write_uint64 (data. subspan ( 2 ) , timestamp);
865
870
dataBuffer.at (10 ) = static_cast <uint8_t >(days.size ());
866
871
for (int i = 0 ; i < days.size (); i++)
867
872
{
868
873
const Pinetime::Controllers::SimpleWeatherService::Forecast::Day &day = days.at (i);
869
- write_int16 (&dataBuffer[ 11 +(i*5 )] , day.minTemperature );
870
- write_int16 (&dataBuffer[ 13 +(i*5 )] , day.maxTemperature );
874
+ write_int16 (data. subspan ( 11 +(i*5 )) , day.minTemperature );
875
+ write_int16 (data. subspan ( 13 +(i*5 )) , day.maxTemperature );
871
876
dataBuffer.at (15 +(i*5 )) = static_cast <uint8_t >(day.iconId );
872
877
}
873
878
// send Forecast to SimpleWeatherService
0 commit comments