Add lid switch test and enable kb_mkbp test

BUG=chrome-os-partner:19236
TEST=Pass both tests
BRANCH=None
CQ-DEPEND=CL:50467

Change-Id: I59cc407c2d1bf7f549ff9c46226cf7fa60fe7157
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/50466
This commit is contained in:
Vic Yang
2013-05-09 00:24:33 +08:00
committed by ChromeBot
parent ac3488cd0b
commit a0bfc0c669
9 changed files with 163 additions and 6 deletions

View File

@@ -9,4 +9,5 @@
const struct gpio_info gpio_list[GPIO_COUNT] = {
{"EC_INT", 0, 0, 0, 0},
{"LID_OPEN", 0, 0, 0, 0},
};

View File

@@ -11,9 +11,11 @@
#define CONFIG_HOST_EMU
#define CONFIG_HOSTCMD
#define CONFIG_KEYBOARD_PROTOCOL_MKBP
#define CONFIG_LID_SWITCH
enum gpio_signal {
GPIO_EC_INT,
GPIO_LID_OPEN,
GPIO_COUNT
};

View File

@@ -22,3 +22,8 @@ test_mockable void gpio_set_level(enum gpio_signal signal, int value)
{
/* Nothing */
}
test_mockable int gpio_enable_interrupt(enum gpio_signal signal)
{
return EC_SUCCESS;
}

View File

@@ -64,7 +64,7 @@ static void lid_switch_close(void)
host_set_single_event(EC_HOST_EVENT_LID_CLOSED);
}
int lid_is_open(void)
test_mockable int lid_is_open(void)
{
return debounced_lid_open;
}

View File

@@ -25,11 +25,12 @@ test-list-$(BOARD_link)=
test-list-$(BOARD_slippy)=
# Emulator tests
test-list-host=mutex pingpong utils kb_scan
test-list-host=mutex pingpong utils kb_scan kb_mkbp lid_sw
flash-y=flash.o
kb_mkbp-y=kb_mkbp.o
kb_scan-y=kb_scan.o
lid_sw-y=lid_sw.o
mutex-y=mutex.o
pingpong-y=pingpong.o
powerdemo-y=powerdemo.o

View File

@@ -36,6 +36,11 @@ void gpio_set_level(enum gpio_signal signal, int level)
ec_int_level = !!level;
}
int lid_is_open(void)
{
return 1;
}
/*****************************************************************************/
/* Test utilities */

View File

@@ -11,6 +11,7 @@
#include "gpio.h"
#include "keyboard_raw.h"
#include "keyboard_scan.h"
#include "lid_switch.h"
#include "task.h"
#include "timer.h"
#include "util.h"
@@ -53,11 +54,9 @@ static int error_count;
static int lid_open;
#ifdef CONFIG_LID_SWITCH
int gpio_get_level(enum gpio_signal signal)
int lid_is_open(void)
{
if (signal == GPIO_LID_OPEN)
return lid_open;
return 0;
return lid_open;
}
#endif

127
test/lid_sw.c Normal file
View File

@@ -0,0 +1,127 @@
/* Copyright (c) 2013 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 lid switch.
*/
#include "common.h"
#include "console.h"
#include "hooks.h"
#include "host_command.h"
#include "lid_switch.h"
#include "timer.h"
#include "util.h"
static int error_count;
static int mock_lid;
static int lid_hook_count;
#define RUN_TEST(n) \
do { \
ccprintf("Running %s...", #n); \
cflush(); \
if (n() == EC_SUCCESS) { \
ccputs("OK\n"); \
} else { \
ccputs("Fail\n"); \
error_count++; \
} \
} while (0)
#define TEST_ASSERT(n) \
do { \
if (!(n)) \
return EC_ERROR_UNKNOWN; \
} while (0)
int gpio_get_level(enum gpio_signal signal)
{
if (signal == GPIO_LID_OPEN)
return mock_lid;
return 0;
}
static void lid_change_hook(void)
{
lid_hook_count++;
}
DECLARE_HOOK(HOOK_LID_CHANGE, lid_change_hook, HOOK_PRIO_DEFAULT);
static int test_hook(void)
{
/* Close lid for testing */
mock_lid = 0;
lid_interrupt(GPIO_LID_OPEN);
msleep(100);
lid_hook_count = 0;
host_clear_events(0xffffffff);
mock_lid = 1;
lid_interrupt(GPIO_LID_OPEN);
msleep(50);
TEST_ASSERT(lid_hook_count == 1);
TEST_ASSERT(lid_is_open());
TEST_ASSERT(host_get_events() &
EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN));
mock_lid = 0;
lid_interrupt(GPIO_LID_OPEN);
msleep(50);
TEST_ASSERT(lid_hook_count == 2);
TEST_ASSERT(!lid_is_open());
TEST_ASSERT(host_get_events() &
EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_CLOSED));
return EC_SUCCESS;
}
static int test_debounce(void)
{
/* Close lid for testing */
mock_lid = 0;
lid_interrupt(GPIO_LID_OPEN);
msleep(100);
lid_hook_count = 0;
host_clear_events(0xffffffff);
mock_lid = 1;
lid_interrupt(GPIO_LID_OPEN);
msleep(20);
TEST_ASSERT(lid_hook_count == 0);
TEST_ASSERT(!lid_is_open());
TEST_ASSERT(!(host_get_events() &
EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN)));
mock_lid = 0;
lid_interrupt(GPIO_LID_OPEN);
msleep(50);
TEST_ASSERT(lid_hook_count == 0);
TEST_ASSERT(!lid_is_open());
TEST_ASSERT(!(host_get_events() &
EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN)));
return EC_SUCCESS;
}
void run_test(void)
{
error_count = 0;
RUN_TEST(test_hook);
RUN_TEST(test_debounce);
if (error_count)
ccprintf("Fail!\n", error_count);
else
ccprintf("Pass!\n");
}
static int command_run_test(int argc, char **argv)
{
run_test();
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(runtest, command_run_test,
NULL, NULL, NULL);

17
test/lid_sw.tasklist Normal file
View File

@@ -0,0 +1,17 @@
/* Copyright (c) 2013 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.
*/
/**
* List of enabled tasks in the priority order
*
* The first one has the lowest priority.
*
* For each task, use the macro TASK_TEST(n, r, d, s) where :
* 'n' in the name of the task
* 'r' in the main routine of the task
* 'd' in an opaque parameter passed to the routine at startup
* 's' is the stack size in bytes; must be a multiple of 8
*/
#define CONFIG_TEST_TASK_LIST /* No test task */