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

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

commit 4a64703a601c9c41c90eef4d2d865a606eef59cd
Author: raiden00pl <[email protected]>
AuthorDate: Fri Jul 24 15:02:15 2026 +0200

    boards/stm32f4discovery: add sensorscope config
    
    streams the on-board LIS3DSH over USB CDC/ACM with SensorScope
    
    Signed-off-by: raiden00pl <[email protected]>
    Assisted-by: Claude:Claude-Fable-5
---
 .../arm/stm32f4/boards/stm32f4discovery/index.rst  | 23 ++++++++
 boards/arm/common/stm32/src/CMakeLists.txt         |  2 +-
 boards/arm/common/stm32/src/Make.defs              |  2 +-
 boards/arm/common/stm32/src/stm32_lis3dsh.c        | 40 +++++++------
 .../stm32f4discovery/configs/sensorscope/defconfig | 65 ++++++++++++++++++++++
 .../stm32f4/stm32f4discovery/src/stm32_bringup.c   | 12 +++-
 .../arm/stm32f4/stm32f4discovery/src/stm32_spi.c   |  6 +-
 7 files changed, 127 insertions(+), 23 deletions(-)

diff --git 
a/Documentation/platforms/arm/stm32f4/boards/stm32f4discovery/index.rst 
b/Documentation/platforms/arm/stm32f4/boards/stm32f4discovery/index.rst
index ea78006fcfd..452ab1ff585 100644
--- a/Documentation/platforms/arm/stm32f4/boards/stm32f4discovery/index.rst
+++ b/Documentation/platforms/arm/stm32f4/boards/stm32f4discovery/index.rst
@@ -2448,3 +2448,26 @@ nxscope_cdcacm
 Configuration demonstrating NxScope stream over CDC-ACM interface.
 See :doc:`/applications/examples/nxscope/index` and
 :doc:`/applications/logging/nxscope/index` for more details.
