From 9dde24fadf1c69ec84e0a6fb53bd17f64532cb5c Mon Sep 17 00:00:00 2001 From: zhou Date: Mon, 12 Nov 2018 14:59:25 +0900 Subject: [PATCH 1/2] fix send hud form Now we only flush message when message changed. --- mazda/callbacks.cpp | 18 +++++++++++++----- mazda/hud/hud.cpp | 20 +++++++++++--------- mazda/hud/hud.h | 1 + 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/mazda/callbacks.cpp b/mazda/callbacks.cpp index 3659aa9b..12a4bdf6 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; @@ -691,13 +692,20 @@ void MazdaEventCallbacks::HandleNaviTurn(IHUConnectionThreadInterface& stream, c void MazdaEventCallbacks::HandleNaviTurnDistance(IHUConnectionThreadInterface& stream, const HU::NAVDistanceMessage &request){ hudmutex.lock(); if(request.distance() > 1000){ - navi_data->distance_unit = 3; - navi_data->distance = request.distance()/100; + int now_distance = request.distance()/100; + if(now_distance != navi_data->distance){ + navi_data->distance_unit = 3; + navi_data->distance = now_distance; + navi_data->changed = 1; + } } else{ - navi_data->distance_unit = 1; - navi_data->distance = (((request.distance() + 5) / 10)*10); - navi_data->distance = navi_data->distance*10; + int now_distance = (((request.distance() + 5) / 10)*10)*10; + if(now_distance != navi_data->distance){ + navi_data->distance_unit = 1; + navi_data->distance = now_distance; + navi_data->changed = 1; + } } navi_data->time_until = request.time_until(); hudmutex.unlock(); diff --git a/mazda/hud/hud.cpp b/mazda/hud/hud.cpp index 55627af7..fed96858 100644 --- a/mazda/hud/hud.cpp +++ b/mazda/hud/hud.cpp @@ -89,17 +89,19 @@ void hud_thread_func(std::condition_variable& quitcv, std::mutex& quitmutex, std 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(); { std::unique_lock lk(quitmutex); 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 { From 0311669d7bac84af8d3c824918a663746a241236 Mon Sep 17 00:00:00 2001 From: zhou Date: Mon, 12 Nov 2018 15:06:57 +0900 Subject: [PATCH 2/2] fix format --- mazda/callbacks.cpp | 40 ++++++++++++++++++++-------------------- mazda/hud/hud.cpp | 5 ++--- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/mazda/callbacks.cpp b/mazda/callbacks.cpp index 12a4bdf6..b24278d5 100644 --- a/mazda/callbacks.cpp +++ b/mazda/callbacks.cpp @@ -680,7 +680,7 @@ void MazdaEventCallbacks::HandleNaviTurn(IHUConnectionThreadInterface& stream, c changed = 1; } if(changed){ - navi_data->changed = 1; + navi_data->changed = 1; navi_data->previous_msg = navi_data->previous_msg+1; if(navi_data->previous_msg == 8){ navi_data->previous_msg = 1; @@ -690,23 +690,23 @@ void MazdaEventCallbacks::HandleNaviTurn(IHUConnectionThreadInterface& stream, c } void MazdaEventCallbacks::HandleNaviTurnDistance(IHUConnectionThreadInterface& stream, const HU::NAVDistanceMessage &request){ - 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 = now_distance; - navi_data->changed = 1; - } - } - else{ - int now_distance = (((request.distance() + 5) / 10)*10)*10; - if(now_distance != navi_data->distance){ - navi_data->distance_unit = 1; - navi_data->distance = now_distance; - navi_data->changed = 1; - } - } - navi_data->time_until = request.time_until(); - hudmutex.unlock(); + 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 = now_distance; + navi_data->changed = 1; + } + } + else{ + int now_distance = (((request.distance() + 5) / 10)*10)*10; + if(now_distance != navi_data->distance){ + navi_data->distance_unit = 1; + navi_data->distance = now_distance; + navi_data->changed = 1; + } + } + navi_data->time_until = request.time_until(); + hudmutex.unlock(); } diff --git a/mazda/hud/hud.cpp b/mazda/hud/hud.cpp index fed96858..cef07b11 100644 --- a/mazda/hud/hud.cpp +++ b/mazda/hud/hud.cpp @@ -88,8 +88,7 @@ void hud_thread_func(std::condition_variable& quitcv, std::mutex& quitmutex, std guidancePointData._1 = navi_data->event_name; guidancePointData._2 = navi_data->previous_msg; - - if(navi_data->changed){ + if(navi_data->changed){ try { vbsnavi_client->SetHUDDisplayMsgReq(hudDisplayMsg); @@ -101,7 +100,7 @@ void hud_thread_func(std::condition_variable& quitcv, std::mutex& quitmutex, std return; } navi_data->changed = 0; - } + } hudmutex.unlock(); { std::unique_lock lk(quitmutex);