Separate socket configuration and opening
authorRomain Forlot <romain.forlot@iot.bzh>
Thu, 20 Apr 2017 15:40:06 +0000 (17:40 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Thu, 20 Apr 2017 15:40:06 +0000 (17:40 +0200)
Change-Id: I94cad718b516f24c5d1833e09df89f03e529f48a
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
CAN-binder/low-can-binding/can/can-bus-dev.cpp
CAN-binder/low-can-binding/can/can-bus-dev.hpp
CAN-binder/low-can-binding/can/can-bus.cpp

index a1c6fcd..81e8f30 100644 (file)
@@ -53,20 +53,21 @@ uint32_t can_bus_dev_t::get_address() const
 /// @return -1 if something wrong.
 int can_bus_dev_t::open(bool bcm)
 {
-       const int canfd_on = 1;
-       const int timestamp_on = 1;
-       struct timeval timeout;
-
        DEBUG(binder_interface, "open_raw: CAN Handler socket : %d", can_socket_.socket());
        return can_socket_.open(device_name_, bcm);
+}
 
        // Set some option on the socket : timeout, timestamp and canfd frame usage.
+void can_bus_dev_t::configure()
+{
        if (can_socket_)
        {
-               DEBUG(binder_interface, "open_raw: CAN Handler socket correctly initialized : %d", can_socket_.socket());
+               const int timestamp_on = 1;
+               const int canfd_on = 1;
 
                // Set timeout for read
                can_socket_.setopt(SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
+               DEBUG(binder_interface, "open_raw: CAN Handler socket correctly initialized : %d", can_socket_.socket());
 
                // Set timestamp for receveid frame
                if (can_socket_.setopt(SOL_SOCKET, SO_TIMESTAMP, &timestamp_on, sizeof(timestamp_on)) < 0)
@@ -86,8 +87,9 @@ int can_bus_dev_t::open(bool bcm)
                }
        }
        else
+       {
                ERROR(binder_interface, "open_raw: socket could not be created. Error was : %s", ::strerror(errno));
-       return -1;
+       }
 }
 
 /// @brief Close the bus.
index 8cafaf8..96aa373 100644 (file)
@@ -51,6 +51,7 @@ public:
        uint32_t get_address() const;
 
        int open(bool bcm=false);
+       void configure();
        int close();
 
        void start_reading(can_bus_t& can_bus);
index 4775b4f..5d8221c 100644 (file)
@@ -239,6 +239,7 @@ int can_bus_t::init_can_dev()
                                can_bus_t::can_devices_[device] = std::make_shared<can_bus_dev_t>(device, i);
                                if (can_bus_t::can_devices_[device]->open(true) >= 0)
                                {
+                                       can_bus_t::can_devices_[device]->configure();
                                        DEBUG(binder_interface, "Start reading thread");
                                        NOTICE(binder_interface, "%s device opened and reading", device.c_str());
                                        can_bus_t::can_devices_[device]->start_reading(*this);