From a511b5c2c4fcbd9c24aa8ce630d265aae8b1d1fb Mon Sep 17 00:00:00 2001 From: swateeshrivastava Date: Mon, 26 Nov 2018 12:36:04 +0530 Subject: [PATCH] Unit test case for ocmp_powerSource --- firmware/ec/inc/devices/eth_sw.h | 6 +- firmware/ec/inc/devices/powerSource.h | 2 +- .../devices/ocmp_wrappers/ocmp_powerSource.c | 7 +- firmware/ec/test/Makefile | 3 + firmware/ec/test/fake/fake_GPIO.c | 2 +- firmware/ec/test/fake/fake_I2C.c | 2 + firmware/ec/test/fake/fake_SX1509_register.c | 137 ++++++++ firmware/ec/test/fake/fake_powerSource.c | 37 +++ firmware/ec/test/include/test_powerSource.h | 48 +++ firmware/ec/test/include/test_sx1509.h | 127 ++++++++ firmware/ec/test/suites/Doc/TestCaseList.xlsx | Bin 33547 -> 34027 bytes .../ec/test/suites/Test_ocmp_powerSource.c | 292 ++++++++++++++++++ 12 files changed, 657 insertions(+), 6 deletions(-) create mode 100644 firmware/ec/test/fake/fake_SX1509_register.c create mode 100644 firmware/ec/test/fake/fake_powerSource.c create mode 100644 firmware/ec/test/include/test_powerSource.h create mode 100644 firmware/ec/test/include/test_sx1509.h create mode 100644 firmware/ec/test/suites/Test_ocmp_powerSource.c diff --git a/firmware/ec/inc/devices/eth_sw.h b/firmware/ec/inc/devices/eth_sw.h index 49e341ffae..dd73f8a0b7 100644 --- a/firmware/ec/inc/devices/eth_sw.h +++ b/firmware/ec/inc/devices/eth_sw.h @@ -147,9 +147,9 @@ typedef struct Eth_TcpClient_Params { uint8_t repeat; } Eth_TcpClient_Params; -ePostCode eth_sw_probe(); -ePostCode eth_sw_init(); -void eth_enable_interrupt(); +ePostCode eth_sw_probe(POSTData *postData); +ePostCode eth_sw_init(Eth_cfg *ethCfg); +void eth_enable_interrupt(void); ReturnStatus get_interrupt(uint8_t port); ReturnStatus eth_sw_get_status_speed(uint8_t port, port_speed *speed); ReturnStatus eth_sw_get_status_duplex(uint8_t port, port_duplex *duplex); diff --git a/firmware/ec/inc/devices/powerSource.h b/firmware/ec/inc/devices/powerSource.h index c7a59f50b8..22d0de5622 100644 --- a/firmware/ec/inc/devices/powerSource.h +++ b/firmware/ec/inc/devices/powerSource.h @@ -92,5 +92,5 @@ void pwr_get_source_info(PWRSRC_Dev *pwrSrcDev); ReturnStatus pwr_process_get_status_parameters_data(ePower_StatusParamId paramIndex, uint8_t *pPowerStatusData); - +void pwr_source_config(PWRSRC_Dev *driver); #endif /* POWERSOURCE_H_ */ diff --git a/firmware/ec/src/devices/ocmp_wrappers/ocmp_powerSource.c b/firmware/ec/src/devices/ocmp_wrappers/ocmp_powerSource.c index 6cc01c2f67..5e582edf56 100644 --- a/firmware/ec/src/devices/ocmp_wrappers/ocmp_powerSource.c +++ b/firmware/ec/src/devices/ocmp_wrappers/ocmp_powerSource.c @@ -26,7 +26,11 @@ static bool _get_status(void *driver, unsigned int param_id, void *return_buf) return ret; } -static ePostCode _probe(void *driver) +/* Parameters are not used as this is just used to test assigning the + alert_handler right now.*/ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +static ePostCode _probe(void *driver, POSTData *postData) { pwr_source_config(driver); return POST_DEV_NOSTATUS; @@ -38,6 +42,7 @@ static ePostCode _init(void *driver, const void *config, pwr_source_init(); return POST_DEV_NO_CFG_REQ; } +#pragma GCC diagnostic pop const Driver_fxnTable PWRSRC_fxnTable = { /* Message handlers */ diff --git a/firmware/ec/test/Makefile b/firmware/ec/test/Makefile index d7a36beac9..cef4ab8dc1 100644 --- a/firmware/ec/test/Makefile +++ b/firmware/ec/test/Makefile @@ -156,6 +156,9 @@ $(PATHB)Test_PinGroup_driver$(TARGET_EXTENSION): $(STD_FILES) $(TEST_PINGROUP_SR TEST_OCGPIO_SRC=$(OCWARE_ROOT)/src/drivers/OcGpio.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_I2C.c fake/fake_GPIO.c fake/fake_ThreadedISR.c $(OCWARE_ROOT)/src/helpers/memory.c stub/stub_GateMutex.c $(PATHB)Test_OcGpio$(TARGET_EXTENSION): $(STD_FILES) $(TEST_OCGPIO_SRC) +TEST_OCMP_powerSource_SRC=$(OCWARE_ROOT)/src/devices/ocmp_wrappers/ocmp_powerSource.c $(OCWARE_ROOT)/src/devices/powerSource.c $(OCWARE_ROOT)/src/drivers/GpioSX1509.c $(OCWARE_ROOT)/src/devices/sx1509.c $(OCWARE_ROOT)/src/helpers/memory.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_GPIO.c fake/fake_I2C.c fake/fake_ThreadedISR.c stub/stub_GateMutex.c stub/stub_GateMutex.c $(OCWARE_ROOT)/src/post/post_util.c fake/fake_SX1509_register.c fake/fake_powerSource.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_GBC.c +$(PATHB)Test_ocmp_powerSource$(TARGET_EXTENSION): $(STD_FILES) $(TEST_OCMP_powerSource_SRC) $(INC_M) + $(PATHB)%$(TARGET_EXTENSION): $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $^ -o $@ $(COV_CMDS) diff --git a/firmware/ec/test/fake/fake_GPIO.c b/firmware/ec/test/fake/fake_GPIO.c index 0fd4b3ecc3..c8bf1cec7e 100644 --- a/firmware/ec/test/fake/fake_GPIO.c +++ b/firmware/ec/test/fake/fake_GPIO.c @@ -72,7 +72,7 @@ static int FakeGpio_setCallback(const OcGpio_Pin *pin, if (pin->idx >= FAKE_GPIO_PIN_COUNT) { return OCGPIO_FAILURE; - } + } obj->callback[pin->idx].fn = callback; obj->callback[pin->idx].context = context; diff --git a/firmware/ec/test/fake/fake_I2C.c b/firmware/ec/test/fake/fake_I2C.c index a9c0d5e511..2a4aed0972 100644 --- a/firmware/ec/test/fake/fake_I2C.c +++ b/firmware/ec/test/fake/fake_I2C.c @@ -208,6 +208,8 @@ bool I2C_transfer(I2C_Handle handle, I2C_Transaction *transaction) * in chunks in the event that we have 16-bit (or larger) registers with * a different endianness than the host */ if (write_count > 0) { + write_count = + ((dev->addr_size) * (transaction->writeCount)) - dev->addr_size; size_t write_size = MIN(write_count, dev->tbl_size - reg_addr); for (size_t i = 0; i < write_size / dev->reg_size; i += dev->reg_size) { endian_conversion(write_buf + i, dev->reg_size, dev->endianness, diff --git a/firmware/ec/test/fake/fake_SX1509_register.c b/firmware/ec/test/fake/fake_SX1509_register.c new file mode 100644 index 0000000000..558a625e75 --- /dev/null +++ b/firmware/ec/test/fake/fake_SX1509_register.c @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +#include "include/test_sx1509.h" + +uint8_t SX1509_regs[] = { + [SX1509_REG_INPUT_DISABLE_B] = + 0x00, /* Input buffer disableSX1509_REGister B */ + [SX1509_REG_INPUT_DISABLE_A] = + 0x00, /* Input buffer disableSX1509_REGister A */ + [SX1509_REG_LONG_SLEW_B] = + 0x00, /* Output buffer long slewSX1509_REGister B */ + [SX1509_REG_LONG_SLEW_A] = + 0x00, /* Output buffer long slewSX1509_REGister A */ + [SX1509_REG_LOW_DRIVE_B] = + 0x00, /* Output buffer low driveSX1509_REGister B */ + [SX1509_REG_LOW_DRIVE_A] = + 0x00, /* Output buffer low driveSX1509_REGister A */ + [SX1509_REG_PULL_UP_B] = 0x00, /* Pull UpSX1509_REGister B */ + [SX1509_REG_PULL_UP_A] = 0x00, /* Pull UpSX1509_REGister A */ + [SX1509_REG_PULL_DOWN_B] = 0x00, /* Pull DownSX1509_REGister B */ + [SX1509_REG_PULL_DOWN_A] = 0x00, /* Pull DownSX1509_REGister A */ + [SX1509_REG_OPEN_DRAIN_B] = 0x00, /* Open drainSX1509_REGister B */ + [SX1509_REG_OPEN_DRAIN_A] = 0x00, /* Open drainSX1509_REGister A */ + [SX1509_REG_POLARITY_B] = 0x00, /* PolaritySX1509_REGister B */ + [SX1509_REG_POLARITY_A] = 0x00, /* PolaritySX1509_REGister A */ + [SX1509_REG_DIR_B] = 0x00, /* DirectionSX1509_REGister B */ + [SX1509_REG_DIR_A] = 0x00, /* DirectionSX1509_REGister A */ + [SX1509_REG_DATA_B] = 0x00, /* DataSX1509_REGister B */ + [SX1509_REG_DATA_A] = 0x00, /* DataSX1509_REGister A */ + [SX1509_REG_INTERRUPT_MASK_B] = 0x00, /* Interrupt maskSX1509_REGister B */ + [SX1509_REG_INTERRUPT_MASK_A] = 0x00, /* Interrupt maskSX1509_REGister A */ + [SX1509_REG_SENSE_HIGH_B] = 0x00, /* Sense HighSX1509_REGister B */ + [SX1509_REG_SENSE_LOW_B] = 0x00, /* Sense LowSX1509_REGister B */ + [SX1509_REG_SENSE_HIGH_A] = 0x00, /* Sense HighSX1509_REGister A */ + [SX1509_REG_SENSE_LOW_A] = 0x00, /* Sense LowSX1509_REGister A */ + [SX1509_REG_INTERRUPT_SOURCE_B] = + 0x00, /* Interrupt sourceSX1509_REGister B */ + [SX1509_REG_INTERRUPT_SOURCE_A] = + 0x00, /* Interrupt sourceSX1509_REGister A */ + [SX1509_REG_EVENT_STATUS_B] = 0x00, /* Event statusSX1509_REGister B */ + [SX1509_REG_EVENT_STATUS_A] = 0x00, /* Event statusSX1509_REGister A */ + [SX1509_REG_LEVEL_SHIFTER_1] = 0x00, /* Level shifterSX1509_REGister 1 */ + [SX1509_REG_LEVEL_SHIFTER_2] = 0x00, /* Level shifterSX1509_REGister 2 */ + [SX1509_REG_CLOCK] = 0x00, /* Clock managementSX1509_REGister */ + [SX1509_REG_MISC] = 0x00, /* Miscellaneous device settingsSX1509_REGister */ + [SX1509_REG_LED_DRIVER_ENABLE_B] = + 0x00, /* LED driver enableSX1509_REGister B */ + [SX1509_REG_LED_DRIVER_ENABLE_A] = + 0x00, /* LED driver enableSX1509_REGister A */ + [SX1509_REG_DEBOUNCW_CONFIG] = + 0x00, /* Debounce configurationSX1509_REGister */ + [SX1509_REG_DEBOUNCW_ENABLE_B] = + 0x00, /* Debounce enableSX1509_REGister B */ + [SX1509_REG_DEBOUNCW_ENABLE_A] = + 0x00, /* Debounce enableSX1509_REGister A */ + [SX1509_REG_KEY_CONFIG_1] = + 0x00, /* Key scan configurationSX1509_REGister 1 */ + [SX1509_REG_KEY_CONFIG_2] = + 0x00, /* Key scan configurationSX1509_REGister 2 */ + [SX1509_REG_KEY_DATA_1] = 0x00, /* Key value (column) 1 */ + [SX1509_REG_KEY_DATA_2] = 0x00, /* Key value (row) 2 */ + [SX1509_REG_T_ON_0] = 0x00, /* ON timeSX1509_REGister I/O[0] */ + [SX1509_REG_I_ON_0] = 0x00, /* ON intensitySX1509_REGister I/O[0] */ + [SX1509_REG_OFF_0] = 0x00, /* OFF time/intensitySX1509_REGister I/O[0] */ + [SX1509_REG_T_ON_1] = 0x00, /* ON timeSX1509_REGister I/O[1] */ + [SX1509_REG_I_ON_1] = 0x00, /* ON intensitySX1509_REGister I/O[1] */ + [SX1509_REG_OFF_1] = 0x00, /* OFF time/intensitySX1509_REGister I/O[1] */ + [SX1509_REG_T_ON_2] = 0x00, /* ON timeSX1509_REGister I/O[2] */ + [SX1509_REG_I_ON_2] = 0x00, /* ON intensitySX1509_REGister I/O[2] */ + [SX1509_REG_OFF_2] = 0x00, /* OFF time/intensitySX1509_REGister I/O[2] */ + [SX1509_REG_T_ON_3] = 0x00, /* ON timeSX1509_REGister I/O[3] */ + [SX1509_REG_I_ON_3] = 0x00, /* ON intensitySX1509_REGister I/O[3] */ + [SX1509_REG_OFF_3] = 0x00, /* OFF time/intensitySX1509_REGister I/O[3] */ + [SX1509_REG_T_ON_4] = 0x00, /* ON timeSX1509_REGister I/O[4] */ + [SX1509_REG_I_ON_4] = 0x00, /* ON intensitySX1509_REGister I/O[4] */ + [SX1509_REG_OFF_4] = 0x00, /* OFF time/intensitySX1509_REGister I/O[4] */ + [SX1509_REG_T_RISE_4] = 0x00, /* Fade inSX1509_REGister I/O[4] */ + [SX1509_REG_T_Fall_4] = 0x00, /* Fade outSX1509_REGister I/O[4] */ + [SX1509_REG_T_ON_5] = 0x00, /* ON timeSX1509_REGister I/O[5] */ + [SX1509_REG_I_ON_5] = 0x00, /* ON intensitySX1509_REGister I/O[5] */ + [SX1509_REG_OFF_5] = 0x00, /* OFF time/intensitySX1509_REGister I/O[5] */ + [SX1509_REG_T_RISE_5] = 0x00, /* Fade inSX1509_REGister I/O[5] */ + [SX1509_REG_T_Fall_5] = 0x00, /* Fade outSX1509_REGister I/O[5] */ + [SX1509_REG_T_ON_6] = 0x00, /* ON timeSX1509_REGister I/O[6] */ + [SX1509_REG_I_ON_6] = 0x00, /* ON intensitySX1509_REGister I/O[6] */ + [SX1509_REG_OFF_6] = 0x00, /* OFF time/intensitySX1509_REGister I/O[6] */ + [SX1509_REG_T_RISE_6] = 0x00, /* Fade inSX1509_REGister I/O[6] */ + [SX1509_REG_T_Fall_6] = 0x00, /* Fade outSX1509_REGister I/O[6] */ + [SX1509_REG_T_ON_7] = 0x00, /* ON timeSX1509_REGister I/O[6] */ + [SX1509_REG_I_ON_7] = 0x00, /* ON intensitySX1509_REGister I/O[7] */ + [SX1509_REG_OFF_7] = 0x00, /* OFF time/intensitySX1509_REGister I/O[7] */ + [SX1509_REG_T_RISE_7] = 0x00, /* Fade inSX1509_REGister I/O[7] */ + [SX1509_REG_T_Fall_7] = 0x00, /* Fade outSX1509_REGister I/O[7] */ + [SX1509_REG_T_ON_8] = 0x00, /* ON timeSX1509_REGister I/O[8] */ + [SX1509_REG_I_ON_8] = 0x00, /* ON intensitySX1509_REGister I/O[8] */ + [SX1509_REG_OFF_8] = 0x00, /* OFF time/intensitySX1509_REGister I/O[8] */ + [SX1509_REG_T_ON_9] = 0x00, /* ON timeSX1509_REGister I/O[9] */ + [SX1509_REG_I_ON_9] = 0x00, /* ON intensitySX1509_REGister I/O[9] */ + [SX1509_REG_OFF_9] = 0x00, /* OFF time/intensitySX1509_REGister I/O[9] */ + [SX1509_REG_T_ON_10] = 0x00, /* ON timeSX1509_REGister I/O[10] */ + [SX1509_REG_I_ON_10] = 0x00, /* ON intensitySX1509_REGister I/O[10] */ + [SX1509_REG_OFF_10] = 0x00, /* OFF time/intensitySX1509_REGister I/O[10] */ + [SX1509_REG_T_ON_11] = 0x00, /* ON timeSX1509_REGister I/O[11] */ + [SX1509_REG_I_ON_11] = 0x00, /* ON intensitySX1509_REGister I/O[11] */ + [SX1509_REG_OFF_11] = 0x00, /* OFF time/intensitySX1509_REGister I/O[11] */ + [SX1509_REG_T_ON_12] = 0x00, /* ON timeSX1509_REGister I/O[12] */ + [SX1509_REG_I_ON_12] = 0x00, /* ON intensitySX1509_REGister I/O[12] */ + [SX1509_REG_OFF_12] = 0x00, /* OFF time/intensitySX1509_REGister I/O[12] */ + [SX1509_REG_T_RISE_12] = 0x00, /* Fade inSX1509_REGister I/O[12] */ + [SX1509_REG_T_Fall_12] = 0x00, /* Fade outSX1509_REGister I/O[12] */ + [SX1509_REG_T_ON_13] = 0x00, /* ON timeSX1509_REGister I/O[13] */ + [SX1509_REG_I_ON_13] = 0x00, /* ON intensitySX1509_REGister I/O[13] */ + [SX1509_REG_OFF_13] = 0x00, /* OFF time/intensitySX1509_REGister I/O[13] */ + [SX1509_REG_T_RISE_13] = 0x00, /* Fade inSX1509_REGister I/O[13] */ + [SX1509_REG_T_Fall_13] = 0x00, /* Fade outSX1509_REGister I/O[13] */ + [SX1509_REG_T_ON_14] = 0x00, /* ON timeSX1509_REGister I/O[14] */ + [SX1509_REG_I_ON_14] = 0x00, /* ON intensitySX1509_REGister I/O[14] */ + [SX1509_REG_OFF_14] = 0x00, /* OFF time/intensitySX1509_REGister I/O[14] */ + [SX1509_REG_T_RISE_14] = 0x00, /* Fade inSX1509_REGister I/O[14] */ + [SX1509_REG_T_Fall_14] = 0x00, /* Fade outSX1509_REGister I/O[14] */ + [SX1509_REG_T_ON_15] = 0x00, /* ON timeSX1509_REGister I/O[15] */ + [SX1509_REG_I_ON_15] = 0x00, /* ON intensitySX1509_REGister I/O[15] */ + [SX1509_REG_OFF_15] = 0x00, /* OFF time/intensitySX1509_REGister I/O[15] */ + [SX1509_REG_T_RISE_15] = 0x00, /* Fade inSX1509_REGister I/O[115] */ + [SX1509_REG_T_Fall_15] = 0x00, /* Fade outSX1509_REGister I/O[15] */ + [SX1509_REG_HIGH_INPUT_B] = 0x00, /* */ + [SX1509_REG_HIGH_INPUT_A] = 0x00, /* */ + [SX1509_REG_RESET] = 0x00, /* */ + [SX1509_REG_TEST_1] = 0x00, /* */ + [SX1509_REG_TEST_2] = 0x00, /* */ +}; diff --git a/firmware/ec/test/fake/fake_powerSource.c b/firmware/ec/test/fake/fake_powerSource.c new file mode 100644 index 0000000000..4bc18f17bc --- /dev/null +++ b/firmware/ec/test/fake/fake_powerSource.c @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +#include "include/test_powerSource.h" +#include + +extern const OcGpio_FnTable GpioSX1509_fnTable; + +bool PWR_GpioPins[] = { + [OC_EC_PWR_PRSNT_SOLAR_AUX] = 0x1, + [OC_EC_PWR_PRSNT_POE] = 0x1, +}; + +uint32_t PWR_GpioConfig[] = { + [OC_EC_PWR_PRSNT_SOLAR_AUX] = OCGPIO_CFG_INPUT, + [OC_EC_PWR_PRSNT_POE] = OCGPIO_CFG_INPUT, +}; + +/* ============================= Boilerplate ================================ */ +OcGpio_Port ec_io = { + .fn_table = &FakeGpio_fnTable, + .object_data = &(FakeGpio_Obj){}, +}; + +OcGpio_Port gbc_io_0 = { + .fn_table = &GpioSX1509_fnTable, + .cfg = + &(SX1509_Cfg){ + .i2c_dev = { I2C_BUS, I2C_ADDR }, + }, + .object_data = &(SX1509_Obj){}, +}; \ No newline at end of file diff --git a/firmware/ec/test/include/test_powerSource.h b/firmware/ec/test/include/test_powerSource.h new file mode 100644 index 0000000000..1239c8ff40 --- /dev/null +++ b/firmware/ec/test/include/test_powerSource.h @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +#ifndef _TEST_POWERSOURCE_H +#define _TEST_POWERSOURCE_H + +#include "common/inc/global/Framework.h" +#include "common/inc/ocmp_wrappers/ocmp_powersource.h" +#include "drivers/GpioSX1509.h" +#include "drivers/OcGpio.h" +#include "fake/fake_GPIO.h" +#include "fake/fake_I2C.h" +#include "fake/fake_ThreadedISR.h" +#include "helpers/array.h" +#include "helpers/attribute.h" +#include "helpers/memory.h" +#include "inc/devices/powerSource.h" +#include "include/test_sx1509.h" +#include +#include "unity.h" +/* ======================== Constants & variables =========================== */ +#define I2C_BUS 5 +#define I2C_ADDR 0x71 +#define OC_EC_PWR_PRSNT_SOLAR_AUX 0x1E +#define OC_EC_PWR_PRSNT_POE 0x55 +#define OC_EC_PWR_INVALID_PIN 0x57 +#define OC_EC_PWR_INVALID_IO 0x82 +#define PWR_EXT_BAT_ENABLE_FIRST_BYTE 0x08 +#define PWR_EXT_BAT_ENABLE_SECOND_BYTE 0x00 +#define PWR_INT_BAT_ENABLE_FIRST_BYTE 0x10 +#define PWR_INT_BAT_ENABLE_SECOND_BYTE 0x00 +#define PWR_INT_EXT_BAT_DISABLE_FIRST_BYTE 0x18 +#define PWR_INT_EXT_BAT_DISABLE_SECOND_BYTE 0x00 +#define PWR_STATE_DISABLE 0x01 +#define PWR_STATE_ENABLE 0x00 +#define PWR_STAT_INVALID_PARAM 0x09 + +typedef enum ePowerSourceStatus { + PWR_SRC_NOT_AVAILABLE = 0, + PWR_SRC_ACTIVE_AVAILABLE, +} ePowerSourceStatus; + +#endif diff --git a/firmware/ec/test/include/test_sx1509.h b/firmware/ec/test/include/test_sx1509.h new file mode 100644 index 0000000000..31757667ef --- /dev/null +++ b/firmware/ec/test/include/test_sx1509.h @@ -0,0 +1,127 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +#ifndef _TEST_SX1509_H +#define _TEST_SX1509_H + +#include + +/*Enumes are defined as per the SX1509 datasheet*/ +typedef enum SX1509Regs { + SX1509_REG_INPUT_DISABLE_B = 0x00, + SX1509_REG_INPUT_DISABLE_A, + SX1509_REG_LONG_SLEW_B, + SX1509_REG_LONG_SLEW_A, + SX1509_REG_LOW_DRIVE_B, + SX1509_REG_LOW_DRIVE_A, + SX1509_REG_PULL_UP_B, + SX1509_REG_PULL_UP_A, + SX1509_REG_PULL_DOWN_B, + SX1509_REG_PULL_DOWN_A, + SX1509_REG_OPEN_DRAIN_B, + SX1509_REG_OPEN_DRAIN_A, + SX1509_REG_POLARITY_B, + SX1509_REG_POLARITY_A, + SX1509_REG_DIR_B, + SX1509_REG_DIR_A, + SX1509_REG_DATA_B, + SX1509_REG_DATA_A, + SX1509_REG_INTERRUPT_MASK_B, + SX1509_REG_INTERRUPT_MASK_A, + SX1509_REG_SENSE_HIGH_B, + SX1509_REG_SENSE_LOW_B, + SX1509_REG_SENSE_HIGH_A, + SX1509_REG_SENSE_LOW_A, + SX1509_REG_INTERRUPT_SOURCE_B, + SX1509_REG_INTERRUPT_SOURCE_A, + SX1509_REG_EVENT_STATUS_B, + SX1509_REG_EVENT_STATUS_A, + SX1509_REG_LEVEL_SHIFTER_1, + SX1509_REG_LEVEL_SHIFTER_2, + SX1509_REG_CLOCK, + SX1509_REG_MISC, + SX1509_REG_LED_DRIVER_ENABLE_B, + SX1509_REG_LED_DRIVER_ENABLE_A, + SX1509_REG_DEBOUNCW_CONFIG, + SX1509_REG_DEBOUNCW_ENABLE_B, + SX1509_REG_DEBOUNCW_ENABLE_A, + SX1509_REG_KEY_CONFIG_1, + SX1509_REG_KEY_CONFIG_2, + SX1509_REG_KEY_DATA_1, + SX1509_REG_KEY_DATA_2, + SX1509_REG_T_ON_0, + SX1509_REG_I_ON_0, + SX1509_REG_OFF_0, + SX1509_REG_T_ON_1, + SX1509_REG_I_ON_1, + SX1509_REG_OFF_1, + SX1509_REG_T_ON_2, + SX1509_REG_I_ON_2, + SX1509_REG_OFF_2, + SX1509_REG_T_ON_3, + SX1509_REG_I_ON_3, + SX1509_REG_OFF_3, + SX1509_REG_T_ON_4, + SX1509_REG_I_ON_4, + SX1509_REG_OFF_4, + SX1509_REG_T_RISE_4, + SX1509_REG_T_Fall_4, + SX1509_REG_T_ON_5, + SX1509_REG_I_ON_5, + SX1509_REG_OFF_5, + SX1509_REG_T_RISE_5, + SX1509_REG_T_Fall_5, + SX1509_REG_T_ON_6, + SX1509_REG_I_ON_6, + SX1509_REG_OFF_6, + SX1509_REG_T_RISE_6, + SX1509_REG_T_Fall_6, + SX1509_REG_T_ON_7, + SX1509_REG_I_ON_7, + SX1509_REG_OFF_7, + SX1509_REG_T_RISE_7, + SX1509_REG_T_Fall_7, + SX1509_REG_T_ON_8, + SX1509_REG_I_ON_8, + SX1509_REG_OFF_8, + SX1509_REG_T_ON_9, + SX1509_REG_I_ON_9, + SX1509_REG_OFF_9, + SX1509_REG_T_ON_10, + SX1509_REG_I_ON_10, + SX1509_REG_OFF_10, + SX1509_REG_T_ON_11, + SX1509_REG_I_ON_11, + SX1509_REG_OFF_11, + SX1509_REG_T_ON_12, + SX1509_REG_I_ON_12, + SX1509_REG_OFF_12, + SX1509_REG_T_RISE_12, + SX1509_REG_T_Fall_12, + SX1509_REG_T_ON_13, + SX1509_REG_I_ON_13, + SX1509_REG_OFF_13, + SX1509_REG_T_RISE_13, + SX1509_REG_T_Fall_13, + SX1509_REG_T_ON_14, + SX1509_REG_I_ON_14, + SX1509_REG_OFF_14, + SX1509_REG_T_RISE_14, + SX1509_REG_T_Fall_14, + SX1509_REG_T_ON_15, + SX1509_REG_I_ON_15, + SX1509_REG_OFF_15, + SX1509_REG_T_RISE_15, + SX1509_REG_T_Fall_15, + SX1509_REG_HIGH_INPUT_B, + SX1509_REG_HIGH_INPUT_A, + SX1509_REG_RESET = 0x7D, + SX1509_REG_TEST_1, + SX1509_REG_TEST_2 +} SX1509Regs; +#endif diff --git a/firmware/ec/test/suites/Doc/TestCaseList.xlsx b/firmware/ec/test/suites/Doc/TestCaseList.xlsx index f15c78f0ebfd49c55fbe6f01c35816ac496786b1..f6cd0442f4149f3c5dcc67e8512d5149409972d8 100644 GIT binary patch literal 34027 zcmd?Q1CV7=v!GkHZQHhO+qSE^%eHOXwry8+b=m5&t?BOnzW3(cx%Z!#`Qt@Qyn7;c zoE;}4_lj?=eKK?9%2bdB20;OUfPesyJb~-m( zo9wu0xBv!(pesJm)lL*%4B_W?gj@l917UOvp;p;esGe@wxXv4n^r_VJ^0lRz)yM#h zQP!+mAf~-7%Ryt<*tZL}U>Tx@kyXZ}Ycl^9PL)cyLn7TVrJQ1!h7d|IeJauq5j0ZQ z9FF!tXf)#lLlv%_gt6~x#|3Q^H~tEfA}F2H{`Bx)d73O;$G%qkA^rD1+CMGB_rV}p zjAiu4Ou7V=%e^h`02QRcAx5X=D$9PePy+%0DEzO|GX0mLW&AHi%lu!8mgT<`E$e?N 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 Vz?T>RKnVQI0tb`ayFdQ*zW{_$rfUEI literal 33547 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