Skip to content

Commit 743577a

Browse files
UT for ocmp_led
1 parent 42ea90f commit 743577a

3 files changed

Lines changed: 192 additions & 0 deletions

File tree

firmware/ec/src/devices/ocmp_wrappers/ocmp_led.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ static ePostCode _probe(void *driver, POSTData *postData)
4343
return led_probe(driver, postData);
4444
}
4545

46+
#pragma GCC diagnostic push
47+
#pragma GCC diagnostic ignored "-Wunused-parameter"
4648
static ePostCode _init(void *driver, const void *config,
4749
const void *alert_token)
4850
{
@@ -56,6 +58,7 @@ static ePostCode _init(void *driver, const void *config,
5658

5759
return POST_DEV_CFG_DONE;
5860
}
61+
#pragma GCC diagnostic pop
5962

6063
const Driver_fxnTable LED_fxnTable = {
6164
/* Message handlers */

firmware/ec/test/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,9 @@ $(PATHB)Test_ocmp_dat-xxr5a$(TARGET_EXTENSION): $(STD_FILES) $(TEST_OCMP_DATXXR5
200200
TEST_LED_SRC=$(OCWARE_ROOT)/src/devices/led.c $(OCWARE_ROOT)/src/devices/sx1509.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_GPIO.c fake/fake_I2C.c fake/fake_ThreadedISR.c fake/fake_SX1509_register.c fake/fake_led.c stub/stub_GateMutex.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_LED.c
201201
$(PATHB)Test_led$(TARGET_EXTENSION): $(STD_FILES) $(TEST_LED_SRC)
202202

203+
TEST_OCMP_LED_SRC=$(OCWARE_ROOT)/src/devices/ocmp_wrappers/ocmp_led.c $(OCWARE_ROOT)/src/devices/led.c $(OCWARE_ROOT)/src/devices/sx1509.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_GPIO.c fake/fake_I2C.c fake/fake_ThreadedISR.c fake/fake_SX1509_register.c fake/fake_led.c stub/stub_GateMutex.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_LED.c
204+
$(PATHB)Test_ocmp_led$(TARGET_EXTENSION): $(STD_FILES) $(TEST_OCMP_LED_SRC)
205+
203206
$(PATHB)%$(TARGET_EXTENSION):
204207
$(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $^ -o $@
205208
$(COV_CMDS)
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
/**
2+
* Copyright (c) 2017-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*/
9+
10+
#include "common/inc/ocmp_wrappers/ocmp_led.h"
11+
#include "include/test_led.h"
12+
13+
extern const I2C_Dev s_sx1509_left_dev;
14+
extern const I2C_Dev s_sx1509_right_dev;
15+
extern HciLedCfg led_hci_ioexp;
16+
extern uint8_t LED_GpioPins[OC_EC_HCI_LED_RESET];
17+
extern uint8_t SX1509_regs[SX1509_REG_TEST_2];
18+
extern uint8_t SX1509_right_regs[SX1509_REG_TEST_2];
19+
extern uint32_t LED_GpioConfig[OC_EC_HCI_LED_RESET];
20+
HciLedCfg ledDriver;
21+
/* ============================= Boilerplate ================================ */
22+
unsigned int s_task_sleep_ticks;
23+
24+
xdc_Void ti_sysbios_knl_Task_sleep__E(xdc_UInt32 nticks)
25+
{
26+
s_task_sleep_ticks += nticks;
27+
}
28+
29+
void post_update_POSTData(POSTData *pData, uint8_t I2CBus, uint8_t devAddress,
30+
uint16_t manId, uint16_t devId)
31+
{
32+
pData->i2cBus = I2CBus;
33+
pData->devAddr = devAddress;
34+
pData->manId = manId;
35+
pData->devId = devId;
36+
}
37+
38+
void suite_setUp(void)
39+
{
40+
fake_I2C_init();
41+
fake_I2C_registerDevSimple(OC_CONNECT1_I2C8, LED_SX1509_LEFT_ADDRESS,
42+
SX1509_regs, sizeof(SX1509_regs),
43+
sizeof(SX1509_regs[0]), sizeof(uint8_t),
44+
FAKE_I2C_DEV_BIG_ENDIAN);
45+
fake_I2C_registerDevSimple(OC_CONNECT1_I2C8, LED_SX1509_RIGHT_ADDRESS,
46+
SX1509_right_regs, sizeof(SX1509_right_regs),
47+
sizeof(SX1509_right_regs[0]), sizeof(uint8_t),
48+
FAKE_I2C_DEV_BIG_ENDIAN);
49+
FakeGpio_registerDevSimple(LED_GpioPins, LED_GpioConfig);
50+
}
51+
52+
void setUp(void)
53+
{
54+
memset(SX1509_regs, 0, sizeof(SX1509_regs));
55+
memset(SX1509_right_regs, 0, sizeof(SX1509_right_regs));
56+
}
57+
58+
void tearDown(void)
59+
{
60+
}
61+
62+
void suite_tearDown(void)
63+
{
64+
fake_I2C_deinit(); /* This will automatically unregister devices */
65+
}
66+
/* ================================ Tests =================================== */
67+
void test_ocmp_led_probe(void)
68+
{
69+
HciLedCfg *invalidLedDriver = NULL;
70+
POSTData postData;
71+
POSTData *invalidPostData = NULL;
72+
73+
TEST_ASSERT_EQUAL(POST_DEV_FOUND,
74+
LED_fxnTable.cb_probe(&led_hci_ioexp, &postData));
75+
TEST_ASSERT_EQUAL(OC_CONNECT1_I2C8, postData.i2cBus);
76+
TEST_ASSERT_EQUAL(LED_SX1509_LEFT_ADDRESS, postData.devAddr);
77+
TEST_ASSERT_EQUAL_HEX8(LED_POST_MANID, postData.manId);
78+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DEVID, postData.devId);
79+
80+
postData.i2cBus = LED_POST_DATA_NULL;
81+
postData.devAddr = LED_POST_DATA_NULL;
82+
postData.manId = LED_POST_DATA_NULL;
83+
postData.devId = LED_POST_DATA_NULL;
84+
85+
/* Invalid config test */
86+
TEST_ASSERT_EQUAL(POST_DEV_MISSING,
87+
LED_fxnTable.cb_probe(invalidLedDriver, &postData));
88+
TEST_ASSERT_EQUAL(LED_POST_DATA_NULL, postData.i2cBus);
89+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devAddr);
90+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.manId);
91+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devId);
92+
93+
/* Invalid post data test */
94+
TEST_ASSERT_EQUAL(POST_DEV_MISSING,
95+
LED_fxnTable.cb_probe(&led_hci_ioexp, invalidPostData));
96+
TEST_ASSERT_EQUAL(LED_POST_DATA_NULL, postData.i2cBus);
97+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devAddr);
98+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.manId);
99+
TEST_ASSERT_EQUAL_HEX8(LED_POST_DATA_NULL, postData.devId);
100+
}
101+
102+
void test_ocmp_init_probe(void)
103+
{
104+
HciLedCfg *invalidLedDriver = NULL;
105+
SX1509_regs[SX1509_REG_DATA_A] = LED_DEFAULT_VALUE;
106+
SX1509_regs[SX1509_REG_DATA_B] = LED_DEFAULT_VALUE;
107+
SX1509_right_regs[SX1509_REG_DATA_A] = LED_DEFAULT_VALUE;
108+
SX1509_right_regs[SX1509_REG_DATA_B] = LED_DEFAULT_VALUE;
109+
110+
TEST_ASSERT_EQUAL(POST_DEV_CFG_DONE,
111+
LED_fxnTable.cb_init(&led_hci_ioexp, NULL, NULL));
112+
TEST_ASSERT_EQUAL_HEX8(SX1509_SOFT_RESET_REG_VALUE_2,
113+
SX1509_regs[SX1509_REG_RESET]);
114+
TEST_ASSERT_EQUAL_HEX8(SX1509_SOFT_RESET_REG_VALUE_2,
115+
SX1509_right_regs[SX1509_REG_RESET]);
116+
TEST_ASSERT_EQUAL_HEX8(LED_REG_INPUT_DISABLE_B_VALUE,
117+
SX1509_regs[SX1509_REG_INPUT_DISABLE_B]);
118+
TEST_ASSERT_EQUAL_HEX8(LED_REG_INPUT_DISABLE_B_VALUE,
119+
SX1509_right_regs[SX1509_REG_INPUT_DISABLE_B]);
120+
TEST_ASSERT_EQUAL_HEX8(LED_REG_PULL_UP_B_VALUE,
121+
SX1509_regs[SX1509_REG_PULL_UP_B]);
122+
TEST_ASSERT_EQUAL_HEX8(LED_REG_PULL_UP_B_VALUE,
123+
SX1509_right_regs[SX1509_REG_PULL_UP_B]);
124+
TEST_ASSERT_EQUAL_HEX8(LED_REG_OPEN_DRAIN_B_VALUE,
125+
SX1509_regs[SX1509_REG_OPEN_DRAIN_B]);
126+
TEST_ASSERT_EQUAL_HEX8(LED_REG_OPEN_DRAIN_B_VALUE,
127+
SX1509_right_regs[SX1509_REG_OPEN_DRAIN_B]);
128+
TEST_ASSERT_EQUAL_HEX8(LED_CLOCK_VALUE, SX1509_regs[SX1509_REG_CLOCK]);
129+
TEST_ASSERT_EQUAL_HEX8(LED_CLOCK_VALUE,
130+
SX1509_right_regs[SX1509_REG_CLOCK]);
131+
TEST_ASSERT_EQUAL_HEX8(REG_MISC_VALUE, SX1509_regs[SX1509_REG_MISC]);
132+
TEST_ASSERT_EQUAL_HEX8(REG_MISC_VALUE, SX1509_right_regs[SX1509_REG_MISC]);
133+
TEST_ASSERT_EQUAL_HEX8(LED_DRIVER_ENABLE_B_VALUE,
134+
SX1509_regs[SX1509_REG_LED_DRIVER_ENABLE_B]);
135+
TEST_ASSERT_EQUAL_HEX8(LED_DRIVER_ENABLE_B_VALUE,
136+
SX1509_right_regs[SX1509_REG_LED_DRIVER_ENABLE_B]);
137+
TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_regs[SX1509_REG_DATA_A]);
138+
TEST_ASSERT_EQUAL_HEX8(0xD5, SX1509_regs[SX1509_REG_DATA_B]);
139+
TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_right_regs[SX1509_REG_DATA_A]);
140+
TEST_ASSERT_EQUAL_HEX8(0xD5, SX1509_right_regs[SX1509_REG_DATA_B]);
141+
142+
/* Invalid config test */
143+
TEST_ASSERT_EQUAL(POST_DEV_CFG_FAIL,
144+
LED_fxnTable.cb_init(invalidLedDriver, NULL, NULL));
145+
}
146+
147+
void test_ocmp_led_testpattern_control(void)
148+
{
149+
HciLedCfg *invalidLedDriver = NULL;
150+
uint8_t param = HCI_LED_OFF;
151+
SX1509_regs[SX1509_REG_DATA_A] = LED_GREEN;
152+
SX1509_regs[SX1509_REG_DATA_B] = LED_GREEN;
153+
SX1509_right_regs[SX1509_REG_DATA_A] = LED_GREEN;
154+
SX1509_right_regs[SX1509_REG_DATA_B] = LED_GREEN;
155+
156+
/* For HCI_LED_OFF */
157+
TEST_ASSERT_EQUAL(true, led_testpattern_control(&led_hci_ioexp, &param));
158+
TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_regs[SX1509_REG_DATA_A]);
159+
TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_regs[SX1509_REG_DATA_B]);
160+
TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_right_regs[SX1509_REG_DATA_A]);
161+
TEST_ASSERT_EQUAL_HEX8(LED_OFF, SX1509_right_regs[SX1509_REG_DATA_B]);
162+
163+
/* For HCI_LED_RED */
164+
param = HCI_LED_RED;
165+
TEST_ASSERT_EQUAL(true, led_testpattern_control(&led_hci_ioexp, &param));
166+
TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_regs[SX1509_REG_DATA_A]);
167+
TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_regs[SX1509_REG_DATA_B]);
168+
TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_right_regs[SX1509_REG_DATA_A]);
169+
TEST_ASSERT_EQUAL_HEX8(LED_RED, SX1509_right_regs[SX1509_REG_DATA_B]);
170+
171+
/* For HCI_LED_GREEN */
172+
param = HCI_LED_GREEN;
173+
TEST_ASSERT_EQUAL(true, led_testpattern_control(&led_hci_ioexp, &param));
174+
TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_regs[SX1509_REG_DATA_A]);
175+
TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_regs[SX1509_REG_DATA_B]);
176+
TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_right_regs[SX1509_REG_DATA_A]);
177+
TEST_ASSERT_EQUAL_HEX8(LED_GREEN, SX1509_right_regs[SX1509_REG_DATA_B]);
178+
179+
/* Inavlid param Id */
180+
param = LED_INVALID_PARAM;
181+
TEST_ASSERT_EQUAL(false, led_testpattern_control(&led_hci_ioexp, &param));
182+
183+
/* Invalid config test */
184+
param = HCI_LED_GREEN;
185+
TEST_ASSERT_EQUAL(false, led_testpattern_control(invalidLedDriver, &param));
186+
}

0 commit comments

Comments
 (0)