aboutsummaryrefslogtreecommitdiffstats
path: root/CAN-binder/low-can-binding/can
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-05-10 09:45:29 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2017-05-10 18:45:55 +0200
commit415de819e774a7dbe7aa6073c23b6387b1365b9d (patch)
tree27e3a48f68a028c9dbcc7108c6ccac7460b7732d /CAN-binder/low-can-binding/can
parenta261e68d0dd32a03fdf42522e6d2c8259ba0f3d1 (diff)
Keeping RAW sockets for compatibility
And reset can_reader to can_bus_dev_t like the old behavior because BCM sockets has been implemented at signals level not device. Change-Id: I715a19ff65bf9d7231c73b66c1ee95b3f41f8ed0 Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'CAN-binder/low-can-binding/can')
-rw-r--r--CAN-binder/low-can-binding/can/can-bus.cpp53
-rw-r--r--CAN-binder/low-can-binding/can/can-bus.hpp4
2 files changed, 1 insertions, 56 deletions
diff --git a/CAN-binder/low-can-binding/can/can-bus.cpp b/CAN-binder/low-can-binding/can/can-bus.cpp
index c49f4b4..8c45073 100644
--- a/CAN-binder/low-can-binding/can/can-bus.cpp
+++ b/CAN-binder/low-can-binding/can/can-bus.cpp
@@ -47,51 +47,6 @@ can_bus_t::can_bus_t(utils::config_parser_t conf_file)
std::map<std::string, std::shared_ptr<can_bus_dev_t>> can_bus_t::can_devices_;
-/// @brief Listen for all device sockets and fill can_messages_queue with them.
-/// Reading blocks until message arrive on listened sockets.
-///
-/// @return 0 if ok -1 if not
-int can_bus_t::can_reader()
-{
- fd_set rfds;
- int sock_max = INVALID_SOCKET;
-
- FD_ZERO(&rfds);
-
- for(auto& can_dev : can_devices_)
- {
- FD_SET(can_dev.second->get_socket().socket(), &rfds);
- if (sock_max < can_dev.second->get_socket().socket())
- sock_max = can_dev.second->get_socket().socket();
- }
-
- int ret;
- while(is_reading_)
- {
- ret = select(sock_max + 1, &rfds, nullptr, nullptr, nullptr);
-
- if(ret == -1)
- perror("select()");
- else if(ret > 0)
- {
- for(const auto& s: can_devices_)
- {
- if(FD_ISSET(s.second->get_socket().socket(), &rfds))
- {
- can_message_t msg;
- s.second->get_socket() >> msg;
- std::lock_guard<std::mutex> can_message_lock(get_can_message_mutex());
- { push_new_can_message(msg); }
- get_new_can_message_cv().notify_one();
- }
- }
- }
- else
- printf("Timeout\n");
- }
- return 0;
-}
-
/// @brief Will make the decoding operation on a classic CAN message. It will not
/// handle CAN commands nor diagnostic messages that have their own method to get
/// this happens.
@@ -102,7 +57,7 @@ int can_bus_t::can_reader()
/// @param[in] can_message - a single CAN message from the CAN socket read, to be decode.
///
/// @return How many signals has been decoded.
-int can_bus_t::process_can_signals(can_message_t& can_message)
+int can_bus_t::process_can_signals(const can_message_t& can_message)
{
int processed_signals = 0;
struct utils::signals_found signals;
@@ -248,11 +203,6 @@ void can_bus_t::can_event_push()
/// and push subscribed events.
void can_bus_t::start_threads()
{
- is_reading_ = true;
- th_reading_ = std::thread(&can_bus_t::can_reader, this);
- if(!th_reading_.joinable())
- is_reading_ = false;
-
is_decoding_ = true;
th_decoding_ = std::thread(&can_bus_t::can_decode_message, this);
if(!th_decoding_.joinable())
@@ -269,7 +219,6 @@ void can_bus_t::start_threads()
/// they'll finish their job.
void can_bus_t::stop_threads()
{
- is_reading_ = false;
is_decoding_ = false;
is_pushing_ = false;
}
diff --git a/CAN-binder/low-can-binding/can/can-bus.hpp b/CAN-binder/low-can-binding/can/can-bus.hpp
index 94fa0a5..8ed135f 100644
--- a/CAN-binder/low-can-binding/can/can-bus.hpp
+++ b/CAN-binder/low-can-binding/can/can-bus.hpp
@@ -54,10 +54,6 @@ private:
int process_can_signals(can_message_t& can_message);
int process_diagnostic_signals(diagnostic_manager_t& manager, const can_message_t& can_message);
- int can_reader();
- std::thread th_reading_; ///< Thread handling read the socket can device filling can_message_q_ queue of can_bus_t
- bool is_reading_ = false; ///< boolean telling whether or not reading is running or not
-
void can_decode_message();
std::thread th_decoding_; ///< thread that'll handle decoding a can frame
bool is_decoding_ = false; ///< boolean member controling thread while loop