@@ -722,6 +722,7 @@ void HMIWorker::StatusUpdateThreadLoop() {
722722 while (!stop_) {
723723 std::this_thread::sleep_for (std::chrono::milliseconds (kLoopIntervalMs ));
724724 UpdateComponentStatus ();
725+ UpdateHMIStatus ();
725726 bool status_changed = false ;
726727 {
727728 WLock wlock (status_mutex_);
@@ -778,6 +779,41 @@ void HMIWorker::UpdateComponentStatus() {
778779 }
779780}
780781
782+ void HMIWorker::UpdateHMIStatus () {
783+ constexpr double kSecondsTillTimeout (1 );
784+ static double last_load_time = 0 ;
785+ const double now = Clock::NowInSeconds ();
786+ if (now - last_load_time < kSecondsTillTimeout ) {
787+ return ;
788+ }
789+
790+ HMIConfig config = LoadConfig ();
791+ {
792+ WLock wlock (status_mutex_);
793+ // Update UTM zone id
794+ status_.set_utm_zone_id (FLAGS_local_utm_zone_id);
795+ // Update available modes
796+ status_.clear_modes ();
797+ for (const auto &iter : config.modes ()) {
798+ status_.add_modes (iter.first );
799+ }
800+ // Update available maps
801+ status_.clear_maps ();
802+ for (const auto &map_entry : config.maps ()) {
803+ status_.add_maps (map_entry.first );
804+ }
805+ // Update available vehicles
806+ status_.clear_vehicles ();
807+ for (const auto &vehicle : config.vehicles ()) {
808+ status_.add_vehicles (vehicle.first );
809+ }
810+
811+ status_changed_ = true ;
812+ }
813+
814+ last_load_time = now;
815+ }
816+
781817void HMIWorker::ChangeScenarioSet (const std::string &scenario_set_id) {
782818 {
783819 RLock rlock (status_mutex_);
@@ -1313,9 +1349,7 @@ bool HMIWorker::RePlayRecord(const std::string &record_id) {
13131349}
13141350void HMIWorker::StopRecordPlay () {
13151351 WLock wlock (status_mutex_);
1316- {
1317- status_.set_current_record_id (" " );
1318- }
1352+ { status_.set_current_record_id (" " ); }
13191353 if (!StopModuleByCommand (FLAGS_cyber_recorder_stop_command)) {
13201354 AERROR << " stop record failed" ;
13211355 }
0 commit comments