82 lines
2.4 KiB
Diff
82 lines
2.4 KiB
Diff
|
From 8c15df3b56af5a5414b90abd746f824990a3441c Mon Sep 17 00:00:00 2001
|
||
|
From: Dylan Van Assche <me@dylanvanassche.be>
|
||
|
Date: Tue, 25 Apr 2023 18:34:45 +0200
|
||
|
Subject: [PATCH 6/7] accelerometer: apply accel attributes
|
||
|
|
||
|
Mount matrix, location, and scaling
|
||
|
---
|
||
|
src/drv-ssc-accel.c | 27 +++++++++++++++++++++++----
|
||
|
1 file changed, 23 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c
|
||
|
index a9b5eec..a64f28e 100644
|
||
|
--- a/src/drv-ssc-accel.c
|
||
|
+++ b/src/drv-ssc-accel.c
|
||
|
@@ -7,6 +7,7 @@
|
||
|
*/
|
||
|
|
||
|
#include "drivers.h"
|
||
|
+#include "accel-mount-matrix.h"
|
||
|
|
||
|
#include <fcntl.h>
|
||
|
#include <unistd.h>
|
||
|
@@ -21,6 +22,9 @@
|
||
|
typedef struct DrvData {
|
||
|
SSCSensorAccelerometer *sensor;
|
||
|
guint measurement_id;
|
||
|
+ AccelVec3 *mount_matrix;
|
||
|
+ AccelLocation location;
|
||
|
+ AccelScale scale;
|
||
|
} DrvData;
|
||
|
|
||
|
static gboolean
|
||
|
@@ -37,12 +41,21 @@ static void
|
||
|
measurement_cb (SSCSensorAccelerometer *sensor, gfloat accel_x, gfloat accel_y, gfloat accel_z, gpointer user_data)
|
||
|
{
|
||
|
SensorDevice *sensor_device = user_data;
|
||
|
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||
|
AccelReadings readings;
|
||
|
+ AccelVec3 tmp;
|
||
|
+
|
||
|
+ tmp.x = accel_x;
|
||
|
+ tmp.y = accel_y;
|
||
|
+ tmp.z = accel_z;
|
||
|
|
||
|
- readings.accel_x = accel_x;
|
||
|
- readings.accel_y = accel_y;
|
||
|
- readings.accel_z = accel_z;
|
||
|
- set_accel_scale (&readings.scale, 1.0);
|
||
|
+ if (!apply_mount_matrix (drv_data->mount_matrix, &tmp))
|
||
|
+ g_warning ("Could not apply mount matrix");
|
||
|
+
|
||
|
+ readings.accel_x = tmp.x;
|
||
|
+ readings.accel_y = tmp.y;
|
||
|
+ readings.accel_z = tmp.z;
|
||
|
+ copy_accel_scale (&readings.scale, drv_data->scale);
|
||
|
|
||
|
sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||
|
}
|
||
|
@@ -58,6 +71,11 @@ ssc_accelerometer_open (GUdevDevice *device)
|
||
|
sensor_device->priv = g_new0 (DrvData, 1);
|
||
|
drv_data = (DrvData *) sensor_device->priv;
|
||
|
|
||
|
+ /* Setup accel attributes */
|
||
|
+ drv_data->mount_matrix = setup_mount_matrix (device);
|
||
|
+ drv_data->location = setup_accel_location (device);
|
||
|
+ set_accel_scale (&drv_data->scale, 1.0);
|
||
|
+
|
||
|
/* Create sensor */
|
||
|
drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error);
|
||
|
if (!drv_data->sensor) {
|
||
|
@@ -99,6 +117,7 @@ ssc_accelerometer_close (SensorDevice *sensor_device)
|
||
|
g_warning ("Closing SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||
|
|
||
|
g_clear_object (&drv_data->sensor);
|
||
|
+ g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||
|
g_clear_pointer (&sensor_device->priv, g_free);
|
||
|
g_free (sensor_device);
|
||
|
}
|
||
|
--
|
||
|
2.40.0
|
||
|
|