Keeping RAW sockets for compatibility
authorRomain Forlot <romain.forlot@iot.bzh>
Wed, 10 May 2017 07:45:29 +0000 (09:45 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Wed, 10 May 2017 16:45:55 +0000 (18:45 +0200)
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>
CAN-binder/low-can-binding/can/can-bus.cpp
CAN-binder/low-can-binding/can/can-bus.hpp

index c49f4b4..8c45073 100644 (file)
@@ -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;
 }
index 94fa0a5..8ed135f 100644 (file)
@@ -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