summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Peress <peress@google.com>2022-03-14 22:49:19 -0600
committerCommit Bot <commit-bot@chromium.org>2022-03-18 18:54:56 +0000
commite22b9549942221ffea131e0358d5d71628ea3ff2 (patch)
treec4d5cfb032406645dfd0bd479fc6b8a1d228471b
parent271ce65664e6db2d39bb6946ebc9cd9ad94762f3 (diff)
downloadchrome-ec-e22b9549942221ffea131e0358d5d71628ea3ff2.tar.gz
zephyr: Add tests for motion_sense host commands
Add tests for the `dump` motion-sense host command. These tests do not cover the case where the report size is larger than motion_sensor_count. This can only be done with activity sensors which have not yet been added to the drivers test. BRANCH=none BUG=b:224614211 TEST=zmake test test-drivers Signed-off-by: Yuval Peress <peress@google.com> Change-Id: I1e2fb22b29fbcc20c42070eaae258761e9816ccc Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3530114 Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
-rw-r--r--zephyr/test/drivers/include/utils.h13
-rw-r--r--zephyr/test/drivers/src/host_cmd/motion_sense.c66
-rw-r--r--zephyr/test/drivers/src/utils.c16
3 files changed, 95 insertions, 0 deletions
diff --git a/zephyr/test/drivers/include/utils.h b/zephyr/test/drivers/include/utils.h
index fb335fa764..12de1fa789 100644
--- a/zephyr/test/drivers/include/utils.h
+++ b/zephyr/test/drivers/include/utils.h
@@ -211,6 +211,19 @@ host_cmd_get_charge_control(void)
return response;
}
+/**
+ * @brief Call the host command MOTION_SENSE with the dump sub-command
+ *
+ * Note: this function uses the zassume_ API. It will skip the test if the host
+ * command fails.
+ *
+ * @param max_sensor_count The maximum number of sensor data objects to populate
+ * in the response object.
+ * @param response Pointer to the response object to fill.
+ */
+void host_cmd_motion_sense_dump(int max_sensor_count,
+ struct ec_response_motion_sense *response);
+
#define GPIO_ACOK_OD_NODE DT_NODELABEL(gpio_acok_od)
#define GPIO_ACOK_OD_PIN DT_GPIO_PIN(GPIO_ACOK_OD_NODE, gpios)
diff --git a/zephyr/test/drivers/src/host_cmd/motion_sense.c b/zephyr/test/drivers/src/host_cmd/motion_sense.c
new file mode 100644
index 0000000000..46a3540ad0
--- /dev/null
+++ b/zephyr/test/drivers/src/host_cmd/motion_sense.c
@@ -0,0 +1,66 @@
+/* Copyright 2022 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.
+ */
+
+#include <ztest.h>
+
+#include "motion_sense.h"
+#include "test_state.h"
+#include "utils.h"
+
+/**
+ * Get the size needed for a struct ec_response_motion_sense
+ */
+#define RESPONSE_MOTION_SENSE_BUFFER_SIZE(n) \
+ (sizeof(struct ec_response_motion_sense) + \
+ n * sizeof(struct ec_response_motion_sensor_data))
+
+ZTEST_SUITE(host_cmd_motion_sense, drivers_predicate_post_main, NULL, NULL,
+ NULL, NULL);
+
+ZTEST_USER(host_cmd_motion_sense, test_dump)
+{
+ uint8_t response_buffer[RESPONSE_MOTION_SENSE_BUFFER_SIZE(
+ ALL_MOTION_SENSORS)];
+ struct ec_response_motion_sense *result =
+ (struct ec_response_motion_sense *)response_buffer;
+
+ /* Set up the motion sensor data */
+ for (int i = 0; i < ALL_MOTION_SENSORS; ++i) {
+ motion_sensors[i].xyz[0] = i;
+ motion_sensors[i].xyz[1] = i + 1;
+ motion_sensors[i].xyz[2] = i + 2;
+ }
+ host_cmd_motion_sense_dump(ALL_MOTION_SENSORS, result);
+
+ zassert_equal(result->dump.module_flags, MOTIONSENSE_MODULE_FLAG_ACTIVE,
+ NULL);
+ zassert_equal(result->dump.sensor_count, ALL_MOTION_SENSORS, NULL);
+
+ /*
+ * Test the values returned in the dump. Normally we shouldn't be doing
+ * tests in a loop, but since the number of sensors (as well as the
+ * order) is adjustable by devicetree, it would be too difficult to hard
+ * code here.
+ */
+ for (int i = 0; i < ALL_MOTION_SENSORS; ++i) {
+ zassert_equal(result->dump.sensor[i].flags,
+ MOTIONSENSE_SENSOR_FLAG_PRESENT, NULL);
+ zassert_equal(result->dump.sensor[i].data[0], i, NULL);
+ zassert_equal(result->dump.sensor[i].data[1], i + 1, NULL);
+ zassert_equal(result->dump.sensor[i].data[2], i + 2, NULL);
+ }
+}
+
+ZTEST_USER(host_cmd_motion_sense, test_dump__large_max_sensor_count)
+{
+ uint8_t response_buffer[RESPONSE_MOTION_SENSE_BUFFER_SIZE(
+ ALL_MOTION_SENSORS)];
+ struct ec_response_motion_sense *result =
+ (struct ec_response_motion_sense *)response_buffer;
+
+ host_cmd_motion_sense_dump(ALL_MOTION_SENSORS + 1, result);
+
+ zassert_equal(result->dump.sensor_count, ALL_MOTION_SENSORS, NULL);
+}
diff --git a/zephyr/test/drivers/src/utils.c b/zephyr/test/drivers/src/utils.c
index cf680dcc6d..e11da5c238 100644
--- a/zephyr/test/drivers/src/utils.c
+++ b/zephyr/test/drivers/src/utils.c
@@ -95,3 +95,19 @@ void disconnect_source_from_port(const struct emul *tcpci_emul,
isl923x_emul_set_adc_vbus(charger_emul, 0);
k_sleep(K_SECONDS(1));
}
+
+void host_cmd_motion_sense_dump(int max_sensor_count,
+ struct ec_response_motion_sense *response)
+{
+ struct ec_params_motion_sense params = {
+ .cmd = MOTIONSENSE_CMD_DUMP,
+ .dump = {
+ .max_sensor_count = max_sensor_count,
+ },
+ };
+ struct host_cmd_handler_args args = BUILD_HOST_COMMAND(
+ EC_CMD_MOTION_SENSE_CMD, 4, *response, params);
+
+ zassume_ok(host_command_process(&args),
+ "Failed to get motion_sense dump");
+}