+
+sensorscope
+-----------
+
+Streams the on-board LIS3DSH accelerometer (registered as a uORB sensor at
+``/dev/uorb/sensor_accel0``) over the USB CDC/ACM virtual serial port using the
+SensorScope application on top of the NxScope logging protocol. The stream is
+read on the host with Nxscli (https://github.com/railab/nxscli).
+
+Read it with Nxscli::
+
+  # List the available channels: expect one FLOAT channel of dimension 3
+  # named "sensor_accel0" (the accelerometer X/Y/Z axes).
+  nxscli serial /dev/ttyACM1 pdevinfo
+
+  # Print samples of channel 0 to stdout.
+  nxscli serial /dev/ttyACM1 chan 0 pprinter 100
+
+  # Plot samples with nxscli-pqg plugin.
+  nxscli serial /dev/ttyACM1 chan 0 q_roll 100
+
+See :doc:`/applications/system/sensorscope/index` and
+:doc:`/applications/logging/nxscope/index` for more details.
diff --git a/boards/arm/common/stm32/src/CMakeLists.txt 
b/boards/arm/common/stm32/src/CMakeLists.txt
index 7f557894370..50b724581eb 100644
--- a/boards/arm/common/stm32/src/CMakeLists.txt
+++ b/boards/arm/common/stm32/src/CMakeLists.txt
@@ -144,7 +144,7 @@ if(CONFIG_SENSORS_AMG88XX)
   list(APPEND SRCS stm32_amg88xx.c)
 endif()
 
-if(CONFIG_LIS3DSH)
+if(CONFIG_LIS3DSH OR CONFIG_SENSORS_LIS3DSH_UORB)
   list(APPEND SRCS stm32_lis3dsh.c)
 endif()
 
diff --git a/boards/arm/common/stm32/src/Make.defs 
b/boards/arm/common/stm32/src/Make.defs
index 95482c11489..e62d8f0e291 100644
--- a/boards/arm/common/stm32/src/Make.defs
+++ b/boards/arm/common/stm32/src/Make.defs
@@ -160,7 +160,7 @@ ifeq ($(CONFIG_SENSORS_AMG88XX),y)
   CSRCS+= stm32_amg88xx.c
 endif
 
-ifeq ($(CONFIG_LIS3DSH),y)
+ifneq (,$(filter y,$(CONFIG_LIS3DSH) $(CONFIG_SENSORS_LIS3DSH_UORB)))
   CSRCS += stm32_lis3dsh.c
 endif
 
diff --git a/boards/arm/common/stm32/src/stm32_lis3dsh.c 
b/boards/arm/common/stm32/src/stm32_lis3dsh.c
index f1cfaa31ce3..e483fb63c8e 100644
--- a/boards/arm/common/stm32/src/stm32_lis3dsh.c
+++ b/boards/arm/common/stm32/src/stm32_lis3dsh.c
@@ -62,12 +62,14 @@
  *
  ****************************************************************************/
 
+#ifndef CONFIG_SENSORS_LIS3DSH_UORB
 int attach_disc_lis3dsh(struct lis3dsh_config_s *config,
                         xcpt_t interrupt_handler)
 {
   return stm32_gpiosetevent(BOARD_LIS3DSH_GPIO_EXT0, true, false, false,
                             interrupt_handler, NULL);
 }
+#endif
 
 /****************************************************************************
  * Public Functions
@@ -77,10 +79,12 @@ int attach_disc_lis3dsh(struct lis3dsh_config_s *config,
  * Name: board_lis3dsh_initialize
  *
  * Description:
- *   Initialize and register the LIS3DSH 3-axis accelerometer.
+ *   Initialize and register the LIS3DSH 3-axis accelerometer as a legacy
+ *   character device (/dev/accN), or as a uORB sensor when
+ *   CONFIG_SENSORS_LIS3DSH_UORB is selected.
  *
  * Input Parameters:
- *   devno - The device number, used to build the device path as /dev/accN
+ *   devno - The device number
  *   busno - The SPI bus number
  *
  * Returned Value:
@@ -90,28 +94,28 @@ int attach_disc_lis3dsh(struct lis3dsh_config_s *config,
 
 int board_lis3dsh_initialize(int devno, int busno)
 {
-  static struct lis3dsh_config_s acc0_config;
-  char devpath[12];
   struct spi_dev_s *spi;
-  int ret;
 
   sninfo("Initializing LIS3DSH\n");
 
-  acc0_config.irq = 22;
-  acc0_config.spi_devid = 0;
-  acc0_config.attach = &attach_disc_lis3dsh;
-
-  spi = stm32_spibus_initialize(1);
-  if (!spi)
+  spi = stm32_spibus_initialize(busno);
+  if (spi == NULL)
     {
       spiinfo("Failed to initialize SPI port\n");
-      ret = -ENODEV;
-    }
-  else
-    {
-      snprintf(devpath, sizeof(devpath), "/dev/acc%d", devno);
-      ret = lis3dsh_register(devpath, spi, &acc0_config);
+      return -ENODEV;
     }
 
-  return ret;
+#ifdef CONFIG_SENSORS_LIS3DSH_UORB
+  return lis3dsh_register_uorb(devno, spi);
+#else
+  static struct lis3dsh_config_s acc0_config;
+  char devpath[12];
+
+  acc0_config.irq = 22;
+  acc0_config.spi_devid = 0;
+  acc0_config.attach = &attach_disc_lis3dsh;
+
+  snprintf(devpath, sizeof(devpath), "/dev/acc%d", devno);
+  return lis3dsh_register(devpath, spi, &acc0_config);
+#endif
 }
diff --git a/boards/arm/stm32f4/stm32f4discovery/configs/sensorscope/defconfig 
b/boards/arm/stm32f4/stm32f4discovery/configs/sensorscope/defconfig
new file mode 100644
index 00000000000..3315f376be4
--- /dev/null
+++ b/boards/arm/stm32f4/stm32f4discovery/configs/sensorscope/defconfig
@@ -0,0 +1,65 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed 
.config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that 
includes your
+# modifications.
+#
+# CONFIG_ARCH_FPU is not set
+# CONFIG_DEV_CONSOLE is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="stm32f4discovery"
+CONFIG_ARCH_BOARD_COMMON=y
+CONFIG_ARCH_BOARD_STM32F4_DISCOVERY=y
+CONFIG_ARCH_BUTTONS=y
+CONFIG_ARCH_CHIP="stm32f4"
+CONFIG_ARCH_CHIP_STM32=y
+CONFIG_ARCH_CHIP_STM32F407VG=y
+CONFIG_ARCH_CHIP_STM32F4=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_BOARDCTL=y
+CONFIG_BOARDCTL_USBDEVCTRL=y
+CONFIG_BOARD_LOOPSPERMSEC=16717
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CDCACM_RXBUFSIZE=256
+CONFIG_CDCACM_TXBUFSIZE=2048
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_FS_PROCFS=y
+CONFIG_HAVE_CXX=y
+CONFIG_HAVE_CXXINITIALIZE=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_INIT_ENTRYPOINT="sensorscope_main"
+CONFIG_INIT_STACKSIZE=4096
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LOGGING_NXSCOPE=y
+CONFIG_LOGGING_NXSCOPE_ACKFRAMES=y
+CONFIG_LOGGING_NXSCOPE_DIVIDER=y
+CONFIG_MM_REGIONS=2
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_RAMLOG=y
+CONFIG_RAMLOG_BUFSIZE=4096
+CONFIG_RAMLOG_SYSLOG=y
+CONFIG_RAM_SIZE=114688
+CONFIG_RAM_START=0x20000000
+CONFIG_RAW_BINARY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_SENSORS=y
+CONFIG_SENSORS_LIS3DSH_UORB=y
+CONFIG_STACK_COLORATION=y
+CONFIG_START_DAY=27
+CONFIG_START_YEAR=2013
+CONFIG_STM32_JTAG_SW_ENABLE=y
+CONFIG_STM32_OTGFS=y
+CONFIG_STM32_PWR=y
+CONFIG_STM32_SPI1=y
+CONFIG_STM32_USART2=y
+CONFIG_SYSTEM_READLINE=y
+CONFIG_SYSTEM_SENSORSCOPE=y
+CONFIG_SYSTEM_SENSORSCOPE_CDCACM=y
+CONFIG_SYSTEM_SENSORSCOPE_FETCH_INTERVAL=100000
+CONFIG_SYSTEM_SENSORSCOPE_SERIAL_PATH="/dev/ttyACM0"
+CONFIG_SYSTEM_SENSORSCOPE_STREAMBUF_LEN=2048
+CONFIG_USBDEV=y
diff --git a/boards/arm/stm32f4/stm32f4discovery/src/stm32_bringup.c 
b/boards/arm/stm32f4/stm32f4discovery/src/stm32_bringup.c
index 16d4cbc15f2..7a8dec8f346 100644
--- a/boards/arm/stm32f4/stm32f4discovery/src/stm32_bringup.c
+++ b/boards/arm/stm32f4/stm32f4discovery/src/stm32_bringup.c
@@ -133,7 +133,7 @@
 #include "stm32_bh1750.h"
 #endif
 
-#ifdef CONFIG_LIS3DSH
+#if defined(CONFIG_LIS3DSH) || defined(CONFIG_SENSORS_LIS3DSH_UORB)
 #include "stm32_lis3dsh.h"
 #endif
 
@@ -282,6 +282,16 @@ int stm32_bringup(void)
     }
 #endif
 
+#ifdef CONFIG_SENSORS_LIS3DSH_UORB
+  /* Initialize the on-board LIS3DSH accelerometer as a uORB sensor on SPI1 */
+
+  ret = board_lis3dsh_initialize(0, 1);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: board_lis3dsh_initialize failed: %d\n", ret);
+    }
+#endif
+
 #ifdef CONFIG_LEDS_MAX7219
   ret = stm32_max7219init("/dev/numdisp0");
   if (ret < 0)
