summaryrefslogtreecommitdiff
path: root/test/inductive_charging.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/inductive_charging.c')
-rw-r--r--test/inductive_charging.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/test/inductive_charging.c b/test/inductive_charging.c
new file mode 100644
index 0000000000..8a4a94df5f
--- /dev/null
+++ b/test/inductive_charging.c
@@ -0,0 +1,103 @@
+/* Copyright 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 inductive charging module.
+ */
+
+#include "common.h"
+#include "console.h"
+#include "gpio.h"
+#include "hooks.h"
+#include "inductive_charging.h"
+#include "lid_switch.h"
+#include "test_util.h"
+#include "timer.h"
+#include "util.h"
+
+static void wait_for_lid_debounce(void)
+{
+ while (lid_is_open() != gpio_get_level(GPIO_LID_OPEN))
+ msleep(20);
+}
+
+static void set_lid_open(int lid_open)
+{
+ gpio_set_level(GPIO_LID_OPEN, lid_open);
+ wait_for_lid_debounce();
+}
+
+static int test_lid(void)
+{
+ /* Lid is open initially */
+ set_lid_open(1);
+ gpio_set_level(GPIO_CHARGE_DONE, 0);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 0);
+
+ /* Close the lid. Transmitter should be enabled. */
+ set_lid_open(0);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 1);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 1);
+
+ /* Open the lid. Charging should stop. */
+ set_lid_open(1);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 0);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 0);
+
+ return EC_SUCCESS;
+}
+
+static int test_charge_done(void)
+{
+ /* Close the lid to start charging */
+ set_lid_open(0);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 1);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 1);
+
+ /* Charging is done. Stop charging, but don't turn off transmitter. */
+ gpio_set_level(GPIO_CHARGE_DONE, 1);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 1);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 0);
+
+ /* Oops, need charging again. */
+ gpio_set_level(GPIO_CHARGE_DONE, 0);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 1);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 1);
+
+ return EC_SUCCESS;
+}
+
+static int test_lid_open_during_charging(void)
+{
+ /* Close the lid. Start charging. */
+ set_lid_open(0);
+ gpio_set_level(GPIO_CHARGE_DONE, 0);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 1);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 1);
+
+ /* Open the lid. Transmitter should be turned off. */
+ set_lid_open(1);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 0);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 0);
+
+ /* Toggle charge done signal. Charging should not start. */
+ gpio_set_level(GPIO_CHARGE_DONE, 1);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 0);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 0);
+ gpio_set_level(GPIO_CHARGE_DONE, 0);
+ TEST_ASSERT(gpio_get_level(GPIO_BASE_CHG_VDD_EN) == 0);
+ TEST_ASSERT(gpio_get_level(GPIO_CHARGE_EN) == 0);
+
+ return EC_SUCCESS;
+}
+
+void run_test(void)
+{
+ test_reset();
+
+ RUN_TEST(test_lid);
+ RUN_TEST(test_charge_done);
+ RUN_TEST(test_lid_open_during_charging);
+
+ test_print_result();
+}