Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -r1017bbc5760a50e20357da1e4f705b3e6157375e -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 1017bbc5760a50e20357da1e4f705b3e6157375e) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -14,7 +14,7 @@ * **************************************************************************/ -#include "AlarmMgmt.h" +#include "DialInFlow.h" #include "ModeTreatment.h" #include "OperationModes.h" #include "SystemCommMessages.h" @@ -27,55 +27,62 @@ // ********** private definitions ********** -#define START_DG_CMD TRUE ///< Parameter for DG start/stop command function. True = start. -#define STOP_DG_CMD FALSE ///< Parameter for DG start/stop command function. False = stop. +#define START_DG_CMD TRUE ///< Parameter for DG start/stop command function. True = start. +#define STOP_DG_CMD FALSE ///< Parameter for DG start/stop command function. False = stop. -#define DRAIN_RESERVOIR_TO_VOLUME_ML 100 ///< Drain reservoir to this volume (in mL) during treatment. -#define FILL_RESERVOIR_TO_VOLUME_ML 1500 ///< Fill reservoir to this volume (in mL) during treatment. +#define DRAIN_RESERVOIR_TO_VOLUME_ML 200 //100 ///< Drain reservoir to this volume (in mL) during treatment. +#define FILL_RESERVOIR_TO_VOLUME_ML 1500 ///< Fill reservoir to this volume (in mL) during treatment. +#define RESERVOIR_SETTLE_TIME_MS 3000 ///< Time (in ms) allotted for reservoir to settle (after fill, before drain). + /// States of the treatment reservoir management state machine. typedef enum TreatmentReservoirMgmt_States { - TREATMENT_RESERVOIR_MGMT_START_STATE = 0, ///< If DG not already in re-circ mode, try to get it there. - TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE, ///< In DG re-circ, wait for lines to flush - then start draining inactive reservoir. - TREATMENT_RESERVOIR_MGMT_DRAIN_RESERVOIR_STATE, ///< Wait for drain to complete. - TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE, ///< Wait to fill inactive reservoir (if appropriate) - then start filling inactive reservoir. - TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE, ///< Wait for fill to complete. - TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RES_SWITCH_STATE, ///< Wait for active reservoir to be consumed and switch cmd given - then back to flush DG lines state. - NUM_OF_TREATMENT_RESERVOIR_MGMT_STATES ///< Number of treatment reservoir mgmt. states. + TREATMENT_RESERVOIR_MGMT_START_STATE = 0, ///< If DG not already in re-circ mode, try to get it there. + TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE, ///< In DG re-circ, wait for lines to flush - then start draining inactive reservoir. + TREATMENT_RESERVOIR_MGMT_DRAIN_RESERVOIR_STATE, ///< Wait for drain to complete. + TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE, ///< Wait to fill inactive reservoir (if appropriate) - then start filling inactive reservoir. + TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE, ///< Wait for fill to complete. + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE, ///< Wait a bit for filled reservoir to settle before getting baseline weight (volume). + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RES_SWITCH_STATE, ///< Wait for active reservoir to be consumed and switch cmd given - then back to flush DG lines state. + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE, ///< Wait for inactive reservoir to settle before getting final weight (volume) before starting to drain. + NUM_OF_TREATMENT_RESERVOIR_MGMT_STATES ///< Number of treatment reservoir mgmt. states. } TREATMENT_RESERVOIR_MGMT_STATE_T; // ********** private data ********** // DG status -static DG_OP_MODE_T dgCurrentOpMode = DG_MODE_INIT; ///< Current DG operation mode. -static U32 dgSubMode = 0; ///< Current state (sub-mode) of current DG operation mode. -static BOOL dgStarted = FALSE; ///< Flag indicates whether we've commanded the DG to start or stop. -static BOOL dgTrimmerHeaterOn = FALSE; ///< Flag indicates whether we've commanded the DG to start or stop the trimmer heater. -static BOOL dgWaterSampled = FALSE; ///< Flag indicates whether we've commanded the DG to sample water. +static DG_OP_MODE_T dgCurrentOpMode = DG_MODE_INIT; ///< Current DG operation mode. +static U32 dgSubMode = 0; ///< Current state (sub-mode) of current DG operation mode. +static BOOL dgStarted = FALSE; ///< Flag indicates whether we've commanded the DG to start or stop. +static BOOL dgTrimmerHeaterOn = FALSE; ///< Flag indicates whether we've commanded the DG to start or stop the trimmer heater. +static BOOL dgWaterSampled = FALSE; ///< Flag indicates whether we've commanded the DG to sample water. // state machine states static TREATMENT_RESERVOIR_MGMT_STATE_T currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; ///< Current state of treatment mode reservoir management. +static U32 resMgmtTimer = 0; ///< used for keeping state time. // DG sensor data -static F32 dgPressures[ NUM_OF_DG_PRESSURE_SENSORS ]; ///< Latest pressures reported by the DG. -static F32 dgPrimaryTempSet = 0.0; ///< Primary heater target temperature commanded. -static F32 dgPrimaryTemp = 0.0; ///< Latest RO water temperature reported by the DG. -static F32 dgTrimmerTempSet = 0.0; ///< Trimmer heater target temperature commanded. -static F32 dgTrimmerTemp = 0.0; ///< Latest dialysate temperature reported by the DG. +static F32 dgPressures[ NUM_OF_DG_PRESSURE_SENSORS ]; ///< Latest pressures reported by the DG. +static F32 dgPrimaryTempSet = 0.0; ///< Primary heater target temperature commanded. +static F32 dgPrimaryTemp = 0.0; ///< Latest RO water temperature reported by the DG. +static F32 dgTrimmerTempSet = 0.0; ///< Trimmer heater target temperature commanded. +static F32 dgTrimmerTemp = 0.0; ///< Latest dialysate temperature reported by the DG. // DG pumps data -static F32 dgROPumpFlowRateMlMin = 0.0; ///< Latest RO water flow rate reported by the DG. -static U32 dgROPumpPressureSetPtPSI = 0; ///< Latest RO pump target pressure reported by the DG. -static U32 dgDrainPumpSpeedSetPtRPM = 0; ///< Latest Drain pump target speed reported by the DG. +static F32 dgROPumpFlowRateMlMin = 0.0; ///< Latest RO water flow rate reported by the DG. +static U32 dgROPumpPressureSetPtPSI = 0; ///< Latest RO pump target pressure reported by the DG. +static U32 dgDrainPumpSpeedSetPtRPM = 0; ///< Latest Drain pump target speed reported by the DG. // reservoir data static DG_RESERVOIR_ID_T dgActiveReservoir = DG_RESERVOIR_2; ///< Latest active reservoir reported by the DG. static DG_RESERVOIR_ID_T dgActiveReservoirSet = DG_RESERVOIR_2; ///< Active reservoir commanded. -static U32 dgReservoirFillVolumeTarget = 0; ///< Latest fill-to volume reported by the DG. -static U32 dgReservoirFillVolumeTargetSet = 0; ///< Fill-to volume commanded. -static U32 dgReservoirDrainVolumeTarget = 0; ///< Latest drain-to volume reported by the DG. -static U32 dgReservoirDrainVolumeTargetSet = 0; ///< Drain-to volume commanded. +static U32 dgReservoirFillVolumeTarget = 0; ///< Latest fill-to volume reported by the DG. +static U32 dgReservoirFillVolumeTargetSet = 0; ///< Fill-to volume commanded. +static U32 dgReservoirDrainVolumeTarget = 0; ///< Latest drain-to volume reported by the DG. +static U32 dgReservoirDrainVolumeTargetSet = 0; ///< Drain-to volume commanded. +static U32 resUseTimer = 0; ///< used to track time pumping from active reservoir (for volume used calculation). +static F32 resUseVolumeMl = 0.0; ///< Accumulated volume used from active reservoir. // ********** private function prototypes ********** @@ -104,13 +111,20 @@ *************************************************************************/ void execTreatmentReservoirMgmt( void ) { - DG_OP_MODE_T dgOpMode = getDGOpMode(); // TODO - the DG mode & sub-mode come as a pair at interval - they MUST be kept together. + DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); + U32 msSinceLastVolumeCalc = calcTimeSince( resUseTimer ); + F32 flowRateMlPerMs = getMeasuredDialInFlowRate() / (F32)( MS_PER_SECOND * SEC_PER_MIN ); + // calculate volume used from active reservoir + resUseVolumeMl += ( flowRateMlPerMs * msSinceLastVolumeCalc ); // TODO - should this calc be done and kept by Dialysis sub-mode? + // treatment reservoir mgmt. state machine switch ( currentTrtResMgmtState ) { case TREATMENT_RESERVOIR_MGMT_START_STATE: + resUseTimer = getMSTimerCount(); + resUseVolumeMl = 0.0; currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; break; @@ -164,16 +178,49 @@ case TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE: if ( DG_MODE_CIRC == dgOpMode ) { + resMgmtTimer = getMSTimerCount(); + currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE; + } + break; + + case TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE: + if ( TRUE == didTimeout( resMgmtTimer, RESERVOIR_SETTLE_TIME_MS ) ) + { currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RES_SWITCH_STATE; } break; case TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RES_SWITCH_STATE: // reservoir switch during treatment should only occur in this state (i.e. when DG is ready). - // state will reset to start when next reservoir switch is commanded. - // TODO - should this state machine determine when to give reservoir switch command? Or leave to treatment mode? + // switch reservoirs when active reservoir is spent (i.e. we've pumped fill volume through dialyzer) and DG ready + if ( ( DG_MODE_CIRC == getDGOpMode() ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == getDGSubMode() ) && + ( resUseVolumeMl >= (F32)dgReservoirFillVolumeTargetSet ) ) + { + DG_RESERVOIR_ID_T activeRes = dgActiveReservoirSet; + DG_RESERVOIR_ID_T inactiveRes = ( activeRes == DG_RESERVOIR_1 ? DG_RESERVOIR_2 : DG_RESERVOIR_1 ); + + // signal dialysis sub-mode to capture baseline volume for next reservoir. + setStartReservoirVolume(); + // command DG to switch reservoirs + cmdSetDGActiveReservoir( inactiveRes ); + // signal dialysis sub-mode to switch reservoirs + signalReservoirsSwitched(); + // wait for used reservoir to settle + resMgmtTimer = getMSTimerCount(); + currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE; + } break; + case TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE: + if ( TRUE == didTimeout( resMgmtTimer, RESERVOIR_SETTLE_TIME_MS ) ) + { + // signal dialysis sub-mode to capture final volume of prior reservoir after settling. + setFinalReservoirVolume(); + // reset to start state to restart drain, fill, switch process. + currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; + } + break; + default: // TODO - s/w fault currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; @@ -451,12 +498,30 @@ sendDGStartStopCommand( STOP_DG_CMD ); } +/*********************************************************************//** + * @brief + * The cmdStartDGTrimmerHeater function sends a start trimmer heater command \n + * to the DG. + * @details + * Inputs : none + * Outputs : start DG trimmer heater command sent + * @return none + *************************************************************************/ void cmdStartDGTrimmerHeater( void ) { dgTrimmerHeaterOn = TRUE; sendDGStartStopTrimmerHeaterCommand( START_DG_CMD ); } +/*********************************************************************//** + * @brief + * The cmdStopDGTrimmerHeater function sends a stop trimmer heater command \n + * to the DG. + * @details + * Inputs : none + * Outputs : stop DG trimmer heater command sent + * @return none + *************************************************************************/ void cmdStopDGTrimmerHeater( void ) { dgTrimmerHeaterOn = FALSE; Index: firmware/App/HDCommon.h =================================================================== diff -u -r6a6c064bdab77b9b42d25910d94da55812d00ffa -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 6a6c064bdab77b9b42d25910d94da55812d00ffa) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -23,7 +23,7 @@ #define HD_VERSION_MAJOR 0 #define HD_VERSION_MINOR 4 -#define HD_VERSION_MICRO 0 +#define HD_VERSION_MICRO 5 #define HD_VERSION_BUILD 0 // ********** build switches ********** @@ -33,7 +33,7 @@ #ifndef _VECTORCAST_ // #define RM46_EVAL_BOARD_TARGET 1 // #define BREADBOARD_TARGET 1 -// #define SIMULATE_UI 1 + #define SIMULATE_UI 1 #define SKIP_POST 1 #define DISABLE_CRC_ERROR 1 #define DISABLE_ACK_ERRORS 1 Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r1017bbc5760a50e20357da1e4f705b3e6157375e -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 1017bbc5760a50e20357da1e4f705b3e6157375e) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -89,8 +89,8 @@ refUFVolume = 0.0; measUFVolume = 0.0; - resStartVolume[ DG_RESERVOIR_1 ] = 0.0; - resStartVolume[ DG_RESERVOIR_2 ] = 0.0; +// resStartVolume[ DG_RESERVOIR_1 ] = 0.0; +// resStartVolume[ DG_RESERVOIR_2 ] = 0.0; resFinalVolume[ DG_RESERVOIR_1 ] = 0.0; resFinalVolume[ DG_RESERVOIR_2 ] = 0.0; measUFVolumeFromPriorReservoirs = 0.0; @@ -163,14 +163,14 @@ *************************************************************************/ void startDialysis( void ) { - U32 tempDPORate = (setDialysateFlowRate * 6) / 10; // TODO - temporary fudge factor - remove later +// U32 tempDPORate = (setDialysateFlowRate * 6) / 10; // TODO - temporary fudge factor - remove later lastUFTimeStamp = getMSTimerCount(); setDialOutUFVolumes( refUFVolume, measUFVolume ); setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - // setDialOutPumpTargetRate( setDialysateFlowRate + (S32)setUFRate), MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - restore later - setDialOutPumpTargetRate( tempDPORate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - test code - remove later + setDialOutPumpTargetRate( setDialysateFlowRate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - restore later + //setDialOutPumpTargetRate( tempDPORate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - test code - remove later // TODO - Heparin pump } @@ -306,7 +306,7 @@ void execDialysis( void ) { // check ultrafiltration max rate and accuracy during dialysis (even when ultrafiltration is paused). - checkUFAccuracyAndVolume(); +// checkUFAccuracyAndVolume(); // dialysis state machine switch ( currentDialysisState ) Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r0b87f7e6142dc3710db5c32a0c7c6694343dd717 -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 0b87f7e6142dc3710db5c32a0c7c6694343dd717) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -20,7 +20,9 @@ #include "DGInterface.h" #include "DialInFlow.h" #include "DialOutFlow.h" +#include "Dialysis.h" #include "OperationModes.h" +#include "SystemComm.h" #include "SystemCommMessages.h" #include "ModeStandby.h" #ifdef RM46_EVAL_BOARD_TARGET @@ -106,22 +108,26 @@ { case STANDBY_START_STATE: // temporary test code - TODO - remove later - homeBloodPump(); - homeDialInPump(); - homeDialOutPump(); - cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); - cmdStartDG(); - currentStandbyState = STANDBY_FLUSH_DG_LINES_STATE; + if ( TRUE == isDGCommunicating() ) + { + //homeBloodPump(); + //homeDialInPump(); + //homeDialOutPump(); + cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); + cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + cmdStartDG(); + currentStandbyState = STANDBY_FLUSH_DG_LINES_STATE; + } break; case STANDBY_FLUSH_DG_LINES_STATE: // temporary test code - TODO - remove later + cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); if ( DG_MODE_CIRC == dgOpMode ) { if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) { - cmdStartDGDrain( 100 ); + cmdStartDGDrain( 200 ); } } else if ( DG_MODE_DRAI == dgOpMode ) @@ -161,7 +167,6 @@ // temporary test code - TODO - remove later if ( DG_MODE_CIRC == dgOpMode ) { - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; } break; @@ -170,10 +175,12 @@ // TODO - test code if ( TRUE == stop ) { - if ( DG_MODE_CIRC == getDGOpMode() ) + if ( DG_MODE_CIRC == dgOpMode ) { if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) { + setStartReservoirVolume(); + cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); requestNewOperationMode( MODE_PRES ); } } Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r0b87f7e6142dc3710db5c32a0c7c6694343dd717 -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 0b87f7e6142dc3710db5c32a0c7c6694343dd717) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -265,7 +265,7 @@ presTreatmentTimeSecs = 3600; presBloodFlowRate = 300; presDialysateFlowRate = 300; - presMaxUFVolumeML = 300.0; + presMaxUFVolumeML = 600.0; presUFRate = 10.0; // kick dialysis sub-mode off Index: firmware/App/Services/CommBuffers.c =================================================================== diff -u -rc9cb494c004e390155ce7c8b3cda96cf8c1b5fa7 -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision c9cb494c004e390155ce7c8b3cda96cf8c1b5fa7) +++ firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -92,10 +92,11 @@ // verify given buffer if ( buffer < NUM_OF_COMM_BUFFERS ) { + BOOL bufferFull = FALSE; U32 activeBuffer; U32 currentActiveBufCount; // where to start adding new data to buffer (after existing data) - // add requires brief thread protection because there may be multiple sources for transmits trying to add data to a buffer. + // thread protection for queue operations _disable_IRQ(); bufferGetLock[ buffer ] = TRUE; @@ -121,9 +122,14 @@ } else // buffer too full to add this much data { - // release thread protection - bufferGetLock[ buffer ] = FALSE; - _enable_IRQ(); + bufferFull = TRUE; + } + // release thread protection + bufferGetLock[ buffer ] = FALSE; + _enable_IRQ(); + // if buffer was full, trigger s/w fault + if ( TRUE == bufferFull ) + { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_COMM_BUFFERS_ADD_TOO_MUCH_DATA, len ) } } @@ -160,6 +166,8 @@ // verify given buffer if ( buffer < NUM_OF_COMM_BUFFERS ) { + // thread protection for queue operations + _disable_IRQ(); // verify requested # of bytes to get are in the buffer if ( ( len <= ( COMM_BUFFER_LENGTH * DOUBLE_BUFFERS ) ) && ( len <= numberOfBytesInCommBuffer( buffer ) ) ) { @@ -183,6 +191,8 @@ result += remNumOfBytes; } } + // release thread protection + _enable_IRQ(); } else // invalid buffer given { @@ -215,6 +225,8 @@ // verify given buffer if ( buffer < NUM_OF_COMM_BUFFERS ) { + // thread protection for queue operations + _disable_IRQ(); // verify requested # of bytes to peek are in the buffer if ( ( len <= ( COMM_BUFFER_LENGTH * DOUBLE_BUFFERS ) ) && ( len <= numberOfBytesInCommBuffer( buffer ) ) ) { @@ -237,6 +249,8 @@ numOfBytesPeeked = bytesInInactiveBuffer + remNumOfBytes; } } + // release thread protection + _enable_IRQ(); } else // invalid buffer given { Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r1017bbc5760a50e20357da1e4f705b3e6157375e -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1017bbc5760a50e20357da1e4f705b3e6157375e) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -1439,6 +1439,7 @@ memcpy( &subMode, &message->payload[sizeof(U32)], sizeof(U32) ); setDGOpMode( mode, subMode ); + checkInFromDG(); // TODO - here until we implement DG check-in w/ HD broadcast } else { Index: firmware/HD.dil =================================================================== diff -u -r9d4666bf3064df18a6d935125d7a69e4e8234e84 -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/HD.dil (.../HD.dil) (revision 9d4666bf3064df18a6d935125d7a69e4e8234e84) +++ firmware/HD.dil (.../HD.dil) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -1,4 +1,4 @@ -# RM46L852PGE 05/05/20 13:26:59 +# RM46L852PGE 05/22/20 14:34:51 # ARCH=RM46L852PGE # @@ -374,9 +374,9 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=FIQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_MIBSPI4_RAMPARITYCHECK_ENA.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_EMAC_SP_PBISTCHECK_ENA.VALUE=0x00000000 DRIVER.SYSTEM.VAR.MINIT_VALUE.VALUE=0x1E57F @@ -457,7 +457,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_53_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_45_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_37_INT_PRAGMA_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=1 +DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_VIM1_RAMPARITYCHECK_ENA.VALUE=1 DRIVER.SYSTEM.VAR.CLKT_AVCLK4_SOURCE.VALUE=VCLK DRIVER.SYSTEM.VAR.FLASH_ADDRESS_WAIT_STATES_FREQ.VALUE=165.0 @@ -954,7 +954,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_40_INT_TYPE.VALUE=FIQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_32_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_24_INT_TYPE.VALUE=IRQ -DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=FIQ +DRIVER.SYSTEM.VAR.VIM_CHANNEL_16_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_INT_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.PMM_LOGIC_PD5_STATE.VALUE=1 DRIVER.SYSTEM.VAR.SAFETY_INIT_CAN2_DP_PBISTCHECK_ENA.VALUE=0x00000008 Index: firmware/include/sys_vim.h =================================================================== diff -u -r0a0b6c446cd0f428af75b28e6ca8206bbcf148ac -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/include/sys_vim.h (.../sys_vim.h) (revision 0a0b6c446cd0f428af75b28e6ca8206bbcf148ac) +++ firmware/include/sys_vim.h (.../sys_vim.h) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -148,7 +148,7 @@ | (uint32)((uint32)SYS_FIQ << 13U)\ | (uint32)((uint32)SYS_IRQ << 14U)\ | (uint32)((uint32)SYS_FIQ << 15U)\ - | (uint32)((uint32)SYS_FIQ << 16U)\ + | (uint32)((uint32)SYS_IRQ << 16U)\ | (uint32)((uint32)SYS_IRQ << 17U)\ | (uint32)((uint32)SYS_IRQ << 18U)\ | (uint32)((uint32)SYS_IRQ << 19U)\ @@ -161,7 +161,7 @@ | (uint32)((uint32)SYS_IRQ << 26U)\ | (uint32)((uint32)SYS_IRQ << 27U)\ | (uint32)((uint32)SYS_IRQ << 28U)\ - | (uint32)((uint32)SYS_FIQ << 29U)\ + | (uint32)((uint32)SYS_IRQ << 29U)\ | (uint32)((uint32)SYS_IRQ << 30U)\ | (uint32)((uint32)SYS_IRQ << 31U)) Index: firmware/source/can.c =================================================================== diff -u -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/source/can.c (.../can.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) +++ firmware/source/can.c (.../can.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -1585,8 +1585,6 @@ /** @fn void can1HighLevelInterrupt(void) * @brief CAN1 Level 0 Interrupt Handler */ -#pragma CODE_STATE(can1HighLevelInterrupt, 32) -#pragma INTERRUPT(can1HighLevelInterrupt, FIQ) /* SourceId : CAN_SourceId_020 */ /* DesignId : CAN_DesignId_018 */ @@ -1647,8 +1645,6 @@ /** @fn void can1LowLevelInterrupt(void) * @brief CAN1 Level 1 Interrupt Handler */ -#pragma CODE_STATE(can1LowLevelInterrupt, 32) -#pragma INTERRUPT(can1LowLevelInterrupt, FIQ) /* SourceId : CAN_SourceId_021 */ /* DesignId : CAN_DesignId_019 */ Index: firmware/source/sys_vim.c =================================================================== diff -u -r0a0b6c446cd0f428af75b28e6ca8206bbcf148ac -r2112e3143003eaf9584d4be068f7ca89b33c941a --- firmware/source/sys_vim.c (.../sys_vim.c) (revision 0a0b6c446cd0f428af75b28e6ca8206bbcf148ac) +++ firmware/source/sys_vim.c (.../sys_vim.c) (revision 2112e3143003eaf9584d4be068f7ca89b33c941a) @@ -243,7 +243,7 @@ | (uint32)((uint32)SYS_FIQ << 13U) | (uint32)((uint32)SYS_IRQ << 14U) | (uint32)((uint32)SYS_FIQ << 15U) - | (uint32)((uint32)SYS_FIQ << 16U) + | (uint32)((uint32)SYS_IRQ << 16U) | (uint32)((uint32)SYS_IRQ << 17U) | (uint32)((uint32)SYS_IRQ << 18U) | (uint32)((uint32)SYS_IRQ << 19U) @@ -256,7 +256,7 @@ | (uint32)((uint32)SYS_IRQ << 26U) | (uint32)((uint32)SYS_IRQ << 27U) | (uint32)((uint32)SYS_IRQ << 28U) - | (uint32)((uint32)SYS_FIQ << 29U) + | (uint32)((uint32)SYS_IRQ << 29U) | (uint32)((uint32)SYS_IRQ << 30U) | (uint32)((uint32)SYS_IRQ << 31U);