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

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

commit b23dda6efb5bae41eebc101a26181a5c4f2a66b8
Author: p-szafonimateusz <[email protected]>
AuthorDate: Mon Nov 9 11:51:10 2026 +0100

    net/can: Move can_callback.c into can.c.
    
    Move the code of can_callback.c into can.c without changes and remove
    can_callback.c.  Only the include lists and the file guards are merged; the
    functions are copied as they are.
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: p-szafonimateusz <[email protected]>
---
 .github/CODEOWNERS                        |   1 -
 Documentation/os/networking/socketcan.rst |   3 +-
 net/can/CMakeLists.txt                    |   2 +-
 net/can/Make.defs                         |   1 -
 net/can/can.c                             | 198 ++++++++++++++++++++++++--
 net/can/can_callback.c                    | 227 ------------------------------
 6 files changed, 192 insertions(+), 240 deletions(-)

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index a48267a5508..95da9e2ea29 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -15892,7 +15892,6 @@ net/bluetooth/bluetooth_sockif.c 
[email protected] [email protected] x
 net/can/Kconfig [email protected] [email protected] [email protected] 
[email protected] [email protected]
 net/can/can.c [email protected] [email protected] [email protected] 
[email protected] [email protected]
 net/can/can.h [email protected] [email protected] 
[email protected] [email protected] [email protected]
-net/can/can_callback.c [email protected] [email protected] 
[email protected] [email protected] [email protected]
 net/can/can_getsockopt.c [email protected] [email protected] 
[email protected] [email protected] [email protected]
 net/can/can_input.c [email protected] [email protected] 
[email protected] [email protected] [email protected]
 net/can/can_notifier.c [email protected] [email protected]
diff --git a/Documentation/os/networking/socketcan.rst 
b/Documentation/os/networking/socketcan.rst
index 38315aac8a1..6ef87f71233 100644
--- a/Documentation/os/networking/socketcan.rst
+++ b/Documentation/os/networking/socketcan.rst
@@ -92,13 +92,12 @@ Files supporting SocketCAN can be found in the following 
locations:
 -  **Header File**: ``include/nuttx/net/can.h``
 -  **Main Modules**:
 
-   - ``can.c`` - Connection management
+   - ``can.c`` - Connection management and callbacks
    - ``can_sockif.c`` - Socket interface implementation
    - ``can_sendmsg.c`` - Message transmission
    - ``can_sendmsg_buffered.c`` - Message transmission with buffering
    - ``can_recvmsg.c`` - Message reception
    - ``can_poll.c`` - Polling support
-   - ``can_callback.c`` - Callback handling
 
 Configuration Options
 ---------------------
diff --git a/net/can/CMakeLists.txt b/net/can/CMakeLists.txt
index bcf4c54de3f..e7cc230b23e 100644
--- a/net/can/CMakeLists.txt
+++ b/net/can/CMakeLists.txt
@@ -43,7 +43,7 @@ if(CONFIG_NET_CAN)
     list(APPEND SRCS can_bufpool.c)
   endif()
 
-  list(APPEND SRCS can.c can_input.c can_callback.c can_poll.c)
+  list(APPEND SRCS can.c can_input.c can_poll.c)
 
   target_sources(net PRIVATE ${SRCS})
 endif()
diff --git a/net/can/Make.defs b/net/can/Make.defs
index 0a5c0e92084..d296a6bc1e4 100644
--- a/net/can/Make.defs
+++ b/net/can/Make.defs
@@ -51,7 +51,6 @@ endif
 
 NET_CSRCS += can.c
 NET_CSRCS += can_input.c
-NET_CSRCS += can_callback.c
 NET_CSRCS += can_poll.c
 
 # Include can build support
diff --git a/net/can/can.c b/net/can/can.c
index 4d72db7c08c..ee7317dfd2c 100644
--- a/net/can/can.c
+++ b/net/can/can.c
@@ -26,24 +26,30 @@
 
 #include <nuttx/config.h>
 
-#include <stdint.h>
-#include <string.h>
+#ifdef CONFIG_NET_CAN
+
 #include <assert.h>
 #include <errno.h>
