This is an automated email from the ASF dual-hosted git repository.

jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit a52a399bc965a0b59272a90c1f61e647bccf58ee
Author: p-szafonimateusz <[email protected]>
AuthorDate: Fri May 15 14:11:39 2026 +0200

    drivers/serial/netdev_console.c: Fix CAN console.
    
    CAN console require CAN_ISOTP_WAIT_TX_DONE set
    
    Signed-off-by: p-szafonimateusz <[email protected]>
---
 drivers/serial/Kconfig          |  3 ++-
 drivers/serial/netdev_console.c | 15 +++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 7f3961513db..87ea8f2078e 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -1028,7 +1028,7 @@ config CONSOLE_NETDEV
        bool "Console on netdev"
        default n
        depends on NETDEVICES && SCHED_LPWORK
-       depends on NET_UDP || NET_CAN_ISOTP
+       depends on NET_UDP || (NET_CAN_ISOTP && NET_CAN_SOCK_OPTS)
        select SERIAL_RXDMA
        select SERIAL_TXDMA
        ---help---
@@ -1045,6 +1045,7 @@ config CONSOLE_NETDEV_UDP
 config CONSOLE_NETDEV_CAN
        bool "Netdev Console interface over CAN"
        default y if NET_CAN_ISOTP
+       depends on NET_CAN_ISOTP && NET_CAN_SOCK_OPTS
        ---help---
                Network interface over CAN (ISO-TP) used for Console.
 
diff --git a/drivers/serial/netdev_console.c b/drivers/serial/netdev_console.c
index a20cb850e32..660c1433b13 100644
--- a/drivers/serial/netdev_console.c
+++ b/drivers/serial/netdev_console.c
@@ -199,6 +199,7 @@ static int netdev_console_can_init(FAR struct uart_dev_s 
*dev)
 #ifdef CONFIG_NET_CAN_CANFD
   struct can_isotp_ll_options  ll;
 #endif
+  struct can_isotp_options     opts;
   struct sockaddr_can          addr;
   int                          ret;
 
@@ -228,6 +229,20 @@ static int netdev_console_can_init(FAR struct uart_dev_s 
*dev)
       return ret;
     }
 
+  /* Console write must be blocking */
+
+  memset(&opts, 0, sizeof(opts));
+  opts.flags = CAN_ISOTP_WAIT_TX_DONE;
+
+  ret = psock_setsockopt(&priv->psock, SOL_CAN_ISOTP, CAN_ISOTP_OPTS,
+                         &opts, sizeof(opts));
+  if (ret < 0)
+    {
+      psock_close(&priv->psock);
+      nerr("ERROR: Failed to configure ISO-TP socket: %d\n", ret);
+      return ret;
+    }
+
 #ifdef CONFIG_NET_CAN_CANFD
   /* Always use CAN FD if enabled */
 

Reply via email to