# HG changeset patch # User bmakuc # Date 1490349158 -3600 # Node ID 1c87f7a8cb8ae371521991935ab6d12e632bd0c7 # Parent 8dc7a42d38b1f81a37ab8789502b5bb3545e9173 Send timeout is set to 10 ms. Without timeout PLC can be blocked by CAN driver: if CAN bus is not connected to controller CAN driver never returns and therfore PLC application halts. This is a temporary solution. diff -r 8dc7a42d38b1 -r 1c87f7a8cb8a drivers/can_socket/can_socket.c --- a/drivers/can_socket/can_socket.c Fri Nov 27 16:27:46 2015 +0100 +++ b/drivers/can_socket/can_socket.c Fri Mar 24 10:52:38 2017 +0100 @@ -175,6 +175,7 @@ int err; CAN_HANDLE fd0 = malloc (sizeof (int)); #ifdef RTCAN_SOCKET + nanosecs_rel_t tx_timeout; can_baudrate_t *baudrate; can_mode_t *mode; #endif @@ -236,6 +237,16 @@ } #ifdef RTCAN_SOCKET + tx_timeout = 10000000; /* XXX Timeout is temporarily set to 10 ms */ + err = CAN_IOCTL (*(int *) fd0, RTCAN_RTIOC_SND_TIMEOUT, &tx_timeout); + if (err) + { + fprintf (stderr, + "Setting TX timeout %d failed: %s\n", + *baudrate, strerror (CAN_ERRNO (err))); + goto error_close; + } + baudrate = (can_baudrate_t *) & ifr.ifr_ifru; *baudrate = TranslateBaudRate (board->baudrate); if (!*baudrate)