diff --git a/boards/arm/stm32f4/stm32f4discovery/src/stm32_spi.c 
b/boards/arm/stm32f4/stm32f4discovery/src/stm32_spi.c
index dac42a7b178..c55d078d508 100644
--- a/boards/arm/stm32f4/stm32f4discovery/src/stm32_spi.c
+++ b/boards/arm/stm32f4/stm32f4discovery/src/stm32_spi.c
@@ -69,7 +69,8 @@ void weak_function stm32_spidev_initialize(void)
   stm32_configgpio(GPIO_W5500_INTR);
 #endif
 
-#if defined(CONFIG_STM32_SPI1) && defined(CONFIG_SENSORS_LIS3MDL)
+#if defined(CONFIG_STM32_SPI1) && (defined(CONFIG_SENSORS_LIS3MDL) || \
+    defined(CONFIG_SENSORS_LIS3DSH_UORB) || defined(CONFIG_LIS3DSH))
   stm32_configgpio(GPIO_CS_MEMS);    /* MEMS chip select */
 #endif
 
@@ -189,7 +190,8 @@ void stm32_spi1select(struct spi_dev_s *dev, uint32_t devid,
     }
 #endif
 
-#if defined (CONFIG_SENSORS_LIS3MDL)
+#if defined(CONFIG_SENSORS_LIS3MDL) || defined(CONFIG_SENSORS_LIS3DSH_UORB) || 
\
+    defined(CONFIG_LIS3DSH)
   if (devid == SPIDEV_ACCELEROMETER(0))
     {
       stm32_gpiowrite(GPIO_CS_MEMS, !selected);

Reply via email to