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 a5d9f1421587f2c61ca2897c652c74af8645735e
Author: raiden00pl <[email protected]>
AuthorDate: Mon Dec 1 15:08:53 2025 +0100

    sensors/adxl362_uorb: support for fixed-point data
    
    support for fixed-point data for adxl362_uorb
    
    Signed-off-by: raiden00pl <[email protected]>
---
 drivers/sensors/adxl362_uorb.c | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/drivers/sensors/adxl362_uorb.c b/drivers/sensors/adxl362_uorb.c
index dee8a2842cd..5b9dea79cc1 100644
--- a/drivers/sensors/adxl362_uorb.c
+++ b/drivers/sensors/adxl362_uorb.c
@@ -43,12 +43,6 @@
  * Pre-processor Definitions
  ****************************************************************************/
 
-/* Only float data type supported now */
-
-#ifdef CONFIG_SENSORS_USE_B16
-#  error fixed-point data type not supported yet
-#endif
-
 #define ADXL362_SPI_FREQUENCY         1000000
 #define ADXL362_SPI_MODE              SPIDEV_MODE0
 
@@ -112,7 +106,7 @@ struct adxl362_sensor_s
   struct sensor_lowerhalf_s  lower;
   FAR struct spi_dev_s      *spi;
   int                        devno;
-  float                      scale;
+  sensor_data_t              scale;
 #ifdef CONFIG_SENSORS_ADXL362_POLL
   bool                       enabled;
   uint32_t                   interval;
@@ -489,10 +483,12 @@ static int adxl362_fetch(FAR struct sensor_lowerhalf_s 
*lower,
   adxl362_getregs(priv, ADXL362_XDATA_L, (FAR uint8_t *)data, 8);
 
   accel.timestamp   = sensor_get_timestamp();
-  accel.x           = (float)adxl362_data(&data[0]) * priv->scale;
-  accel.y           = (float)adxl362_data(&data[2]) * priv->scale;
-  accel.z           = (float)adxl362_data(&data[4]) * priv->scale;
-  accel.temperature = (float)adxl362_data(&data[6]) * ADXL362_TEMP_SCALE;
+
+  accel.x           = sensor_data_muli(priv->scale, adxl362_data(&data[0]));
+  accel.y           = sensor_data_muli(priv->scale, adxl362_data(&data[2]));
+  accel.z           = sensor_data_muli(priv->scale, adxl362_data(&data[4]));
+  accel.temperature = sensor_data_muli(
+    sensor_data_ftof(ADXL362_TEMP_SCALE), adxl362_data(&data[6]));
 
   memcpy(buffer, &accel, sizeof(accel));
 
@@ -546,11 +542,14 @@ static int adxl362_thread(int argc, FAR char **argv)
           adxl362_getregs(priv, ADXL362_XDATA_L, (FAR uint8_t *)data, 8);
 
           accel.timestamp   = sensor_get_timestamp();
-          accel.x           = (float)adxl362_data(&data[0]) * priv->scale;
-          accel.y           = (float)adxl362_data(&data[2]) * priv->scale;
-          accel.z           = (float)adxl362_data(&data[4]) * priv->scale;
-          accel.temperature =
-            (float)adxl362_data(&data[6]) * ADXL362_TEMP_SCALE;
+          accel.x           = sensor_data_muli(priv->scale,
+                                               adxl362_data(&data[0]));
+          accel.y           = sensor_data_muli(priv->scale,
+                                               adxl362_data(&data[2]));
+          accel.z           = sensor_data_muli(priv->scale,
+                                               adxl362_data(&data[4]));
+          accel.temperature = sensor_data_muli(
+            sensor_data_ftof(ADXL362_TEMP_SCALE), adxl362_data(&data[6]));
 
           priv->lower.push_event(priv->lower.priv, &accel, sizeof(accel));
         }
@@ -609,7 +608,7 @@ int adxl362_register(int devno, FAR struct spi_dev_s *spi)
   priv->lower.ops     = &g_adxl362_accel_ops;
   priv->lower.type    = SENSOR_TYPE_ACCELEROMETER;
   priv->lower.nbuffer = 1;
-  priv->scale         = (CONSTANTS_ONE_G / 1000.0f);
+  priv->scale         = sensor_data_ftof(CONSTANTS_ONE_G / 1000.0f);
   priv->devno         = devno;
 #ifdef CONFIG_SENSORS_ADXL362_POLL
   priv->enabled       = false;

Reply via email to