Skip to content

Commit 0e24e2b

Browse files
committed
main: use std::span instead of raw pointer for buffer access
1 parent 3507ee5 commit 0e24e2b

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

main.cpp

+14-9
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
#include <algorithm>
6464
#include <array>
6565
#include <vector>
66+
#include <span>
6667
#include <cmath> // std::pow
6768

6869
// additional includes for 'saveScreenshot()' function
@@ -812,21 +813,24 @@ class Framework {
812813
batteryController.voltage = batteryController.percentRemaining * 50;
813814
}
814815

815-
void write_uint64(uint8_t* data, uint64_t val)
816+
void write_uint64(std::span<uint8_t> data, uint64_t val)
816817
{
818+
assert(data.size() >= 8);
817819
for (int i=0; i<8; i++)
818820
{
819821
data[i] = (val >> (i*8)) & 0xff;
820822
}
821823
}
822-
void write_int16(uint8_t* data, int16_t val)
824+
void write_int16(std::span<uint8_t> data, int16_t val)
823825
{
826+
assert(data.size() >= 2);
824827
data[0] = val & 0xff;
825828
data[1] = (val >> 8) & 0xff;
826829
}
827830
void set_current_weather(uint64_t timestamp, int16_t temperature, int iconId)
828831
{
829832
std::array<uint8_t, 49> dataBuffer {};
833+
std::span<uint8_t> data(dataBuffer);
830834
os_mbuf buffer;
831835
ble_gatt_access_ctxt ctxt;
832836
ctxt.om = &buffer;
@@ -837,10 +841,10 @@ class Framework {
837841
int16_t maxTemperature = temperature;
838842
dataBuffer.at(0) = 0; // MessageType::CurrentWeather
839843
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);
844848
dataBuffer.at(48) = static_cast<uint8_t>(iconId);
845849

846850
// send weather to SimpleWeatherService
@@ -853,6 +857,7 @@ class Framework {
853857
Pinetime::Controllers::SimpleWeatherService::MaxNbForecastDays> days)
854858
{
855859
std::array<uint8_t, 36> dataBuffer {};
860+
std::span<uint8_t> data(dataBuffer);
856861
os_mbuf buffer;
857862
ble_gatt_access_ctxt ctxt;
858863
ctxt.om = &buffer;
@@ -861,13 +866,13 @@ class Framework {
861866
// fill buffer with specified format
862867
dataBuffer.at(0) = 1; // MessageType::Forecast
863868
dataBuffer.at(1) = 0; // Vesion 0
864-
write_uint64(&dataBuffer[2], timestamp);
869+
write_uint64(data.subspan(2), timestamp);
865870
dataBuffer.at(10) = static_cast<uint8_t>(days.size());
866871
for (int i = 0; i < days.size(); i++)
867872
{
868873
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);
871876
dataBuffer.at(15+(i*5)) = static_cast<uint8_t>(day.iconId);
872877
}
873878
// send Forecast to SimpleWeatherService

0 commit comments

Comments
 (0)