From bdd64126007d0825525e437da3d0ce7ebb8c68a4 Mon Sep 17 00:00:00 2001 From: swateeshrivastava Date: Thu, 13 Dec 2018 11:24:54 +0530 Subject: [PATCH 1/4] Unity test cases are updated for eeprom device --- .../common/inc/ocmp_wrappers/ocmp_adt7481.h | 4 - .../ec/platform/oc-sdr/schema/auto_schema.c | 1753 ++++++++--------- firmware/ec/src/devices/eeprom.c | 30 +- firmware/ec/test/Makefile | 2 +- firmware/ec/test/fake/fake_I2C.c | 1 + firmware/ec/test/fake/fake_eeprom.c | 93 + firmware/ec/test/include/test_eeprom.h | 102 + firmware/ec/test/suites/Doc/TestCaseList.xlsx | Bin 34027 -> 33889 bytes firmware/ec/test/suites/Test_eeprom.c | 606 ++---- 9 files changed, 1308 insertions(+), 1283 deletions(-) create mode 100644 firmware/ec/test/fake/fake_eeprom.c create mode 100644 firmware/ec/test/include/test_eeprom.h diff --git a/firmware/ec/common/inc/ocmp_wrappers/ocmp_adt7481.h b/firmware/ec/common/inc/ocmp_wrappers/ocmp_adt7481.h index 387ae7220e..35cea72a0d 100644 --- a/firmware/ec/common/inc/ocmp_wrappers/ocmp_adt7481.h +++ b/firmware/ec/common/inc/ocmp_wrappers/ocmp_adt7481.h @@ -20,11 +20,7 @@ typedef union ADT7481_Config { int8_t limits[3]; } ADT7481_Config; -#ifdef UT_FRAMEWORK -extern const Driver_fxnTable ADT7481_fxnTable; -#else SCHEMA_IMPORT const Driver_fxnTable ADT7481_fxnTable; -#endif static const Driver ADT7481 = { .name = "ADT7481", diff --git a/firmware/ec/platform/oc-sdr/schema/auto_schema.c b/firmware/ec/platform/oc-sdr/schema/auto_schema.c index ad752bdc2e..9c84710014 100644 --- a/firmware/ec/platform/oc-sdr/schema/auto_schema.c +++ b/firmware/ec/platform/oc-sdr/schema/auto_schema.c @@ -1,16 +1,16 @@ /** -* Copyright (c) 2018-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. -* -* WARNING: Do not modify this file by hand. It is auto -* generated from the json schema definition. -* Refer to sdtester.py -*/ + * Copyright (c) 2018-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. + * + * WARNING: Do not modify this file by hand. It is auto + * generated from the json schema definition. + * Refer to sdtester.py + */ #include "auto_schema.h" @@ -161,945 +161,930 @@ SCHEMA_IMPORT bool SYS_cmdReset(void *, void *); SCHEMA_IMPORT bool sys_post_init(void *, void *); SCHEMA_IMPORT bool TestMod_cmdReset(void *, void *); - const Component sys_schema[] = { { .name = "system", .driver_cfg = &gbc_spi_flash_memory, - .ssHookSet = &(SSHookSet) { - .preInitFxn = NULL, - .postInitFxn = (ssHook_Cb)sys_post_init, - }, - .components = (Component[]) { - { - .name = "comp_all", - .driver = &SYSTEMDRV, - .driver_cfg = &gbc_gpp_gpioCfg, - .components = (Component[]) { - { - .name = "eeprom_sid", - .driver = &CAT24C04_gbc_sid, - .driver_cfg = &eeprom_gbc_sid, - }, - { - .name = "eeprom_inv", - .driver = &CAT24C04_gbc_inv, - .driver_cfg = &eeprom_gbc_inv, - }, - { - .name = "eeprom_mac", - .driver = &Driver_MAC, - }, - { - .name = "SPI_flash", - .driver = &FLASHDRV, - .driver_cfg = &gbc_spi_flash_memory, - }, - {} - }, - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = SYS_cmdReset, - }, - { - .name = "echo", - .cb_cmd = SYS_cmdEcho, - }, - {} - }, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = NULL, + .postInitFxn = (ssHook_Cb)sys_post_init, }, - {} - }, + .components = + (Component[]){ + { + .name = "comp_all", + .driver = &SYSTEMDRV, + .driver_cfg = &gbc_gpp_gpioCfg, + .components = + (Component[]){ { + .name = "eeprom_sid", + .driver = &CAT24C04_gbc_sid, + .driver_cfg = &eeprom_gbc_sid, + }, + { + .name = "eeprom_inv", + .driver = &CAT24C04_gbc_inv, + .driver_cfg = &eeprom_gbc_inv, + }, + { + .name = "eeprom_mac", + .driver = &Driver_MAC, + }, + { + .name = "SPI_flash", + .driver = &FLASHDRV, + .driver_cfg = &gbc_spi_flash_memory, + }, + {} }, + .commands = (Command[]){ { + .name = "reset", + .cb_cmd = SYS_cmdReset, + }, + { + .name = "echo", + .cb_cmd = SYS_cmdEcho, + }, + {} }, + }, + {} }, }, { .name = "power", - .components = (Component[]) { - { - .name = "comp_all", - .components = (Component[]) { - { - .name = "powerSource", - .driver = &PWRSRC, - .driver_cfg = &gbc_pwr_powerSource, - .postDisabled = POST_DISABLED, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .components = + (Component[]){ + { + .name = "powerSource", + .driver = &PWRSRC, + .driver_cfg = &gbc_pwr_powerSource, + .postDisabled = POST_DISABLED, + }, + {} }, }, - }, - { - .name = "leadacid_sensor", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &gbc_pwr_lead_acid_ts, - .factory_config = &fact_bc_se98a, - }, - {} + { + .name = "leadacid_sensor", + .components = + (Component[]){ { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &gbc_pwr_lead_acid_ts, + .factory_config = &fact_bc_se98a, + }, + {} }, }, - }, - { - .name = "leadacid", - .components = (Component[]) { - { - .name = "battery", - .driver = <C4015, - .driver_cfg = &gbc_pwr_ext_bat_charger, - .factory_config = &fact_leadAcid_cfg, - }, - {} + { + .name = "leadacid", + .components = + (Component[]){ + { + .name = "battery", + .driver = <C4015, + .driver_cfg = &gbc_pwr_ext_bat_charger, + .factory_config = &fact_leadAcid_cfg, + }, + {} }, }, - }, - { - .name = "lion", - .components = (Component[]) { - { - .name = "battery", - .driver = <C4015, - .driver_cfg = &gbc_pwr_int_bat_charger, - .factory_config = &fact_lithiumIon_cfg, - }, - {} + { + .name = "lion", + .components = + (Component[]){ + { + .name = "battery", + .driver = <C4015, + .driver_cfg = &gbc_pwr_int_bat_charger, + .factory_config = &fact_lithiumIon_cfg, + }, + {} }, }, - }, - { - .name = "pse", - .driver = <C4274, - .driver_cfg = &gbc_pwr_pse, - .factory_config = &fact_ltc4274_cfg, - }, - { - .name = "pd", - .driver = <C4275, - .driver_cfg = &gbc_pwr_pd, - }, - {} - }, + { + .name = "pse", + .driver = <C4274, + .driver_cfg = &gbc_pwr_pse, + .factory_config = &fact_ltc4274_cfg, + }, + { + .name = "pd", + .driver = <C4275, + .driver_cfg = &gbc_pwr_pd, + }, + {} }, }, { .name = "bms", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ec", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &gbc_bms_ec_ts, - .factory_config = &fact_ec_se98a_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &gbc_bms_ec_ps_12v, - .factory_config = &fact_ec_12v_ps_cfg, - }, - { - .name = "current_sensor2", - .driver = &INA226, - .driver_cfg = &gbc_bms_ec_ps_3p3v, - .factory_config = &fact_ec_3v_ps_cfg, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, }, - }, - {} - }, + { + .name = "ec", + .components = + (Component[]){ + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &gbc_bms_ec_ts, + .factory_config = &fact_ec_se98a_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &gbc_bms_ec_ps_12v, + .factory_config = &fact_ec_12v_ps_cfg, + }, + { + .name = "current_sensor2", + .driver = &INA226, + .driver_cfg = &gbc_bms_ec_ps_3p3v, + .factory_config = &fact_ec_3v_ps_cfg, + }, + {} }, + }, + {} }, }, { .name = "hci", - .ssHookSet = &(SSHookSet) { - .preInitFxn = (ssHook_Cb)HCI_Init, - .postInitFxn = NULL, - }, - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = (ssHook_Cb)HCI_Init, + .postInitFxn = NULL, }, - { - .name = "led", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &led_hci_ts, - .factory_config = &fact_led_se98a_cfg, - .postDisabled = POST_DISABLED, - }, - { - .name = "fw", - .driver = &HCI_LED, - .driver_cfg = &led_hci_ioexp, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, }, - }, - { - .name = "buzzer", - .driver_cfg = &gbc_hci_buzzer, - .postDisabled = POST_DISABLED, - }, - {} - }, + { + .name = "led", + .components = + (Component[]){ + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &led_hci_ts, + .factory_config = &fact_led_se98a_cfg, + .postDisabled = POST_DISABLED, + }, + { + .name = "fw", + .driver = &HCI_LED, + .driver_cfg = &led_hci_ioexp, + }, + {} }, + }, + { + .name = "buzzer", + .driver_cfg = &gbc_hci_buzzer, + .postDisabled = POST_DISABLED, + }, + {} }, }, { .name = "ethernet", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "port0", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port0, - }, - { - .name = "port1", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port1, - }, - { - .name = "port2", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port2, - }, - { - .name = "port3", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port3, - }, - { - .name = "port4", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port4, - }, - {} - }, + .components = (Component[]){ { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "port0", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port0, + }, + { + .name = "port1", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port1, + }, + { + .name = "port2", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port2, + }, + { + .name = "port3", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port3, + }, + { + .name = "port4", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port4, + }, + {} }, }, { .name = "obc", - .ssHookSet = &(SSHookSet) { - .preInitFxn = (ssHook_Cb)obc_pre_init, - .postInitFxn = NULL, - }, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = (ssHook_Cb)obc_pre_init, + .postInitFxn = NULL, + }, .driver_cfg = &sync_obc_gpiocfg, - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "iridium", - .driver = &OBC_Iridium, - .driver_cfg = &obc_irridium, - }, - {} - }, + .components = (Component[]){ { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "iridium", + .driver = &OBC_Iridium, + .driver_cfg = &obc_irridium, + }, + {} }, }, { .name = "gpp", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ap", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &gbc_gpp_ap_ts1, - .factory_config = &fact_ap_se98a_ts1_cfg, - }, - { - .name = "temp_sensor2", - .driver = &SE98A, - .driver_cfg = &gbc_gpp_ap_ts2, - .factory_config = &fact_ap_se98a_ts2_cfg, - }, - { - .name = "temp_sensor3", - .driver = &SE98A, - .driver_cfg = &gbc_gpp_ap_ts3, - .factory_config = &fact_ap_se98a_ts3_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &gbc_gpp_ap_ps, - .factory_config = &fact_ap_3v_ps_cfg, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, }, - .driver_cfg = &gbc_gpp_gpioCfg, - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = GPP_ap_Reset, - }, - {} + { + .name = "ap", + .components = + (Component[]){ + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &gbc_gpp_ap_ts1, + .factory_config = &fact_ap_se98a_ts1_cfg, + }, + { + .name = "temp_sensor2", + .driver = &SE98A, + .driver_cfg = &gbc_gpp_ap_ts2, + .factory_config = &fact_ap_se98a_ts2_cfg, + }, + { + .name = "temp_sensor3", + .driver = &SE98A, + .driver_cfg = &gbc_gpp_ap_ts3, + .factory_config = &fact_ap_se98a_ts3_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &gbc_gpp_ap_ps, + .factory_config = &fact_ap_3v_ps_cfg, + }, + {} }, + .driver_cfg = &gbc_gpp_gpioCfg, + .commands = (Command[]){ { + .name = "reset", + .cb_cmd = GPP_ap_Reset, + }, + {} }, }, - }, - { - .name = "msata", - .components = (Component[]) { - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &gbc_gpp_msata_ps, - .factory_config = &fact_msata_3v_ps_cfg, - }, - {} + { + .name = "msata", + .components = + (Component[]){ + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &gbc_gpp_msata_ps, + .factory_config = &fact_msata_3v_ps_cfg, + }, + {} }, }, - }, - {} - }, + {} }, .driver_cfg = &gbc_gpp_gpioCfg, - .ssHookSet = &(SSHookSet) { - .preInitFxn = (ssHook_Cb)gpp_pre_init, - .postInitFxn = (ssHook_Cb)gpp_post_init, - }, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = (ssHook_Cb)gpp_pre_init, + .postInitFxn = (ssHook_Cb)gpp_post_init, + }, }, { .name = "sdr", - .components = (Component[]) { - { - .name = "comp_all", - .components = (Component[]) { - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &sdr_ps, - .factory_config = &fact_sdr_3v_ps_cfg, - }, - { - .name = "eeprom", - .driver_cfg = &eeprom_sdr_inv, - .driver = &CAT24C04_sdr_inv, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .components = + (Component[]){ + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &sdr_ps, + .factory_config = &fact_sdr_3v_ps_cfg, + }, + { + .name = "eeprom", + .driver_cfg = &eeprom_sdr_inv, + .driver = &CAT24C04_sdr_inv, + }, + {} }, + .driver_cfg = &sdr_gpioCfg, + .commands = (Command[]){ { + .name = "reset", + .cb_cmd = SDR_reset, + }, + {} }, }, - .driver_cfg = &sdr_gpioCfg, - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = SDR_reset, - }, - {} + { + .name = "fpga", + .components = + (Component[]){ + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &sdr_fpga_ts, + .factory_config = &fact_sdr_fpga_adt7481_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &sdr_fpga_ps, + .factory_config = &fact_sdr_fpga_ps_cfg, + }, + {} }, }, - }, - { - .name = "fpga", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &sdr_fpga_ts, - .factory_config = &fact_sdr_fpga_adt7481_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &sdr_fpga_ps, - .factory_config = &fact_sdr_fpga_ps_cfg, - }, - {} + { + .name = "fx3", + .driver_cfg = &sdr_gpioCfg, + .commands = (Command[]){ { + .name = "reset", + .cb_cmd = SDR_fx3Reset, + }, + {} }, + .postDisabled = POST_DISABLED, }, - }, - { - .name = "fx3", - .driver_cfg = &sdr_gpioCfg, - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = SDR_fx3Reset, - }, - {} - }, - .postDisabled = POST_DISABLED, - }, - {} - }, + {} }, .driver_cfg = &sdr_gpioCfg, - .ssHookSet = &(SSHookSet) { - .preInitFxn = (ssHook_Cb)SDR_Init, - .postInitFxn = NULL, - }, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = (ssHook_Cb)SDR_Init, + .postInitFxn = NULL, + }, }, { .name = "rffe", .driver_cfg = &fe_rffecfg, - .components = (Component[]) { - { - .name = "comp_all", - .components = (Component[]) { - { - .name = "eeprom", - .driver = &CAT24C04_fe_inv, - .driver_cfg = &eeprom_fe_inv, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .components = (Component[]){ { + .name = "eeprom", + .driver = &CAT24C04_fe_inv, + .driver_cfg = + &eeprom_fe_inv, + }, + {} }, + .driver_cfg = &sdr_gpioCfg, + .commands = (Command[]){ { + .name = "reset", + .cb_cmd = RFFE_reset, + }, + {} }, }, - .driver_cfg = &sdr_gpioCfg, - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = RFFE_reset, - }, - {} + { + .name = "ch1_sensor", + .components = + (Component[]){ + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &fe_ch1_ts, + .factory_config = &fact_fe_ch1_adt7481_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &fe_ch1_ps_5_7v, + .factory_config = &fact_fe_ch1_ps_cfg, + }, + {} }, }, + { + .name = "ch2_sensor", + .components = + (Component[]){ + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &fe_ch2_ts, + .factory_config = &fact_fe_ch2_adt7481_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &fe_ch2_ps_5_7v, + .factory_config = &fact_fe_ch2_ps_cfg, + }, + {} }, + }, + { + .name = "ch1_fe", + .driver_cfg = &fe_ch1_pwrcfg, + .components = + (Component[]){ + { + .name = "ch1_band", + .driver = &FE_Param, + .driver_cfg = &fe_ch1_bandcfg, + .factory_config = &fact_ch1_band_cfg, + }, + { + .name = "watchdog", + .driver = &RFFEWatchdog, + .driver_cfg = &fe_ch1_watchdog, + }, + { + .name = "power", + .driver = &RFPowerMonitor, + .driver_cfg = &fe_ch1_ads7830, + }, + { + .name = "tx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch1_gain, + .factory_config = &fact_ch1_tx_gain_cfg, + }, + { + .name = "rx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch1_lna, + .factory_config = &fact_ch1_rx_gain_cfg, + }, + {} }, + .commands = (Command[]){ { + .name = "enable", + .cb_cmd = RFFE_enablePA, + }, + { + .name = "disable", + .cb_cmd = RFFE_disablePA, + }, + {} }, + }, + { + .name = "ch2_fe", + .driver_cfg = &fe_ch2_pwrcfg, + .components = + (Component[]){ + { + .name = "ch2_band", + .driver = &FE_Param, + .driver_cfg = &fe_ch2_bandcfg, + .factory_config = &fact_ch2_band_cfg, + }, + { + .name = "watchdog", + .driver = &RFFEWatchdog, + .driver_cfg = &fe_ch2_watchdog, + }, + { + .name = "power", + .driver = &RFPowerMonitor, + .driver_cfg = &fe_ch2_ads7830, + }, + { + .name = "tx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch2_gain, + .factory_config = &fact_ch2_tx_gain_cfg, + }, + { + .name = "rx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch2_lna, + .factory_config = &fact_ch2_rx_gain_cfg, + }, + {} }, + .commands = (Command[]){ { + .name = "enable", + .cb_cmd = RFFE_enablePA, + }, + { + .name = "disable", + .cb_cmd = RFFE_disablePA, + }, + {} }, + }, + {} }, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = (ssHook_Cb)rffe_pre_init, + .postInitFxn = (ssHook_Cb)rffe_post_init, }, - { - .name = "ch1_sensor", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &fe_ch1_ts, - .factory_config = &fact_fe_ch1_adt7481_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &fe_ch1_ps_5_7v, - .factory_config = &fact_fe_ch1_ps_cfg, - }, - {} - }, - }, - { - .name = "ch2_sensor", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &fe_ch2_ts, - .factory_config = &fact_fe_ch2_adt7481_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &fe_ch2_ps_5_7v, - .factory_config = &fact_fe_ch2_ps_cfg, - }, - {} - }, - }, - { - .name = "ch1_fe", - .driver_cfg = &fe_ch1_pwrcfg, - .components = (Component[]) { - { - .name = "ch1_band", - .driver = &FE_Param, - .driver_cfg = &fe_ch1_bandcfg, - .factory_config = &fact_ch1_band_cfg, - }, - { - .name = "watchdog", - .driver = &RFFEWatchdog, - .driver_cfg = &fe_ch1_watchdog, - }, - { - .name = "power", - .driver = &RFPowerMonitor, - .driver_cfg = &fe_ch1_ads7830, - }, - { - .name = "tx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch1_gain, - .factory_config = &fact_ch1_tx_gain_cfg, - }, - { - .name = "rx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch1_lna, - .factory_config = &fact_ch1_rx_gain_cfg, - }, - {} - }, - .commands = (Command[]) { - { - .name = "enable", - .cb_cmd = RFFE_enablePA, - }, - { - .name = "disable", - .cb_cmd = RFFE_disablePA, - }, - {} - }, - }, - { - .name = "ch2_fe", - .driver_cfg = &fe_ch2_pwrcfg, - .components = (Component[]) { - { - .name = "ch2_band", - .driver = &FE_Param, - .driver_cfg = &fe_ch2_bandcfg, - .factory_config = &fact_ch2_band_cfg, - }, - { - .name = "watchdog", - .driver = &RFFEWatchdog, - .driver_cfg = &fe_ch2_watchdog, - }, - { - .name = "power", - .driver = &RFPowerMonitor, - .driver_cfg = &fe_ch2_ads7830, - }, - { - .name = "tx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch2_gain, - .factory_config = &fact_ch2_tx_gain_cfg, - }, - { - .name = "rx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch2_lna, - .factory_config = &fact_ch2_rx_gain_cfg, - }, - {} - }, - .commands = (Command[]) { - { - .name = "enable", - .cb_cmd = RFFE_enablePA, - }, - { - .name = "disable", - .cb_cmd = RFFE_disablePA, - }, - {} - }, - }, - {} - }, - .ssHookSet = &(SSHookSet) { - .preInitFxn = (ssHook_Cb)rffe_pre_init, - .postInitFxn = (ssHook_Cb)rffe_post_init, - }, }, { .name = "sync", .driver_cfg = &sync_gpiocfg, - .ssHookSet = &(SSHookSet) { - .preInitFxn = (ssHook_Cb)SYNC_Init, - .postInitFxn = NULL, - }, - .components = (Component[]) { - { - .name = "comp_all", - .driver_cfg = &sync_gpiocfg, - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = SYNC_reset, - }, - {} - }, - .postDisabled = POST_DISABLED, + .ssHookSet = + &(SSHookSet){ + .preInitFxn = (ssHook_Cb)SYNC_Init, + .postInitFxn = NULL, }, - { - .name = "gps", - .driver_cfg = &sync_gpiocfg, - .driver = &Sync_IO, - }, - { - .name = "sensor", - .components = (Component[]) { - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &sync_gps_ts, - .factory_config = &fact_sync_ts_cfg, - }, - {} - }, - }, - {} - }, + .components = + (Component[]){ { + .name = "comp_all", + .driver_cfg = &sync_gpiocfg, + .commands = + (Command[]){ { + .name = "reset", + .cb_cmd = SYNC_reset, + }, + {} }, + .postDisabled = POST_DISABLED, + }, + { + .name = "gps", + .driver_cfg = &sync_gpiocfg, + .driver = &Sync_IO, + }, + { + .name = "sensor", + .components = + (Component[]){ { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = + &sync_gps_ts, + .factory_config = + &fact_sync_ts_cfg, + }, + {} }, + }, + {} }, }, { .name = "testmodule", - .components = (Component[]) { - { - .name = "comp_all", - .commands = (Command[]) { - { - .name = "reset", - .cb_cmd = TestMod_cmdReset, - }, - {} - }, - .postDisabled = POST_DISABLED, - }, - { - .name = "2gsim", - .driver = &Testmod_G510, - .driver_cfg = &testModuleCfg, - }, - {} - }, + .components = + (Component[]){ { + .name = "comp_all", + .commands = + (Command[]){ { + .name = "reset", + .cb_cmd = TestMod_cmdReset, + }, + {} }, + .postDisabled = POST_DISABLED, + }, + { + .name = "2gsim", + .driver = &Testmod_G510, + .driver_cfg = &testModuleCfg, + }, + {} }, }, { .name = "debug", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "I2C", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "bus0", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C0, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus1", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C1, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus2", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C2, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus3", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C3, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus4", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C4, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus6", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C6, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus7", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C7, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus8", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C8, - .postDisabled = POST_DISABLED, - }, - {} + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, }, - }, - { - .name = "ec", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "PA", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pa, - .postDisabled = POST_DISABLED, - }, - { - .name = "PB", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pb, - .postDisabled = POST_DISABLED, - }, - { - .name = "PC", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pc, - .postDisabled = POST_DISABLED, - }, - { - .name = "PD", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pd, - .postDisabled = POST_DISABLED, - }, - { - .name = "PE", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pe, - .postDisabled = POST_DISABLED, - }, - { - .name = "PF", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pf, - .postDisabled = POST_DISABLED, - }, - { - .name = "PG", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pg, - .postDisabled = POST_DISABLED, - }, - { - .name = "PH", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_ph, - .postDisabled = POST_DISABLED, - }, - { - .name = "PJ", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pj, - .postDisabled = POST_DISABLED, - }, - { - .name = "PK", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pk, - .postDisabled = POST_DISABLED, - }, - { - .name = "PL", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pl, - .postDisabled = POST_DISABLED, - }, - { - .name = "PM", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pm, - .postDisabled = POST_DISABLED, - }, - { - .name = "PN", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pn, - .postDisabled = POST_DISABLED, - }, - { - .name = "PP", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pn, - .postDisabled = POST_DISABLED, - }, - { - .name = "PQ", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pq, - .postDisabled = POST_DISABLED, - }, - {} + { + .name = "I2C", + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "bus0", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C0, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus1", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C1, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus2", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C2, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus3", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C3, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus4", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C4, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus6", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C6, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus7", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C7, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus8", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C8, + .postDisabled = POST_DISABLED, + }, + {} }, }, - }, - { - .name = "gbc", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ioexpanderx70", - .driver = &OC_GPIO, - .driver_cfg = &debug_gbc_ioexpanderx70, - }, - { - .name = "ioexpanderx71", - .driver = &OC_GPIO, - .driver_cfg = &debug_gbc_ioexpanderx71, - }, - {} + { + .name = "ec", + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "PA", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pa, + .postDisabled = POST_DISABLED, + }, + { + .name = "PB", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pb, + .postDisabled = POST_DISABLED, + }, + { + .name = "PC", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pc, + .postDisabled = POST_DISABLED, + }, + { + .name = "PD", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pd, + .postDisabled = POST_DISABLED, + }, + { + .name = "PE", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pe, + .postDisabled = POST_DISABLED, + }, + { + .name = "PF", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pf, + .postDisabled = POST_DISABLED, + }, + { + .name = "PG", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pg, + .postDisabled = POST_DISABLED, + }, + { + .name = "PH", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_ph, + .postDisabled = POST_DISABLED, + }, + { + .name = "PJ", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pj, + .postDisabled = POST_DISABLED, + }, + { + .name = "PK", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pk, + .postDisabled = POST_DISABLED, + }, + { + .name = "PL", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pl, + .postDisabled = POST_DISABLED, + }, + { + .name = "PM", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pm, + .postDisabled = POST_DISABLED, + }, + { + .name = "PN", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pn, + .postDisabled = POST_DISABLED, + }, + { + .name = "PP", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pn, + .postDisabled = POST_DISABLED, + }, + { + .name = "PQ", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pq, + .postDisabled = POST_DISABLED, + }, + {} }, }, - }, - { - .name = "sdr", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ioexpanderx1E", - .driver = &OC_GPIO, - .driver_cfg = &debug_sdr_ioexpanderx1E, - }, - {} + { + .name = "gbc", + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "ioexpanderx70", + .driver = &OC_GPIO, + .driver_cfg = &debug_gbc_ioexpanderx70, + }, + { + .name = "ioexpanderx71", + .driver = &OC_GPIO, + .driver_cfg = &debug_gbc_ioexpanderx71, + }, + {} }, }, - }, - { - .name = "fe", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ioexpanderx18", - .driver = &OC_GPIO, - .driver_cfg = &debug_sdr_ioexpanderx1E, - }, - { - .name = "ioexpanderx1C", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1C, - }, - { - .name = "ioexpanderx1B", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1B, - }, - { - .name = "ioexpanderx1A", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1A, - }, - { - .name = "ioexpanderx1D", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1D, - }, - {} + { + .name = "sdr", + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = + POST_DISABLED, + }, + { + .name = "ioexpanderx1E", + .driver = &OC_GPIO, + .driver_cfg = &debug_sdr_ioexpanderx1E, + }, + {} }, }, - }, - { - .name = "sync", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ioexpanderx71", - .driver = &OC_GPIO, - .driver_cfg = &debug_sync_ioexpanderx71, - }, - {} + { + .name = "fe", + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = + POST_DISABLED, + }, + { + .name = "ioexpanderx18", + .driver = &OC_GPIO, + .driver_cfg = &debug_sdr_ioexpanderx1E, + }, + { + .name = "ioexpanderx1C", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1C, + }, + { + .name = "ioexpanderx1B", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1B, + }, + { + .name = "ioexpanderx1A", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1A, + }, + { + .name = "ioexpanderx1D", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1D, + }, + {} }, }, - }, - { - .name = "ethernet", - .components = (Component[]) { - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "port0", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport0, - .postDisabled = POST_DISABLED, - }, - { - .name = "port1", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport1, - .postDisabled = POST_DISABLED, - }, - { - .name = "port2", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport2, - .postDisabled = POST_DISABLED, - }, - { - .name = "port3", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport3, - .postDisabled = POST_DISABLED, - }, - { - .name = "port4", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport4, - .postDisabled = POST_DISABLED, - }, - { - .name = "global1", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_global1, - .postDisabled = POST_DISABLED, - }, - { - .name = "global2", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_global2, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport0", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport0, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport1", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport1, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport2", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport2, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport3", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport3, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport4", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport4, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport5", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport5, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport6", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport6, - .postDisabled = POST_DISABLED, - }, - {} + { + .name = "sync", + .components = + (Component[]){ + { + .name = "comp_all", + .postDisabled = + POST_DISABLED, + }, + { + .name = "ioexpanderx71", + .driver = &OC_GPIO, + .driver_cfg = &debug_sync_ioexpanderx71, + }, + {} }, }, - }, - {} - }, + { + .name = "ethernet", + .components = + (Component[]){ { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "port0", + .driver = + &OC_MDIO, + .driver_cfg = &debug_mdio_phyport0, + .postDisabled = POST_DISABLED, + }, + { + .name = "port1", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport1, + .postDisabled = POST_DISABLED, + }, + { + .name = "port2", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport2, + .postDisabled = POST_DISABLED, + }, + { + .name = "port3", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport3, + .postDisabled = POST_DISABLED, + }, + { + .name = "port4", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport4, + .postDisabled = POST_DISABLED, + }, + { + .name = "global1", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_global1, + .postDisabled = POST_DISABLED, + }, + { + .name = "global2", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_global2, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport0", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport0, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport1", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport1, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport2", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport2, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport3", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport3, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport4", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport4, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport5", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport5, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport6", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport6, + .postDisabled = POST_DISABLED, + }, + {} }, + }, + {} }, }, {} }; diff --git a/firmware/ec/src/devices/eeprom.c b/firmware/ec/src/devices/eeprom.c index 2b477de504..d77cfe7e1a 100644 --- a/firmware/ec/src/devices/eeprom.c +++ b/firmware/ec/src/devices/eeprom.c @@ -50,13 +50,16 @@ static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle, *****************************************************************************/ bool eeprom_init(Eeprom_Cfg *cfg) { + if ((cfg == NULL) || (cfg->pin_wp == NULL)) { + return false; + } /* Configure our WP pin (if any) and set to be low (protected) by default */ if (cfg->pin_wp) { OcGpio_configure(cfg->pin_wp, OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH); } /* Test communication to the EEPROM */ - uint8_t test_byte; + uint16_t test_byte; if (eeprom_read(cfg, 0x00, &test_byte, sizeof(test_byte)) != RETURN_OK) { return false; } @@ -78,7 +81,10 @@ bool eeprom_init(Eeprom_Cfg *cfg) ReturnStatus eeprom_read(const Eeprom_Cfg *cfg, uint16_t address, void *buffer, size_t size) { - ReturnStatus status = RETURN_OK; + ReturnStatus status = RETURN_NOTOK; + if (cfg == NULL) { + return status; + } I2C_Handle eepromHandle = i2c_get_handle(cfg->i2c_dev.bus); if (!eepromHandle) { LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for " @@ -111,7 +117,10 @@ ReturnStatus eeprom_read(const Eeprom_Cfg *cfg, uint16_t address, void *buffer, ReturnStatus eeprom_write(const Eeprom_Cfg *cfg, uint16_t address, const void *buffer, size_t size) { - ReturnStatus status = RETURN_OK; + ReturnStatus status = RETURN_NOTOK; + if (cfg == NULL) { + return status; + } I2C_Handle eepromHandle = i2c_get_handle(cfg->i2c_dev.bus); if (!eepromHandle) { LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for " @@ -225,6 +234,9 @@ static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle, uint16_t slaveAddress, *****************************************************************************/ ReturnStatus eeprom_disable_write(Eeprom_Cfg *cfg) { + if ((cfg == NULL) || (cfg->pin_wp == NULL)) { + return RETURN_NOTOK; + } if (cfg->pin_wp) { OcGpio_write(cfg->pin_wp, WP_ASSERT); } @@ -245,6 +257,9 @@ ReturnStatus eeprom_disable_write(Eeprom_Cfg *cfg) *****************************************************************************/ ReturnStatus eeprom_enable_write(Eeprom_Cfg *cfg) { + if ((cfg == NULL) || (cfg->pin_wp == NULL)) { + return RETURN_NOTOK; + } if (cfg->pin_wp) { OcGpio_write(cfg->pin_wp, WP_DEASSERT); } @@ -294,6 +309,9 @@ ReturnStatus eeprom_read_oc_info(uint8_t *oc_serial) ReturnStatus eeprom_read_board_info(const Eeprom_Cfg *cfg, uint8_t *rom_info) { ReturnStatus status = RETURN_NOTOK; + if (cfg == NULL) { + return status; + } uint8_t info_size = 0x00; uint16_t eepromOffset = 0x0000; switch (cfg->ss) { @@ -343,6 +361,9 @@ ReturnStatus eeprom_read_device_info_record(const Eeprom_Cfg *cfg, uint8_t recordNo, char *device_info) { ReturnStatus status = RETURN_NOTOK; + if (cfg == NULL) { + return status; + } uint8_t info_size = OC_DEVICE_INFO_SIZE; uint16_t eepromOffset = 0x0000; switch (cfg->ss) { @@ -390,6 +411,9 @@ ReturnStatus eeprom_write_device_info_record(Eeprom_Cfg *cfg, uint8_t recordNo, char *device_info) { ReturnStatus status = RETURN_NOTOK; + if (cfg == NULL) { + return status; + } uint8_t info_size = OC_DEVICE_INFO_SIZE; uint16_t eepromOffset = 0x0000; switch (cfg->ss) { diff --git a/firmware/ec/test/Makefile b/firmware/ec/test/Makefile index 3694270be0..e11cb067a6 100644 --- a/firmware/ec/test/Makefile +++ b/firmware/ec/test/Makefile @@ -142,7 +142,7 @@ $(PATHB)Test_ltc4015$(TARGET_EXTENSION): $(STD_FILES) $(TEST_LTC4015_SRC) $(INC_ TEST_powerSource_SRC=$(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 $(PATHB)Test_powerSource$(TARGET_EXTENSION): $(STD_FILES) $(TEST_powerSource_SRC) $(INC_M) -TEST_EEPROM_SRC=$(OCWARE_ROOT)/src/devices/eeprom.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 +TEST_EEPROM_SRC=$(OCWARE_ROOT)/src/devices/eeprom.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 fake/fake_SX1509_register.c fake/fake_eeprom.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_GBC.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_SDR.c $(OCWARE_ROOT)/platform/oc-sdr/cfg/OC_CONNECT_FE.c $(PATHB)Test_eeprom$(TARGET_EXTENSION): $(STD_FILES) $(TEST_EEPROM_SRC) $(INC_M) TEST_LTC4275_SRC=$(OCWARE_ROOT)/src/devices/ltc4275.c $(OCWARE_ROOT)/src/devices/i2cbus.c fake/fake_GPIO.c fake/fake_I2C.c fake/fake_ThreadedISR.c stub/stub_GateMutex.c diff --git a/firmware/ec/test/fake/fake_I2C.c b/firmware/ec/test/fake/fake_I2C.c index 2a4aed0972..334bd70470 100644 --- a/firmware/ec/test/fake/fake_I2C.c +++ b/firmware/ec/test/fake/fake_I2C.c @@ -180,6 +180,7 @@ bool I2C_transfer(I2C_Handle handle, I2C_Transaction *transaction) return false; } const Fake_I2C_Dev *dev = &dev_tbl[transaction->slaveAddress]; + transaction->readCount = dev->addr_size * transaction->readCount; /* The write buffer must have at least the address in it */ if (transaction->writeCount < dev->addr_size) { diff --git a/firmware/ec/test/fake/fake_eeprom.c b/firmware/ec/test/fake/fake_eeprom.c new file mode 100644 index 0000000000..d7e9fc242a --- /dev/null +++ b/firmware/ec/test/fake/fake_eeprom.c @@ -0,0 +1,93 @@ +/** + * 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_eeprom.h" +#include + +uint16_t EEPROM_regs[] = { + [EEPROM_REG_DEF_INIT] = 0x0000, [EEPROM_REG_DEVICE_INFO_1] = 0x0000, + [EEPROM_REG_DEVICE_INFO_2] = 0x0000, [EEPROM_REG_DEVICE_INFO_3] = 0x0000, + [EEPROM_REG_DEVICE_INFO_4] = 0x0000, [EEPROM_REG_DEVICE_INFO_5] = 0x0000, + [EEPROM_REG_DEVICE_INFO_6] = 0x0000, [EEPROM_REG_DEVICE_INFO_7] = 0x0000, + [EEPROM_REG_DEVICE_INFO_8] = 0x0000, [EEPROM_REG_DEVICE_INFO_9] = 0x0000, + [EEPROM_REG_BOARD_INFO_1] = 0x0000, [EEPROM_REG_BOARD_INFO_2] = 0x0000, + [EEPROM_REG_BOARD_INFO_3] = 0x0000, [EEPROM_REG_BOARD_INFO_4] = 0x0000, + [EEPROM_REG_BOARD_INFO_5] = 0x0000, [EEPROM_REG_BOARD_INFO_6] = 0x0000, + [EEPROM_REG_BOARD_INFO_7] = 0x0000, [EEPROM_REG_BOARD_INFO_8] = 0x0000, + [EEPROM_REG_BOARD_INFO_9] = 0x0000, [EEPROM_REG_BOARD_INFO_10] = 0x0000, + [EEPROM_REG_SERIAL_INFO_1] = 0x0000, [EEPROM_REG_SERIAL_INFO_2] = 0x0000, + [EEPROM_REG_SERIAL_INFO_3] = 0x0000, [EEPROM_REG_SERIAL_INFO_4] = 0x0000, + [EEPROM_REG_SERIAL_INFO_5] = 0x0000, [EEPROM_REG_SERIAL_INFO_6] = 0x0000, + [EEPROM_REG_SERIAL_INFO_7] = 0x0000, [EEPROM_REG_SERIAL_INFO_8] = 0x0000, + [EEPROM_REG_SERIAL_INFO_9] = 0x0000, [EEPROM_REG_SERIAL_INFO_10] = 0x0000, + [EEPROM_REG_FFFF] = 0x0000, [EEPROM_REG_END] = 0x0000, +}; + +Eeprom_Cfg e_invalid_dev = { + .i2c_dev = + { + .bus = 6, + .slave_addr = 0xFF, + }, +}; + +Eeprom_Cfg e_invalid_bus = { + .i2c_dev = + { + .bus = 0xFF, + .slave_addr = 0x50, + }, +}; + +Eeprom_Cfg *e_invalid_cfg = NULL; + +bool Eeprom_GpioPins[] = { + [0x01] = OCGPIO_CFG_INPUT, /* Pin = 1 */ + [0x02] = OCGPIO_CFG_INPUT, /* Pin = 2 */ +}; + +uint32_t Eeprom_GpioConfig[] = { + [0x01] = OCGPIO_CFG_INPUT, + [0x02] = OCGPIO_CFG_INPUT, +}; + +OcGpio_Port gbc_io_0 = { + .fn_table = &GpioSX1509_fnTable, + .cfg = + &(SX1509_Cfg){ + .i2c_dev = { 6, 0x45 }, + .pin_irq = NULL, + }, + .object_data = &(SX1509_Obj){}, +}; + +OcGpio_Port fe_ch1_lna_io = { + .fn_table = &GpioSX1509_fnTable, + .cfg = + &(SX1509_Cfg){ + .i2c_dev = { 6, 0x45 }, + .pin_irq = NULL, + }, + .object_data = &(SX1509_Obj){}, +}; + +static OcGpio_Pin pin_inven_eeprom_wp = { &gbc_io_0, 2, 32 }; + +Eeprom_Cfg enable_dev = { + .i2c_dev = { 6, 0x45 }, + .pin_wp = &pin_inven_eeprom_wp, + .type = { .page_size = 64, .mem_size = (256 / 8) }, + .ss = 0, +}; + +Eeprom_Cfg e_invalid_ss_cfg = { + .i2c_dev = { 4, 0x50 }, + .pin_wp = &(OcGpio_Pin){ &gbc_io_0, 5 }, + .type = { .page_size = 64, .mem_size = (256 / 8) }, + .ss = 1, +}; diff --git a/firmware/ec/test/include/test_eeprom.h b/firmware/ec/test/include/test_eeprom.h new file mode 100644 index 0000000000..fbf143cc54 --- /dev/null +++ b/firmware/ec/test/include/test_eeprom.h @@ -0,0 +1,102 @@ +/** + * 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_EEPROM_1_H +#define _TEST_EEPROM_1_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/eeprom.h" +#include "include/test_sx1509.h" +#include +#include +#include +#include "unity.h" + +#define EEPROM_ASCII_VAL_SA 0x4153 +#define EEPROM_ASCII_VAL_17 0x3731 +#define EEPROM_ASCII_VAL_18 0x3831 +#define EEPROM_ASCII_VAL_LI 0x494c +#define EEPROM_ASCII_VAL_FE 0x4546 +#define EEPROM_ASCII_VAL_3G 0x4733 +#define EEPROM_ASCII_VAL_BC 0x4342 +#define EEPROM_ASCII_VAL_00 0x3030 +#define EEPROM_ASCII_VAL_41 0x3134 +#define EEPROM_ASCII_VAL_3S 0x5333 +#define EEPROM_ASCII_VAL_DR 0x5244 +#define EEPROM_ASCII_VAL_32 0x3233 +#define EEPROM_ASCII_VAL_3F 0x4633 +#define EEPROM_ASCII_VAL_E0 0x3045 +#define EEPROM_ASCII_VAL_05 0x0035 +#define EEPROM_ASCII_VAL_C0 0x3043 +#define EEPROM_ASCII_VAL_45 0x3534 +#define EEPROM_ASCII_VAL_0A 0x4130 +#define EEPROM_ASCII_VAL_10 0x3031 +#define EEPROM_ASCII_VAL_04 0x3430 +#define EEPROM_ASCII_VAL_11 0x3131 +#define EEPROM_BIG_WRITE_SIZE 0xCA +#define EEPROM_BOARD_SIZE 36 +#define EEPROM_DEFUALT_VALUE_NULL 0x0000 +#define EEPROM_DEVICE_SIZE 10 +#define EEPROM_DISABLE 0x00 +#define EEPROM_DISABLE_WRITE 0xFF +#define EEPROM_ENABLE 0x01 +#define EEPROM_ENABLE_WRITE 0xFB +#define EEPROM_FE_BOARD_INFO "SA1718LIFE3FE0005" +#define EEPROM_FE_DEVICE_INFO "SA1718LIFE3FE000580256" +#define EEPROM_GBC_BOARD_INFO "SA1718LIFE3GBC0041" +#define EEPROM_GBC_DEVICE_INFO "SA1718LIFE3GBC004180256" +#define EEPROM_SDR_BOARD_INFO "SA1718LIFE3SDR0032" +#define EEPROM_SDR_DEVICE_INFO "SA1718LIFE3SDR003280256" +#define EEPROM_SERIAL_INFO "SA1718C0450A100411" +#define EEPROM_READ_WRITE_VALUE 0x0505 +#define EEPROM_WRITE_SIZE 0x0A + +/* ======================== Constants & variables =========================== */ +/* Enums are defined as per the code requirment */ +typedef enum EEPROMRegs { + EEPROM_REG_DEF_INIT = 0x000, + EEPROM_REG_DEVICE_INFO_1 = 0x0A01, + EEPROM_REG_DEVICE_INFO_2, + EEPROM_REG_DEVICE_INFO_3, + EEPROM_REG_DEVICE_INFO_4, + EEPROM_REG_DEVICE_INFO_5, + EEPROM_REG_DEVICE_INFO_6, + EEPROM_REG_DEVICE_INFO_7, + EEPROM_REG_DEVICE_INFO_8, + EEPROM_REG_DEVICE_INFO_9, + EEPROM_REG_BOARD_INFO_1 = 0xAC01, + EEPROM_REG_BOARD_INFO_2, + EEPROM_REG_BOARD_INFO_3, + EEPROM_REG_BOARD_INFO_4, + EEPROM_REG_BOARD_INFO_5, + EEPROM_REG_BOARD_INFO_6, + EEPROM_REG_BOARD_INFO_7, + EEPROM_REG_BOARD_INFO_8, + EEPROM_REG_BOARD_INFO_9, + EEPROM_REG_BOARD_INFO_10, + EEPROM_REG_SERIAL_INFO_1 = 0xC601, + EEPROM_REG_SERIAL_INFO_2, + EEPROM_REG_SERIAL_INFO_3, + EEPROM_REG_SERIAL_INFO_4, + EEPROM_REG_SERIAL_INFO_5, + EEPROM_REG_SERIAL_INFO_6, + EEPROM_REG_SERIAL_INFO_7, + EEPROM_REG_SERIAL_INFO_8, + EEPROM_REG_SERIAL_INFO_9, + EEPROM_REG_SERIAL_INFO_10, + EEPROM_REG_FFFF = 0xFFFF, + EEPROM_REG_END = 0x20000, +} EEPROMRegs; +#endif diff --git a/firmware/ec/test/suites/Doc/TestCaseList.xlsx b/firmware/ec/test/suites/Doc/TestCaseList.xlsx index f6cd0442f4149f3c5dcc67e8512d5149409972d8..13b9edd318a06889e57cadeeb37330349c361825 100644 GIT binary patch delta 15014 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⪙YUtFjx>E)z#82V&FH{`oJ`YiEe)E8r-W+s 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

