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();