/************************************************************************** * * Copyright (c) 2019-2020 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) Quang Nguyen * @date (last) 25-Aug-2020 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 * ***************************************************************************/ #include "gio.h" #include "lin.h" #include "ConcentratePumps.h" #include "DrainPump.h" #include "Fans.h" #include "Heaters.h" #include "OperationModes.h" #include "Reservoirs.h" #include "ROPump.h" #include "SystemComm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Thermistors.h" #include "UVReactors.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 Inputs: none * @details Outputs: Executed all general task functions. * @return none *************************************************************************/ 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(); // monitor concentrate pumps //execConcentratePumpMonitor(); // Monitor thermistors state machine //execThermistors(); // manage RO pump execROPumpController(); // manage drain pump execDrainPumpController(); // manage concentrate pumps //execConcentratePumpController(); // Manage fans controller //execFans(); // manage time-based reservoir tasks //execReservoirs(); // Manage UV reactors controller //execUVReactos(); #ifndef DISABLE_HEATERS_AND_TEMPS // Primary heaters state machine execPrimaryHeaters(); // Trimmer heater state machine execTrimmerHeater(); #endif // run operation mode state machine execOperationModes(); // 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 } /**@}*/