Index: firmware/App/Drivers/Battery.c =================================================================== diff -u -ra56db4650fe5652d633e0c51b29da32d5d708608 -rd07e8c7c8e60603a55aed12fa4984ce15196c82f --- firmware/App/Drivers/Battery.c (.../Battery.c) (revision a56db4650fe5652d633e0c51b29da32d5d708608) +++ firmware/App/Drivers/Battery.c (.../Battery.c) (revision d07e8c7c8e60603a55aed12fa4984ce15196c82f) @@ -15,7 +15,7 @@ * ***************************************************************************/ #include // For memcpy - + #include "i2c.h" #include "Battery.h" @@ -152,7 +152,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 +197,7 @@ * @details Inputs: lastBatteryMonitorTime * @details Outputs: lastBatteryMonitorTime * @return none - *************************************************************************/ + *************************************************************************/ void execBatteryMonitor( void ) { if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) @@ -224,15 +224,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 +451,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; } @@ -721,7 +727,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 ) ); }