Index: sources/StateController.h =================================================================== diff -u -raf84a44034a877134a53b6b48b016d409f843380 -rb4e5f0d4181127e7941f8ae437e1f61c5c746091 --- sources/StateController.h (.../StateController.h) (revision af84a44034a877134a53b6b48b016d409f843380) +++ sources/StateController.h (.../StateController.h) (revision b4e5f0d4181127e7941f8ae437e1f61c5c746091) @@ -33,7 +33,12 @@ #define UI_MSG_BB_PAYLOAD_ID 0x63 #define COUNTER_VAR_DEFAULT_VALUE -1 #define PRESC_TIME_DEFAULT_VALUE -1 - #define MINUTES_TO_SECONDS 60 + #define SECONDS_PER_MINUTE 60 + #define MINUTES_PER_HOUR 60 + #define MILLISECONDS_PER_SECOND 1000 + #define MILLILITERS_PER_LITER 1000 + #define ACCEPT_VALUE 1 + #define REJECT_VALUE 0 // Pre treatment defines #define DEFAULT_TIMEOUT_S 10 @@ -48,16 +53,31 @@ #define QOBJECT_TIMER_TIMEOUT_MS 100 #define PROGRESS_TIME_BC_INTERVAL_MS 1000 #define NUM_OF_COUNTS_TIMER_BC_EMIT (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) + #define NUM_OF_BC_COUNTS_ADJUSTED (NUM_OF_COUNTS_TIMER_BC_EMIT * 2) #define NUM_OF_COUNTS_TO_BC_MSG 3 + // Treatment params + #define MIN_DIAL_RATE_MLPM 100 + #define MAX_DIAL_RATE_MLPM 600 + #define MIN_TX_TIME_MINS 60 + + #define DEFAULT_TX_ELAPSED_TIME_S (2 * MINUTES_PER_HOUR) * SECONDS_PER_MINUTE + #define TX_PARAM_PRESCRIBED_DUR_S ((4 * MINUTES_PER_HOUR) + 30) * SECONDS_PER_MINUTE + #define TX_PARAM_UF_VOLUME_L 2.0 + #define TX_PARAM_BLOOD_FLOW_RATE_MLPM 400 + #define TX_PARAM_DIAL_FLOW_RATE_MLPM 600 + #define TX_PARAM_SALINE_BOLUS_VOL_ML 200 + // Treatment defines - #define DEFAULT_TX_PRESCRIBED_DUR_S ((4 * 60) + 30) * MINUTES_TO_SECONDS - #define DEFAULT_TX_ELAPSED_TIME_S (2 * 60) * MINUTES_TO_SECONDS - #define TIME_PRESCRIBED_S_INDEX 5 - #define TIME_ELAPSED_S_INDEX 6 - #define TIME_REMAINING_S_INDEX 7 - #define DEFAULT_UF_VOLUME_L 2.0 + #define TIME_PRESCRIBED_S_INDEX 5 // TODO remove + #define TIME_ELAPSED_S_INDEX 6 // TODo remove + #define TIME_REMAINING_S_INDEX 7 // TODO remove + #define BLOOD_PRIME_VOLUME_ML (106.6 + 40) + #define BLOOD_FLOW_INTEGRATOR (1.0 / (SECONDS_PER_MINUTE * (MILLISECONDS_PER_SECOND /QOBJECT_TIMER_TIMEOUT_MS))) + #define MAX_DIALYSATE_VOLUME_ML 150000 + + enum User_Command_ID { CMD_NONE = -1, CMD_TX_PARAMS = 0 , @@ -81,6 +101,13 @@ COUNTER_RINSEBACK_TIMER, }; + enum State_Status { + STATE_ON_ENTRY = 0, + STATE_ON_ACTION, + STATE_ON_EXIT, + }; + + QHash > _dryDemoCmds; quint16 _index; quint16 _broadcastMsgCount; @@ -91,10 +118,39 @@ User_Command_ID _dryDemoCurrentCmd; drydemoXMLstates _dryDemo; + // New state machine stuff + struct Treatment_Variables { + float accumulatedVolumeML; + quint32 broadcastIntervalCount; + quint32 treatmentElapsedTimeS; + quint32 remainingTreatmentTimeS; + quint32 prescribedTreatmentTimeS; + // UF variables + float prescribedMaxUFVolML; + float prescribedUFRate; + float refUFVolumeML; + }; + + State_Status _stateStatus; + QList _broadcastMessages; + QList _sendMessages; + QHash _treatmentRcvdMessages; + bool _isBoradcastListReady; // TODO use a mutex + bool _isSendListReady; // Todo use a mutex + Treatment_Variables _treatmentVars; + void initMessagesHashTable(); void transitionApplicationToStandBy(); void resetVariables(); + void sendMessages(bool isBroadcast); + + void prepareOcclusionBroadcastData(); + void prepareTreatmentTimeBroadcastData(); + void prepareTreatmentStatesBroadcastData(const QVariantList &payload); + void handleTreatmentReceivedMessages(); + void handleTreatmentTimeChangeRequest(const QVariant &payload); + void onIdleStateChange(bool active); void onTreatmentParamsStateChange(bool active); void onWaterSampleStateChange(bool active); @@ -104,7 +160,11 @@ void onBPHRStateChange(bool active); void onUltrafiltrationStateChange(bool active); void onConnectionStateChange(bool active); - void onStartTreatmentStateChange(bool active); + + void onStartTreatmentStateChange(bool); + void onTreatmentBloodPrimeStateChange(bool); + void onTreatmentTreatmentStateChange(bool); + void onEndTreatmentStateChange(bool active); void onDisinfectStateChange(bool active); };