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;
