Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -re7c4a51e6057f0cc83fabc72f2df9bb5dffee391 -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision e7c4a51e6057f0cc83fabc72f2df9bb5dffee391) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision cd5be724d5a3ba7457e761191d82f278654d7f5c) @@ -1,21 +1,21 @@ /************************************************************************** * -* Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Battery.c * * @author (last) Dara Navaei -* @date (last) 20-May-2023 +* @date (last) 08-Oct-2023 * * @author (original) Quang Nguyen * @date (original) 24-Feb-2021 * ***************************************************************************/ #include // For memcpy - + #include "i2c.h" #include "Battery.h" @@ -132,7 +132,8 @@ BATTERY_PACK_MANUFACTURER_NAME, ///< Battery pack mfg name BATTERY_PACK_DEVICE_NAME, ///< Battery pack device name BATTERY_PACK_DEVICE_CHEMISTRY, ///< Battery pack device chemistry - END_OF_LIST + END_OF_LIST, ///< End of battery data list + NUM_OF_BATTERY_PACK_LIST, ///< Number of battery pack list } BATTERY_MANAGEMENT_ENUM_T; // ********** private data ********** @@ -152,7 +153,7 @@ static F32 getBatteryRemainingCapacity_mWh( void ); static U32 getBatteryStatus( void ); static U32 getBatteryChargerStatus( void ); -static U32 getI2CStatusRegister( void ); +static U32 getI2CStatusRegister( BOOL resetOverride ); static void setupI2CDriver( void ); static BOOL waitForTxReady( void ); static BOOL waitForRxReady( void ); @@ -197,7 +198,7 @@ * @details Inputs: lastBatteryMonitorTime * @details Outputs: lastBatteryMonitorTime * @return none - *************************************************************************/ + *************************************************************************/ void execBatteryMonitor( void ) { if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) @@ -224,15 +225,21 @@ * The getI2CStatusRegister function returns the I2C status register * @details Inputs: batteryI2CStatusRegister, i2cREG1->STR * @details Outputs: none + * @param reset override on get * @return I2C Interrupt Status. *************************************************************************/ -static U32 getI2CStatusRegister( void ) +static U32 getI2CStatusRegister( BOOL resetOverride ) { U32 result = i2cREG1->STR; if ( OVERRIDE_KEY == batteryI2CStatusRegister.override ) { result = batteryI2CStatusRegister.ovData; + if ( TRUE == resetOverride ) + { + batteryI2CStatusRegister.override = OVERRIDE_RESET; + batteryI2CStatusRegister.ovData = batteryI2CStatusRegister.ovInitData; + } } return result; @@ -445,7 +452,7 @@ if ( TRUE == waitForAccessReady() ) { - if ( 0 == ( getI2CStatusRegister() & ( (U32)I2C_NACK | (U32)I2C_AL ) ) ) + if ( 0 == ( getI2CStatusRegister( TRUE ) & ( (U32)I2C_NACK | (U32)I2C_AL ) ) ) { result = TRUE; } @@ -690,7 +697,7 @@ break; default: - // TODO s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_BATTERY_INVALID_MANAGEMENT_DATA_STATE, current_BM_value ) break; } } @@ -721,7 +728,7 @@ batteryStatusData.RemainingCapacity = (U32)getBatteryRemainingCapacity_mWh(); batteryStatusData.BatteryStatus = getBatteryStatus(); batteryStatusData.BatteryChargerStatus = getBatteryChargerStatus(); - batteryStatusData.BatteryI2CStatus = getI2CStatusRegister(); + batteryStatusData.BatteryI2CStatus = getI2CStatusRegister( FALSE ); broadcastData( MSG_ID_HD_BATTERY_STATUS_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&batteryStatusData, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); }