Skip to content

Commit 99b3802

Browse files
committed
weather: Generate location, sunrise, sunset data
1 parent 56fa6b2 commit 99b3802

1 file changed

Lines changed: 23 additions & 2 deletions

File tree

main.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,15 @@ class Framework {
831831
data[0] = val & 0xff;
832832
data[1] = (val >> 8) & 0xff;
833833
}
834+
void write_uint16(std::span<uint8_t> data, uint16_t val)
835+
{
836+
assert(data.size() >= 2);
837+
data[0] = val & 0xff;
838+
data[1] = (val >> 8) & 0xff;
839+
}
834840
void set_current_weather(uint64_t timestamp, int16_t temperature, int iconId)
835841
{
836-
std::array<uint8_t, 49> dataBuffer {};
842+
std::array<uint8_t, 53> dataBuffer {};
837843
std::span<uint8_t> data(dataBuffer);
838844
os_mbuf buffer;
839845
ble_gatt_access_ctxt ctxt;
@@ -844,13 +850,28 @@ class Framework {
844850
int16_t minTemperature = temperature;
845851
int16_t maxTemperature = temperature;
846852
dataBuffer.at(0) = 0; // MessageType::CurrentWeather
847-
dataBuffer.at(1) = 0; // Vesion 0
853+
dataBuffer.at(1) = 1; // Version 1 (includes sunrise/sunset)
848854
write_uint64(data.subspan(2), timestamp);
849855
write_int16(data.subspan(10), temperature);
850856
write_int16(data.subspan(12), minTemperature);
851857
write_int16(data.subspan(14), maxTemperature);
858+
859+
// Location (offset 16-47, 32 chars + null terminator)
860+
const char* cities[] = {"San Francisco", "Chicago", "New York", "Toronto", "Montreal",
861+
"London", "Paris", "Beijing", "Tokyo", "Sydney"};
862+
const char* location = cities[rand() % 10];
863+
strncpy(reinterpret_cast<char*>(&dataBuffer.at(16)), location, 32);
864+
dataBuffer.at(47) = '\0'; // ensure null terminator
865+
852866
dataBuffer.at(48) = static_cast<uint8_t>(iconId);
853867

868+
// Sunrise/Sunset (Version 1 fields)
869+
// Generate reasonable sunrise/sunset times
870+
uint16_t sunrise = (6 * 60) + (rand() % 90); // 6-7:30am in minutes since midnight
871+
uint16_t sunset = (17 * 60) + (30 + rand() % 90); // 5:30-7pm in minutes since midnight
872+
write_uint16(data.subspan(49), sunrise);
873+
write_uint16(data.subspan(51), sunset);
874+
854875
// send weather to SimpleWeatherService
855876
systemTask.nimble().weather().OnCommand(&ctxt);
856877
}

0 commit comments

Comments
 (0)