summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-05-24 01:38:00 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2017-05-24 01:38:00 +0200
commit71096ceee301ebc450aacb29d99190b3e158753f (patch)
tree9a524b08cb60c115018562e5127f6a5d7b887cca
parentd9e84736777908cd23ce1f7e935fa8b43849685c (diff)
Close diagnostic manager socket if there isn't any requests
No need to listen diagnostic responses if there isn't any subscriptions. Change-Id: I7fa48dbc3e8fb1847b8186337fe2813625894406 Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
-rw-r--r--CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp22
-rw-r--r--CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp1
2 files changed, 20 insertions, 3 deletions
diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp
index 49013f8..31a3d23 100644
--- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp
+++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp
@@ -214,6 +214,16 @@ DiagnosticShims& diagnostic_manager_t::get_shims()
return shims_;
}
+bool diagnostic_manager_t::socket_close()
+{
+ if(non_recurring_requests_.empty() && recurring_requests_.empty())
+ {
+ socket_.close();
+ return true;
+ }
+ return false;
+}
+
/// @brief Search for a specific active diagnostic request in the provided requests list
/// and erase it from the vector. This is useful at unsubscription to clean up the list otherwize
/// all received CAN messages will be passed to DiagnosticRequestHandle of all active diagnostic request
@@ -251,16 +261,17 @@ void diagnostic_manager_t::cleanup_request(active_diagnostic_request_t* entry, b
request_string, sizeof(request_string));
if(force && entry->get_recurring())
{
- find_and_erase(entry, recurring_requests_);
cancel_request(entry);
+ find_and_erase(entry, recurring_requests_);
DEBUG(binder_interface, "%s: Cancelling completed, recurring request: %s", __FUNCTION__, request_string);
}
- else
+ else if (!entry->get_recurring())
{
DEBUG(binder_interface, "%s: Cancelling completed, non-recurring request: %s", __FUNCTION__, request_string);
- find_and_erase(entry, non_recurring_requests_);
cancel_request(entry);
+ find_and_erase(entry, non_recurring_requests_);
}
+ socket_close();
}
}
@@ -271,12 +282,17 @@ void diagnostic_manager_t::cleanup_request(active_diagnostic_request_t* entry, b
void diagnostic_manager_t::cleanup_active_requests(bool force)
{
for(auto& entry : non_recurring_requests_)
+ {
if (entry != nullptr)
cleanup_request(entry, force);
+ }
for(auto& entry : recurring_requests_)
+ {
if (entry != nullptr)
cleanup_request(entry, force);
+ }
+
}
/// @brief Will return the active_diagnostic_request_t pointer for theDiagnosticRequest or nullptr if
diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp
index d942b47..cc446c4 100644
--- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp
+++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.hpp
@@ -71,6 +71,7 @@ public:
const std::string get_bus_device_name() const;
active_diagnostic_request_t* get_last_recurring_requests() const;
DiagnosticShims& get_shims();
+ bool socket_close();
void find_and_erase(active_diagnostic_request_t* entry, std::vector<active_diagnostic_request_t*>& requests_list);
void cancel_request(active_diagnostic_request_t* entry);