Index: .gitignore =================================================================== diff -u --- .gitignore (revision 0) +++ .gitignore (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +/.metadata/ Index: .jxbrowser-data/Cache/data_0 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/data_1 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/data_2 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/data_3 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000001 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000002 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000003 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000004 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000005 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000006 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000007 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000008 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_000009 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/f_00000a =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cache/index =================================================================== diff -u Binary files differ Index: .jxbrowser-data/ChannelIDS =================================================================== diff -u Binary files differ Index: .jxbrowser-data/ChannelIDS-journal =================================================================== diff -u --- .jxbrowser-data/ChannelIDS-journal (revision 0) +++ .jxbrowser-data/ChannelIDS-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/Cookies =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Cookies-journal =================================================================== diff -u --- .jxbrowser-data/Cookies-journal (revision 0) +++ .jxbrowser-data/Cookies-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/Dictionaries/en-US-8-0.bdic =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Favicons =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Favicons-journal =================================================================== diff -u --- .jxbrowser-data/Favicons-journal (revision 0) +++ .jxbrowser-data/Favicons-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/GPUCache/data_0 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/GPUCache/data_1 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/GPUCache/data_2 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/GPUCache/data_3 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/GPUCache/index =================================================================== diff -u Binary files differ Index: .jxbrowser-data/History =================================================================== diff -u Binary files differ Index: .jxbrowser-data/History-journal =================================================================== diff -u --- .jxbrowser-data/History-journal (revision 0) +++ .jxbrowser-data/History-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/000003.log =================================================================== diff -u Binary files differ Index: .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/CURRENT =================================================================== diff -u --- .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/CURRENT (revision 0) +++ .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/CURRENT (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +MANIFEST-000001 Index: .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/LOCK =================================================================== diff -u --- .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/LOCK (revision 0) +++ .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/LOCK (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/LOG =================================================================== diff -u --- .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/LOG (revision 0) +++ .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/LOG (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +2026/04/22-20:59:40.819 9187 Reusing MANIFEST /home/fw/wstd/td-firmware/.jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/MANIFEST-000001 Index: .jxbrowser-data/IndexedDB/https_www.youtube-nocookie.com_0.indexeddb.leveldb/MANIFEST-000001 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Local Storage - EXT/file_null.localstorage =================================================================== diff -u --- .jxbrowser-data/Local Storage - EXT/file_null.localstorage (revision 0) +++ .jxbrowser-data/Local Storage - EXT/file_null.localstorage (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +#Wed Apr 22 21:00:07 PDT 2026 Index: .jxbrowser-data/Local Storage/leveldb/000003.log =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Local Storage/leveldb/CURRENT =================================================================== diff -u --- .jxbrowser-data/Local Storage/leveldb/CURRENT (revision 0) +++ .jxbrowser-data/Local Storage/leveldb/CURRENT (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +MANIFEST-000001 Index: .jxbrowser-data/Local Storage/leveldb/LOCK =================================================================== diff -u --- .jxbrowser-data/Local Storage/leveldb/LOCK (revision 0) +++ .jxbrowser-data/Local Storage/leveldb/LOCK (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/Local Storage/leveldb/LOG =================================================================== diff -u --- .jxbrowser-data/Local Storage/leveldb/LOG (revision 0) +++ .jxbrowser-data/Local Storage/leveldb/LOG (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +2026/04/22-20:59:40.806 9187 Reusing MANIFEST leveldb/MANIFEST-000001 Index: .jxbrowser-data/Local Storage/leveldb/MANIFEST-000001 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Login Data =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Login Data-journal =================================================================== diff -u --- .jxbrowser-data/Login Data-journal (revision 0) +++ .jxbrowser-data/Login Data-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/QuotaManager =================================================================== diff -u Binary files differ Index: .jxbrowser-data/QuotaManager-journal =================================================================== diff -u --- .jxbrowser-data/QuotaManager-journal (revision 0) +++ .jxbrowser-data/QuotaManager-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/Service Worker/CacheStorage/32cadb2b6d359d069dd3f3d132c212a43d223701/index.txt =================================================================== diff -u --- .jxbrowser-data/Service Worker/CacheStorage/32cadb2b6d359d069dd3f3d132c212a43d223701/index.txt (revision 0) +++ .jxbrowser-data/Service Worker/CacheStorage/32cadb2b6d359d069dd3f3d132c212a43d223701/index.txt (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +!https://www.youtube-nocookie.com/ \ No newline at end of file Index: .jxbrowser-data/Sync Data/LevelDB/000003.log =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Sync Data/LevelDB/CURRENT =================================================================== diff -u --- .jxbrowser-data/Sync Data/LevelDB/CURRENT (revision 0) +++ .jxbrowser-data/Sync Data/LevelDB/CURRENT (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +MANIFEST-000001 Index: .jxbrowser-data/Sync Data/LevelDB/LOCK =================================================================== diff -u --- .jxbrowser-data/Sync Data/LevelDB/LOCK (revision 0) +++ .jxbrowser-data/Sync Data/LevelDB/LOCK (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/Sync Data/LevelDB/LOG =================================================================== diff -u --- .jxbrowser-data/Sync Data/LevelDB/LOG (revision 0) +++ .jxbrowser-data/Sync Data/LevelDB/LOG (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +2026/04/22-20:59:32.357 9185 Reusing MANIFEST /home/fw/wstd/td-firmware/.jxbrowser-data/Sync Data/LevelDB/MANIFEST-000001 Index: .jxbrowser-data/Sync Data/LevelDB/MANIFEST-000001 =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Visited Links =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Web Data =================================================================== diff -u Binary files differ Index: .jxbrowser-data/Web Data-journal =================================================================== diff -u --- .jxbrowser-data/Web Data-journal (revision 0) +++ .jxbrowser-data/Web Data-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/databases/Databases.db =================================================================== diff -u Binary files differ Index: .jxbrowser-data/databases/Databases.db-journal =================================================================== diff -u --- .jxbrowser-data/databases/Databases.db-journal (revision 0) +++ .jxbrowser-data/databases/Databases.db-journal (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ \ No newline at end of file Index: .jxbrowser-data/user_prefs.json =================================================================== diff -u --- .jxbrowser-data/user_prefs.json (revision 0) +++ .jxbrowser-data/user_prefs.json (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1 @@ +{"account_id_migration_state":2,"autofill":{"profile_use_dates_fixed":true},"countryid_at_install":-1,"download":{"directory_upgrade":true},"gcm":{"product_category_for_subtypes":"org.chromium.linux"},"profile":{"local_profile_id":16591932},"proxy":{"mode":"system"},"spellcheck":{"dictionary":""}} \ No newline at end of file Index: RemoteSystemsTempFiles/.project =================================================================== diff -u --- RemoteSystemsTempFiles/.project (revision 0) +++ RemoteSystemsTempFiles/.project (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1,12 @@ + + + RemoteSystemsTempFiles + + + + + + + org.eclipse.rse.ui.remoteSystemsTempNature + + Index: firmware/App/Drivers/BatteryDriver.c =================================================================== diff -u --- firmware/App/Drivers/BatteryDriver.c (revision 0) +++ firmware/App/Drivers/BatteryDriver.c (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1,316 @@ +/************************************************************************** +* +* Copyright (c) 2026 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 BatteryDriver.c +* +* @author (last) Suresh Dharnala +* @date (last) 15-May-2026 +* +* @author (original) Suresh Dharnala +* @date (original) 11-May-2026 +* +***************************************************************************/ +#include +#include // For memcpy + +#include "i2c.h" +#include "Timers.h" + +/** + * @addtogroup Battery + * @{ + */ + +// ********** private definitions ********** + +#define BATTERY_COMM_TIME_OUT_MS 2 ///< Battery communication time out in ms. + +// ********** private data ********** +static OVERRIDE_U32_T batteryI2CStatusRegister = { 0, 0, 0, 0 }; ///< Battery I2C Interrupt Status register + +// ********** private function prototypes ********** + +static void setupI2CDriver( void ); +static BOOL waitForTxReady( void ); +static BOOL waitForRxReady( void ); +static BOOL waitForAccessReady( void ); +static void generateStopCondition( void ); +static BOOL startCommTx( U32 slaveAddr ); +static BOOL getData( U08 command, U16 * dataPtr ); +static void checkTooManyI2CCommFaults( void ); + +/*********************************************************************//** + * @brief + * The initsetupI2CDriver function initializes the I2C driver. + * @details Inputs: none + * @details Outputs: I2C driver initialized. + * @return none + *************************************************************************/ +void initsetupI2CDriver(void) +{ + setupI2CDriver(); +} + +/*********************************************************************//** + * @brief + * The setupI2CDriver function setups i2c driver in repeat mode to be + * compatible with SMBus protocol. + * @details Inputs: none + * @details Outputs: setup i2c driver in repeat mode + * @return none + *************************************************************************/ +static void setupI2CDriver( void ) +{ + i2cREG1->MDR = (U32)I2C_RESET_IN; + i2cREG1->MDR = (U32)( I2C_MASTER | I2C_TRANSMITTER | I2C_7BIT_AMODE | I2C_REPEATMODE | I2C_8_BIT ); + i2cREG1->MDR |= (U32)I2C_RESET_OUT; +} + +/*********************************************************************//** + * @brief + * The waitForTxReady function checks for transmit ready status from i2c + * driver with a timeout. + * @details Inputs: none + * @details Outputs: checked i2c transmit ready status + * @return TRUE if i2c driver ready to transmit data, otherwise FALSE + *************************************************************************/ +static BOOL waitForTxReady( void ) +{ + U32 const startTime = getMSTimerCount(); + BOOL timeout = FALSE; + + while ( ( 0 == i2cIsTxReady( i2cREG1 ) ) && ( FALSE == timeout ) ) + { + timeout = didTimeout( startTime, BATTERY_COMM_TIME_OUT_MS ); + } + + return ( TRUE == timeout ? FALSE : TRUE ); +} + +/*********************************************************************//** + * @brief + * The waitForRxReady function checks for receive ready status from i2c + * driver with a timeout. + * @details Inputs: none + * @details Outputs: checked i2c receive ready status + * @return TRUE if i2c driver ready to receive data, otherwise FALSE + *************************************************************************/ +static BOOL waitForRxReady( void ) +{ + U32 const startTime = getMSTimerCount(); + BOOL timeout = FALSE; + + while ( ( 0 == i2cIsRxReady( i2cREG1 ) ) && ( FALSE == timeout ) ) + { + timeout = didTimeout( startTime, BATTERY_COMM_TIME_OUT_MS ); + } + + return ( TRUE == timeout ? FALSE : TRUE ); +} + +/*********************************************************************//** + * @brief + * The waitForAccessReady function checks if i2c registers are ready to be accessed. + * @details Inputs: none + * @details Outputs: checked i2c registers access ready status + * @return TRUE if i2c driver registers are ready to be accessed, otherwise FALSE + *************************************************************************/ +static BOOL waitForAccessReady( void ) +{ + U32 const startTime = getMSTimerCount(); + BOOL timeout = FALSE; + + while ( ( 0 == ( i2cREG1->STR & (U32)I2C_ARDY ) ) && ( FALSE == timeout ) ) + { + timeout = didTimeout( startTime, BATTERY_COMM_TIME_OUT_MS ); + } + + return ( TRUE == timeout ? FALSE : TRUE ); +} + +/*********************************************************************//** + * @brief + * The generateStopCondition function generates a i2c stop condition and + * waits until the stop condition is detected or timed out. + * @details Inputs: none + * @details Outputs: generated i2c stop condition + * @return none + *************************************************************************/ +static void generateStopCondition( void ) +{ + U32 const startTime = getMSTimerCount(); + BOOL timeout = FALSE; + + i2cSetStop( i2cREG1 ); + while ( ( 0 == i2cIsStopDetected( i2cREG1 ) ) && ( FALSE == timeout ) ) + { + timeout = didTimeout( startTime, BATTERY_COMM_TIME_OUT_MS ); + } +} + +/*********************************************************************//** + * @brief + * The getBatteryData function starts i2c communication with battery device + * and get data based on given command. + * @details Inputs: none + * @details Outputs: get data from battery device + * @param slaveAddr battery slave device address + * @param command command to send to the slave device + * @param dataPtr data pointer to store command response data + * @return none + *************************************************************************/ +BOOL getBatteryData( U32 slaveAddr, U08 command, U32 * dataPtr ) +{ + BOOL result = FALSE; + + if ( TRUE == startCommTx( slaveAddr ) ) + { + U16 data = (U16)( (*dataPtr) & MASK_OFF_MSW ); + + if ( TRUE == getData( command, &data ) ) + { + *dataPtr = data; + result = TRUE; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The startCommTx function starts i2c communication and verifies slave devices ack. + * @details Inputs: i2cREG1 + * @details Outputs: starts i2c comm in master transmit mode + * @param slaveAddr slave device address + * @return TRUE if start communication successful, otherwise FALSE + *************************************************************************/ +static BOOL startCommTx( U32 slaveAddr ) +{ + BOOL result = FALSE; + + i2cSetSlaveAdd( i2cREG1, slaveAddr ); + + if ( FALSE == i2cIsBusBusy( i2cREG1 ) ) + { + i2cSetDirection( i2cREG1, I2C_TRANSMITTER ); + i2cSetMode( i2cREG1, I2C_MASTER ); + i2cSetStart( i2cREG1 ); + + if ( TRUE == waitForAccessReady() ) + { + if ( 0 == ( getI2CStatusRegister( TRUE ) & ( (U32)I2C_NACK | (U32)I2C_AL ) ) ) + { + result = TRUE; + } + else + { + generateStopCondition(); + checkTooManyI2CCommFaults(); + } + } + } + + if ( FALSE == result ) + { + // Reset i2c bus if cannot communicate with battery slave devices + setupI2CDriver(); + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getData function send command to battery interface to get data. + * @details Inputs: none + * @details Outputs: get the battery data based on given command + * @param command command to send to the slave device + * @param dataPtr data pointer to store command response data + * @return TRUE if received battery data, otherwise FALSE + *************************************************************************/ +static BOOL getData( U08 command, U16 * dataPtr ) +{ + BOOL result = FALSE; + U16 batteryData = 0; + + if ( TRUE == waitForTxReady() ) + { + i2cSendByte( i2cREG1, command ); + } + + // Wait until command has been transmitted before start receiving command response + if ( TRUE == waitForTxReady() ) + { + i2cSetDirection( i2cREG1, I2C_RECEIVER ); + i2cSetStart( i2cREG1 ); + + if ( TRUE == waitForRxReady() ) + { + // Due to the double buffer, the master must generate the stop condition after the (message size - 1)th data + i2cSetStop( i2cREG1 ); + batteryData = i2cReceiveByte( i2cREG1); + + if ( TRUE == waitForRxReady() ) + { + batteryData = ( batteryData | ( i2cReceiveByte( i2cREG1) << 8 ) ); + *dataPtr = batteryData; + result = TRUE; + } + else + { + checkTooManyI2CCommFaults(); + } + } + } + + 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. + *************************************************************************/ +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; +} + +/*********************************************************************//** + * @brief + * The checkTooManyI2CCommFaults function checks for too many comm faults + * within a set period of time. Assumed function is being called when a new + * comm fault is detected so a new comm fault will be added to the list. + * @details Inputs: none + * @details Outputs: alarm 98 on trigger. + * @return none + *************************************************************************/ +static void checkTooManyI2CCommFaults( void ) +{ + if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_BATT_COMM_ERROR ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TD_BATTERY_COMM_FAULT, TIME_WINDOWED_COUNT_BATT_COMM_ERROR ); + } +} + +/**@}*/ + Index: firmware/App/Drivers/BatteryDriver.h =================================================================== diff -u --- firmware/App/Drivers/BatteryDriver.h (revision 0) +++ firmware/App/Drivers/BatteryDriver.h (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1,48 @@ +/************************************************************************** +* +* Copyright (c) 2026 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 BatteryDriver.h +* +* @author (last) Suresh Dharnala +* @date (last) 15-May-2026 +* +* @author (original) Suresh Dharnala +* @date (original) 11-May-2026 +* +***************************************************************************/ + +#ifndef APP_DRIVERS_BATTERYDRIVER_H_ +#define APP_DRIVERS_BATTERYDRIVER_H_ + +#include "TDCommon.h" +#include "Utilities.h" + +/** + * @defgroup Battery Battery + * @brief The battery module provides interfaces to the smart battery charger controller through I2C communication. + * + * @addtogroup Battery + * @{ + */ + +// ********** public function prototypes ********** +void initsetupI2CDriver(void); +BOOL getBatteryData( U32 slaveAddr, U08 command, U32 * dataPtr ); +U32 getI2CStatusRegister( BOOL resetOverride ); + +BOOL testSetBatteryRemainingCapacityOverride( F32 value ); +BOOL testResetBatteryRemainingCapacityOverride( void ); +BOOL testSetBatteryStatusOverride( U32 value ); +BOOL testResetBatteryStatusOverride( void ); +BOOL testSetBatteryChargerStatusOverride( U32 value ); +BOOL testResetBatteryChargerStatusOverride( void ); +BOOL testSetBatteryI2CStatusOverride( U32 value ); +BOOL testResetBatteryI2CStatusOverride( void ); + +/**@}*/ + +#endif /* APP_DRIVERS_BATTERYDRIVER_H_ */ Index: firmware/App/Monitors/BatteryMonitor.c =================================================================== diff -u --- firmware/App/Monitors/BatteryMonitor.c (revision 0) +++ firmware/App/Monitors/BatteryMonitor.c (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1,493 @@ +/************************************************************************** +* +* Copyright (c) 2026 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 BatteryMonitor.c +* +* @author (last) Suresh Dharnala +* @date (last) 15-May-2026 +* +* @author (original) Suresh Dharnala +* @date (original) 13-May-2026 +* +***************************************************************************/ + +#include "BatteryMonitor.h" +#include "Timers.h" +#include "BatteryDriver.h" +#include "PersistentAlarm.h" +#include "Messaging.h" + +// ********** private definitions ********** +#define BATTERY_CHARGER_SLAVE_ADDRESS 0x6B ///< Battery charger controller device address. +#define BATTERY_PACK_SLAVE_ADDRESS 0x0B ///< Battery pack device address. + +#define BATTERY_CHARGER_STATUS1_CMD 0x21 ///< Battery charger status register 1 +#define BATTERY_CHARGER_STATUS2_CMD 0x22 ///< Battery charger status register 2. +#define BATTERY_CHARGER_FAULT_CMD 0x24 ///< Command to get battery charger fault. +#define BATTERY_PACK_ERROR_BITS 0x0F ///< Error codes are in the first byte. + +#define BATTERY_MONITOR_INTERVAL_MS 247 ///< Battery monitor interval in ms. +#define BATTERY_COMM_FAULT_COUNT 5 ///< Battery communication fault persistent count before alarming. +#define BATTERY_COMM_FAULT_TIMER ( 10 * SEC_PER_MIN * MS_PER_SECOND ) ///< Battery communication fault persistence timer. +// Battery logging +#define BATTERY_CHARGER_ADDR_TS 0x37 ///< Battery thermistor ADC register. +#define BATTERY_CHARGER_ADDR_VBAT 0x33 ///< Battery voltage ADC register. +#define BATTERY_CHARGER_ADDR_VSYS 0x35 ///< Battery system voltage ADC register. +#define BATTERY_CHARGER_ADDR_CURRENT 0x2F ///< Battery current ADC register. +#define BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE 0x0d ///< Battery pack address relative state of charge. +#define BATTERY_PACK_ADDR_REMAINING_CAPACITY 0x0f ///< Battery pack address remaining capacity. +#define BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY 0x10 ///< Battery pack address full charge capacity. +#define BATTERY_PACK_ADDR_BATTERY_STATUS 0x16 ///< Battery pack address battery status. +#define BATTERY_MIN_CAPACITY_MAH 1950.0F ///< Minimum battery capacity for starting a treatment. + +// ********** private data ********** + +/// Persist time (in ms) for battery pack status error condition. +static const U32 BATT_STATUS_ERROR_PERSIST_MS = ( 5 * MS_PER_SECOND ); + +static U32 lastBatteryMonitorTime = 0; ///< Previous battery monitor time. +static OVERRIDE_U32_T batteryStatus = { 0, 0, 0, 0 }; ///< Battery status +static OVERRIDE_U32_T batteryChargerStatus = { 0, 0, 0, 0 }; ///< Battery charger status +static OVERRIDE_U32_T batteryI2CStatusRegister = { 0, 0, 0, 0 }; ///< Battery I2C Interrupt Status register +static OVERRIDE_F32_T batteryRemCapacity_mAh = { 0.0, 0.0, 0.0, 0 }; ///< Battery pack remaining capacity (in mAh). + +static BATTERY_MANAGEMENT_ENUM_T current_BM_value = BEGINNING_OF_LIST; ///< Index for which battery data to read now. +static BATTERY_MANAGER_PAYLOAD_T BatteryManagerData; ///< Record with latest battery pack data updated at the slower frequency. +static BATTERY_STATUS_PAYLOAD_T BatteryStatusData; ///< Record with latest battery pack/charger status data updated at the faster frequency. + +// ********** private function prototypes ********** + +static F32 getBatteryRemainingCapacity_mAh( void ); +static U32 getBatteryStatus( void ); +static U32 getBatteryChargerStatus( void ); +// For logging +static void getBatteryManagementData( void ); +static void publishBatteryManagementData( void ); +static void publishBatteryStatusData( void ); + +/*********************************************************************//** + * @brief + * The initBattery function initializes the Battery module. + * @details Inputs: none + * @details Outputs: Battery module is initialized. + * @return none + *************************************************************************/ +void initBattery( void ) +{ + + memset( &BatteryStatusData, 0, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); + memset( &BatteryManagerData, 0, sizeof( BATTERY_MANAGER_PAYLOAD_T ) ); + + // Initialize persistent alarm for battery pack status error + initPersistentAlarm( ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED, 0, BATT_STATUS_ERROR_PERSIST_MS ); + + // Initialize bad message CRC time windowed count + initTimeWindowedCount( TIME_WINDOWED_COUNT_BATT_COMM_ERROR, BATTERY_COMM_FAULT_COUNT, BATTERY_COMM_FAULT_TIMER ); + + initsetupI2CDriver(); +} + +/*********************************************************************//** + * @brief + * The execBatteryMonitor function monitors the battery status. + * @details Inputs: lastBatteryMonitorTime + * @details Outputs: lastBatteryMonitorTime + * @return none + *************************************************************************/ +void execBatteryMonitor( void ) +{ + if ( TRUE == didTimeout( lastBatteryMonitorTime, BATTERY_MONITOR_INTERVAL_MS ) ) + { + lastBatteryMonitorTime = getMSTimerCount(); + getBatteryManagementData(); + } +} + +/*********************************************************************//** + * @brief + * The getBatteryChargerStatus function returns the latest battery + * charger status. + * @details Inputs: batteryChargerStatus + * @details Outputs: none + * @return battery charger status. + *************************************************************************/ +static U32 getBatteryChargerStatus( void ) +{ + U32 result = batteryChargerStatus.data; + + if ( OVERRIDE_KEY == batteryChargerStatus.override ) + { + result = batteryChargerStatus.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getBatteryStatus function returns the latest battery status + * @details Inputs: batteryStatus + * @details Outputs: none + * @return battery status. + *************************************************************************/ +static U32 getBatteryStatus( void ) +{ + U32 result = batteryStatus.data; + + if ( OVERRIDE_KEY == batteryStatus.override ) + { + result = batteryStatus.ovData; + } + + return result; +} + + +/*********************************************************************//** + * @brief + * The getBatteryRemainingCapacity_mAh function returns the latest battery + * remaining capacity (in mAh). + * @details Inputs: batteryRemCapacity_mAh + * @details Outputs: none + * @return battery remaining capacity (in mAh). + *************************************************************************/ +static F32 getBatteryRemainingCapacity_mAh( void ) +{ + F32 result = batteryRemCapacity_mAh.data; + + if ( OVERRIDE_KEY == batteryRemCapacity_mAh.override ) + { + result = batteryRemCapacity_mAh.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getBatteryManagementData function accumulates the battery management + * and status data and publishes the two sets of values when complete. Also, + * the battery remaining capacity is stored, the battery status alarm is set + * if necessary, and the loss of AC power alarm is set if necessary. + * @details Inputs: current_BM_value, BatteryStatusData + * @details Outputs: batteryRemCapacity_mAh, BatteryManagerData + * @return none + *************************************************************************/ +static void getBatteryManagementData(void) +{ + // Increment the position in the enum. Starting value is BEGINNING_OF_LIST (0), so on the first + // cycle through this function it will be set to the first valid position (1) + current_BM_value += 1; + + switch( current_BM_value ) + { + case BATTERY_PACK_REMAINING_CAPACITY1: + case BATTERY_PACK_REMAINING_CAPACITY2: + case BATTERY_PACK_REMAINING_CAPACITY3: + case BATTERY_PACK_REMAINING_CAPACITY4: + case BATTERY_PACK_REMAINING_CAPACITY5: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_REMAINING_CAPACITY, &BatteryStatusData.RemainingCapacity ); + batteryRemCapacity_mAh.data = (F32)BatteryStatusData.RemainingCapacity; + break; + + case BATTERY_PACK_BATTERY_STATUS1: + case BATTERY_PACK_BATTERY_STATUS2: + case BATTERY_PACK_BATTERY_STATUS3: + case BATTERY_PACK_BATTERY_STATUS4: + case BATTERY_PACK_BATTERY_STATUS5: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_BATTERY_STATUS, &BatteryStatusData.BatteryStatus ); + batteryStatus.data = BatteryStatusData.BatteryStatus; + if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED, ( getBatteryStatus() & BATTERY_PACK_ERROR_BITS ) != 0 ) ) ) + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_BATTERY_PACK_ERROR_DETECTED, getBatteryStatus(), BATTERY_PACK_ERROR_BITS ); + } + break; + + case BATTERY_CHARGER_TS: + getBatteryData ( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_ADDR_TS, &BatteryManagerData.TS ); + BatteryManagerData.TS = (BatteryManagerData.TS * 1024.0f) / 100.0F; + break; + + case BATTERY_CHARGER_VBAT: + getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_ADDR_VBAT, &BatteryManagerData.VBAT ); + BatteryManagerData.VBAT = BatteryManagerData.VBAT * 2U; + break; + + case BATTERY_CHARGER_VSYS: + getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_ADDR_VSYS, &BatteryManagerData.VSYS ); + BatteryManagerData.VSYS = BatteryManagerData.VSYS * 2U; + break; + + case BATTERY_CHARGER_FAULT: + getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_FAULT_CMD, &BatteryManagerData.FaultStatus ); + break; + + case BATTERY_CHARGER_CURRENT: + getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_ADDR_CURRENT, &BatteryManagerData.IBAT ); + BatteryManagerData.IBAT = BatteryManagerData.IBAT * 2U; + break; + + case BATTERY_PACK_RELATIVE_STATE_OF_CHARGE: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_RELATIVE_STATE_OF_CHARGE, &BatteryManagerData.RelativeStateOfCharge ); + break; + + case BATTERY_PACK_FULL_CHARGE_CAPACITY: + getBatteryData ( BATTERY_PACK_SLAVE_ADDRESS, BATTERY_PACK_ADDR_FULL_CHARGE_CAPACITY, &BatteryManagerData.FullChargeCapacity ); + break; + + case BATTERY_CHARGER_STATUS1: + case BATTERY_CHARGER_STATUS2: + case BATTERY_CHARGER_STATUS3: + case BATTERY_CHARGER_STATUS4: + case BATTERY_CHARGER_STATUS5: + if ( TRUE == getBatteryData( BATTERY_CHARGER_SLAVE_ADDRESS, BATTERY_CHARGER_STATUS1_CMD, &BatteryStatusData.BatteryChargerStatus ) ) + { + batteryChargerStatus.data = BatteryStatusData.BatteryChargerStatus; + } + // Publish battery status data after reading battery charger status (last status read) + publishBatteryStatusData(); + break; + + case END_OF_LIST: + current_BM_value = BEGINNING_OF_LIST; + publishBatteryManagementData(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_BATTERY_INVALID_MANAGEMENT_DATA_STATE, current_BM_value ) + break; + } +} + +/*********************************************************************//** + * @brief + * The isBatteryCharged function checks if the battery is charged. + * @details Inputs: batteryRelStateOfCharge_pct + * @details Outputs: none + * @return TRUE if battery is charged, otherwise FALSE + *************************************************************************/ +BOOL isBatteryCharged( void ) +{ + return ( getBatteryRemainingCapacity_mAh() > BATTERY_MIN_CAPACITY_MAH ? TRUE : FALSE ); +} + +/*********************************************************************//** + * @brief + * The publishBatteryManagementData function publishes the battery management data + * @details Inputs: BatteryManagerData + * @details Outputs: send battery management data + * @return none + *************************************************************************/ +static void publishBatteryManagementData( void ) +{ + broadcastData( MSG_ID_TD_BATTERY_MANAGEMENT_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&BatteryManagerData, sizeof( BATTERY_MANAGER_PAYLOAD_T ) ); +} + +/*********************************************************************//** + * @brief + * The publishBatteryStatusData function publishes the battery status data + * @details Inputs: BatteryStatusData + * @details Outputs: none + * @return none + *************************************************************************/ +static void publishBatteryStatusData( void ) +{ + BATTERY_STATUS_PAYLOAD_T batteryStatusData; + + batteryStatusData.RemainingCapacity = (U32)getBatteryRemainingCapacity_mAh(); + batteryStatusData.BatteryStatus = getBatteryStatus(); + batteryStatusData.BatteryChargerStatus = getBatteryChargerStatus(); + batteryStatusData.BatteryI2CStatus = getI2CStatusRegister( FALSE ); + + broadcastData( MSG_ID_TD_BATTERY_STATUS_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&batteryStatusData, sizeof( BATTERY_STATUS_PAYLOAD_T ) ); +} + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetBatteryRemainingPercentOverride function overrides the battery + * remaining percent value. + * @details Inputs: none + * @details Outputs: batteryRemCapacity_mAh + * @param value override battery remaining percent + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBatteryRemainingCapacityOverride( F32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryRemCapacity_mAh.ovData = value; + batteryRemCapacity_mAh.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBatteryRemainingPercentOverride function resets the + * override of the battery remaining percent value. + * @details Inputs: none + * @details Outputs: batteryRemCapacity_mAh + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetBatteryRemainingCapacityOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryRemCapacity_mAh.override = OVERRIDE_RESET; + batteryRemCapacity_mAh.ovData = batteryRemCapacity_mAh.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetBatteryStatusOverride function overrides the battery + * status value. + * @details Inputs: none + * @details Outputs: batteryStatus + * @param value override battery status + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBatteryStatusOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryStatus.ovData = value; + batteryStatus.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBatteryStatusOverride function resets the + * override of the battery status value. + * @details Inputs: none + * @details Outputs: batteryStatus + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetBatteryStatusOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryStatus.override = OVERRIDE_RESET; + batteryStatus.ovData = batteryStatus.ovInitData; + } + + return result; +} + + +/*********************************************************************//** + * @brief + * The testSetBatteryChargerStatusOverride function overrides the battery + * charger status value. + * @details Inputs: none + * @details Outputs: batteryChargerStatus + * @param value override battery charge status + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBatteryChargerStatusOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryChargerStatus.ovData = value; + batteryChargerStatus.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBatteryChargerStatusOverride function resets the + * override of the battery charger status. + * @details Inputs: none + * @details Outputs: batteryChargerStatus + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetBatteryChargerStatusOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryChargerStatus.override = OVERRIDE_RESET; + batteryChargerStatus.ovData = batteryChargerStatus.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetBatteryI2CStatusOverride function overrides the battery + * i2c status register value. + * @details Inputs: none + * @details Outputs: batteryI2CStatusRegister + * @param value override battery charge status + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetBatteryI2CStatusOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryI2CStatusRegister.ovData = value; + batteryI2CStatusRegister.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBatteryI2CStatusOverride function resets the + * override of the battery i2c status register value. + * @details Inputs: none + * @details Outputs: batteryI2CStatusRegister + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetBatteryI2CStatusOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + batteryI2CStatusRegister.override = OVERRIDE_RESET; + batteryI2CStatusRegister.ovData = batteryI2CStatusRegister.ovInitData; + } + + return result; +} Index: firmware/App/Monitors/BatteryMonitor.h =================================================================== diff -u --- firmware/App/Monitors/BatteryMonitor.h (revision 0) +++ firmware/App/Monitors/BatteryMonitor.h (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -0,0 +1,78 @@ +/************************************************************************** +* +* Copyright (c) 2026 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 BatteryMonitor.h +* +* @author (last) Suresh Dharnala +* @date (last) 15-May-2026 +* +* @author (original) Suresh Dharnala +* @date (original) 13-May-2026 +* +***************************************************************************/ + +#ifndef APP_MONITORS_BATTERYMONITOR_H_ +#define APP_MONITORS_BATTERYMONITOR_H_ + +#include "Utilities.h" + +void initBattery( void ); +void execBatteryMonitor( void ); +BOOL isBatteryCharged( void ); + +/// Payload record structure for battery status data broadcast message +typedef struct +{ + U32 RemainingCapacity; ///< Remaining capacity (mAh). + U32 BatteryStatus; ///< Battery status. + U32 BatteryChargerStatus; ///< Battery charge status. + U32 BatteryI2CStatus; +} BATTERY_STATUS_PAYLOAD_T; + +/// Payload record structure for battery module data broadcast message +typedef struct +{ + U32 FaultStatus; ///< Charger fault status. + U32 TS; ///< Temperature. + U32 VBAT; ///< Voltage. + U32 VSYS; ///< System voltage in mV. + U32 IBAT; ///< Current. + U32 RelativeStateOfCharge; ///< Relative state of charge. + U32 FullChargeCapacity; ///< Full charge capacity. +} BATTERY_MANAGER_PAYLOAD_T; + +/// Enumeration of battery data to be read from the battery pack or battery charger in a round-robin fashion. +typedef enum BatteryManagementEnum +{ + BEGINNING_OF_LIST = 0, ///< Start of battery data list + BATTERY_PACK_REMAINING_CAPACITY1, ///< Remaining battery capacity (in mWh) (first of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS1, ///< Battery pack status (first of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS1, ///< Battery charger status (first of 5 to increase frequency of reads) + BATTERY_PACK_REMAINING_CAPACITY2, ///< Remaining battery capacity (in mWh) (second of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS2, ///< Battery pack status (second of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS2, ///< Battery charger status (second of 5 to increase frequency of reads) + BATTERY_PACK_REMAINING_CAPACITY3, ///< Remaining battery capacity (in mWh) (third of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS3, ///< Battery pack status (third of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS3, ///< Battery charger status (third of 5 to increase frequency of reads) + BATTERY_PACK_RELATIVE_STATE_OF_CHARGE, ///< Battery pack relative state of charge (%) (relative to full charge capacity) + BATTERY_PACK_FULL_CHARGE_CAPACITY, ///< Battery pack full charge capacity (in mWh) + BATTERY_PACK_REMAINING_CAPACITY4, ///< Remaining battery capacity (in mWh) (fourth of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS4, ///< Battery pack status (fourth of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS4, ///< Battery charger status (fourth of 5 to increase frequency of reads) + BATTERY_PACK_REMAINING_CAPACITY5, ///< Remaining battery capacity (in mWh) (fifth of 5 to increase frequency of reads) + BATTERY_PACK_BATTERY_STATUS5, ///< Battery pack status (fifth of 5 to increase frequency of reads) + BATTERY_CHARGER_STATUS5, ///< Battery charger status (fifth of 5 to increase frequency of reads) + BATTERY_CHARGER_TS, ///< Battery charger temperature (in deg K) + BATTERY_CHARGER_VBAT, ///< Battery charger terminal voltage (in mV) + BATTERY_CHARGER_VSYS, ///< Battery charger system voltage (in mV) + BATTERY_CHARGER_FAULT, ///< Battery charger fault status + BATTERY_CHARGER_CURRENT, ///< Battery charger current (in mA) + END_OF_LIST, ///< End of battery data list + NUM_OF_BATTERY_PACK_LIST, ///< Number of battery pack list +} BATTERY_MANAGEMENT_ENUM_T; + +#endif /* APP_MONITORS_BATTERYMONITOR_H_ */ Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -re9e339870c5ed01230963f00d400331ab879c91f -r76687feec84ff53de5eed426b26290bd08de963c --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision e9e339870c5ed01230963f00d400331ab879c91f) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -186,6 +186,7 @@ SW_FAULT_ID_TD_AIR_PUMP_DUTY_CYCLE_OUT_OF_RANGE = 155, SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER = 156, SW_FAULT_ID_INVALID_TREATMENT_MODALITY = 157, + SW_FAULT_ID_BATTERY_INVALID_MANAGEMENT_DATA_STATE = 158, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Tasks/TaskBG.c =================================================================== diff -u -rf8a6d0d2b55d834e1e25ec98370e538ff547e148 -r76687feec84ff53de5eed426b26290bd08de963c --- firmware/App/Tasks/TaskBG.c (.../TaskBG.c) (revision f8a6d0d2b55d834e1e25ec98370e538ff547e148) +++ firmware/App/Tasks/TaskBG.c (.../TaskBG.c) (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -23,7 +23,7 @@ #include "Timers.h" //#include "Voltages.h" #include "WatchdogMgmt.h" - +#include "BatteryMonitor.h" /** * @addtogroup TaskBackground * @{ @@ -75,7 +75,7 @@ // execNVDataMgmt(); // // // Monitor battery status -// execBatteryMonitor(); + execBatteryMonitor(); } } Index: firmware/source/sys_main.c =================================================================== diff -u -rf979c391268b595e44fb6747d43487e4d2294e68 -r76687feec84ff53de5eed426b26290bd08de963c --- firmware/source/sys_main.c (.../sys_main.c) (revision f979c391268b595e44fb6747d43487e4d2294e68) +++ firmware/source/sys_main.c (.../sys_main.c) (revision 76687feec84ff53de5eed426b26290bd08de963c) @@ -67,6 +67,7 @@ #include "BloodFlow.h" #include "Bubbles.h" #include "Buttons.h" +#include "BatteryMonitor.h" #include "CpldInterface.h" #include "DDInterface.h" #include "Ejector.h" @@ -190,7 +191,7 @@ initSystemCommTD(); initWatchdogMgmt(); // Initialize monitors -// initBattery(); + initBattery(); initBubbles(); initButtons(); initPressure();