/************************************************************************** * * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file TaskGeneral.c * * @author (last) Vinayakam Mani * @date (last) 05-Aug-2024 * * @author (original) Vinayakam Mani * @date (original) 05-Aug-2024 * ***************************************************************************/ #include "gio.h" #include "lin.h" #include "ConcentratePumps.h" #include "DialysatePumps.h" #include "Heaters.h" #include "Messaging.h" #include "OperationModes.h" #include "RinsePump.h" #include "SystemCommDD.h" #include "TaskGeneral.h" #include "WatchdogMgmt.h" /** * @addtogroup TaskGeneral * @{ */ #ifdef TASK_TIMING_OUTPUT_ENABLED #include "mibspi.h" #define TASK_TIMING_TEST_PIN_SPI1_PORT_MASK 0x00000020 // (CS5 - re-purposed as output GPIO) #define SET_TASK_ON() { mibspiREG3->PC3 |= TASK_TIMING_TEST_PIN_SPI1_PORT_MASK; } #define SET_TASK_OFF() { mibspiREG3->PC3 &= ~TASK_TIMING_TEST_PIN_SPI1_PORT_MASK; } #endif /*********************************************************************//** * @brief * The taskGeneral function handles the scheduled general task interrupt. * Calls the executive functions for most monitors and controllers, the * operation modes, the system communications, and alarms. * @details \b Inputs: none * @details \b Outputs: Executed all general task functions. * @return none * @note This task runs every 50 ms interval. *************************************************************************/ void taskGeneral( void ) { /* Order of exec functions * 1. Comm Rx * 2. Monitors * 3. Op modes * 4. Controllers * 5. Comm Tx * */ #ifdef TASK_TIMING_OUTPUT_ENABLED // SET_TASK_ON(); // TODO - uncomment and define TASK_TIMING_OUTPUT_ENABLED to monitor this tasks timing #endif // check in with watchdog manager checkInWithWatchdogMgmt( TASK_GENERAL ); // do this first to keep timing consistent with watchdog management // manage data received from other sub-systems execSystemCommRx(); //TODO : Enable later Concentratepump and Heaters // monitor concentrate pumps execConcentratePumpMonitor(); // Monitor DD voltages ///execVoltagesMonitor(); // run operation mode state machine execOperationModes(); // manage dialysate pump execDialysatePumpController(); // manage concentrate pumps execConcentratePumpController(); // manage rinse pump execRinsePumpController(); // Manage switches monitor //execSwitches(); // Heaters controller execHeatersControl(); // Monitor RAM error status //execRAMMonitor(); // Run non-volatile data management state machine that sends the data record // to Dialin //execNVDataMgmtProcessRecord(); // Run alarm management execAlarmMgmt(); // manage data to be transmitted to other sub-systems execSystemCommTx(); #ifdef TASK_TIMING_OUTPUT_ENABLED // SET_TASK_OFF(); // TODO - uncomment and define TASK_TIMING_OUTPUT_ENABLED to monitor this tasks timing #endif } /**@}*/