@@ -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