diff --git a/mazda/callbacks.cpp b/mazda/callbacks.cpp index 3659aa9b..b24278d5 100644 --- a/mazda/callbacks.cpp +++ b/mazda/callbacks.cpp @@ -680,6 +680,7 @@ void MazdaEventCallbacks::HandleNaviTurn(IHUConnectionThreadInterface& stream, c changed = 1; } if(changed){ + navi_data->changed = 1; navi_data->previous_msg = navi_data->previous_msg+1; if(navi_data->previous_msg == 8){ navi_data->previous_msg = 1; @@ -689,16 +690,23 @@ void MazdaEventCallbacks::HandleNaviTurn(IHUConnectionThreadInterface& stream, c } void MazdaEventCallbacks::HandleNaviTurnDistance(IHUConnectionThreadInterface& stream, const HU::NAVDistanceMessage &request){ - hudmutex.lock(); - if(request.distance() > 1000){ + hudmutex.lock(); + if(request.distance() > 1000){ + int now_distance = request.distance()/100; + if(now_distance != navi_data->distance){ navi_data->distance_unit = 3; - navi_data->distance = request.distance()/100; + navi_data->distance = now_distance; + navi_data->changed = 1; } - else{ + } + else{ + int now_distance = (((request.distance() + 5) / 10)*10)*10; + if(now_distance != navi_data->distance){ navi_data->distance_unit = 1; - navi_data->distance = (((request.distance() + 5) / 10)*10); - navi_data->distance = navi_data->distance*10; + navi_data->distance = now_distance; + navi_data->changed = 1; } - navi_data->time_until = request.time_until(); - hudmutex.unlock(); + } + navi_data->time_until = request.time_until(); + hudmutex.unlock(); } diff --git a/mazda/hud/hud.cpp b/mazda/hud/hud.cpp index 55627af7..cef07b11 100644 --- a/mazda/hud/hud.cpp +++ b/mazda/hud/hud.cpp @@ -88,17 +88,18 @@ void hud_thread_func(std::condition_variable& quitcv, std::mutex& quitmutex, std guidancePointData._1 = navi_data->event_name; guidancePointData._2 = navi_data->previous_msg; - - - try - { - vbsnavi_client->SetHUDDisplayMsgReq(hudDisplayMsg); - tmc_client->SetHUD_Display_Msg2(guidancePointData); - } - catch(DBus::Error& error) - { + if(navi_data->changed){ + try + { + vbsnavi_client->SetHUDDisplayMsgReq(hudDisplayMsg); + tmc_client->SetHUD_Display_Msg2(guidancePointData); + } + catch(DBus::Error& error) + { loge("DBUS: hud_send failed %s: %s\n", error.name(), error.message()); return; + } + navi_data->changed = 0; } hudmutex.unlock(); { diff --git a/mazda/hud/hud.h b/mazda/hud/hud.h index 102c9882..47639a46 100644 --- a/mazda/hud/hud.h +++ b/mazda/hud/hud.h @@ -20,6 +20,7 @@ struct NaviData { uint8_t distance_unit; int32_t time_until; uint8_t previous_msg; + uint8_t changed; }; enum NaviTurns: uint32_t {