You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/04/28 05:22:02 UTC
(nuttx) 03/05: drivers/adxl362_uorb: various fixes
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 1985dcd192b3548bce135536ee2ed5e595fed75c
Author: raiden00pl <ra...@railab.me>
AuthorDate: Tue Apr 23 19:12:00 2024 +0200
drivers/adxl362_uorb: various fixes
- fix compilation for fetch interface
- for data ready in thread
- add soft reset
---
drivers/sensors/adxl362_uorb.c | 34 +++++++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/drivers/sensors/adxl362_uorb.c b/drivers/sensors/adxl362_uorb.c
index 65fd0e5394..b1842e5bee 100644
--- a/drivers/sensors/adxl362_uorb.c
+++ b/drivers/sensors/adxl362_uorb.c
@@ -70,6 +70,7 @@
#define ADXL362_TMEP_L 0x14
#define ADXL362_TEMP_H 0x15
#define ADXL362_SOFT_RESET 0x1f
+# define ADXL362_SOFT_RESET_VALUE 0x52
#define ADXL362_THRESH_ACT_L 0x20
#define ADXL362_THRESH_ACT_H 0x21
#define ADXL362_TIME_ACT 0x22
@@ -83,6 +84,7 @@
#define ADXL362_INTMAP1 0x2a
#define ADXL362_INTMAP2 0x2b
#define ADXL362_FILTER_CTL 0x2c
+# define ADXL362_FILTER_CTL_DEFAULT 0x13
#define ADXL362_POWER_CTL 0x2d
# define ADXL362_LOW_NOISE (0 << 4)
# define ADXL362_ULTRALOW_NOISE (2 << 4)
@@ -282,7 +284,7 @@ static void adxl362_getregs(FAR struct adxl362_sensor_s *priv,
static int16_t adxl362_data(FAR uint8_t *data)
{
- return (int16_t)(data[0] | (data[1]) << 8);
+ return (int16_t)(data[0] | (data[1]) << 8);
}
/****************************************************************************
@@ -321,6 +323,20 @@ static int adxl362_checkid(FAR struct adxl362_sensor_s *priv)
return OK;
}
+/****************************************************************************
+ * Name: adxl362_reset
+ *
+ * Description:
+ * Soft reset
+ *
+ ****************************************************************************/
+
+static void adxl362_reset(FAR struct adxl362_sensor_s *priv)
+{
+ adxl362_putreg8(priv, ADXL362_SOFT_RESET, ADXL362_SOFT_RESET_VALUE);
+ up_mdelay(5);
+}
+
/****************************************************************************
* Name: adxl362_start
****************************************************************************/
@@ -328,6 +344,10 @@ static int adxl362_checkid(FAR struct adxl362_sensor_s *priv)
static void adxl362_start(FAR struct adxl362_sensor_s *priv)
{
adxl362_putreg8(priv, ADXL362_POWER_CTL, ADXL362_POWER_MODE_MEASURE);
+
+ /* Wait for sensor ready - otherwise the first measuremet is garbage */
+
+ up_mdelay(5);
}
/****************************************************************************
@@ -459,8 +479,8 @@ static int adxl362_fetch(FAR struct sensor_lowerhalf_s *lower,
accel.timestamp = sensor_get_timestamp();
accel.x = (float)adxl362_data(&data[0]) * priv->scale;
- accel.y = (float)adxl362_data(&data[1]) * priv->scale;
- accel.z = (float)adxl362_data(&data[2]) * 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;
memcpy(buffer, &accel, sizeof(accel));
@@ -508,6 +528,10 @@ static int adxl362_thread(int argc, FAR char **argv)
if (priv->enabled)
{
+ /* Wait for data ready */
+
+ while (!(adxl362_getreg8(priv, ADXL362_STATUS) & 0x01));
+
adxl362_getregs(priv, ADXL362_XDATA_L, (FAR uint8_t *)data, 8);
accel.timestamp = sensor_get_timestamp();
@@ -593,6 +617,10 @@ int adxl362_register(int devno, FAR struct spi_dev_s *spi)
return ret;
}
+ /* Soft reset */
+
+ adxl362_reset(priv);
+
/* Register the character driver */
ret = sensor_register(&priv->lower, devno);