Index: firmware/App/Monitors/Battery.c =================================================================== diff -u -rbbc62d810da9b094ea4f0fc765e1586ed37f0b34 -r0c6f5d0d80edbb2461721d840769bee5481c18c7 --- firmware/App/Monitors/Battery.c (.../Battery.c) (revision bbc62d810da9b094ea4f0fc765e1586ed37f0b34) +++ firmware/App/Monitors/Battery.c (.../Battery.c) (revision 0c6f5d0d80edbb2461721d840769bee5481c18c7) @@ -19,6 +19,7 @@ #include "BatteryDriver.h" #include "Messaging.h" #include "PersistentAlarm.h" +#include "TaskGeneral.h" #include "TestSupport.h" #include "Timers.h" @@ -30,17 +31,21 @@ // ********** private definitions ********** #define BATTERY_MONITOR_INTERVAL_MS 247 ///< Battery monitor interval in ms. +#define BATTERY_DATA_PUB_INTERVAL BATTERY_END_OF_LIST_TIME_TO_PUBLISH ///< Default battery data publish interval in battery monitor ticks. #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. #define BATTERY_PACK_ERROR_BITS 0x0F ///< Error codes are in the first byte. #define BATTERY_MIN_CAPACITY_MAH 1950U ///< Minimum battery capacity for starting a treatment. #define BATTERY_CHARGER_ERROR_BITS 0x08 ///< Error codes are in the first byte of third bit. #define BATTERY_CHARGER_FAULTY_ERROR_BITS 0XFF ///< Error codes are in the first and second byte. + // ********** private data ********** -static const U32 BATT_STATUS_ERROR_PERSIST_MS = ( 5 * MS_PER_SECOND ); ///< Persist time in ms for battery pack status error condition. +static const U32 BATT_STATUS_ERROR_PERSIST_MS = ( 5 * MS_PER_SECOND ); ///< Persist time in ms for battery pack status error condition. static U32 lastBatteryMonitorTime; ///< Previous battery monitor time. +static U32 batteryDataPublicationTimerCounter; ///< Used to schedule battery data publication to CAN bus. static OVERRIDE_U32_T batteryRegisterOverrides[ NUM_OF_BATTERY_REGISTERS-1 ]; ///< Battery register data and overrides. +static OVERRIDE_U32_T batteryDataPublishInterval; ///< Interval at which to publish battery data to CAN bus. static BATTERY_MANAGEMENT_ENUM_T currentBmValue; ///< Index for which battery data to read now. static BATTERY_DATA_PAYLOAD_T batteryData; ///< Record with latest battery data. @@ -65,7 +70,14 @@ initSetupI2cDriver(); currentBmValue = BEGINNING_OF_LIST; lastBatteryMonitorTime = 0; + batteryDataPublicationTimerCounter = BATTERY_DATA_PUB_INTERVAL; initBatteryRegisterOverrides(); + + batteryDataPublishInterval.data = BATTERY_DATA_PUB_INTERVAL; + batteryDataPublishInterval.ovData = BATTERY_DATA_PUB_INTERVAL; + batteryDataPublishInterval.ovInitData = BATTERY_DATA_PUB_INTERVAL; + batteryDataPublishInterval.override = OVERRIDE_RESET; + memset( &batteryData, 0, sizeof( BATTERY_DATA_PAYLOAD_T ) ); // Initialize persistent alarm for battery pack status error @@ -170,6 +182,7 @@ { lastBatteryMonitorTime = getMSTimerCount(); getBatteryManagementData(); + } } @@ -280,8 +293,9 @@ break; case BATTERY_END_OF_LIST_TIME_TO_PUBLISH: - currentBmValue = BEGINNING_OF_LIST; + // Publish battery data on configured interval. publishBatteryDataPayload(); + currentBmValue = BEGINNING_OF_LIST; break; default: @@ -306,27 +320,33 @@ /*********************************************************************//** * @brief * The publishBatteryDataPayload function updates and publishes the battery - * data payload over CAN. + * data payload over CAN at the configured publish interval. * @details \b Message \b Sent: MSG_ID_TD_BATTERY_DATA - * @details \b Inputs: batteryRegisterOverrides[], batteryData - * @details \b Outputs: batteryData + * @details \b Inputs: batteryDataPublicationTimerCounter, + * batteryRegisterOverrides[], batteryData + * @details \b Outputs: batteryDataPublicationTimerCounter, batteryData * @return none *************************************************************************/ static void publishBatteryDataPayload( void ) { - batteryData.remainingCapacity = getBatteryRegisterValue( BATTERY_PACK_REMAINING_CAPACITY ); - batteryData.batteryStatus = getBatteryRegisterValue( BATTERY_PACK_BATTERY_STATUS ); - batteryData.batteryChargerStatus = getBatteryRegisterValue( BATTERY_CHARGER_STATUS ); - batteryData.batteryI2cStatus = getI2cStatusRegister( FALSE ); - batteryData.faultStatus = getBatteryRegisterValue( BATTERY_CHARGER_FAULT ); - batteryData.ts = getBatteryRegisterValue( BATTERY_CHARGER_TS ); - batteryData.vbat = getBatteryRegisterValue( BATTERY_CHARGER_VBAT ); - batteryData.vsys = getBatteryRegisterValue( BATTERY_CHARGER_VSYS ); - batteryData.ibat = getBatteryRegisterValue( BATTERY_CHARGER_CURRENT ); - batteryData.relativeStateOfCharge = getBatteryRegisterValue( BATTERY_PACK_RELATIVE_STATE_OF_CHARGE ); - batteryData.fullChargeCapacity = getBatteryRegisterValue( BATTERY_PACK_FULL_CHARGE_CAPACITY ); + // Publish battery data on interval. + if ( ++batteryDataPublicationTimerCounter >= getU32OverrideValue( &batteryDataPublishInterval ) ) + { + batteryData.remainingCapacity = getBatteryRegisterValue( BATTERY_PACK_REMAINING_CAPACITY ); + batteryData.batteryStatus = getBatteryRegisterValue( BATTERY_PACK_BATTERY_STATUS ); + batteryData.batteryChargerStatus = getBatteryRegisterValue( BATTERY_CHARGER_STATUS ); + batteryData.batteryI2cStatus = getI2cStatusRegister( FALSE ); + batteryData.faultStatus = getBatteryRegisterValue( BATTERY_CHARGER_FAULT ); + batteryData.ts = getBatteryRegisterValue( BATTERY_CHARGER_TS ); + batteryData.vbat = getBatteryRegisterValue( BATTERY_CHARGER_VBAT ); + batteryData.vsys = getBatteryRegisterValue( BATTERY_CHARGER_VSYS ); + batteryData.ibat = getBatteryRegisterValue( BATTERY_CHARGER_CURRENT ); + batteryData.relativeStateOfCharge = getBatteryRegisterValue( BATTERY_PACK_RELATIVE_STATE_OF_CHARGE ); + batteryData.fullChargeCapacity = getBatteryRegisterValue( BATTERY_PACK_FULL_CHARGE_CAPACITY ); - broadcastData( MSG_ID_TD_BATTERY_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&batteryData, sizeof( BATTERY_DATA_PAYLOAD_T ) ); + broadcastData( MSG_ID_TD_BATTERY_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&batteryData, sizeof( BATTERY_DATA_PAYLOAD_T ) ); + batteryDataPublicationTimerCounter = 0; + } } /************************************************************************* @@ -348,4 +368,21 @@ return u32ArrayOverride( message, batteryRegisterOverrides, BATTERY_CHARGER_CURRENT, OFF, HEX_32_BIT_FULL_SCALE ); } +/*********************************************************************//** + * @brief + * The testBatteryPublishIntervalOverride function overrides the interval + * at which TD battery data is published. + * @details \b Inputs: none + * @details \b Outputs: batteryDataPublishInterval + * @param message Override message from Dialin which includes the interval + * (in ms) to override the battery broadcast interval to. + * @return TRUE if override request is successful, FALSE if not + *************************************************************************/ +BOOL testBatteryPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &batteryDataPublishInterval, BATTERY_MONITOR_INTERVAL_MS ); + + return result; +} + /**@}*/ Index: firmware/App/Monitors/Battery.h =================================================================== diff -u -rbbc62d810da9b094ea4f0fc765e1586ed37f0b34 -r0c6f5d0d80edbb2461721d840769bee5481c18c7 --- firmware/App/Monitors/Battery.h (.../Battery.h) (revision bbc62d810da9b094ea4f0fc765e1586ed37f0b34) +++ firmware/App/Monitors/Battery.h (.../Battery.h) (revision 0c6f5d0d80edbb2461721d840769bee5481c18c7) @@ -55,6 +55,7 @@ BOOL isBatteryCharged( void ); BOOL testBatteryRegisterOverride( MESSAGE_T *message ); +BOOL testBatteryPublishIntervalOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -rbbc62d810da9b094ea4f0fc765e1586ed37f0b34 -r0c6f5d0d80edbb2461721d840769bee5481c18c7 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision bbc62d810da9b094ea4f0fc765e1586ed37f0b34) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 0c6f5d0d80edbb2461721d840769bee5481c18c7) @@ -185,6 +185,7 @@ { MSG_ID_TD_BLOOD_PRIME_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBloodPrimePublishIntervalOverride }, { MSG_ID_TD_ENABLE_VENOUS_BUBBLE_ALARM, &testEnableVenousBubbleAlarm }, { MSG_ID_TD_BATTERY_REGISTERS_OVERRIDE_REQUEST, &testBatteryRegisterOverride }, + { MSG_ID_TD_BATTERY_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBatteryPublishIntervalOverride }, }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T))