Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -r12837d3c857ebe42e721a86f821c2334705e87bf -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision 12837d3c857ebe42e721a86f821c2334705e87bf) +++ 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) Michael Garthwaite -* @date (last) 26-Apr-2023 +* @author (last) Dara Navaei +* @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 ) ) @@ -221,39 +222,24 @@ /*********************************************************************//** * @brief - * The isACPowerLost function determines whether A/C power loss has been - * detected. - * @details Inputs: none - * @details Outputs: none - * @return TRUE if A/C power loss condition is in effect, FALSE if not - *************************************************************************/ -BOOL isACPowerLost( void ) -{ - BOOL result = TRUE; - - if ( ( FALSE == isAlarmConditionDetected( ALARM_ID_HD_AC_POWER_LOST ) ) && - ( FALSE == isAlarmConditionDetected( ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT ) ) ) - { - result = FALSE; - } - - return result; -} - -/*********************************************************************//** - * @brief * 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; @@ -466,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; } @@ -711,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; } } @@ -742,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 ) ); }