summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/default/src/led.c
blob: e89a3d8b661593926958df1812259948c20e46c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* Copyright 2022 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include <zephyr/ztest.h>
#include <zephyr/ztest_assert.h>

#include <zephyr/device.h>
#include <zephyr/drivers/pwm.h>

#include "ec_commands.h"
#include "led.h"
#include "led_common.h"
#include "pwm_mock.h"
#include "test/drivers/test_state.h"
#include "test/drivers/utils.h"

ZTEST_SUITE(pwm_led_driver, drivers_predicate_post_main, NULL, NULL, NULL,
	    NULL);

ZTEST(pwm_led_driver, test_led_set_brightness)
{
	const uint8_t brightness_off[EC_LED_COLOR_COUNT] = {};
	const uint8_t brightness_white[EC_LED_COLOR_COUNT] = {
		[EC_LED_COLOR_WHITE] = 1
	};
	const uint8_t brightness_amber[EC_LED_COLOR_COUNT] = {
		[EC_LED_COLOR_AMBER] = 1
	};
	const struct device *pwm_blue_left =
		DEVICE_DT_GET(DT_NODELABEL(pwm_blue_left));
	const struct device *pwm_white_left =
		DEVICE_DT_GET(DT_NODELABEL(pwm_white_left));
	const struct device *pwm_amber_right =
		DEVICE_DT_GET(DT_NODELABEL(pwm_amber_right));
	const struct device *pwm_white_right =
		DEVICE_DT_GET(DT_NODELABEL(pwm_white_right));

	/* Turn off all LEDs */
	led_set_brightness(EC_LED_ID_LEFT_LED, brightness_off);
	led_set_brightness(EC_LED_ID_RIGHT_LED, brightness_off);
	zassert_equal(pwm_mock_get_duty(pwm_blue_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_amber_right, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_right, 0), 0, NULL);

	/* Call led_set_color(LED_WHITE, LEFT_LED) */
	led_set_brightness(EC_LED_ID_LEFT_LED, brightness_white);
	zassert_equal(pwm_mock_get_duty(pwm_blue_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_left, 0), 100, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_amber_right, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_right, 0), 0, NULL);

	/* Unsupporte, call led_set_color(LED_OFF, LEFT_LED) */
	led_set_brightness(EC_LED_ID_LEFT_LED, brightness_amber);
	zassert_equal(pwm_mock_get_duty(pwm_blue_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_amber_right, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_right, 0), 0, NULL);

	/* Call led_set_color(AMBER, RIGHT_LED) */
	led_set_brightness(EC_LED_ID_RIGHT_LED, brightness_amber);
	zassert_equal(pwm_mock_get_duty(pwm_blue_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_left, 0), 0, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_amber_right, 0), 100, NULL);
	zassert_equal(pwm_mock_get_duty(pwm_white_right, 0), 0, NULL);
}

ZTEST(pwm_led_driver, test_led_get_brightness)
{
	uint8_t brightness[EC_LED_COLOR_COUNT];
	const uint8_t expected_left[EC_LED_COLOR_COUNT] = {
		[EC_LED_COLOR_BLUE] = 100,
		[EC_LED_COLOR_WHITE] = 100,
	};
	const uint8_t expected_right[EC_LED_COLOR_COUNT] = {
		[EC_LED_COLOR_WHITE] = 100,
		[EC_LED_COLOR_AMBER] = 100,
	};

	/* Verify LED colors defined in device tree are reflected in the
	 * brightness array.
	 */
	memset(brightness, 255, sizeof(brightness));
	led_get_brightness_range(EC_LED_ID_LEFT_LED, brightness);
	zassert_mem_equal(brightness, expected_left, sizeof(brightness), NULL);

	memset(brightness, 255, sizeof(brightness));
	led_get_brightness_range(EC_LED_ID_RIGHT_LED, brightness);
	zassert_mem_equal(brightness, expected_right, sizeof(brightness), NULL);
}