aboutsummaryrefslogtreecommitdiff
path: root/src/survive_default_devices.c
diff options
context:
space:
mode:
authorJustin Berger <jdavidberger@gmail.com>2018-06-27 04:22:22 +0000
committerJustin Berger <jdavidberger@gmail.com>2018-06-27 04:22:22 +0000
commitcf36bd58b8c9d1c23ccfe1a52beafe376ba02e6b (patch)
treebae72f9ebe6937dbbabb7beec3115028a15743b0 /src/survive_default_devices.c
parent902bbde43fb6e000140da0da56c05f2d4af1df5f (diff)
parente68b69a9a14aeb70988c52666e60502fe6f049ab (diff)
downloadlibsurvive-cf36bd58b8c9d1c23ccfe1a52beafe376ba02e6b.tar.gz
libsurvive-cf36bd58b8c9d1c23ccfe1a52beafe376ba02e6b.tar.bz2
Merge remote-tracking branch 'origin/master' into fix_wired_tracker
Diffstat (limited to 'src/survive_default_devices.c')
-rw-r--r--src/survive_default_devices.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/survive_default_devices.c b/src/survive_default_devices.c
index 48f3b41..8ecff0b 100644
--- a/src/survive_default_devices.c
+++ b/src/survive_default_devices.c
@@ -6,6 +6,9 @@
#include "json_helpers.h"
+#define HMD_IMU_HZ 1000.0f
+#define VIVE_DEFAULT_IMU_HZ 250.0f
+
static SurviveObject *
survive_create_device(SurviveContext *ctx, const char *driver_name,
void *driver, const char *device_name, haptic_func fn) {
@@ -17,7 +20,7 @@ survive_create_device(SurviveContext *ctx, const char *driver_name,
memcpy(device->drivername, driver_name, strlen(driver_name));
device->timebase_hz = 48000000;
- device->imu_freq = 250.f;
+ device->imu_freq = VIVE_DEFAULT_IMU_HZ;
device->haptic = fn;
return device;
@@ -171,21 +174,27 @@ int survive_load_htc_config_format(SurviveObject *so, char *ct0conf, int len) {
if (strcmp(so->codename, "HMD") == 0) {
if (so->acc_scale) {
scale3d(so->acc_scale, so->acc_scale, 1. / 8192.0);
+ //Invert X and Y at least on my vive.
+ so->acc_scale[1] *= -1;
+ so->acc_scale[0] *= -1;
}
if (so->acc_bias)
- scale3d(so->acc_bias, so->acc_bias, 2. / 1000.); // Odd but seems right.
+ scale3d(so->acc_bias, so->acc_bias, 1000.0 ); // Odd but seems right.
+
+ so->imu_freq = HMD_IMU_HZ;
+
if (so->gyro_scale) {
FLT deg_per_sec = 500;
scale3d(so->gyro_scale, so->gyro_scale, deg_per_sec / (1 << 15) * LINMATHPI / 180.);
- // scale3d(so->gyro_scale, so->gyro_scale, 0.000065665);
+ //Invert X and Y at least on my vive.
+ so->gyro_scale[0] *= -1;
+ so->gyro_scale[1] *= -1;
}
-
- so->imu_freq = 1000.f;
} else if (memcmp(so->codename, "WM", 2) == 0) {
if (so->acc_scale)
scale3d(so->acc_scale, so->acc_scale, 2. / 8192.0);
if (so->acc_bias)
- scale3d(so->acc_bias, so->acc_bias, 2. / 1000.); // Need to verify.
+ scale3d(so->acc_bias, so->acc_bias, 1000.); // Need to verify.
FLT deg_per_sec = 2000;
if (so->gyro_scale)
@@ -206,7 +215,7 @@ int survive_load_htc_config_format(SurviveObject *so, char *ct0conf, int len) {
// If any other device, we know we at least need this.
// I deeply suspect bias is in milligravities -JB
if (so->acc_bias)
- scale3d(so->acc_bias, so->acc_bias, 1. / 1000.);
+ scale3d(so->acc_bias, so->acc_bias, 1000.);
// From datasheet, can be 250, 500, 1000, 2000 deg/s range over 16 bits
FLT deg_per_sec = 2000;