-#include <nuttx/debug.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/time.h>
 
 #include <arch/irq.h>
 
+#include <nuttx/debug.h>
 #include <nuttx/kmalloc.h>
-#include <nuttx/queue.h>
+#include <nuttx/mm/iob.h>
 #include <nuttx/mutex.h>
-#include <nuttx/net/netconfig.h>
+#include <nuttx/net/can.h>
 #include <nuttx/net/net.h>
+#include <nuttx/net/netconfig.h>
+#include <nuttx/net/netdev.h>
+#include <nuttx/net/netstats.h>
+#include <nuttx/queue.h>
 
-#include "utils/utils.h"
 #include "can/can.h"
-
-#ifdef CONFIG_NET_CAN
+#include "devif/devif.h"
+#include "utils/utils.h"
 
 /****************************************************************************
  * Pre-processor Definitions
@@ -68,10 +74,186 @@ NET_BUFPOOL_DECLARE(g_can_connections, sizeof(struct 
can_conn_s),
 
 static dq_queue_t g_active_can_connections;
 
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: can_data_event
+ *
+ * Description:
+ *   Handle data that is not accepted by the application because there is no
+ *   listener in place ready to receive the data.
+ *
+ * Assumptions:
+ * - The caller has checked that CAN_NEWDATA is set in flags and that is no
+ *   other handler available to process the incoming data.
+ * - This function must be called with the network locked.
+ *
+ ****************************************************************************/
+
+static inline uint32_t
+can_data_event(FAR struct net_driver_s *dev, FAR struct can_conn_s *conn,
+               uint32_t flags)
+{
+  int buflen = dev->d_len;
+  int recvlen;
+  uint32_t ret;
+
+  ret = (flags & ~CAN_NEWDATA);
+
+  /* Save as the packet data as in the read-ahead buffer.  NOTE that
+   * partial packets will not be buffered.
+   */
+
+  recvlen = can_datahandler(dev, conn);
+  if (recvlen < buflen)
+    {
+      /* There is no handler to receive new data and there are no free
+       * read-ahead buffers to retain the data -- drop the packet.
+       */
+
+      ninfo("Dropped %d bytes\n", dev->d_len);
+
+#ifdef CONFIG_NET_STATISTICS
+      g_netstats.can.drop++;
+#endif
+      NETDEV_RXDROPPED(dev);
+    }
+
+  /* In any event, the new data has now been handled */
+
+  dev->d_len = 0;
+  return ret;
+}
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
+/****************************************************************************
+ * Name: can_callback
+ *
+ * Description:
+ *   Inform the application holding the packet socket of a change in state.
+ *
+ * Returned Value:
+ *   OK if packet has been processed, otherwise ERROR.
+ *
+ * Assumptions:
+ *   This function can be called from an interrupt.
+ *
+ ****************************************************************************/
+
+uint32_t can_callback(FAR struct net_driver_s *dev,
+                      FAR struct can_conn_s *conn, uint32_t flags)
+{
+  /* Some sanity checking */
+
+  if (conn)
+    {
+      conn_lock(&conn->sconn);
+      flags = devif_conn_event(dev, flags, conn->sconn.list);
+
+      /* Either we did not get the lock or there is no application listening
+       * If we did not get a lock we store the frame in the read-ahead buffer
+       */
+
+      if ((flags & CAN_NEWDATA) != 0)
+        {
+          /* Data was not handled.. dispose of it appropriately */
+
+          flags = can_data_event(dev, conn, flags);
+        }
+
+      conn_unlock(&conn->sconn);
+    }
+
+  return flags;
+}
+
+/****************************************************************************
+ * Name: can_datahandler
+ *
+ * Description:
+ *   Handle data that is not accepted by the application.  This may be called
+ *   either (1) from the data receive logic if it cannot buffer the data, or
+ *   (2) from the CAN event logic is there is no listener in place ready to
+ *   receive the data.
+ *
+ * Input Parameters:
+ *   dev  - The device which as active when the event was detected.
+ *   conn - A pointer to the CAN connection structure
+ *
+ * Returned Value:
+ *   The number of bytes actually buffered is returned.  This will be either
+ *   zero or equal to buflen; partial packets are not buffered.
+ *
+ * Assumptions:
+ * - The caller has checked that CAN_NEWDATA is set in flags and that is no
+ *   other handler available to process the incoming data.
+ * - This function must be called with the network locked.
+ *
+ ****************************************************************************/
+
+int can_datahandler(FAR struct net_driver_s *dev,
+                    FAR struct can_conn_s *conn)
+{
+  FAR struct iob_s *iob = dev->d_iob;
+  int ret = 0;
+
+  conn_lock(&conn->sconn);
+#if CONFIG_NET_RECV_BUFSIZE > 0
+#  if CONFIG_NET_CAN_NBUFFERS > 0
+  int bufnum = div_const_roundup(conn->rcvbufs, NET_CAN_PKTSIZE);
+#  else
+  int bufnum = div_const_roundup(conn->rcvbufs, CONFIG_IOB_BUFSIZE);
+#  endif
+  /* Check the frame count pending on conn->readahead */
+
+  if (iob_get_queue_entry_count(&conn->readahead) >= bufnum)
+    {
+      nwarn("WARNING: There are no free receive buffer to retain the data. "
+            "Receive buffer number:%d, received frames:%u \n",
+            bufnum, iob_get_queue_entry_count(&conn->readahead));
+      goto errout;
+    }
+#endif
+
+  /* Concat the iob to readahead */
+
+  ret = iob_tryadd_queue(iob, &conn->readahead);
+  if (ret >= 0)
+    {
+#ifdef CONFIG_NET_CAN_NOTIFIER
+      /* Provide notification(s) that additional CAN read-ahead data is
+       * available.
+       */
+
+      can_readahead_signal(conn);
+#endif
+      ret = iob->io_pktlen;
+
+      /* Device buffer has been enqueued, clear the handle */
+
+      netdev_iob_clear(dev);
+    }
+  else
+    {
+      nerr("ERROR: Failed to queue the I/O buffer chain: %d\n", ret);
+      ret = 0;
+      goto errout;
+    }
+
+  conn_unlock(&conn->sconn);
+  return ret;
+
+errout:
+  netdev_iob_release(dev);
+  conn_unlock(&conn->sconn);
+  return ret;
+}
+
 /****************************************************************************
  * Name: can_alloc()
  *
diff --git a/net/can/can_callback.c b/net/can/can_callback.c
deleted file mode 100644
index cf061b9aeb2..00000000000
--- a/net/can/can_callback.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/****************************************************************************
- * net/can/can_callback.c
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#if defined(CONFIG_NET) && defined(CONFIG_NET_CAN)
-
-#include <stdint.h>
-#include <nuttx/debug.h>
-
-#include <nuttx/net/netconfig.h>
-#include <nuttx/net/netdev.h>
-#include <nuttx/mm/iob.h>
-#include <nuttx/net/netstats.h>
-#include <nuttx/net/can.h>
-
-#include "devif/devif.h"
-#include "utils/utils.h"
-#include "can/can.h"
-
-#ifdef CONFIG_NET_TIMESTAMP
-#include <sys/time.h>
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: can_data_event
- *
- * Description:
- *   Handle data that is not accepted by the application because there is no
- *   listener in place ready to receive the data.
- *
- * Assumptions:
- * - The caller has checked that CAN_NEWDATA is set in flags and that is no
- *   other handler available to process the incoming data.
- * - This function must be called with the network locked.
- *
- ****************************************************************************/
-
-static inline uint32_t
-can_data_event(FAR struct net_driver_s *dev, FAR struct can_conn_s *conn,
-               uint32_t flags)
-{
-  int buflen = dev->d_len;
-  int recvlen;
-  uint32_t ret;
-
-  ret = (flags & ~CAN_NEWDATA);
-
-  /* Save as the packet data as in the read-ahead buffer.  NOTE that
-   * partial packets will not be buffered.
-   */
-
-  recvlen = can_datahandler(dev, conn);
-  if (recvlen < buflen)
-    {
-      /* There is no handler to receive new data and there are no free
-       * read-ahead buffers to retain the data -- drop the packet.
-       */
-
-      ninfo("Dropped %d bytes\n", dev->d_len);
-
-#ifdef CONFIG_NET_STATISTICS
-      g_netstats.can.drop++;
-#endif
-      NETDEV_RXDROPPED(dev);
-    }
-
-  /* In any event, the new data has now been handled */
-
-  dev->d_len = 0;
-  return ret;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: can_callback
- *
- * Description:
- *   Inform the application holding the packet socket of a change in state.
- *
- * Returned Value:
- *   OK if packet has been processed, otherwise ERROR.
- *
- * Assumptions:
- *   This function can be called from an interrupt.
- *
- ****************************************************************************/
-
-uint32_t can_callback(FAR struct net_driver_s *dev,
-                      FAR struct can_conn_s *conn, uint32_t flags)
-{
-  /* Some sanity checking */
-
-  if (conn)
-    {
-      conn_lock(&conn->sconn);
-      flags = devif_conn_event(dev, flags, conn->sconn.list);
-
-      /* Either we did not get the lock or there is no application listening
-       * If we did not get a lock we store the frame in the read-ahead buffer
-       */
-
-      if ((flags & CAN_NEWDATA) != 0)
-        {
-          /* Data was not handled.. dispose of it appropriately */
-
-          flags = can_data_event(dev, conn, flags);
-        }
-
-      conn_unlock(&conn->sconn);
-    }
-
-  return flags;
-}
-
-/****************************************************************************
- * Name: can_datahandler
- *
- * Description:
- *   Handle data that is not accepted by the application.  This may be called
- *   either (1) from the data receive logic if it cannot buffer the data, or
- *   (2) from the CAN event logic is there is no listener in place ready to
- *   receive the data.
- *
- * Input Parameters:
- *   dev  - The device which as active when the event was detected.
- *   conn - A pointer to the CAN connection structure
- *
- * Returned Value:
- *   The number of bytes actually buffered is returned.  This will be either
- *   zero or equal to buflen; partial packets are not buffered.
- *
- * Assumptions:
- * - The caller has checked that CAN_NEWDATA is set in flags and that is no
- *   other handler available to process the incoming data.
- * - This function must be called with the network locked.
- *
- ****************************************************************************/
-
-int can_datahandler(FAR struct net_driver_s *dev,
-                    FAR struct can_conn_s *conn)
-{
-  FAR struct iob_s *iob = dev->d_iob;
-  int ret = 0;
-
-  conn_lock(&conn->sconn);
-#if CONFIG_NET_RECV_BUFSIZE > 0
-#  if CONFIG_NET_CAN_NBUFFERS > 0
-  int bufnum = div_const_roundup(conn->rcvbufs, NET_CAN_PKTSIZE);
-#  else
-  int bufnum = div_const_roundup(conn->rcvbufs, CONFIG_IOB_BUFSIZE);
-#  endif
-  /* Check the frame count pending on conn->readahead */
-
-  if (iob_get_queue_entry_count(&conn->readahead) >= bufnum)
-    {
-      nwarn("WARNING: There are no free receive buffer to retain the data. "
-            "Receive buffer number:%d, received frames:%u \n",
-            bufnum, iob_get_queue_entry_count(&conn->readahead));
-      goto errout;
-    }
-#endif
-
-  /* Concat the iob to readahead */
-
-  ret = iob_tryadd_queue(iob, &conn->readahead);
-  if (ret >= 0)
-    {
-#ifdef CONFIG_NET_CAN_NOTIFIER
-      /* Provide notification(s) that additional CAN read-ahead data is
-       * available.
-       */
-
-      can_readahead_signal(conn);
-#endif
-      ret = iob->io_pktlen;
-
-      /* Device buffer has been enqueued, clear the handle */
-
-      netdev_iob_clear(dev);
-    }
-  else
-    {
-      nerr("ERROR: Failed to queue the I/O buffer chain: %d\n", ret);
-      ret = 0;
-      goto errout;
-    }
-
-  conn_unlock(&conn->sconn);
-  return ret;
-
-errout:
-  netdev_iob_release(dev);
-  conn_unlock(&conn->sconn);
-  return ret;
-}
-
-#endif /* CONFIG_NET && CONFIG_NET_CAN */

Reply via email to