mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-29 18:11:05 +00:00
Created a host command to set/get various motion sensor parameters and added an ectool command to use that host command. The host command is created such that the first argument is a sub-command. Sub-commands created include: dump: dumps all current motion sensor data info: returns general information about each motion sensor ec_rate: set/get the EC sampling rate of sensors sensor_range: set/get the sensor range (ie +/- 2G,4G,8G) sensor_odr: set/get the sensor output data rate (ie 50Hz, 100Hz, ...) For sensor_range and sensor_odr parameters, since the host doesn't know what are valid values for the parameter, the host can specify to round up or down to the nearest valid value. For example, the host can specify to set the output data rate to at least 100Hz, and the EC will return the closest valid output data rate that is at least 100Hz. BUG=chrome-os-partner:27321 BRANCH=rambi TEST=Test on a glimmer using ectool from vt-2 prompt: > ectool motionsense help Usage: motionsense - dump all motion data motionsense info NUM - print sensor info motionsense ec_rate [RATE_MS] - set/get sample rate motionsense odr NUM [ODR [ROUNDUP]] - set/get sensor ODR motionsense range NUM [RANGE [ROUNDUP]]- set/get sensor range > > ectool motionsense Sensor 0: 0, 0, 1024 Sensor 1: 1024, 0, 0 Sensor 2: None > ectool motionsense info 0 Type: accel Location: base Chip: kxcj9 > ectool motionsense ec_rate 10 > ectool motionsense ec_rate 1000 1000 > ectool motionsense odr 0 100000 > ectool motionsense odr 0 40000 1 50000 > ectool motionsense range 0 8 8 After running this I verified on the EC console that all the parameters were set appropriately. I tested the EC sampling rate was 1000ms by running lidangle on and making sure samples were displayed roughly every second. I verified the sensor odr and range by defining CONFIG_CMD_ACCELS and typing: > accelrange 0 8 > accelrate 0 50000 Change-Id: I444e2f0eafabd607f1c7aa78b5c4e91f6cb06387 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/192064 Reviewed-on: https://chromium-review.googlesource.com/193307 Reviewed-by: Randall Spangler <rspangler@chromium.org>
84 lines
1.8 KiB
C
84 lines
1.8 KiB
C
/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
* Test motion sense code.
|
|
*/
|
|
|
|
#include <math.h>
|
|
|
|
#include "math_util.h"
|
|
#include "motion_sense.h"
|
|
#include "test_util.h"
|
|
|
|
/*****************************************************************************/
|
|
/* Mock functions */
|
|
|
|
/* Need to define accelerometer functions just to compile. */
|
|
int accel_init(enum accel_id id)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_read(enum accel_id id, int *x_acc, int *y_acc, int *z_acc)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_set_range(const enum accel_id id, const int range, const int rnd)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_get_range(const enum accel_id id, int * const range)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_set_resolution(const enum accel_id id, const int res, const int rnd)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_get_resolution(const enum accel_id id, int * const res)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_set_datarate(const enum accel_id id, const int rate, const int rnd)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
int accel_get_datarate(const enum accel_id id, int * const rate)
|
|
{
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
/* Test utilities */
|
|
|
|
/* Macro to compare two floats and check if they are equal within diff. */
|
|
#define IS_FLOAT_EQUAL(a, b, diff) ((a) >= ((b) - diff) && (a) <= ((b) + diff))
|
|
|
|
#define ACOS_TOLERANCE_DEG 0.5f
|
|
#define RAD_TO_DEG (180.0f / 3.1415926f)
|
|
|
|
static int test_acos(void)
|
|
{
|
|
float a, b;
|
|
float test;
|
|
|
|
/* Test a handful of values. */
|
|
for (test = -1.0; test <= 1.0; test += 0.01) {
|
|
a = arc_cos(test);
|
|
b = acos(test) * RAD_TO_DEG;
|
|
TEST_ASSERT(IS_FLOAT_EQUAL(a, b, ACOS_TOLERANCE_DEG));
|
|
}
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
|
|
void run_test(void)
|
|
{
|
|
test_reset();
|
|
|
|
RUN_TEST(test_acos);
|
|
|
|
test_print_result();
|
|
}
|