From 99b38028777df2bafc9fc854f55be10d56270d5e Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Thu, 18 Dec 2025 10:00:05 -0500 Subject: [PATCH] weather: Generate location, sunrise, sunset data --- main.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index cfd3d2f..808ac78 100644 --- a/main.cpp +++ b/main.cpp @@ -831,9 +831,15 @@ class Framework { data[0] = val & 0xff; data[1] = (val >> 8) & 0xff; } + void write_uint16(std::span data, uint16_t val) + { + assert(data.size() >= 2); + data[0] = val & 0xff; + data[1] = (val >> 8) & 0xff; + } void set_current_weather(uint64_t timestamp, int16_t temperature, int iconId) { - std::array dataBuffer {}; + std::array dataBuffer {}; std::span data(dataBuffer); os_mbuf buffer; ble_gatt_access_ctxt ctxt; @@ -844,13 +850,28 @@ class Framework { int16_t minTemperature = temperature; int16_t maxTemperature = temperature; dataBuffer.at(0) = 0; // MessageType::CurrentWeather - dataBuffer.at(1) = 0; // Vesion 0 + dataBuffer.at(1) = 1; // Version 1 (includes sunrise/sunset) write_uint64(data.subspan(2), timestamp); write_int16(data.subspan(10), temperature); write_int16(data.subspan(12), minTemperature); write_int16(data.subspan(14), maxTemperature); + + // Location (offset 16-47, 32 chars + null terminator) + const char* cities[] = {"San Francisco", "Chicago", "New York", "Toronto", "Montreal", + "London", "Paris", "Beijing", "Tokyo", "Sydney"}; + const char* location = cities[rand() % 10]; + strncpy(reinterpret_cast(&dataBuffer.at(16)), location, 32); + dataBuffer.at(47) = '\0'; // ensure null terminator + dataBuffer.at(48) = static_cast(iconId); + // Sunrise/Sunset (Version 1 fields) + // Generate reasonable sunrise/sunset times + uint16_t sunrise = (6 * 60) + (rand() % 90); // 6-7:30am in minutes since midnight + uint16_t sunset = (17 * 60) + (30 + rand() % 90); // 5:30-7pm in minutes since midnight + write_uint16(data.subspan(49), sunrise); + write_uint16(data.subspan(51), sunset); + // send weather to SimpleWeatherService systemTask.nimble().weather().OnCommand(&ctxt); }