aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-03-27 09:36:26 +0200
committerAvi Levkovich <avi@twine-s.com>2019-03-27 09:36:26 +0200
commitaa41735a62ec39e33c7cbed34dc2f0d1c80910d6 (patch)
tree2d26de4fb4b6d783260665a7a8bccdd2da652760 /Software/Embedded_SW
parente9d67dd0c55909e19c86f6f33b9ff632b3105c76 (diff)
parent0d837f8a270f9f4c72899074a2f701d61b7d57d8 (diff)
downloadTango-aa41735a62ec39e33c7cbed34dc2f0d1c80910d6.tar.gz
Tango-aa41735a62ec39e33c7cbed34dc2f0d1c80910d6.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c10
-rw-r--r--Software/Embedded_SW/Embedded/Main.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste.h104
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c1318
4 files changed, 1432 insertions, 5 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
index 053f8ac46..bf96335e1 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
@@ -50,8 +50,8 @@ uint32_t MotorTimeLimit[NUM_OF_MOTORS];
uint32_t MotorControlId[NUM_OF_MOTORS];
uint32_t StoredMotorPosition[NUM_OF_MOTORS];
FPGA_GPI_ENUM Motor_Id_to_LS_IdDown[NUM_OF_MOTORS] = { // limit switch for normal homing into working mode
- GPI_LS_DH_CLEAN_RIGHT , //MOTO_DH_CLEANHEAD = 0,
- GPI_LS_DH_CLEAN_LEFT, //MOTO_DH_CLEANMECH = 1,
+ GPI_LS_DH_CLEAN_LEFT , //MOTO_DH_CLEANHEAD = 0, Shlomo Correct setting for machine 7 25/3
+ GPI_LS_DH_CLEAN_RIGHT, //MOTO_DH_CLEANMECH = 1, Shlomo Correct setting for machine 7 25/3
GPI_LS_DH_LID_CLOSED, //MOTO_DH_LID = 2,
MAX_GPI, //MOTO_DRYER_DRIVING = 3,
GPI_LS_DRYER_LID_CLOSED, //MOTO_DRYER_LID = 4,
@@ -77,8 +77,8 @@ FPGA_GPI_ENUM Motor_Id_to_LS_IdDown[NUM_OF_MOTORS] = { // limit switch for n
GPI_LS_RLOADMOTOR_DOWN, //MOTO_RLOADING = 24,
};
FPGA_GPI_ENUM Motor_Id_to_LS_IdUp[NUM_OF_MOTORS] = { // limit switch for normal homing out of working mode
- GPI_LS_DH_CLEAN_RIGHT , //MOTO_DH_CLEANHEAD = 0,
- GPI_LS_DH_CLEAN_LEFT, //MOTO_DH_CLEANMECH = 1,
+ GPI_LS_DH_CLEAN_LEFT , //MOTO_DH_CLEANHEAD = 0, Shlomo Correct setting for machine 7 25/3
+ GPI_LS_DH_CLEAN_RIGHT, //MOTO_DH_CLEANMECH = 1, Shlomo Correct setting for machine 7 25/3
GPI_LS_DH_LID_OPEN, //MOTO_DH_LID = 2,
MAX_GPI, //MOTO_DRYER_DRIVING = 3,
GPI_LS_DRYER_LID_OPEN, //MOTO_DRYER_LID = 4,
@@ -98,7 +98,7 @@ FPGA_GPI_ENUM Motor_Id_to_LS_IdUp[NUM_OF_MOTORS] = { // limit switch for nor
MAX_GPI, //MOTO_LDRIVING = 18,
GPI_LS_LLOADMOTOR_UP, //MOTO_LLOADING = 19,
GPI_LS_LPIVOT_UP, //MOTO_LPIVOT1 = 20,
- GPI_LS_RDANCER_UP, //MOTO_RDANCER = 21,
+ GPI_LS_RDANCER_LONG, //MOTO_RDANCER = 21,
MAX_GPI, //MOTO_RDRIVING = 22,
GPI_LS_RLOADRAM_UP, //MOTO_RLOADARM = 23,
GPI_LS_RLOADMOTOR_UP, //MOTO_RLOADING = 24,
diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c
index 5136c4521..2d3bd336e 100644
--- a/Software/Embedded_SW/Embedded/Main.c
+++ b/Software/Embedded_SW/Embedded/Main.c
@@ -65,6 +65,8 @@
#include "drivers/Flash_Memory/FATFS/ff.h"
#include "drivers/Flash_Memory/FATFS/Control_File_System.h"
+#include "Modules/General/buttons.h"
+#include "Modules/Waste/Waste.h"
//#define WATCHDOG
//*****************************************************************************
//
@@ -193,6 +195,9 @@ int main(void)
ControlStart();
Heaters_Init();
MotorsInit();
+//Shai WHS_HW_test(); // for WHS sensor test
+ WHS_init();
+ Buttons_Init();
//IDS_ModuleInit();
Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste);
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h
index e69de29bb..66428039f 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h
@@ -0,0 +1,104 @@
+#ifndef WASTE_H
+#define WASTE_H
+
+
+#define temp_funcion 0
+#define notOK 1
+
+
+/*
+#define SENSORFULL 1
+#define SENSOROVERFLOW 1
+#define SENSOREMPTY 0
+
+
+#define SENSORnotFULL 0
+#define SENSORnotOVERFLOW 0
+#define SENSORnotEMPTY 1
+*/
+#define PUMPON 1
+#define PUMPOFF 0
+
+#define PRECENSE 1
+#define NOTPRECENSE 0
+
+typedef unsigned char U8;
+
+typedef enum
+{
+ WHS_CarteidgeNotPrecense = 0,
+ WHS_CarteidgePrecense
+} WHS_CarteidgPrecenseSensorStatus;
+
+typedef enum
+{
+ WHS_CartridgeCoverCLOSE = 0,
+ WHS_CartridgeCoverOPEN
+} WHS_CarteidgeCoverSensorStatus;
+
+typedef enum
+{
+ SENSORnotFULL = 0,
+ SENSORFULL
+} WHS_FullSensorStatus;
+
+typedef enum
+{
+ SENSOREMPTY = 0,
+ SENSORnotEMPTY
+} WHS_EmptySensorStatus;
+
+typedef enum
+{
+ WHS_empty = 0,
+ WHS_filling,
+ WHS_emptying,
+ WHS_full,
+ WHS_overflow,
+ WHS_sttError
+} WHS_sttMachin;
+
+typedef enum
+{
+ WHS_no_event = 0,
+ WHS_overflow_sensor,
+ WHS_full_sensor,
+ WHS_empty_sensor,
+ WHS_waste1_presence_sensor,
+ WHS_waste2_presence_sensor,
+ WHS_filter_sensor,
+ WHS_cartridge_cover_sensor,
+ WHS_Timeout
+} WHS_sensor;
+
+typedef enum
+{
+ WasteEmpty = 0,
+ WasteFilling,
+ WasteFail,
+ WasteFull
+} cartridge_status;
+
+typedef enum
+{
+ led_on = 0,
+ led_off,
+ led_blink,
+ led_panic
+} led_status;
+
+typedef enum
+{
+ waste_cartridge1 = 0,
+ waste_cartridge2,
+ no_waste_cartridge
+} cartridge_name;
+
+
+U8 WHS_init(void);
+U8 WHS_HW_test(void);
+
+
+
+#endif
+
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
index e69de29bb..689a2bc95 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
@@ -0,0 +1,1318 @@
+/* ---- WHS */
+#include <Container.h>
+#include <DataDef.h>
+#include "include.h"
+#include "Modules/Control/control.h" // use for FPGA IO
+#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"//#include "FPGA_GPIO.h" // use for FPGA IO
+#include "drivers/Valves/Valve.h"
+#include "Common/report/report.h"
+#include "Modules/Waste/Waste.h"
+
+#include <PMR/Diagnostics/EventType.pb-c.h>
+#include "Modules/AlarmHandling/AlarmHandling.h"
+
+
+#define WasteTankCallBackTime eOneSecond
+#define CartridgeCoverCallBackTime eOneSecond
+#define CartridgeCoverCallBackFastTime eTenMillisecond
+#define CartridgeWaste1CallBackTime eOneSecond
+#define CartridgeWaste2CallBackTime eOneSecond
+#define STARTCOUNT 1
+#define STOPCOUNT 0
+#define PumpTimeout 60 // minutes
+
+
+/*------------Waste Tank function-----------------------*/
+bool initWHS_WasteTank();
+bool InitWasteCartStatus();
+
+bool CartridgeCoverCBFunction();
+U8 CartridgeCoverCallBackFunction();
+WHS_sensor CartridgeWaste1CallBackFunction();
+WHS_sensor CartridgeWaste2CallBackFunction();
+WHS_sensor WasteTankCallBackFunction();
+U8 CartridgeWasteFilling(bool status);
+bool WasteTankCBFunction();
+
+U8 CartridgePrecenceCBFunction();
+U8 SetCartridgeLED(cartridge_name name,led_status led);
+
+bool SetWastePump( bool power);
+bool SetValveDirection();
+bool RdCartridgeCoverSensor();
+bool RdWasteCartridge1Sensor();
+bool RdWasteCartridge2Sensor();
+bool RdWasteTankFilterSensor();
+bool RdWasteTankOverFlowSensor();
+bool RdWasteTankFullSensor();
+bool RdWasteTankEmptySensor();
+bool RdWasteCartridgeParam(cartridge_name cart_name);
+bool CartridgeAuthentication(cartridge_name cart_name);
+bool SetActiveWastCartridge();
+
+
+
+
+struct waste_cartridge_params
+{
+ uint32_t serial_number;
+ cartridge_status status; /*WasteEmpty, WasteFilling, WasteFail, WasteFull*/
+ bool autheticate;
+};
+
+struct pump_params
+{
+ bool status;
+ uint32_t time;
+};
+
+
+struct WHS_sensors_status
+{
+ WHS_CarteidgeCoverSensorStatus cartridge_cover; /*open(1) ,close(0) */
+ WHS_CarteidgPrecenseSensorStatus waste_cartridge1_precense_sensor; /*presence(1) ,not_precense(0) */
+ bool waste_cartridge1_precense_sensor_flag; /* 1=event 0=no enent */
+ WHS_CarteidgPrecenseSensorStatus waste_cartridge2_precense_sensor; /*presence(1) ,not_precense(0) */
+ bool waste_cartridge2_precense_sensor_flag; /* 1=event 0=no enent */
+ bool waste_tank_filter_sensor; /*presence(1) ,not_precense(0) */
+ WHS_EmptySensorStatus waste_tank_empty_sensor; /*enpty(1) ,not_empty(0) */
+ WHS_FullSensorStatus waste_tank_full_sensor; /*full(1) ,not_full(0) */
+ bool waste_tank_over_flow_sensor; /*over_flow(1) ,not_over_flow(0) */
+};
+
+
+
+struct WHS_information
+{
+ WHS_sttMachin sttMachine;
+ struct waste_cartridge_params cartridge_1, cartridge_2;
+ struct WHS_sensors_status WHS_sensors;
+ struct pump_params WHS_pump;
+ bool WHS_valve;
+ WHS_sensor event;
+ cartridge_name active_cartridge;
+ uint32_t Cartridge_Waste1_device_Id;
+ uint32_t Cartridge_Waste2_device_Id;
+ uint32_t Cartridge_Cover_device_Id;
+};
+
+struct WHS_information WHS_info;
+
+
+
+
+/* -------- cartridge function ----*/
+
+
+bool RdWasteCartridgeParam(cartridge_name cart_name)
+{
+ /*
+ read all parameters from RFid cartridge:
+ serial number, cartridge_status...
+ waste_cartridge 1 or 1
+ update waste_cartridge struct
+ */
+ if (cart_name == waste_cartridge1)
+ {
+ WHS_info.cartridge_1.serial_number = temp_funcion; //to do
+ WHS_info.cartridge_1.status = temp_funcion; // to do
+ }
+ else
+ {
+ WHS_info.cartridge_2.serial_number = temp_funcion;
+ WHS_info.cartridge_2.status = temp_funcion;
+ }
+ return OK;
+}
+
+bool CartridgeAuthentication(cartridge_name cart_name)
+{
+ bool ret = notOK;
+ // TBD;
+ switch (cart_name)
+ {
+ case waste_cartridge1:
+ WHS_info.cartridge_1.autheticate = PASSED;
+ break;
+ case waste_cartridge2:
+ WHS_info.cartridge_2.autheticate = PASSED;
+ break;
+ default:
+ WHS_info.cartridge_1.autheticate = FAILED;
+ WHS_info.cartridge_2.autheticate = FAILED;
+ break;
+ }
+ ret = OK;
+ return ret;
+}
+
+/*
+bool check_RFID_authentication()
+{
+ bool ret = notOK;
+ // rd_waste_cartridge_param();
+ if ( 1 )
+ ret = OK;
+ return ret;
+}
+
+
+U8 Wr_cartridge_RFid(cartridge_name cartridge, cartridge_status status)
+{
+ bool ret = notOK;
+ // TBD;
+ ret = OK;
+ return ret;
+}
+
+U8 set_cartridge_2(U8 cartridge_status)
+{
+ bool ret = notOK;
+ WHS_info.cartridge_2.status = temp_funcion;
+ return ret;
+}
+*/
+
+/* ------------------------------*/
+
+
+bool SetWastePump( bool power)
+{
+ /*
+ set the waste pump on/off
+ off - :
+ 1. when waste tank is empty
+ 2. when empting is time out
+ 3. cartrigde cover is open
+ 4. when waste1 is not precense AND valve3way==1
+ 5. when waste2 is not precense AND valve3way==2
+ 6. when autentication with waste cartige is disable
+ on :
+ 1. when waste_tank_full
+
+ void Pumps_Control(PUMPS_ENUM Pump_Id, bool Direction) //1 - OPEN, 0 - CLOSE ?? WHS_WTANKPUMP2 or WASTECH_PUMP2
+ */
+ bool ret = notOK;
+ if ( power == OPEN )
+ {
+ Pumps_Control(WHS_WTANKPUMP2, OPEN); //waste_pump_power_on();
+ REPORT_MSG(WHS_empty," ------------ WHS WHS_empty start PUMP ----------------- ");
+ WHS_info.WHS_pump.status = OPEN;
+ WHS_info.WHS_pump.time = STARTCOUNT;
+ ret = OPEN;
+ }
+ else
+ {
+ Pumps_Control(WHS_WTANKPUMP2, CLOSE); //waste_pump_power_off();
+ REPORT_MSG(WHS_empty," ------------ WHS WHS_empty stop PUMP ----------------- ");
+ WHS_info.WHS_pump.status = CLOSE;
+ WHS_info.WHS_pump.time = STOPCOUNT;
+ ret = CLOSE;
+ }
+ return ret;
+}
+
+
+
+
+bool SetValveDirection()
+{
+ /*
+ * waste_cartridge = 1- OPEN, 0 - CLOSE
+ * VALVE_WASTE_TANK
+ *
+ * */
+ bool ret = notOK;
+ if (WHS_info.WHS_valve != no_waste_cartridge)
+ {
+ Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve);
+ ret = OK;
+ }
+ return ret;
+}
+
+
+/*-------------------------- function for WHS ------------------------------- */
+
+U8 CartridgeWasteFilling(bool status)
+{
+ bool ret = notOK;
+
+ if ((status == ON) && (WHS_info.active_cartridge != no_waste_cartridge))
+ {
+
+ //if (WHS_info.active_cartridge != no_waste_cartridge) //
+ {
+ Valve_Set(VALVE_WASTE_TANK, WHS_info.active_cartridge); //set the valve direction
+ //Pannel_Leds(PANEL_BUTTON_OR_CRAT_ID Pannel_Led_Id, OPERATION_MODE LED_Mode); //set cartridge led color slow blink
+ //write RFID status
+ }
+ SetWastePump(OPEN);
+ //WHS_info.WHS_pump.time = 0;
+ REPORT_MSG(WHS_empty," ------------ WHS WHS_empty start PUMP ----------------- ");
+ }
+ else // stop Waste cartridge filling
+ {
+ SetWastePump(CLOSE);
+ Valve_Set(VALVE_WASTE_TANK, waste_cartridge2); //set the valve direction set to low POWER !!!
+ Pannel_Leds( CART_2, MODE_OFF); //set led color
+ Pannel_Leds( CART_3, MODE_OFF); //set led color
+
+ //write RFID status
+ }
+ return ret;
+}
+
+/* ------read waste tank sensors ----------- */
+bool RdWasteTankEmptySensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ //WHS_info.WHS_sensors.waste_tank_empty_sensor = WHS_GPI_WCONTAINER_WARN();
+ //ret = WHS_info.WHS_sensors.waste_tank_empty_sensor;
+ ret = WHS_GPI_WCONTAINER_WARN();
+ return ret;
+}
+
+bool RdWasteTankFullSensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ //WHS_info.WHS_sensors.waste_tank_full_sensor = WHS_GPI_WCONTAINER_FULL();
+ //ret = WHS_info.WHS_sensors.waste_tank_full_sensor;
+ ret = WHS_GPI_WCONTAINER_FULL();
+ return ret;
+}
+
+bool RdWasteTankOverFlowSensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ //WHS_info.WHS_sensors.waste_tank_over_flow_sensor = WHS_GPI_WASTE_OVERFULL();
+ //ret = WHS_info.WHS_sensors.waste_tank_over_flow_sensor;
+ ret = WHS_GPI_WASTE_OVERFULL();
+ return ret;
+}
+
+/*-------------*/
+
+
+WHS_sttMachin UpdateStateMachine()
+{
+ //WHS_sttMachin ret = WHS_sttError ;
+
+ if ( WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORnotFULL)
+ {
+ WHS_info.sttMachine = WHS_empty ;
+ REPORT_MSG(WHS_empty," ------------ WHS WHS_empty ----------------- ");
+ }
+ else if ((WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORFULL) &&
+ (WHS_info.WHS_sensors.waste_tank_empty_sensor == SENSORnotEMPTY))
+ {
+ WHS_info.sttMachine = WHS_full ;
+ REPORT_MSG(WHS_full," ------------ WHS WHS_full ----------------- ");
+ }
+ else
+ {
+ WHS_info.sttMachine = WHS_sttError ;
+ REPORT_MSG(WHS_sttError," ------------ WHS sensor Error ----------------- ");
+ }
+
+/* if (//(WHS_info.WHS_sensors.waste_tank_over_flow_sensor == SENSORnotOVERFLOW) &&
+ ( WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORnotFULL) &&
+ ((WHS_info.WHS_sensors.waste_tank_empty_sensor == SENSORnotEMPTY) ||
+ (WHS_info.WHS_sensors.waste_tank_empty_sensor == SENSOREMPTY)))
+ WHS_info.sttMachine = WHS_empty ;
+ else if (//(WHS_info.WHS_sensors.waste_tank_over_flow_sensor == SENSORnotOVERFLOW) &&
+ (WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORFULL) &&
+ (WHS_info.WHS_sensors.waste_tank_empty_sensor == SENSORnotEMPTY))
+ WHS_info.sttMachine = WHS_full ;
+ else if (//(WHS_info.WHS_sensors.waste_tank_over_flow_sensor == SENSOROVERFLOW) &&
+ (WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORFULL) &&
+ (WHS_info.WHS_sensors.waste_tank_empty_sensor == SENSORnotEMPTY))
+ WHS_info.sttMachine = WHS_overflow ;
+ else
+ {
+ WHS_info.sttMachine = WHS_sttError ;
+ REPORT_MSG(WHS_sttError," ------------ WHS sensor Error ----------------- ");
+ }
+*/
+ return OK;
+}
+
+
+bool initWHS_WasteTank()
+{
+ WHS_info.WHS_sensors.waste_tank_empty_sensor = RdWasteTankEmptySensor();
+ WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL;//RdWasteTankFullSensor();
+ UpdateStateMachine();
+ AddControlCallback(WasteTankCBFunction, WasteTankCallBackTime , WasteTankCallBackFunction, 0,0,0);//eOneMinute
+ return OK;
+}
+
+
+/*
+WHS_sensor OverflowSensorEvent()
+{
+ WHS_sensor ret = WHS_no_event;
+ if (RdWasteTankOverFlowSensor() != WHS_info.WHS_sensors.waste_tank_over_flow_sensor)
+ {
+ WHS_info.event = WHS_overflow_sensor;
+ ret = WHS_overflow_sensor;
+ WHS_info.WHS_sensors.waste_tank_over_flow_sensor = !(WHS_info.WHS_sensors.waste_tank_over_flow_sensor);
+ }
+ return ret;
+}
+*/
+
+WHS_sensor EmptySensorEvent()
+{
+ WHS_sensor ret = WHS_no_event;
+ if (RdWasteTankEmptySensor() != WHS_info.WHS_sensors.waste_tank_empty_sensor)
+ {
+ WHS_info.event = WHS_empty_sensor;
+ ret = WHS_empty_sensor;
+ WHS_info.WHS_sensors.waste_tank_empty_sensor = !WHS_info.WHS_sensors.waste_tank_empty_sensor;
+ }
+ return ret;
+}
+
+WHS_sensor FullSensorEvent()
+{
+ WHS_sensor ret = WHS_no_event;
+ if ( RdWasteTankFullSensor() != WHS_info.WHS_sensors.waste_tank_full_sensor )
+ {
+ WHS_info.event = WHS_full_sensor;
+ ret = WHS_full_sensor;
+ WHS_info.WHS_sensors.waste_tank_full_sensor = !WHS_info.WHS_sensors.waste_tank_full_sensor;
+ }
+ return ret;
+}
+
+WHS_sensor WasteTankCallBackFunction()
+{
+ /* detect waste tank sensor event */
+ WHS_sensor ret = WHS_no_event;
+/* if ( OverflowSensorEvent())
+ {
+ return WHS_info.event;
+ }
+ else */
+ if (WHS_info.WHS_pump.time) WHS_info.WHS_pump.time += 1;
+ if (WHS_info.WHS_pump.time == PumpTimeout)
+ {
+ WHS_info.WHS_pump.time = 0;
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, false);
+ return WHS_info.event = WHS_Timeout;
+ }
+ if ( FullSensorEvent())
+ {
+ return WHS_info.event;
+ }
+ else if ( EmptySensorEvent())
+ {
+ return WHS_info.event;
+ }
+
+ return ret;
+}
+
+/*
+bool start_WHS_machin()
+{
+ AddControlCallback( WasteTankCBFunction, eTenMillisecond, WasteTankCallBackFunction, 0,0,0 );// eOneMinute
+ return OK;
+}
+ */
+
+bool WasteTankCBFunction()
+{
+ bool ret = notOK;
+ static bool pump_on_flag = CLOSE;
+ //uint32_t Cartridge_Cover_device_Id = 0;
+
+
+ switch (WHS_info.event)
+ {
+ case WHS_empty_sensor:
+ if (WHS_info.WHS_sensors.waste_tank_empty_sensor == SENSORnotEMPTY)
+ {
+ if (WHS_info.sttMachine == WHS_empty)
+ WHS_info.sttMachine = WHS_filling;
+ else
+ {
+ REPORT_MSG(WHS_filling," ------------ WHS EMPTY sensor failed !!!!!!! ----------------- ");
+ }
+ }
+ else //SENSOREMPTY
+ {
+ if (WHS_info.sttMachine == WHS_emptying)
+ {
+ WHS_info.sttMachine = WHS_empty;
+ ret = CartridgeWasteFilling(OFF);
+ WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction );
+ WHS_info.Cartridge_Cover_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeCoverCallBackTime, CartridgeCoverCallBackFunction, 0,0,0 );//eOneSecond
+ //SafeRemoveControlCallback(Cartridge_Cover_device_Id, CartridgeCoverCBFunction );
+ }
+ else
+ {
+ REPORT_MSG(WHS_emptying," ------------ WHS EMPTY sensor failed !!!!!!! ----------------- ");
+ }
+ }
+ break;
+ case WHS_full_sensor:
+ if (WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORFULL)
+ {
+ if (WHS_info.sttMachine == WHS_filling)
+ {
+ WHS_info.sttMachine = WHS_full;
+ WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction );
+ WHS_info.Cartridge_Cover_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeCoverCallBackFastTime , CartridgeCoverCallBackFunction, 0,0,0 );//eTenMillisecond
+ ret = CartridgeWasteFilling(ON);
+ // cant start a new Job
+ }
+ else
+ {
+ REPORT_MSG(WHS_filling," ------------ WHS FULL sensor failed !!!!!!! ----------------- ");
+ }
+ }
+ else
+ {
+ if (WHS_info.sttMachine == WHS_full)
+ {
+ WHS_info.sttMachine = WHS_emptying;
+ // can start a new JOB
+ }
+ else
+ {
+ REPORT_MSG(WHS_full," ------------ WHS FULL sensor failed !!!!!!! ----------------- ");
+ }
+ }
+ break;
+
+/* case WHS_overflow_sensor:
+ if (WHS_info.WHS_sensors.waste_tank_empty_sensor)
+ {
+
+ // 1.StopMacine
+ WHS_info.sttMachine = WHS_overflow;
+ }
+ else
+ {
+ WHS_info.sttMachine = WHS_full;
+ }
+ break;
+*/
+ case WHS_cartridge_cover_sensor:
+ if ( WHS_info.WHS_sensors.cartridge_cover == OPEN )
+ {
+ if ( WHS_info.WHS_pump.status == OPEN)
+ {
+ CartridgeWasteFilling(CLOSE);
+ pump_on_flag = OPEN;
+ }
+ WHS_info.Cartridge_Waste1_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeWaste1CallBackTime, CartridgeWaste1CallBackFunction, 0,0,0 ); //eOneSecond
+ WHS_info.Cartridge_Waste2_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeWaste2CallBackTime, CartridgeWaste2CallBackFunction, 0,0,0 ); //eOneSecond
+
+
+
+ //if (WHS_info.WHS_pump == ON)
+ //{
+ // SetWastePump(OFF); //pump OFF
+ //}
+ // prevent NEW Job
+ // Display "Close cartridge cover"
+ // pop up message in GUI
+ }
+ else // CLOSE
+ {
+ //if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(OPEN);
+ SetActiveWastCartridge();
+ if (pump_on_flag == OPEN )
+ {
+ CartridgeWasteFilling(OPEN);
+ pump_on_flag = CLOSE;
+ }
+ WHS_info.Cartridge_Waste1_device_Id = RemoveControlCallback(WHS_info.Cartridge_Waste1_device_Id, WasteTankCBFunction );
+ WHS_info.Cartridge_Waste2_device_Id = RemoveControlCallback(WHS_info.Cartridge_Waste2_device_Id, WasteTankCBFunction );
+ }
+ break;
+ case WHS_waste1_presence_sensor :
+ if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == WHS_CarteidgePrecense ) // waste cartridge 1 is inserted .
+ {
+ SetCartridgeLED(waste_cartridge1, led_on);
+ RdWasteCartridgeParam(waste_cartridge1);
+ if ( CartridgeAuthentication(waste_cartridge1)) // to define authentication
+ {
+ //WHS_info.cartridge_1.autheticate = PASSED; //='0'
+ //???WHS_info.WHS_valve = waste_cartridge1; // or we should do it only before pumping????
+ //???SetValveDirection(); // or we should do it only before pumping????
+ }
+ else
+ {
+ //WHS_info.cartridge_1.autheticate = FAILED; //='1'
+ SetCartridgeLED(waste_cartridge1, led_off);
+ }
+ }
+ else // waste cartridge 1 take out
+ {
+ WHS_info.cartridge_1.autheticate = FAILED;
+ //???if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping????
+ //???{
+ //???WHS_info.WHS_valve = waste_cartridge;
+ //???SetValveDirection();
+ //???}
+ //???else
+ //???{
+ //???
+ //???}
+ //??? RdWasteCartridgeParam(waste_cartridge2);
+ //???WHS_info.WHS_valve = waste_cartridge1;
+ }
+ //SetActiveWastCartridge();
+ break;
+ case WHS_waste2_presence_sensor :
+ if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == WHS_CarteidgePrecense ) // waste cartridge is inserted .
+ {
+ SetCartridgeLED(waste_cartridge2, led_on);
+ RdWasteCartridgeParam(waste_cartridge2);
+ if ( CartridgeAuthentication(waste_cartridge2)) // to define authentication
+ {
+ //WHS_info.cartridge_2.autheticate = PASSED; //='0'
+ //???WHS_info.WHS_valve = waste_cartridge2; // or we should do it only before pumping????
+ //???SetValveDirection(); // or we should do it only before pumping????
+ }
+ else
+ {
+ //WHS_info.cartridge_2.autheticate = FAILED; //='1'
+ SetCartridgeLED(waste_cartridge2, led_off);
+ }
+ }
+ else // waste cartridge 2 take out
+ {
+ WHS_info.cartridge_2.autheticate = FAILED;
+ /*
+ if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping????
+ {
+ WHS_info.WHS_valve = waste_cartridge;
+ SetValveDirection();
+ }
+ else
+ {
+
+ }
+ RdWasteCartridgeParam(waste_cartridge2);
+ WHS_info.WHS_valve = waste_cartridge1;
+ */
+ }
+ //SetActiveWastCartridge();
+ break;
+ case WHS_Timeout:
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true);
+ CartridgeWasteFilling(OFF);
+ break;
+ case WHS_no_event:
+ break;
+ default: //error state
+ break;
+ }
+ WHS_info.event = WHS_no_event;
+ return ret;
+}
+
+
+/*------------------------------- Cartridge Cover -----------------------------------------*/
+
+bool RdCartridgeCoverSensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ // WHS_info.WHS_sensors.cartridge_cover = Get_COVER_1_State(CartridgesDoor);
+ // ret = WHS_info.WHS_sensors.cartridge_cover;
+ ret = Get_COVER_1_State(CartridgesDoor);
+ return ret;
+}
+
+
+
+
+WHS_sensor CartridgeCoverCallBackFunction()
+{
+ WHS_sensor ret = WHS_no_event;
+ //ret = RdCartridgeCoverSensor();
+ if (WHS_info.WHS_sensors.cartridge_cover != RdCartridgeCoverSensor())
+ {
+ WHS_info.event = WHS_cartridge_cover_sensor;
+ WHS_info.WHS_sensors.cartridge_cover = !WHS_info.WHS_sensors.cartridge_cover;
+ ret = WHS_cartridge_cover_sensor;
+ }
+ return ret;
+}
+
+WHS_sensor CartridgeWaste1CallBackFunction()
+{
+ WHS_sensor ret = WHS_no_event;
+ //ret = RdCartridgeCoverSensor();
+ if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor != RdWasteCartridge1Sensor())
+ {
+ WHS_info.event = WHS_waste1_presence_sensor;
+ WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge1_precense_sensor;
+ ret = WHS_waste1_presence_sensor;
+ }
+ return ret;
+}
+
+WHS_sensor CartridgeWaste2CallBackFunction()
+{
+ WHS_sensor ret = WHS_no_event;
+ //ret = RdCartridgeCoverSensor();
+ if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor != RdWasteCartridge2Sensor())
+ {
+ WHS_info.event = WHS_waste2_presence_sensor;
+ WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge2_precense_sensor;
+ ret = WHS_waste2_presence_sensor;
+ }
+ return ret;
+}
+
+/*------------------------------- Cartridge Waste -----------------------------------------*/
+bool InitWasteCartStatus()
+{
+ WHS_info.WHS_sensors.cartridge_cover = RdCartridgeCoverSensor();
+ WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = RdWasteCartridge1Sensor();
+ WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = RdWasteCartridge2Sensor();
+ if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == WHS_CarteidgePrecense) CartridgeAuthentication(waste_cartridge1);
+ if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == WHS_CarteidgePrecense) CartridgeAuthentication(waste_cartridge2);
+ SetActiveWastCartridge();
+
+ if (WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN)
+ {
+ WHS_info.Cartridge_Waste1_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeWaste1CallBackFunction, 0,0,0 );
+ WHS_info.Cartridge_Waste2_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeWaste2CallBackFunction, 0,0,0 );
+ }
+ WHS_info.Cartridge_Cover_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeCoverCallBackFunction, 0,0,0 );
+
+ return OK;
+}
+
+bool RdWasteCartridge1Sensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ //WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = Is_Cartridge_Present(CART_2);
+ //ret = WHS_info.WHS_sensors.waste_cartridge1_precense_sensor;
+ ret = Is_Cartridge_Present(CART_2);
+ return ret;
+}
+
+bool RdWasteCartridge2Sensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ //WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = Is_Cartridge_Present(CART_3);
+ //ret = WHS_info.WHS_sensors.waste_cartridge2_precense_sensor;
+ ret = Is_Cartridge_Present(CART_3);
+ return ret;
+}
+
+bool SetActiveWastCartridge()
+{
+ bool ret = notOK;
+ if (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == PRECENSE ) &&
+ (WHS_info.cartridge_1.autheticate == PASSED)) WHS_info.active_cartridge = waste_cartridge1;
+ else if (( WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == PRECENSE) &&
+ (WHS_info.cartridge_2.autheticate == PASSED)) WHS_info.active_cartridge = waste_cartridge2;
+ else WHS_info.active_cartridge = no_waste_cartridge;
+ return ret;
+
+}
+
+/*
+U8 RdWastePrecenseSensor(cartridge_name name)
+{
+
+ // we have 2 waste_cartridge (waste_cartridge1 and waste_cartridge2)
+ // bool Is_Cartridge_Present(PANEL_BUTTON_OR_CRAT_ID Cartridge); //use CART_2 or CART_3
+
+ WHS_Read_GPI_Registers();
+ switch (name)
+ {
+ case waste_cartridge1:
+ if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor != Is_Cartridge_Present(CART_2))
+ {
+ WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge1_precense_sensor;
+ WHS_info.event = WHS_waste1_presence_sensor;
+ }
+ break;
+ case waste_cartridge2:
+ if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor != Is_Cartridge_Present(CART_3))
+ {
+ WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge2_precense_sensor;
+ WHS_info.event = WHS_waste2_presence_sensor;
+ }
+ break;
+ default :
+ break;
+ }
+ return OK;
+}
+*/
+/*
+U8 cartridge_handeling()
+{
+ AddControlCallback( CartridgePrecenceCBFunction, eOneMinute, CartridgePrecenceCallBackFunction, 0,0,0 ); //
+ return OK;
+}
+*/
+
+U8 SetCartridgeLED(cartridge_name name,led_status led)
+{
+ bool ret = notOK;
+ return ret;
+}
+
+/*
+U8 CartridgePrecenceCBFunction()
+{
+ if ( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor_flag ) // if we have changes at cartridge1:
+ {
+ if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor) // if new cartridge is presence:
+ {
+ if (rd_waste_cartridge_param()== OK) //read parameter from RFID
+ SetCartridgeLED(waste_cartridge1,led_on); //change led status to ON
+ }
+ else // if the cartridge is removed
+ {
+ SetCartridgeLED(waste_cartridge1, led_off); //change led status to OFF
+ }
+ WHS_info.WHS_sensors.waste_cartridge1_precense_sensor_flag = 0; //remove the flag
+
+ }
+ else if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor_flag )
+ {
+ if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor)
+ {
+
+ }
+ else
+ {
+
+ }
+ }
+ return OK;
+}*/
+/*
+U8 CartridgePrecenceCallBackFunction()
+{
+ bool ret = notOK;
+ return ret;
+}
+*/
+
+
+
+
+
+
+
+
+bool CartridgeCoverCBFunction()
+{
+ bool ret = notOK;
+ if (WHS_info.WHS_sensors.cartridge_cover == OPEN)
+ {
+ //if (WHS_info.WHS_pump == ON)
+ //{
+ SetWastePump(OFF); //pump OFF
+ //}
+ // prevent NEW Job
+ // Display "Close cartridge cover"
+ // pop up message in GUI
+ }
+ else
+ {
+ // can do a NEW Job
+ // remove message "Close cartridge cover"
+ // remove pop up message in GUI
+ }
+ WHS_info.event = WHS_no_event;
+ return ret;
+}
+
+
+/*------------------------------------------------------------------------------------------------*/
+
+
+
+U8 WHS_init(void)
+{
+ InitWasteCartStatus();
+ initWHS_WasteTank();
+ SetWastePump(CLOSE);
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*---------------------------------- HW Test --------------------------------------------------------------*/
+
+
+
+bool RdWasteTankFilterSensor()
+{
+ bool ret = notOK;
+ WHS_Read_GPI_Registers();
+ WHS_info.WHS_sensors.waste_tank_filter_sensor = WHS_GPI_SW_FILTER_PRES();
+ ret = WHS_info.WHS_sensors.waste_tank_filter_sensor;
+ return ret;
+}
+
+
+U8 RdCartridgeDoor()
+{
+ bool ret = notOK;
+ ret = RdCartridgeCoverSensor();
+ return ret;
+}
+U8 RdWaste1()
+{
+ bool ret = notOK;
+ ret = RdWasteCartridge1Sensor();
+ return ret;
+}
+U8 RdWaste2()
+{
+ bool ret = notOK;
+ ret = RdWasteCartridge2Sensor();
+ return ret;
+}
+U8 SetValve(bool value)
+{
+ bool ret = notOK;
+ ret = SetValveDirection( );
+ return ret;
+}
+
+U8 SetPump(bool value)
+{
+ bool ret = notOK;
+ ret = SetWastePump(value);
+ return ret;
+}
+
+U8 RdFilter()
+{
+ bool ret = notOK;
+ ret = RdWasteTankFilterSensor();
+ return ret;
+}
+U8 RdEmpty()
+{
+ bool ret = notOK;
+ ret = RdWasteTankEmptySensor();
+ return ret;
+}
+U8 RdFull()
+{
+ bool ret = notOK;
+ ret = RdWasteTankFullSensor();
+ return ret;
+}
+U8 RdOverFlow()
+{
+ bool ret = notOK;
+ RdWasteTankOverFlowSensor();
+ return ret;
+}
+
+
+
+U8 WHS_HW_test()
+{
+ bool ret = notOK;
+/* ret = RdCartridgeDoor();
+ while (ret == RdCartridgeDoor());
+*/
+/* --- connect JO271 cable ---*/
+ ret = RdWaste1();
+ while (ret == RdWaste1());// blue = waste1
+ ret = RdWaste2();
+ while (ret == RdWaste2());// yellow = waste2
+
+ /* --- connect JO71 JO72 JO121 cable ---*/
+
+ ret = SetValve(1); //red LED On
+ ret = SetValve(0); //red LED Off
+
+
+ ret = SetPump(1); // led green (backplan) On
+ ret = SetPump(0); // led green (backplan) Off
+
+ ret = RdFilter();
+ while (ret == RdFilter());
+ ret = RdEmpty();
+ while (ret == RdEmpty());
+ ret = RdFull();
+ while (ret == RdFull());
+// ret = RdOverFlow();
+// while (ret == RdOverFlow());
+ return ret;
+}
+
+
+
+
+
+
+
+
+/*------------------------------------------------------------------------------------------------*/
+
+/*
+//U8 WasteCartridgeCallBackFunction();
+//U8 WasteCartridgeCBFunction();
+
+bool start_WHS_machin();
+U8 CartridgePrecenceCallBackFunction();
+uint32_t EmptyWasteTankFullCBFunction();
+U8 cartridge_handeling();
+
+U8 RdWastePrecenseSensor(cartridge_name name);
+
+U8 rd_waste_cartridge_param();
+U8 set_cartridge_1(U8 cartridge_status);
+U8 set_cartridge_2(U8 cartridge_status);
+U8 check_sensors_before_start_emptying();
+bool check_RFID_authentication();
+
+uint32_t waste_tank_init(void);
+uint32_t EmptyWasteTankCBFunction();
+
+
+
+U8 WasteCartridgeCallBackFunction()
+{
+ bool ret = notOK;
+
+ ret = RdWastePrecenseSensor(waste_cartridge1);
+ ret = RdWastePrecenseSensor(waste_cartridge2);
+ return ret;
+}
+
+
+U8 Wr_cartridge_RFid(cartridge_name cartridge, cartridge_status status);
+WHS_sttMachin UpdateStateMachine();
+
+*/
+
+// uint32_t updateWasteTankStruct();
+//uint32_t WasteTankFullCallBackFunction(uint32_t IfIndex, uint32_t ReadValue);
+
+/*--- functipons not in use ----*/
+
+/*
+U8 check_sensors_before_start_emptying() ????????????????????
+{
+ bool ret = notOK;
+
+ if ((WHS_info.WHS_sensors.cartridge_cover == CLOSE) &&
+ (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == precense) ||
+ (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == precense)) &&
+ (WHS_info.WHS_sensors.waste_tank_filter_sensor == 1 ))
+ {
+ ret = OK;
+ }
+ return ret;
+}
+
+
+
+
+uint32_t updateWasteTankStruct() //----------what is the timing??????-----------------
+{
+// bool waste_number =1;
+
+ rd_waste_precense_sensor( );
+ RdWasteTankFilterSensor();
+ rd_whs_cartridge_cover();
+
+// rd_waste_tank_RdWasteTankEmptySensor_sensor();
+// RdWasteTankFullSensor();
+// rd_waste_tank_over_flow_sensor();
+ return OK;
+}
+
+
+
+
+uint32_t WasteTankFullCallBackFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ if ( RdWasteTankFullSensor() != WHS_info.WHS_sensors.waste_tank_full_sensor )
+ {
+ WHS_info.event = WHS_full_sensor;
+ WHS_info.WHS_sensors.waste_tank_full_sensor = !WHS_info.WHS_sensors.waste_tank_full_sensor;
+ }
+ return OK;
+}
+
+
+uint32_t WasteTankEmptyCallBackFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ if (RdWasteTankEmptySensor() != WHS_info.WHS_sensors.waste_tank_empty_sensor)
+ {
+ WHS_info.event = WHS_empty_sensor;
+ WHS_info.WHS_sensors.waste_tank_empty_sensor = !WHS_info.WHS_sensors.waste_tank_empty_sensor;
+ }
+ return OK;
+}
+
+uint32_t WasteTankOverflowCallBackFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ if (rd_waste_tank_over_flow_sensor() != WHS_info.WHS_sensors.waste_tank_over_flow_sensor)
+ {
+ WHS_info.event = WHS_overflow_sensor;
+ WHS_info.WHS_sensors.waste_tank_over_flow_sensor = !(WHS_info.WHS_sensors.waste_tank_over_flow_sensor);
+ }
+ return OK;
+}
+
+
+U8 CartridgeCoverCallBackFunction()
+{
+ bool ret = notOK;
+ return ret;
+}
+
+
+U8 CartridgeCoverCBFunction()
+{
+ bool ret = notOK;
+ return ret;
+}
+
+
+
+
+uint32_t WHS_machin()
+{
+ switch( WHS_info.sttMachine )
+ {
+ case WHS_empty: // last OnOffPBstate was OFF
+
+ break;
+ case WHS_filling : // last OnOffPBstate was COUNTPB
+
+ break;
+ case WHS_emptying: // last OnOffPBstate was SHORTPB
+
+ break;
+ case WHS_full:
+
+ break;
+ case WHS_overflow:
+
+ break;
+ default: // WHS_sttError
+ break;
+ }
+ return OK;
+}
+
+
+
+
+uint32_t EmptyWasteTankCBFunction()
+{
+ bool ret = notOK;
+//--------try state machine-------
+ if (WHS_info.event == WHS_no_event)
+ return OK;
+ else
+ {
+// WHS_info.sttMachine = UpdateStateMachine();
+// WHS_info.event = WHS_no_event;
+ switch (WHS_info.event)
+ {
+ case WHS_empty_sensor:
+ if (WHS_info.WHS_sensors.waste_tank_empty_sensor)
+ {
+
+ }
+ else
+ {
+ ret = CartridgeWasteFilling(OFF);
+ }
+ break;
+ case WHS_full_sensor:
+ if (WHS_info.WHS_sensors.waste_tank_full_sensor)
+ {
+ ret = CartridgeWasteFilling(ON);
+ // cant start a new Job
+ }
+ else
+ {
+ // can start a new JOB
+ WHS_info.sttMachine = WHS_empty;
+ }
+ break;
+ case WHS_overflow_sensor:
+ if (WHS_info.WHS_sensors.waste_tank_empty_sensor)
+ {
+
+ // 1.StopMacine
+ // 2.
+
+ WHS_info.sttMachine = WHS_overflow;
+ }
+ else
+ {
+ WHS_info.sttMachine = WHS_full;
+ }
+ break;
+ default: //error state
+ break;
+ }
+ WHS_info.event = WHS_no_event;;
+ }
+ return ret;
+}
+
+
+
+uint32_t start_WHS_machin()
+{
+ switch( WHS_info.sttMachine )
+ {
+ case WHS_empty: // last OnOffPBstate was OFF
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); //
+ break;
+ case WHS_filling : // last OnOffPBstate was COUNTPB
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); //
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); //
+ break;
+ case WHS_emptying: // last OnOffPBstate was SHORTPB
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); //
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); //
+ break;
+ case WHS_full:
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); //
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankOverflowCallBackFunction, 0,0,0 ); //
+ break;
+ case WHS_overflow:
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); //
+ AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankOverflowCallBackFunction, 0,0,0 ); //
+ break;
+ default: // WHS_sttError
+ break;
+ }
+ return OK;
+}
+
+*/
+
+//U8 WasteCartridgeCBFunction()
+//{
+// bool ret = notOK;
+// switch (WHS_info.event)
+// {
+// /*case WHS_waste1_presence_sensor :
+// if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor ) // waste cartridge 1 is inserted .
+// {
+// SetCartridgeLED(waste_cartridge1, led_on);
+// RdWasteCartridgeParam(waste_cartridge1);
+// if ( CartridgeAuthentication(waste_cartridge1)) // to define authentication
+// {
+// //WHS_info.cartridge_1.autheticate = PASSED; //='0'
+// //???WHS_info.WHS_valve = waste_cartridge1; // or we should do it only before pumping????
+// //???SetValveDirection(); // or we should do it only before pumping????
+// }
+// else
+// {
+// //WHS_info.cartridge_1.autheticate = FAILED; //='1'
+// SetCartridgeLED(waste_cartridge1, led_off);
+// }
+// }
+// else // waste cartridge 1 take out
+// {
+// WHS_info.cartridge_1.autheticate = FAILED;
+// //???if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping????
+// //???{
+// //???WHS_info.WHS_valve = waste_cartridge;
+// //???SetValveDirection();
+// //???}
+// //???else
+// //???{
+// //???
+// //???}
+// //??? RdWasteCartridgeParam(waste_cartridge2);
+// //???WHS_info.WHS_valve = waste_cartridge1;
+// }
+//
+// break;
+// case WHS_waste2_presence_sensor :
+// if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor ) // waste cartridge is inserted .
+// {
+// SetCartridgeLED(waste_cartridge2, led_on);
+// RdWasteCartridgeParam(waste_cartridge2);
+// if ( CartridgeAuthentication(waste_cartridge2)) // to define authentication
+// {
+// //WHS_info.cartridge_2.autheticate = PASSED; //='0'
+// //???WHS_info.WHS_valve = waste_cartridge2; // or we should do it only before pumping????
+// //???SetValveDirection(); // or we should do it only before pumping????
+// }
+// else
+// {
+// //WHS_info.cartridge_2.autheticate = FAILED; //='1'
+// SetCartridgeLED(waste_cartridge2, led_off);
+// }
+// }
+// else // waste cartridge 2 take out
+// {
+// WHS_info.cartridge_2.autheticate = FAILED;
+//
+// if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping????
+// {
+// WHS_info.WHS_valve = waste_cartridge;
+// SetValveDirection();
+// }
+// else
+// {
+//
+// }
+// RdWasteCartridgeParam(waste_cartridge2);
+// WHS_info.WHS_valve = waste_cartridge1;
+//
+// }
+// break;*/
+// default:
+// break;
+// }
+//
+// WHS_info.event = WHS_no_event;
+//
+// return ret;
+//}
+
+
+//IDS_Dispenser_Build_Pressure_Callback
+
+
+/*------------------------------------------------------------------------------------------------*/
+
+
+
+