cT 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 delta 14884 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 -#include -#include "fake/fake_GPIO.h" -#include "fake/fake_I2C.h" -#include "fake/fake_ThreadedISR.h" -#include "helpers/attribute.h" -#include "helpers/memory.h" -#include "drivers/OcGpio.h" -#include "helpers/array.h" -#include - -/* ============================= Fake Functions ============================= */ - -#include -unsigned int s_task_sleep_ticks; -xdc_Void ti_sysbios_knl_Task_sleep__E(xdc_UInt32 nticks) -{ - s_task_sleep_ticks += nticks; -} - -/* ======================== Constants & variables =========================== */ - -static OcGpio_Port s_fake_io_port = { - .fn_table = &FakeGpio_fnTable, - .object_data = &(FakeGpio_Obj){}, -}; - -static const I2C_Dev I2C_DEV = { - .bus = 6, - .slave_addr = 0x50, -}; -static const I2C_Dev I2C_DEV_1 = { - .bus = 6, - .slave_addr = 0x51, -}; -static Eeprom_Cfg s_dev = { - .i2c_dev = - { - .bus = 6, - .slave_addr = 0x50, - }, -}; - -static uint16_t EEPROM_regs[] = { - [0x00] = 0x00, /* Init */ - [0xC601] = 0x00, /* SERIAL INFO */ - [0xAC01] = 0x00, /* BOARD INFO */ - [0x0A01] = 0x00, /* DEVICE INFO */ - [0x0A02] = 0x00, /* DEVICE INFO */ - -}; - -static uint8_t SX1509_regs[] = { - [0x00] = 0x00, /* Input buffer disable register B */ - [0x01] = 0x00, /* Input buffer disable register A */ - [0x02] = 0x00, /* Output buffer long slew register B */ - [0x03] = 0x00, /* Output buffer long slew register A */ - [0x04] = 0x00, /* Output buffer low drive register B */ - [0x05] = 0x00, /* Output buffer low drive register A */ - [0x06] = 0x00, /* Pull Up register B */ - [0x07] = 0x00, /* Pull Up register A */ - [0x08] = 0x00, /* Pull Down register B */ - [0x09] = 0x00, /* Pull Down register A */ - [0x0A] = 0x00, /* Open drain register B */ - [0x0B] = 0x00, /* Open drain register A */ - [0x0C] = 0x00, /* Polarity register B */ - [0x0D] = 0x00, /* Polarity register A */ - [0x0E] = 0x00, /* Direction register B */ - [0x0F] = 0x00, /* Direction register A */ - [0x10] = 0x00, /* Data register B */ - [0x11] = 0x00, /* Data register A */ - [0x12] = 0x00, /* Interrupt mask register B */ - [0x13] = 0x00, /* Interrupt mask register A */ - [0x14] = 0x00, /* Sense High register B */ - [0x15] = 0x00, /* Sense Low register B */ - [0x16] = 0x00, /* Sense High register A */ - [0x17] = 0x00, /* Sense Low register A */ - [0x18] = 0x00, /* Interrupt source register B */ - [0x19] = 0x00, /* Interrupt source register A */ - [0x1A] = 0x00, /* Event status register B */ - [0x1B] = 0x00, /* Event status register A */ - [0x1C] = 0x00, /* Level shifter register 1 */ - [0x1D] = 0x00, /* Level shifter register 2 */ - [0x1E] = 0x00, /* Clock management register */ - [0x1F] = 0x00, /* Miscellaneous device settings register */ - [0x20] = 0x00, /* LED driver enable register B */ - [0x21] = 0x00, /* LED driver enable register A */ - [0x22] = 0x00, /* Debounce configuration register */ - [0x23] = 0x00, /* Debounce enable register B */ - [0x24] = 0x00, /* Debounce enable register A */ - [0x25] = 0x00, /* Key scan configuration register 1 */ - [0x26] = 0x00, /* Key scan configuration register 2 */ - [0x27] = 0x00, /* Key value (column) 1 */ - [0x28] = 0x00, /* Key value (row) 2 */ - [0x29] = 0x00, /* ON time register I/O[0] */ - [0x2A] = 0x00, /* ON intensity register I/O[0] */ - [0x2B] = 0x00, /* OFF time/intensity register I/O[0] */ - [0x2C] = 0x00, /* ON time register I/O[1] */ - [0x2D] = 0x00, /* ON intensity register I/O[1] */ - [0x2E] = 0x00, /* OFF time/intensity register I/O[1] */ - [0x2F] = 0x00, /* ON time register I/O[2] */ - [0x30] = 0x00, /* ON intensity register I/O[2] */ - [0x31] = 0x00, /* OFF time/intensity register I/O[2] */ - [0x32] = 0x00, /* ON time register I/O[3] */ - [0x33] = 0x00, /* ON intensity register I/O[3] */ - [0x34] = 0x00, /* OFF time/intensity register I/O[3] */ - [0x35] = 0x00, /* ON time register I/O[4] */ - [0x36] = 0x00, /* ON intensity register I/O[4] */ - [0x37] = 0x00, /* OFF time/intensity register I/O[4] */ - [0x38] = 0x00, /* Fade in register I/O[4] */ - [0x39] = 0x00, /* Fade out register I/O[4] */ - [0x3A] = 0x00, /* ON time register I/O[5] */ - [0x3B] = 0x00, /* ON intensity register I/O[5] */ - [0x3C] = 0x00, /* OFF time/intensity register I/O[5] */ - [0x3D] = 0x00, /* Fade in register I/O[5] */ - [0x3E] = 0x00, /* Fade out register I/O[5] */ - [0x3F] = 0x00, /* ON time register I/O[6] */ - [0x40] = 0x00, /* ON intensity register I/O[6] */ - [0x41] = 0x00, /* OFF time/intensity register I/O[6] */ - [0x42] = 0x00, /* Fade in register I/O[6] */ - [0x43] = 0x00, /* Fade out register I/O[6] */ - [0x44] = 0x00, /* ON time register I/O[6] */ - [0x45] = 0x00, /* ON intensity register I/O[7] */ - [0x46] = 0x00, /* OFF time/intensity register I/O[7] */ - [0x47] = 0x00, /* Fade in register I/O[7] */ - [0x48] = 0x00, /* Fade out register I/O[7] */ - [0x49] = 0x00, /* ON time register I/O[8] */ - [0x4A] = 0x00, /* ON intensity register I/O[8] */ - [0x4B] = 0x00, /* OFF time/intensity register I/O[8] */ - [0x4C] = 0x00, /* ON time register I/O[9] */ - [0x4D] = 0x00, /* ON intensity register I/O[9] */ - [0x4E] = 0x00, /* OFF time/intensity register I/O[9] */ - [0x4F] = 0x00, /* ON time register I/O[10] */ - [0x50] = 0x00, /* ON intensity register I/O[10] */ - [0x51] = 0x00, /* OFF time/intensity register I/O[10] */ - [0x52] = 0x00, /* ON time register I/O[11] */ - [0x53] = 0x00, /* ON intensity register I/O[11] */ - [0x54] = 0x00, /* OFF time/intensity register I/O[11] */ - [0x55] = 0x00, /* ON time register I/O[12] */ - [0x56] = 0x00, /* ON intensity register I/O[12] */ - [0x57] = 0x00, /* OFF time/intensity register I/O[12] */ - [0x58] = 0x00, /* Fade in register I/O[12] */ - [0x59] = 0x00, /* Fade out register I/O[12] */ - [0x5A] = 0x00, /* ON time register I/O[13] */ - [0x5B] = 0x00, /* ON intensity register I/O[13] */ - [0x5C] = 0x00, /* OFF time/intensity register I/O[13] */ - [0x5D] = 0x00, /* Fade in register I/O[13] */ - [0x5E] = 0x00, /* Fade out register I/O[13] */ - [0x5F] = 0x00, /* ON time register I/O[14] */ - [0x60] = 0x00, /* ON intensity register I/O[14] */ - [0x61] = 0x00, /* OFF time/intensity register I/O[14] */ - [0x62] = 0x00, /* Fade in register I/O[14] */ - [0x63] = 0x00, /* Fade out register I/O[14] */ - [0x64] = 0x00, /* ON time register I/O[15] */ - [0x65] = 0x00, /* ON intensity register I/O[15] */ - [0x66] = 0x00, /* OFF time/intensity register I/O[15] */ - [0x67] = 0x00, /* Fade in register I/O[115] */ - [0x68] = 0x00, /* Fade out register I/O[15] */ - [0x69] = 0x00, /* */ - [0x6A] = 0x00, /* */ - [0x7D] = 0x00, /* */ - [0x7E] = 0x00, /* */ - [0x7F] = 0x00, /* */ -}; - -static bool Eeprom_GpioPins[] = { - [0x01] = 0x1, /* Pin = 1 */ - [0x02] = 0x1, /* Pin = 2 */ -}; - -static uint32_t Eeprom_GpioConfig[] = { - [0x01] = OCGPIO_CFG_INPUT, - [0x02] = OCGPIO_CFG_INPUT, -}; +#include "include/test_eeprom.h" +extern bool Eeprom_GpioPins[0x02]; extern const OcGpio_FnTable GpioSX1509_fnTable; - -OcGpio_Port s_fake_io_exp = { - .fn_table = &GpioSX1509_fnTable, - .cfg = - &(SX1509_Cfg){ - .i2c_dev = { 6, 0x45 }, - .pin_irq = NULL, - }, - .object_data = &(SX1509_Obj){}, -}; - -OcGpio_Pin pin_inven_eeprom_wp = { &s_fake_io_exp, 2, 32 }; - -Eeprom_Cfg eeprom_gbc_sid = { - .i2c_dev = { 6, 0x51 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, -}; - -Eeprom_Cfg eeprom_gbc_inv = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, -}; - -Eeprom_Cfg eeprom_sdr_inv = { - .i2c_dev = { 3, 0x50 }, - .pin_wp = NULL, - .type = { 0, 0 }, - .ss = 0, -}; - -Eeprom_Cfg eeprom_fe_inv = { - .i2c_dev = { 4, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 8, -}; +extern Eeprom_Cfg e_invalid_bus; +extern Eeprom_Cfg *e_invalid_cfg; +extern Eeprom_Cfg e_invalid_dev; +extern Eeprom_Cfg e_invalid_ss_cfg; +extern Eeprom_Cfg enable_dev; +extern Eeprom_Cfg eeprom_fe_inv; +extern Eeprom_Cfg eeprom_gbc_inv; +extern Eeprom_Cfg eeprom_gbc_sid; +extern Eeprom_Cfg eeprom_sdr_inv; +extern OcGpio_Port fe_ch1_lna_io; +extern OcGpio_Port gbc_io_0; +extern uint8_t SX1509_regs[SX1509_REG_TEST_2]; +extern uint16_t EEPROM_regs[EEPROM_REG_END]; +extern uint32_t Eeprom_GpioConfig[0x02]; /* ============================= Boilerplate ================================ */ void suite_setUp(void) @@ -233,10 +32,20 @@ void suite_setUp(void) FakeGpio_registerDevSimple(Eeprom_GpioPins, Eeprom_GpioConfig); - fake_I2C_registerDevSimple(I2C_DEV.bus, I2C_DEV.slave_addr, EEPROM_regs, + fake_I2C_registerDevSimple(eeprom_gbc_sid.i2c_dev.bus, + eeprom_gbc_sid.i2c_dev.slave_addr, EEPROM_regs, sizeof(EEPROM_regs), sizeof(EEPROM_regs[0]), sizeof(uint16_t), FAKE_I2C_DEV_LITTLE_ENDIAN); - fake_I2C_registerDevSimple(I2C_DEV_1.bus, I2C_DEV_1.slave_addr, EEPROM_regs, + fake_I2C_registerDevSimple(eeprom_gbc_inv.i2c_dev.bus, + eeprom_gbc_inv.i2c_dev.slave_addr, EEPROM_regs, + sizeof(EEPROM_regs), sizeof(EEPROM_regs[0]), + sizeof(uint16_t), FAKE_I2C_DEV_LITTLE_ENDIAN); + fake_I2C_registerDevSimple(eeprom_sdr_inv.i2c_dev.bus, + eeprom_sdr_inv.i2c_dev.slave_addr, EEPROM_regs, + sizeof(EEPROM_regs), sizeof(EEPROM_regs[0]), + sizeof(uint16_t), FAKE_I2C_DEV_LITTLE_ENDIAN); + fake_I2C_registerDevSimple(eeprom_fe_inv.i2c_dev.bus, + eeprom_fe_inv.i2c_dev.slave_addr, EEPROM_regs, sizeof(EEPROM_regs), sizeof(EEPROM_regs[0]), sizeof(uint16_t), FAKE_I2C_DEV_LITTLE_ENDIAN); fake_I2C_registerDevSimple(6, 0x45, SX1509_regs, sizeof(SX1509_regs), @@ -248,9 +57,7 @@ void setUp(void) { memset(EEPROM_regs, 0, sizeof(EEPROM_regs)); - OcGpio_init(&s_fake_io_port); - - OcGpio_init(&s_fake_io_exp); + OcGpio_init(&gbc_io_0); } void tearDown(void) @@ -265,209 +72,226 @@ void suite_tearDown(void) /* ================================ Tests =================================== */ void test_eeprom_init(void) { - Eeprom_Cfg e_dev = { - .i2c_dev = s_dev.i2c_dev, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 2 }, - }; - - EEPROM_regs[0x00] = 0x0505; + EEPROM_regs[EEPROM_REG_DEF_INIT] = EEPROM_READ_WRITE_VALUE; Eeprom_GpioConfig[0x02] = OCGPIO_CFG_OUT_HIGH; - eeprom_init(&e_dev); - TEST_ASSERT_EQUAL(1, eeprom_init(&e_dev)); + TEST_ASSERT_EQUAL(true, eeprom_init(&eeprom_gbc_sid)); TEST_ASSERT_EQUAL(OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH, Eeprom_GpioConfig[0x02]); + + /* Checking for NULL cfg */ + TEST_ASSERT_EQUAL(false, eeprom_init(e_invalid_cfg)); + + /* Checking with invalid slave address */ + TEST_ASSERT_EQUAL(false, eeprom_init(&e_invalid_dev)); + + /* Checking with invalid bus address */ + TEST_ASSERT_EQUAL(false, eeprom_init(&e_invalid_bus)); } void test_eeprom_read(void) { uint16_t buffer; - EEPROM_regs[0xC601] = 0x0505; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_READ_WRITE_VALUE; TEST_ASSERT_EQUAL(RETURN_OK, - eeprom_read(&s_dev, 0x01C6, &buffer, sizeof(buffer))); - TEST_ASSERT_EQUAL_HEX8(0x0505, buffer); + eeprom_read(&eeprom_gbc_sid, OC_CONNECT1_SERIAL_INFO, + &buffer, sizeof(buffer))); + TEST_ASSERT_EQUAL_HEX(EEPROM_READ_WRITE_VALUE, buffer); + + /* Checking for NULL cfg */ + buffer = EEPROM_DEFUALT_VALUE_NULL; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read(e_invalid_cfg, OC_CONNECT1_SERIAL_INFO, + &buffer, sizeof(buffer))); + + /* Checking with invalid slave address */ + buffer = EEPROM_DEFUALT_VALUE_NULL; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read(&e_invalid_dev, OC_CONNECT1_SERIAL_INFO, + &buffer, sizeof(buffer))); + + /* Checking with invalid bus address */ + buffer = EEPROM_DEFUALT_VALUE_NULL; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read(&e_invalid_bus, OC_CONNECT1_SERIAL_INFO, + &buffer, sizeof(buffer))); + + /* Checking with 0xFFFF register */ + buffer = EEPROM_DEFUALT_VALUE_NULL; + EEPROM_regs[EEPROM_REG_FFFF] = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read(&eeprom_gbc_sid, EEPROM_REG_FFFF, + &buffer, sizeof(buffer))); + TEST_ASSERT_EQUAL_HEX16(EEPROM_READ_WRITE_VALUE, buffer); } void test_eeprom_write(void) { - Eeprom_Cfg p_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = NULL, - .type = { .page_size = 64, .mem_size = (256 / 8) }, - .ss = 0, - }; + uint16_t buffer = EEPROM_READ_WRITE_VALUE; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_DEFUALT_VALUE_NULL; - uint16_t buffer = 0x0505; - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_write(&p_dev, 0x01C6, &buffer, 0x0A)); - TEST_ASSERT_EQUAL_HEX8(0x0505, EEPROM_regs[0xC601]); + TEST_ASSERT_EQUAL(RETURN_OK, + eeprom_write(&eeprom_gbc_inv, OC_CONNECT1_SERIAL_INFO, + &buffer, EEPROM_WRITE_SIZE)); + TEST_ASSERT_EQUAL_HEX16(EEPROM_READ_WRITE_VALUE, + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1]); - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_write(&p_dev, 0x01C6, &buffer, 0xCA)); - TEST_ASSERT_EQUAL_HEX8(0x05, EEPROM_regs[0xC601]); + /* Test with size > page_size */ + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_DEFUALT_VALUE_NULL; + TEST_ASSERT_EQUAL(RETURN_OK, + eeprom_write(&eeprom_gbc_inv, OC_CONNECT1_SERIAL_INFO, + &buffer, EEPROM_BIG_WRITE_SIZE)); + TEST_ASSERT_EQUAL_HEX16(EEPROM_READ_WRITE_VALUE, + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1]); + + /* Checking for NULL cfg */ + buffer = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_write(e_invalid_cfg, OC_CONNECT1_SERIAL_INFO, + &buffer, EEPROM_WRITE_SIZE)); + + /* Checking with invalid slave address */ + buffer = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_write(&e_invalid_dev, OC_CONNECT1_SERIAL_INFO, + &buffer, EEPROM_WRITE_SIZE)); + + /* Checking with invalid bus address */ + buffer = EEPROM_READ_WRITE_VALUE; + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_write(&e_invalid_bus, OC_CONNECT1_SERIAL_INFO, + &buffer, EEPROM_WRITE_SIZE)); } void test_eeprom_disable_write(void) { - SX1509_regs[0x10] = 0x01; - SX1509_regs[0x11] = 0x01; + SX1509_regs[SX1509_REG_DATA_B] = EEPROM_ENABLE; + SX1509_regs[SX1509_REG_DATA_A] = EEPROM_ENABLE; - Eeprom_Cfg i_dev = { - .i2c_dev = { 6, 0x45 }, - .pin_wp = &pin_inven_eeprom_wp, - .type = { 0, 0 }, - .ss = 0, - }; + TEST_ASSERT_EQUAL(RETURN_OK, eeprom_disable_write(&enable_dev)); + TEST_ASSERT_EQUAL(EEPROM_DISABLE_WRITE, SX1509_regs[SX1509_REG_DATA_A]); - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_disable_write(&i_dev)); - TEST_ASSERT_EQUAL(0xFF, SX1509_regs[0x11]); + /* Checking for NULL cfg */ + TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_disable_write(e_invalid_cfg)); + + /* Checking with invalid slave address */ + TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_disable_write(&e_invalid_dev)); + + /* Checking with invalid bus address */ + TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_disable_write(&e_invalid_bus)); } void test_eeprom_enable_write(void) { - SX1509_regs[0x10] = 0x00; - SX1509_regs[0x11] = 0x00; + SX1509_regs[SX1509_REG_DATA_B] = EEPROM_DISABLE; + SX1509_regs[SX1509_REG_DATA_A] = EEPROM_DISABLE; - Eeprom_Cfg i_dev = { - .i2c_dev = { 6, 0x45 }, - .pin_wp = &pin_inven_eeprom_wp, - .type = { 0, 0 }, - .ss = 0, - }; - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_enable_write(&i_dev)); - TEST_ASSERT_EQUAL(0xFB, SX1509_regs[0x11]); + TEST_ASSERT_EQUAL(RETURN_OK, eeprom_enable_write(&enable_dev)); + TEST_ASSERT_EQUAL(EEPROM_ENABLE_WRITE, SX1509_regs[SX1509_REG_DATA_A]); + + /* Checking for NULL cfg */ + TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_enable_write(e_invalid_cfg)); + + /* Checking with invalid slave address */ + TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_enable_write(&e_invalid_dev)); + + /* Checking with invalid bus address */ + TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_enable_write(&e_invalid_bus)); } - +/* Values are taken as per GBCV1 test board */ void test_eeprom_read_board_info(void) { - uint8_t rominfo = 0xff; - EEPROM_regs[0xAC01] = 0x05; - Eeprom_Cfg b1_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, - }; - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_board_info(&b1_dev, &rominfo)); - TEST_ASSERT_EQUAL_HEX8(0x05, rominfo); + uint8_t *buffer = (uint8_t *)malloc(EEPROM_BOARD_SIZE); + EEPROM_regs[EEPROM_REG_BOARD_INFO_1] = EEPROM_ASCII_VAL_SA; + EEPROM_regs[EEPROM_REG_BOARD_INFO_2] = EEPROM_ASCII_VAL_17; + EEPROM_regs[EEPROM_REG_BOARD_INFO_3] = EEPROM_ASCII_VAL_18; + EEPROM_regs[EEPROM_REG_BOARD_INFO_4] = EEPROM_ASCII_VAL_LI; + EEPROM_regs[EEPROM_REG_BOARD_INFO_5] = EEPROM_ASCII_VAL_FE; + EEPROM_regs[EEPROM_REG_BOARD_INFO_6] = EEPROM_ASCII_VAL_3G; + EEPROM_regs[EEPROM_REG_BOARD_INFO_7] = EEPROM_ASCII_VAL_BC; + EEPROM_regs[EEPROM_REG_BOARD_INFO_8] = EEPROM_ASCII_VAL_00; + EEPROM_regs[EEPROM_REG_BOARD_INFO_9] = EEPROM_ASCII_VAL_41; + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); - Eeprom_Cfg b2_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 7, - }; - EEPROM_regs[0xAC01] = 0x06; - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_board_info(&b2_dev, &rominfo)); - TEST_ASSERT_EQUAL_HEX8(0x06, rominfo); + TEST_ASSERT_EQUAL(RETURN_OK, + eeprom_read_board_info(&eeprom_gbc_inv, buffer)); + TEST_ASSERT_EQUAL_STRING(EEPROM_GBC_BOARD_INFO, buffer); - Eeprom_Cfg b3_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 8, - }; - EEPROM_regs[0xAC01] = 0x07; - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_board_info(&b3_dev, &rominfo)); - TEST_ASSERT_EQUAL_HEX8(0x07, rominfo); + EEPROM_regs[EEPROM_REG_BOARD_INFO_1] = EEPROM_ASCII_VAL_SA; + EEPROM_regs[EEPROM_REG_BOARD_INFO_2] = EEPROM_ASCII_VAL_17; + EEPROM_regs[EEPROM_REG_BOARD_INFO_3] = EEPROM_ASCII_VAL_18; + EEPROM_regs[EEPROM_REG_BOARD_INFO_4] = EEPROM_ASCII_VAL_LI; + EEPROM_regs[EEPROM_REG_BOARD_INFO_5] = EEPROM_ASCII_VAL_FE; + EEPROM_regs[EEPROM_REG_BOARD_INFO_6] = EEPROM_ASCII_VAL_3S; + EEPROM_regs[EEPROM_REG_BOARD_INFO_7] = EEPROM_ASCII_VAL_DR; + EEPROM_regs[EEPROM_REG_BOARD_INFO_8] = EEPROM_ASCII_VAL_00; + EEPROM_regs[EEPROM_REG_BOARD_INFO_9] = EEPROM_ASCII_VAL_32; + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_OK, + eeprom_read_board_info(&eeprom_sdr_inv, buffer)); + TEST_ASSERT_EQUAL_STRING(EEPROM_SDR_BOARD_INFO, buffer); + + EEPROM_regs[EEPROM_REG_BOARD_INFO_1] = EEPROM_ASCII_VAL_SA; + EEPROM_regs[EEPROM_REG_BOARD_INFO_2] = EEPROM_ASCII_VAL_17; + EEPROM_regs[EEPROM_REG_BOARD_INFO_3] = EEPROM_ASCII_VAL_18; + EEPROM_regs[EEPROM_REG_BOARD_INFO_4] = EEPROM_ASCII_VAL_LI; + EEPROM_regs[EEPROM_REG_BOARD_INFO_5] = EEPROM_ASCII_VAL_FE; + EEPROM_regs[EEPROM_REG_BOARD_INFO_6] = EEPROM_ASCII_VAL_3F; + EEPROM_regs[EEPROM_REG_BOARD_INFO_7] = EEPROM_ASCII_VAL_E0; + EEPROM_regs[EEPROM_REG_BOARD_INFO_8] = EEPROM_ASCII_VAL_00; + EEPROM_regs[EEPROM_REG_BOARD_INFO_9] = EEPROM_ASCII_VAL_05; + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_OK, + eeprom_read_board_info(&eeprom_fe_inv, buffer)); + TEST_ASSERT_EQUAL_STRING(EEPROM_FE_BOARD_INFO, buffer); + + /* Checking for invalid subsystem cfg */ + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read_board_info(&e_invalid_ss_cfg, buffer)); + TEST_ASSERT_EQUAL_STRING("\0", buffer); + + /* Checking for NULL cfg */ + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read_board_info(e_invalid_cfg, buffer)); + TEST_ASSERT_EQUAL_STRING("\0", buffer); + + /* Checking with invalid slave address */ + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read_board_info(&e_invalid_dev, buffer)); + TEST_ASSERT_EQUAL_STRING("\0", buffer); + + /* Checking with invalid bus address */ + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_NOTOK, + eeprom_read_board_info(&e_invalid_bus, buffer)); + TEST_ASSERT_EQUAL_STRING("\0", buffer); } + void test_eeprom_read_oc_info(void) { - uint8_t ocserial = 0x00; - - EEPROM_regs[0xC601] = 0x05; - - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_oc_info(&ocserial)); - - TEST_ASSERT_EQUAL(0x05, ocserial); + uint8_t *buffer = (uint8_t *)malloc(EEPROM_BOARD_SIZE); + EEPROM_regs[EEPROM_REG_SERIAL_INFO_1] = EEPROM_ASCII_VAL_SA; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_2] = EEPROM_ASCII_VAL_17; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_3] = EEPROM_ASCII_VAL_18; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_4] = EEPROM_ASCII_VAL_C0; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_5] = EEPROM_ASCII_VAL_45; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_6] = EEPROM_ASCII_VAL_0A; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_7] = EEPROM_ASCII_VAL_10; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_8] = EEPROM_ASCII_VAL_04; + EEPROM_regs[EEPROM_REG_SERIAL_INFO_9] = EEPROM_ASCII_VAL_11; + memset(buffer, EEPROM_DEFUALT_VALUE_NULL, EEPROM_BOARD_SIZE); + TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_oc_info(buffer)); + TEST_ASSERT_EQUAL_STRING(EEPROM_SERIAL_INFO, buffer); } +/* Function eeprom_write_device_info_record and eeprom_read_device_info_record + * are only stack holder in the code. No Test case are required from them as of + * now */ -void test_eeprom_read_device_info_record(void) -{ - uint8_t recordno = 1; - EEPROM_regs[0x0A01] = 0x4153; - char *deviceinfo = (char *)malloc(10); - - Eeprom_Cfg c1_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, - }; - memset(deviceinfo, 0, 10); - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_device_info_record( - &c1_dev, recordno, deviceinfo)); - TEST_ASSERT_EQUAL_STRING("SA", deviceinfo); - - uint8_t recordno1 = 1; - EEPROM_regs[0x0A01] = 0x4153; - char *deviceinfo1 = (char *)malloc(10); - - Eeprom_Cfg c2_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 7, - }; - memset(deviceinfo1, 0, 10); - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_device_info_record( - &c2_dev, recordno1, deviceinfo1)); - TEST_ASSERT_EQUAL_STRING("SA", deviceinfo1); - - uint8_t recordno2 = 1; - EEPROM_regs[0x0A01] = 0x4153; - char *deviceinfo2 = (char *)malloc(10); - - Eeprom_Cfg c3_dev = { - .i2c_dev = { 6, 0x50 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 8, - }; - memset(deviceinfo2, 0, 10); - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_read_device_info_record( - &c3_dev, recordno2, deviceinfo2)); - TEST_ASSERT_EQUAL_STRING("SA", deviceinfo2); -} - -void test_eeprom_write_device_info_record(void) -{ - uint8_t recordno = 1; - char *deviceinfo = (char *)malloc(10); - memset(deviceinfo, 0, 10); - - strcpy(deviceinfo, "SA"); - - Eeprom_Cfg d1_dev = { - .i2c_dev = { 6, 0x51 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, - }; - - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_write_device_info_record( - &d1_dev, recordno, deviceinfo)); - TEST_ASSERT_EQUAL(0x4153, EEPROM_regs[0x0A01]); - strcpy(deviceinfo, "SB"); - - Eeprom_Cfg d2_dev = { - .i2c_dev = { 6, 0x51 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, - }; - - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_write_device_info_record( - &d2_dev, recordno, deviceinfo)); - TEST_ASSERT_EQUAL(0x4253, EEPROM_regs[0x0A01]); - - strcpy(deviceinfo, "SC"); - Eeprom_Cfg d3_dev = { - .i2c_dev = { 6, 0x51 }, - .pin_wp = &(OcGpio_Pin){ &s_fake_io_port, 5 }, - .type = { 0, 0 }, - .ss = 0, - }; - - TEST_ASSERT_EQUAL(RETURN_OK, eeprom_write_device_info_record( - &d3_dev, recordno, deviceinfo)); - TEST_ASSERT_EQUAL(0x4353, EEPROM_regs[0x0A01]); -} +/* No test case are created for function i2c_eeprom_write and i2c_eeprom_read as + * tthey are static function, Can not access them outside the file. Also they + * are already covered as part of eeprom_reab and eeprom_write.*/ From 137bcb8d415eb743cc6d284b285d9e9062ee3f0d Mon Sep 17 00:00:00 2001 From: swateeshrivastava Date: Thu, 13 Dec 2018 11:32:22 +0530 Subject: [PATCH 2/4] Updated comment --- firmware/ec/test/suites/Test_eeprom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/ec/test/suites/Test_eeprom.c b/firmware/ec/test/suites/Test_eeprom.c index 4da9a1e094..f7a934f51b 100644 --- a/firmware/ec/test/suites/Test_eeprom.c +++ b/firmware/ec/test/suites/Test_eeprom.c @@ -293,5 +293,5 @@ void test_eeprom_read_oc_info(void) * now */ /* No test case are created for function i2c_eeprom_write and i2c_eeprom_read as - * tthey are static function, Can not access them outside the file. Also they + * they are static function, Can not access them outside the file. Also they * are already covered as part of eeprom_reab and eeprom_write.*/ From 1b9f6ba8d5bce0445ff3e228e0d255ee14325d4c Mon Sep 17 00:00:00 2001 From: swateeshrivastava Date: Wed, 19 Dec 2018 12:24:45 +0530 Subject: [PATCH 3/4] Updated as per review comment --- .../ec/platform/oc-sdr/schema/auto_schema.c | 1761 +++++++++-------- firmware/ec/src/devices/eeprom.c | 6 +- firmware/ec/test/fake/fake_eeprom.c | 4 +- firmware/ec/test/include/test_eeprom.h | 2 + firmware/ec/test/suites/Test_eeprom.c | 12 - 5 files changed, 895 insertions(+), 890 deletions(-) diff --git a/firmware/ec/platform/oc-sdr/schema/auto_schema.c b/firmware/ec/platform/oc-sdr/schema/auto_schema.c index 9c84710014..ad752bdc2e 100644 --- a/firmware/ec/platform/oc-sdr/schema/auto_schema.c +++ b/firmware/ec/platform/oc-sdr/schema/auto_schema.c @@ -1,16 +1,16 @@ /** - * Copyright (c) 2018-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. - * - * WARNING: Do not modify this file by hand. It is auto - * generated from the json schema definition. - * Refer to sdtester.py - */ +* Copyright (c) 2018-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. +* +* WARNING: Do not modify this file by hand. It is auto +* generated from the json schema definition. +* Refer to sdtester.py +*/ #include "auto_schema.h" @@ -161,930 +161,945 @@ SCHEMA_IMPORT bool SYS_cmdReset(void *, void *); SCHEMA_IMPORT bool sys_post_init(void *, void *); SCHEMA_IMPORT bool TestMod_cmdReset(void *, void *); + const Component sys_schema[] = { { .name = "system", .driver_cfg = &gbc_spi_flash_memory, - .ssHookSet = - &(SSHookSet){ - .preInitFxn = NULL, - .postInitFxn = (ssHook_Cb)sys_post_init, - }, - .components = - (Component[]){ - { - .name = "comp_all", - .driver = &SYSTEMDRV, - .driver_cfg = &gbc_gpp_gpioCfg, - .components = - (Component[]){ { - .name = "eeprom_sid", - .driver = &CAT24C04_gbc_sid, - .driver_cfg = &eeprom_gbc_sid, - }, - { - .name = "eeprom_inv", - .driver = &CAT24C04_gbc_inv, - .driver_cfg = &eeprom_gbc_inv, - }, - { - .name = "eeprom_mac", - .driver = &Driver_MAC, - }, - { - .name = "SPI_flash", - .driver = &FLASHDRV, - .driver_cfg = &gbc_spi_flash_memory, - }, - {} }, - .commands = (Command[]){ { - .name = "reset", - .cb_cmd = SYS_cmdReset, - }, - { - .name = "echo", - .cb_cmd = SYS_cmdEcho, - }, - {} }, + .ssHookSet = &(SSHookSet) { + .preInitFxn = NULL, + .postInitFxn = (ssHook_Cb)sys_post_init, + }, + .components = (Component[]) { + { + .name = "comp_all", + .driver = &SYSTEMDRV, + .driver_cfg = &gbc_gpp_gpioCfg, + .components = (Component[]) { + { + .name = "eeprom_sid", + .driver = &CAT24C04_gbc_sid, + .driver_cfg = &eeprom_gbc_sid, + }, + { + .name = "eeprom_inv", + .driver = &CAT24C04_gbc_inv, + .driver_cfg = &eeprom_gbc_inv, + }, + { + .name = "eeprom_mac", + .driver = &Driver_MAC, + }, + { + .name = "SPI_flash", + .driver = &FLASHDRV, + .driver_cfg = &gbc_spi_flash_memory, + }, + {} }, - {} }, + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = SYS_cmdReset, + }, + { + .name = "echo", + .cb_cmd = SYS_cmdEcho, + }, + {} + }, + }, + {} + }, }, { .name = "power", - .components = - (Component[]){ - { - .name = "comp_all", - .components = - (Component[]){ - { - .name = "powerSource", - .driver = &PWRSRC, - .driver_cfg = &gbc_pwr_powerSource, - .postDisabled = POST_DISABLED, - }, - {} }, + .components = (Component[]) { + { + .name = "comp_all", + .components = (Component[]) { + { + .name = "powerSource", + .driver = &PWRSRC, + .driver_cfg = &gbc_pwr_powerSource, + .postDisabled = POST_DISABLED, + }, + {} }, - { - .name = "leadacid_sensor", - .components = - (Component[]){ { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &gbc_pwr_lead_acid_ts, - .factory_config = &fact_bc_se98a, - }, - {} }, + }, + { + .name = "leadacid_sensor", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &gbc_pwr_lead_acid_ts, + .factory_config = &fact_bc_se98a, + }, + {} }, - { - .name = "leadacid", - .components = - (Component[]){ - { - .name = "battery", - .driver = <C4015, - .driver_cfg = &gbc_pwr_ext_bat_charger, - .factory_config = &fact_leadAcid_cfg, - }, - {} }, + }, + { + .name = "leadacid", + .components = (Component[]) { + { + .name = "battery", + .driver = <C4015, + .driver_cfg = &gbc_pwr_ext_bat_charger, + .factory_config = &fact_leadAcid_cfg, + }, + {} }, - { - .name = "lion", - .components = - (Component[]){ - { - .name = "battery", - .driver = <C4015, - .driver_cfg = &gbc_pwr_int_bat_charger, - .factory_config = &fact_lithiumIon_cfg, - }, - {} }, + }, + { + .name = "lion", + .components = (Component[]) { + { + .name = "battery", + .driver = <C4015, + .driver_cfg = &gbc_pwr_int_bat_charger, + .factory_config = &fact_lithiumIon_cfg, + }, + {} }, - { - .name = "pse", - .driver = <C4274, - .driver_cfg = &gbc_pwr_pse, - .factory_config = &fact_ltc4274_cfg, - }, - { - .name = "pd", - .driver = <C4275, - .driver_cfg = &gbc_pwr_pd, - }, - {} }, + }, + { + .name = "pse", + .driver = <C4274, + .driver_cfg = &gbc_pwr_pse, + .factory_config = &fact_ltc4274_cfg, + }, + { + .name = "pd", + .driver = <C4275, + .driver_cfg = &gbc_pwr_pd, + }, + {} + }, }, { .name = "bms", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "ec", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &gbc_bms_ec_ts, + .factory_config = &fact_ec_se98a_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &gbc_bms_ec_ps_12v, + .factory_config = &fact_ec_12v_ps_cfg, + }, + { + .name = "current_sensor2", + .driver = &INA226, + .driver_cfg = &gbc_bms_ec_ps_3p3v, + .factory_config = &fact_ec_3v_ps_cfg, + }, + {} }, - { - .name = "ec", - .components = - (Component[]){ - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &gbc_bms_ec_ts, - .factory_config = &fact_ec_se98a_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &gbc_bms_ec_ps_12v, - .factory_config = &fact_ec_12v_ps_cfg, - }, - { - .name = "current_sensor2", - .driver = &INA226, - .driver_cfg = &gbc_bms_ec_ps_3p3v, - .factory_config = &fact_ec_3v_ps_cfg, - }, - {} }, - }, - {} }, + }, + {} + }, }, { .name = "hci", - .ssHookSet = - &(SSHookSet){ - .preInitFxn = (ssHook_Cb)HCI_Init, - .postInitFxn = NULL, + .ssHookSet = &(SSHookSet) { + .preInitFxn = (ssHook_Cb)HCI_Init, + .postInitFxn = NULL, + }, + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, }, - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, + { + .name = "led", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &led_hci_ts, + .factory_config = &fact_led_se98a_cfg, + .postDisabled = POST_DISABLED, + }, + { + .name = "fw", + .driver = &HCI_LED, + .driver_cfg = &led_hci_ioexp, + }, + {} }, - { - .name = "led", - .components = - (Component[]){ - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &led_hci_ts, - .factory_config = &fact_led_se98a_cfg, - .postDisabled = POST_DISABLED, - }, - { - .name = "fw", - .driver = &HCI_LED, - .driver_cfg = &led_hci_ioexp, - }, - {} }, - }, - { - .name = "buzzer", - .driver_cfg = &gbc_hci_buzzer, - .postDisabled = POST_DISABLED, - }, - {} }, + }, + { + .name = "buzzer", + .driver_cfg = &gbc_hci_buzzer, + .postDisabled = POST_DISABLED, + }, + {} + }, }, { .name = "ethernet", - .components = (Component[]){ { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "port0", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port0, - }, - { - .name = "port1", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port1, - }, - { - .name = "port2", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port2, - }, - { - .name = "port3", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port3, - }, - { - .name = "port4", - .driver = Ð_SW, - .driver_cfg = &gbc_eth_port4, - }, - {} }, + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "port0", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port0, + }, + { + .name = "port1", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port1, + }, + { + .name = "port2", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port2, + }, + { + .name = "port3", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port3, + }, + { + .name = "port4", + .driver = Ð_SW, + .driver_cfg = &gbc_eth_port4, + }, + {} + }, }, { .name = "obc", - .ssHookSet = - &(SSHookSet){ - .preInitFxn = (ssHook_Cb)obc_pre_init, - .postInitFxn = NULL, - }, + .ssHookSet = &(SSHookSet) { + .preInitFxn = (ssHook_Cb)obc_pre_init, + .postInitFxn = NULL, + }, .driver_cfg = &sync_obc_gpiocfg, - .components = (Component[]){ { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "iridium", - .driver = &OBC_Iridium, - .driver_cfg = &obc_irridium, - }, - {} }, + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "iridium", + .driver = &OBC_Iridium, + .driver_cfg = &obc_irridium, + }, + {} + }, }, { .name = "gpp", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ap", - .components = - (Component[]){ - { - .name = "temp_sensor1", - .driver = &SE98A, - .driver_cfg = &gbc_gpp_ap_ts1, - .factory_config = &fact_ap_se98a_ts1_cfg, - }, - { - .name = "temp_sensor2", - .driver = &SE98A, - .driver_cfg = &gbc_gpp_ap_ts2, - .factory_config = &fact_ap_se98a_ts2_cfg, - }, - { - .name = "temp_sensor3", - .driver = &SE98A, - .driver_cfg = &gbc_gpp_ap_ts3, - .factory_config = &fact_ap_se98a_ts3_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &gbc_gpp_ap_ps, - .factory_config = &fact_ap_3v_ps_cfg, - }, - {} }, - .driver_cfg = &gbc_gpp_gpioCfg, - .commands = (Command[]){ { - .name = "reset", - .cb_cmd = GPP_ap_Reset, - }, - {} }, - }, - { - .name = "msata", - .components = - (Component[]){ - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &gbc_gpp_msata_ps, - .factory_config = &fact_msata_3v_ps_cfg, - }, - {} }, - }, - {} }, - .driver_cfg = &gbc_gpp_gpioCfg, - .ssHookSet = - &(SSHookSet){ - .preInitFxn = (ssHook_Cb)gpp_pre_init, - .postInitFxn = (ssHook_Cb)gpp_post_init, + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, }, + { + .name = "ap", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &SE98A, + .driver_cfg = &gbc_gpp_ap_ts1, + .factory_config = &fact_ap_se98a_ts1_cfg, + }, + { + .name = "temp_sensor2", + .driver = &SE98A, + .driver_cfg = &gbc_gpp_ap_ts2, + .factory_config = &fact_ap_se98a_ts2_cfg, + }, + { + .name = "temp_sensor3", + .driver = &SE98A, + .driver_cfg = &gbc_gpp_ap_ts3, + .factory_config = &fact_ap_se98a_ts3_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &gbc_gpp_ap_ps, + .factory_config = &fact_ap_3v_ps_cfg, + }, + {} + }, + .driver_cfg = &gbc_gpp_gpioCfg, + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = GPP_ap_Reset, + }, + {} + }, + }, + { + .name = "msata", + .components = (Component[]) { + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &gbc_gpp_msata_ps, + .factory_config = &fact_msata_3v_ps_cfg, + }, + {} + }, + }, + {} + }, + .driver_cfg = &gbc_gpp_gpioCfg, + .ssHookSet = &(SSHookSet) { + .preInitFxn = (ssHook_Cb)gpp_pre_init, + .postInitFxn = (ssHook_Cb)gpp_post_init, + }, }, { .name = "sdr", - .components = - (Component[]){ - { - .name = "comp_all", - .components = - (Component[]){ - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &sdr_ps, - .factory_config = &fact_sdr_3v_ps_cfg, - }, - { - .name = "eeprom", - .driver_cfg = &eeprom_sdr_inv, - .driver = &CAT24C04_sdr_inv, - }, - {} }, - .driver_cfg = &sdr_gpioCfg, - .commands = (Command[]){ { - .name = "reset", - .cb_cmd = SDR_reset, - }, - {} }, + .components = (Component[]) { + { + .name = "comp_all", + .components = (Component[]) { + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &sdr_ps, + .factory_config = &fact_sdr_3v_ps_cfg, + }, + { + .name = "eeprom", + .driver_cfg = &eeprom_sdr_inv, + .driver = &CAT24C04_sdr_inv, + }, + {} }, - { - .name = "fpga", - .components = - (Component[]){ - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &sdr_fpga_ts, - .factory_config = &fact_sdr_fpga_adt7481_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &sdr_fpga_ps, - .factory_config = &fact_sdr_fpga_ps_cfg, - }, - {} }, + .driver_cfg = &sdr_gpioCfg, + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = SDR_reset, + }, + {} }, - { - .name = "fx3", - .driver_cfg = &sdr_gpioCfg, - .commands = (Command[]){ { - .name = "reset", - .cb_cmd = SDR_fx3Reset, - }, - {} }, - .postDisabled = POST_DISABLED, - }, - {} }, - .driver_cfg = &sdr_gpioCfg, - .ssHookSet = - &(SSHookSet){ - .preInitFxn = (ssHook_Cb)SDR_Init, - .postInitFxn = NULL, }, + { + .name = "fpga", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &sdr_fpga_ts, + .factory_config = &fact_sdr_fpga_adt7481_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &sdr_fpga_ps, + .factory_config = &fact_sdr_fpga_ps_cfg, + }, + {} + }, + }, + { + .name = "fx3", + .driver_cfg = &sdr_gpioCfg, + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = SDR_fx3Reset, + }, + {} + }, + .postDisabled = POST_DISABLED, + }, + {} + }, + .driver_cfg = &sdr_gpioCfg, + .ssHookSet = &(SSHookSet) { + .preInitFxn = (ssHook_Cb)SDR_Init, + .postInitFxn = NULL, + }, }, { .name = "rffe", .driver_cfg = &fe_rffecfg, - .components = - (Component[]){ - { - .name = "comp_all", - .components = (Component[]){ { - .name = "eeprom", - .driver = &CAT24C04_fe_inv, - .driver_cfg = - &eeprom_fe_inv, - }, - {} }, - .driver_cfg = &sdr_gpioCfg, - .commands = (Command[]){ { - .name = "reset", - .cb_cmd = RFFE_reset, - }, - {} }, + .components = (Component[]) { + { + .name = "comp_all", + .components = (Component[]) { + { + .name = "eeprom", + .driver = &CAT24C04_fe_inv, + .driver_cfg = &eeprom_fe_inv, + }, + {} }, - { - .name = "ch1_sensor", - .components = - (Component[]){ - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &fe_ch1_ts, - .factory_config = &fact_fe_ch1_adt7481_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &fe_ch1_ps_5_7v, - .factory_config = &fact_fe_ch1_ps_cfg, - }, - {} }, + .driver_cfg = &sdr_gpioCfg, + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = RFFE_reset, + }, + {} }, - { - .name = "ch2_sensor", - .components = - (Component[]){ - { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = &fe_ch2_ts, - .factory_config = &fact_fe_ch2_adt7481_cfg, - }, - { - .name = "current_sensor1", - .driver = &INA226, - .driver_cfg = &fe_ch2_ps_5_7v, - .factory_config = &fact_fe_ch2_ps_cfg, - }, - {} }, - }, - { - .name = "ch1_fe", - .driver_cfg = &fe_ch1_pwrcfg, - .components = - (Component[]){ - { - .name = "ch1_band", - .driver = &FE_Param, - .driver_cfg = &fe_ch1_bandcfg, - .factory_config = &fact_ch1_band_cfg, - }, - { - .name = "watchdog", - .driver = &RFFEWatchdog, - .driver_cfg = &fe_ch1_watchdog, - }, - { - .name = "power", - .driver = &RFPowerMonitor, - .driver_cfg = &fe_ch1_ads7830, - }, - { - .name = "tx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch1_gain, - .factory_config = &fact_ch1_tx_gain_cfg, - }, - { - .name = "rx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch1_lna, - .factory_config = &fact_ch1_rx_gain_cfg, - }, - {} }, - .commands = (Command[]){ { - .name = "enable", - .cb_cmd = RFFE_enablePA, - }, - { - .name = "disable", - .cb_cmd = RFFE_disablePA, - }, - {} }, - }, - { - .name = "ch2_fe", - .driver_cfg = &fe_ch2_pwrcfg, - .components = - (Component[]){ - { - .name = "ch2_band", - .driver = &FE_Param, - .driver_cfg = &fe_ch2_bandcfg, - .factory_config = &fact_ch2_band_cfg, - }, - { - .name = "watchdog", - .driver = &RFFEWatchdog, - .driver_cfg = &fe_ch2_watchdog, - }, - { - .name = "power", - .driver = &RFPowerMonitor, - .driver_cfg = &fe_ch2_ads7830, - }, - { - .name = "tx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch2_gain, - .factory_config = &fact_ch2_tx_gain_cfg, - }, - { - .name = "rx", - .driver = &DATXXR5APP, - .driver_cfg = &fe_ch2_lna, - .factory_config = &fact_ch2_rx_gain_cfg, - }, - {} }, - .commands = (Command[]){ { - .name = "enable", - .cb_cmd = RFFE_enablePA, - }, - { - .name = "disable", - .cb_cmd = RFFE_disablePA, - }, - {} }, - }, - {} }, - .ssHookSet = - &(SSHookSet){ - .preInitFxn = (ssHook_Cb)rffe_pre_init, - .postInitFxn = (ssHook_Cb)rffe_post_init, }, + { + .name = "ch1_sensor", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &fe_ch1_ts, + .factory_config = &fact_fe_ch1_adt7481_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &fe_ch1_ps_5_7v, + .factory_config = &fact_fe_ch1_ps_cfg, + }, + {} + }, + }, + { + .name = "ch2_sensor", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &fe_ch2_ts, + .factory_config = &fact_fe_ch2_adt7481_cfg, + }, + { + .name = "current_sensor1", + .driver = &INA226, + .driver_cfg = &fe_ch2_ps_5_7v, + .factory_config = &fact_fe_ch2_ps_cfg, + }, + {} + }, + }, + { + .name = "ch1_fe", + .driver_cfg = &fe_ch1_pwrcfg, + .components = (Component[]) { + { + .name = "ch1_band", + .driver = &FE_Param, + .driver_cfg = &fe_ch1_bandcfg, + .factory_config = &fact_ch1_band_cfg, + }, + { + .name = "watchdog", + .driver = &RFFEWatchdog, + .driver_cfg = &fe_ch1_watchdog, + }, + { + .name = "power", + .driver = &RFPowerMonitor, + .driver_cfg = &fe_ch1_ads7830, + }, + { + .name = "tx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch1_gain, + .factory_config = &fact_ch1_tx_gain_cfg, + }, + { + .name = "rx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch1_lna, + .factory_config = &fact_ch1_rx_gain_cfg, + }, + {} + }, + .commands = (Command[]) { + { + .name = "enable", + .cb_cmd = RFFE_enablePA, + }, + { + .name = "disable", + .cb_cmd = RFFE_disablePA, + }, + {} + }, + }, + { + .name = "ch2_fe", + .driver_cfg = &fe_ch2_pwrcfg, + .components = (Component[]) { + { + .name = "ch2_band", + .driver = &FE_Param, + .driver_cfg = &fe_ch2_bandcfg, + .factory_config = &fact_ch2_band_cfg, + }, + { + .name = "watchdog", + .driver = &RFFEWatchdog, + .driver_cfg = &fe_ch2_watchdog, + }, + { + .name = "power", + .driver = &RFPowerMonitor, + .driver_cfg = &fe_ch2_ads7830, + }, + { + .name = "tx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch2_gain, + .factory_config = &fact_ch2_tx_gain_cfg, + }, + { + .name = "rx", + .driver = &DATXXR5APP, + .driver_cfg = &fe_ch2_lna, + .factory_config = &fact_ch2_rx_gain_cfg, + }, + {} + }, + .commands = (Command[]) { + { + .name = "enable", + .cb_cmd = RFFE_enablePA, + }, + { + .name = "disable", + .cb_cmd = RFFE_disablePA, + }, + {} + }, + }, + {} + }, + .ssHookSet = &(SSHookSet) { + .preInitFxn = (ssHook_Cb)rffe_pre_init, + .postInitFxn = (ssHook_Cb)rffe_post_init, + }, }, { .name = "sync", .driver_cfg = &sync_gpiocfg, - .ssHookSet = - &(SSHookSet){ - .preInitFxn = (ssHook_Cb)SYNC_Init, - .postInitFxn = NULL, + .ssHookSet = &(SSHookSet) { + .preInitFxn = (ssHook_Cb)SYNC_Init, + .postInitFxn = NULL, + }, + .components = (Component[]) { + { + .name = "comp_all", + .driver_cfg = &sync_gpiocfg, + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = SYNC_reset, + }, + {} + }, + .postDisabled = POST_DISABLED, }, - .components = - (Component[]){ { - .name = "comp_all", - .driver_cfg = &sync_gpiocfg, - .commands = - (Command[]){ { - .name = "reset", - .cb_cmd = SYNC_reset, - }, - {} }, - .postDisabled = POST_DISABLED, - }, - { - .name = "gps", - .driver_cfg = &sync_gpiocfg, - .driver = &Sync_IO, - }, - { - .name = "sensor", - .components = - (Component[]){ { - .name = "temp_sensor1", - .driver = &ADT7481, - .driver_cfg = - &sync_gps_ts, - .factory_config = - &fact_sync_ts_cfg, - }, - {} }, - }, - {} }, + { + .name = "gps", + .driver_cfg = &sync_gpiocfg, + .driver = &Sync_IO, + }, + { + .name = "sensor", + .components = (Component[]) { + { + .name = "temp_sensor1", + .driver = &ADT7481, + .driver_cfg = &sync_gps_ts, + .factory_config = &fact_sync_ts_cfg, + }, + {} + }, + }, + {} + }, }, { .name = "testmodule", - .components = - (Component[]){ { - .name = "comp_all", - .commands = - (Command[]){ { - .name = "reset", - .cb_cmd = TestMod_cmdReset, - }, - {} }, - .postDisabled = POST_DISABLED, - }, - { - .name = "2gsim", - .driver = &Testmod_G510, - .driver_cfg = &testModuleCfg, - }, - {} }, + .components = (Component[]) { + { + .name = "comp_all", + .commands = (Command[]) { + { + .name = "reset", + .cb_cmd = TestMod_cmdReset, + }, + {} + }, + .postDisabled = POST_DISABLED, + }, + { + .name = "2gsim", + .driver = &Testmod_G510, + .driver_cfg = &testModuleCfg, + }, + {} + }, }, { .name = "debug", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "I2C", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "bus0", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C0, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus1", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C1, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus2", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C2, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus3", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C3, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus4", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C4, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus6", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C6, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus7", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C7, + .postDisabled = POST_DISABLED, + }, + { + .name = "bus8", + .driver = &OC_I2C, + .driver_cfg = &debug_I2C8, + .postDisabled = POST_DISABLED, + }, + {} }, - { - .name = "I2C", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "bus0", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C0, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus1", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C1, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus2", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C2, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus3", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C3, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus4", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C4, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus6", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C6, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus7", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C7, - .postDisabled = POST_DISABLED, - }, - { - .name = "bus8", - .driver = &OC_I2C, - .driver_cfg = &debug_I2C8, - .postDisabled = POST_DISABLED, - }, - {} }, + }, + { + .name = "ec", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "PA", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pa, + .postDisabled = POST_DISABLED, + }, + { + .name = "PB", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pb, + .postDisabled = POST_DISABLED, + }, + { + .name = "PC", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pc, + .postDisabled = POST_DISABLED, + }, + { + .name = "PD", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pd, + .postDisabled = POST_DISABLED, + }, + { + .name = "PE", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pe, + .postDisabled = POST_DISABLED, + }, + { + .name = "PF", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pf, + .postDisabled = POST_DISABLED, + }, + { + .name = "PG", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pg, + .postDisabled = POST_DISABLED, + }, + { + .name = "PH", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_ph, + .postDisabled = POST_DISABLED, + }, + { + .name = "PJ", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pj, + .postDisabled = POST_DISABLED, + }, + { + .name = "PK", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pk, + .postDisabled = POST_DISABLED, + }, + { + .name = "PL", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pl, + .postDisabled = POST_DISABLED, + }, + { + .name = "PM", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pm, + .postDisabled = POST_DISABLED, + }, + { + .name = "PN", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pn, + .postDisabled = POST_DISABLED, + }, + { + .name = "PP", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pn, + .postDisabled = POST_DISABLED, + }, + { + .name = "PQ", + .driver = &OC_GPIO, + .driver_cfg = &debug_ec_gpio_pq, + .postDisabled = POST_DISABLED, + }, + {} }, - { - .name = "ec", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "PA", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pa, - .postDisabled = POST_DISABLED, - }, - { - .name = "PB", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pb, - .postDisabled = POST_DISABLED, - }, - { - .name = "PC", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pc, - .postDisabled = POST_DISABLED, - }, - { - .name = "PD", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pd, - .postDisabled = POST_DISABLED, - }, - { - .name = "PE", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pe, - .postDisabled = POST_DISABLED, - }, - { - .name = "PF", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pf, - .postDisabled = POST_DISABLED, - }, - { - .name = "PG", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pg, - .postDisabled = POST_DISABLED, - }, - { - .name = "PH", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_ph, - .postDisabled = POST_DISABLED, - }, - { - .name = "PJ", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pj, - .postDisabled = POST_DISABLED, - }, - { - .name = "PK", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pk, - .postDisabled = POST_DISABLED, - }, - { - .name = "PL", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pl, - .postDisabled = POST_DISABLED, - }, - { - .name = "PM", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pm, - .postDisabled = POST_DISABLED, - }, - { - .name = "PN", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pn, - .postDisabled = POST_DISABLED, - }, - { - .name = "PP", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pn, - .postDisabled = POST_DISABLED, - }, - { - .name = "PQ", - .driver = &OC_GPIO, - .driver_cfg = &debug_ec_gpio_pq, - .postDisabled = POST_DISABLED, - }, - {} }, + }, + { + .name = "gbc", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "ioexpanderx70", + .driver = &OC_GPIO, + .driver_cfg = &debug_gbc_ioexpanderx70, + }, + { + .name = "ioexpanderx71", + .driver = &OC_GPIO, + .driver_cfg = &debug_gbc_ioexpanderx71, + }, + {} }, - { - .name = "gbc", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "ioexpanderx70", - .driver = &OC_GPIO, - .driver_cfg = &debug_gbc_ioexpanderx70, - }, - { - .name = "ioexpanderx71", - .driver = &OC_GPIO, - .driver_cfg = &debug_gbc_ioexpanderx71, - }, - {} }, + }, + { + .name = "sdr", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "ioexpanderx1E", + .driver = &OC_GPIO, + .driver_cfg = &debug_sdr_ioexpanderx1E, + }, + {} }, - { - .name = "sdr", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = - POST_DISABLED, - }, - { - .name = "ioexpanderx1E", - .driver = &OC_GPIO, - .driver_cfg = &debug_sdr_ioexpanderx1E, - }, - {} }, + }, + { + .name = "fe", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "ioexpanderx18", + .driver = &OC_GPIO, + .driver_cfg = &debug_sdr_ioexpanderx1E, + }, + { + .name = "ioexpanderx1C", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1C, + }, + { + .name = "ioexpanderx1B", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1B, + }, + { + .name = "ioexpanderx1A", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1A, + }, + { + .name = "ioexpanderx1D", + .driver = &OC_GPIO, + .driver_cfg = &debug_fe_ioexpanderx1D, + }, + {} }, - { - .name = "fe", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = - POST_DISABLED, - }, - { - .name = "ioexpanderx18", - .driver = &OC_GPIO, - .driver_cfg = &debug_sdr_ioexpanderx1E, - }, - { - .name = "ioexpanderx1C", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1C, - }, - { - .name = "ioexpanderx1B", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1B, - }, - { - .name = "ioexpanderx1A", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1A, - }, - { - .name = "ioexpanderx1D", - .driver = &OC_GPIO, - .driver_cfg = &debug_fe_ioexpanderx1D, - }, - {} }, + }, + { + .name = "sync", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "ioexpanderx71", + .driver = &OC_GPIO, + .driver_cfg = &debug_sync_ioexpanderx71, + }, + {} }, - { - .name = "sync", - .components = - (Component[]){ - { - .name = "comp_all", - .postDisabled = - POST_DISABLED, - }, - { - .name = "ioexpanderx71", - .driver = &OC_GPIO, - .driver_cfg = &debug_sync_ioexpanderx71, - }, - {} }, + }, + { + .name = "ethernet", + .components = (Component[]) { + { + .name = "comp_all", + .postDisabled = POST_DISABLED, + }, + { + .name = "port0", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport0, + .postDisabled = POST_DISABLED, + }, + { + .name = "port1", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport1, + .postDisabled = POST_DISABLED, + }, + { + .name = "port2", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport2, + .postDisabled = POST_DISABLED, + }, + { + .name = "port3", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport3, + .postDisabled = POST_DISABLED, + }, + { + .name = "port4", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_phyport4, + .postDisabled = POST_DISABLED, + }, + { + .name = "global1", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_global1, + .postDisabled = POST_DISABLED, + }, + { + .name = "global2", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_global2, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport0", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport0, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport1", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport1, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport2", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport2, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport3", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport3, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport4", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport4, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport5", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport5, + .postDisabled = POST_DISABLED, + }, + { + .name = "swport6", + .driver = &OC_MDIO, + .driver_cfg = &debug_mdio_swport6, + .postDisabled = POST_DISABLED, + }, + {} }, - { - .name = "ethernet", - .components = - (Component[]){ { - .name = "comp_all", - .postDisabled = POST_DISABLED, - }, - { - .name = "port0", - .driver = - &OC_MDIO, - .driver_cfg = &debug_mdio_phyport0, - .postDisabled = POST_DISABLED, - }, - { - .name = "port1", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport1, - .postDisabled = POST_DISABLED, - }, - { - .name = "port2", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport2, - .postDisabled = POST_DISABLED, - }, - { - .name = "port3", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport3, - .postDisabled = POST_DISABLED, - }, - { - .name = "port4", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_phyport4, - .postDisabled = POST_DISABLED, - }, - { - .name = "global1", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_global1, - .postDisabled = POST_DISABLED, - }, - { - .name = "global2", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_global2, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport0", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport0, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport1", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport1, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport2", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport2, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport3", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport3, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport4", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport4, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport5", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport5, - .postDisabled = POST_DISABLED, - }, - { - .name = "swport6", - .driver = &OC_MDIO, - .driver_cfg = &debug_mdio_swport6, - .postDisabled = POST_DISABLED, - }, - {} }, - }, - {} }, + }, + {} + }, }, {} }; diff --git a/firmware/ec/src/devices/eeprom.c b/firmware/ec/src/devices/eeprom.c index d77cfe7e1a..f9ba117ad4 100644 --- a/firmware/ec/src/devices/eeprom.c +++ b/firmware/ec/src/devices/eeprom.c @@ -50,7 +50,7 @@ static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle, *****************************************************************************/ bool eeprom_init(Eeprom_Cfg *cfg) { - if ((cfg == NULL) || (cfg->pin_wp == NULL)) { + if (cfg == NULL) { return false; } /* Configure our WP pin (if any) and set to be low (protected) by default */ @@ -234,7 +234,7 @@ static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle, uint16_t slaveAddress, *****************************************************************************/ ReturnStatus eeprom_disable_write(Eeprom_Cfg *cfg) { - if ((cfg == NULL) || (cfg->pin_wp == NULL)) { + if (cfg == NULL) { return RETURN_NOTOK; } if (cfg->pin_wp) { @@ -257,7 +257,7 @@ ReturnStatus eeprom_disable_write(Eeprom_Cfg *cfg) *****************************************************************************/ ReturnStatus eeprom_enable_write(Eeprom_Cfg *cfg) { - if ((cfg == NULL) || (cfg->pin_wp == NULL)) { + if (cfg == NULL) { return RETURN_NOTOK; } if (cfg->pin_wp) { diff --git a/firmware/ec/test/fake/fake_eeprom.c b/firmware/ec/test/fake/fake_eeprom.c index d7e9fc242a..fe9d6f2b07 100644 --- a/firmware/ec/test/fake/fake_eeprom.c +++ b/firmware/ec/test/fake/fake_eeprom.c @@ -82,12 +82,12 @@ Eeprom_Cfg enable_dev = { .i2c_dev = { 6, 0x45 }, .pin_wp = &pin_inven_eeprom_wp, .type = { .page_size = 64, .mem_size = (256 / 8) }, - .ss = 0, + .ss = EEPROM_SYSTEM_SUBSYSTEM, }; Eeprom_Cfg e_invalid_ss_cfg = { .i2c_dev = { 4, 0x50 }, .pin_wp = &(OcGpio_Pin){ &gbc_io_0, 5 }, .type = { .page_size = 64, .mem_size = (256 / 8) }, - .ss = 1, + .ss = EEPROM_POWER_SUBSYSTEM, }; diff --git a/firmware/ec/test/include/test_eeprom.h b/firmware/ec/test/include/test_eeprom.h index fbf143cc54..389a225414 100644 --- a/firmware/ec/test/include/test_eeprom.h +++ b/firmware/ec/test/include/test_eeprom.h @@ -57,9 +57,11 @@ #define EEPROM_FE_DEVICE_INFO "SA1718LIFE3FE000580256" #define EEPROM_GBC_BOARD_INFO "SA1718LIFE3GBC0041" #define EEPROM_GBC_DEVICE_INFO "SA1718LIFE3GBC004180256" +#define EEPROM_POWER_SUBSYSTEM 1 #define EEPROM_SDR_BOARD_INFO "SA1718LIFE3SDR0032" #define EEPROM_SDR_DEVICE_INFO "SA1718LIFE3SDR003280256" #define EEPROM_SERIAL_INFO "SA1718C0450A100411" +#define EEPROM_SYSTEM_SUBSYSTEM 0 #define EEPROM_READ_WRITE_VALUE 0x0505 #define EEPROM_WRITE_SIZE 0x0A diff --git a/firmware/ec/test/suites/Test_eeprom.c b/firmware/ec/test/suites/Test_eeprom.c index f7a934f51b..1650ce5dcf 100644 --- a/firmware/ec/test/suites/Test_eeprom.c +++ b/firmware/ec/test/suites/Test_eeprom.c @@ -175,12 +175,6 @@ void test_eeprom_disable_write(void) /* Checking for NULL cfg */ TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_disable_write(e_invalid_cfg)); - - /* Checking with invalid slave address */ - TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_disable_write(&e_invalid_dev)); - - /* Checking with invalid bus address */ - TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_disable_write(&e_invalid_bus)); } void test_eeprom_enable_write(void) @@ -193,12 +187,6 @@ void test_eeprom_enable_write(void) /* Checking for NULL cfg */ TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_enable_write(e_invalid_cfg)); - - /* Checking with invalid slave address */ - TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_enable_write(&e_invalid_dev)); - - /* Checking with invalid bus address */ - TEST_ASSERT_EQUAL(RETURN_NOTOK, eeprom_enable_write(&e_invalid_bus)); } /* Values are taken as per GBCV1 test board */ void test_eeprom_read_board_info(void) From 2a067cea4607a5ffeec8a9ffbdda668ed7a4377b Mon Sep 17 00:00:00 2001 From: swateeshrivastava Date: Thu, 20 Dec 2018 11:28:02 +0530 Subject: [PATCH 4/4] Updated to use existing macroes --- firmware/ec/test/fake/fake_eeprom.c | 4 ++-- firmware/ec/test/include/test_eeprom.h | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/firmware/ec/test/fake/fake_eeprom.c b/firmware/ec/test/fake/fake_eeprom.c index fe9d6f2b07..ca0f643770 100644 --- a/firmware/ec/test/fake/fake_eeprom.c +++ b/firmware/ec/test/fake/fake_eeprom.c @@ -82,12 +82,12 @@ Eeprom_Cfg enable_dev = { .i2c_dev = { 6, 0x45 }, .pin_wp = &pin_inven_eeprom_wp, .type = { .page_size = 64, .mem_size = (256 / 8) }, - .ss = EEPROM_SYSTEM_SUBSYSTEM, + .ss = OC_SS_SYS, }; Eeprom_Cfg e_invalid_ss_cfg = { .i2c_dev = { 4, 0x50 }, .pin_wp = &(OcGpio_Pin){ &gbc_io_0, 5 }, .type = { .page_size = 64, .mem_size = (256 / 8) }, - .ss = EEPROM_POWER_SUBSYSTEM, + .ss = OC_SS_PWR, }; diff --git a/firmware/ec/test/include/test_eeprom.h b/firmware/ec/test/include/test_eeprom.h index 389a225414..63699067cb 100644 --- a/firmware/ec/test/include/test_eeprom.h +++ b/firmware/ec/test/include/test_eeprom.h @@ -9,6 +9,7 @@ #ifndef _TEST_EEPROM_1_H #define _TEST_EEPROM_1_H +#include "common/inc/global/ocmp_frame.h" #include "drivers/GpioSX1509.h" #include "drivers/OcGpio.h" #include "fake/fake_GPIO.h" @@ -57,11 +58,9 @@ #define EEPROM_FE_DEVICE_INFO "SA1718LIFE3FE000580256" #define EEPROM_GBC_BOARD_INFO "SA1718LIFE3GBC0041" #define EEPROM_GBC_DEVICE_INFO "SA1718LIFE3GBC004180256" -#define EEPROM_POWER_SUBSYSTEM 1 #define EEPROM_SDR_BOARD_INFO "SA1718LIFE3SDR0032" #define EEPROM_SDR_DEVICE_INFO "SA1718LIFE3SDR003280256" #define EEPROM_SERIAL_INFO "SA1718C0450A100411" -#define EEPROM_SYSTEM_SUBSYSTEM 0 #define EEPROM_READ_WRITE_VALUE 0x0505 #define EEPROM_WRITE_SIZE 0x0A