aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Waste
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-10-29 15:55:21 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-10-29 15:55:21 +0200
commit4b789f33eadfc5cc1d937a80ce03ea8425955ffe (patch)
tree7dbbd0529a24f9ca064cab688a0d6d2b8b762ea1 /Software/Embedded_SW/Embedded/Modules/Waste
parent8f3baa0d9097aa6ed800863a4680608e867c809a (diff)
parent11fb700fcbc4627162a9c3f84b03b5016248bd97 (diff)
downloadTango-4b789f33eadfc5cc1d937a80ce03ea8425955ffe.tar.gz
Tango-4b789f33eadfc5cc1d937a80ce03ea8425955ffe.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Waste')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste.h207
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h55
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c1410
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c653
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_print.c0
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c3
6 files changed, 710 insertions, 1618 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h
index 4518f0ded..e69de29bb 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste.h
@@ -1,207 +0,0 @@
-#ifndef WASTE_H
-#define WASTE_H
-
-#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.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
-{
- BLACK,
- CYAN,
- MAGENTA,
- YELLOW,
- TRANSPARENT,
- SP_1,
- CLEANER,
- LUBRICANT
-} CMYK_color;
-
-typedef enum
-{
- CarteidgeNotPrecense = 0,
- CarteidgePrecense
-} CarteidgPrecenseSensorStatus; //WHS_CarteidgPrecenseSensorStatus;
-
-typedef enum
-{
- WHS_CartridgeCoverCLOSE = 0,
- WHS_CartridgeCoverOPEN
-} WHS_CarteidgeCoverSensorStatus;
-
-typedef enum
-{
- SENSORFULL = 0,
- SENSORnotFULL
-} WHS_FullSensorStatus;
-
-typedef enum
-{
- SENSORnotEMPTY = 0,
- SENSOREMPTY
-} 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,
- IFS_INK_presence_sensor,
- IFS_INK_authentication_pass,
- IFS_INK_authentication_fail,
- WHS_waste1_presence_sensor,
- WHS_waste2_presence_sensor,
- WHS_filter_sensor,
- WHS_cartridge_cover_sensor,
- WHS_Timeout,
- IFS_Timeout,
- IFS_Timeout_Second,
- IFS_MidTankFull
-} WHS_sensor;
-
-typedef enum
-{
- // WasteEmpty = 0,
- // WasteFilling,
- // WasteFail,
- ColorFull = 0,
- ColorUsed,
- WasteEmpty,
- WasteFilling,
- WasteFull,
- WasteFail
-} cartridge_status;
-
-
-typedef enum
-{
- led_on = 0,
- led_off,
- led_blink,
- led_panic
-} led_status;
-
-typedef enum
-{
- no_waste_cartridge = 0,
- INK_cartridge ,
- waste_cartridge1 ,
- waste_cartridge2
-} cartridge_name;
-
-typedef enum
-{
- VALVE_DIR_WASTE_CARTRIDGE1 = 0,
- VALVE_DIR_WASTE_CARTRIDGE2
-} valve_cartridge_name;
-
-
-struct WHS_sensors_status
-{
- WHS_CarteidgeCoverSensorStatus cartridge_cover; /*open(1) ,close(0) */
-// WHS_CarteidgPrecenseSensorStatus IFS_Ink_precense_sensor; /*presence(1) ,not_precense(0) */
-// bool IFS_Ink_precense_sensor_flag; /* 1=event 0=no enent */
- CarteidgPrecenseSensorStatus waste_cartridge1_precense_sensor; /*presence(1) ,not_precense(0) */
- bool waste_cartridge1_precense_sensor_flag; /* 1=event 0=no enent */
- 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 cartridge_params
-{
- uint32_t serial_number;
- cartridge_status status; /*WasteEmpty, WasteFilling, WasteFail, WasteFull....... */
- MidTank_t cart_color;
- bool autheticate;
- uint32_t time_out;
-};
-
-struct pump_params
-{
- bool status;
- uint32_t time;
-};
-
-struct WHS_information
-{
- WHS_sttMachin sttMachine;
- struct cartridge_params cartridge_1, cartridge_2;
- struct WHS_sensors_status WHS_sensors;
- struct pump_params WHS_pump;
- valve_cartridge_name WHS_valve;
- WHS_sensor event;
- cartridge_name active_cartridge;
- uint32_t Cartridge_Ink_device_Id;
- uint32_t Cartridge_Ink_TimeOut_device_Id;
- uint32_t Cartridge_Waste1_device_Id;
- uint32_t Cartridge_Waste2_device_Id;
- uint32_t Cartridge_Cover_device_Id;
- //PBcolor Ink_Led, cartridge_1_Led, cartridge_2_Led;
- double MidTank_capacity;
-};
-struct WHS_information WHS_info;
-
-U8 WHS_init(void);
-U8 WHS_HW_test(void);
-bool WHS_IsEmptying();
-
-bool WHS_IsContainerFull();
-bool WHS_IsContainerEmpty();
-bool WHS_IsContainerOverflow();
-bool WHS_WasteCartridgeLowerPresent();
-bool WHS_WasteCartridgeMiddlePresent();
-bool WHS_IsPumpActive();
-bool WHS_IsValveOpen();
-
-bool SetWastePump( bool power);
-
-void midtanktest6_ON();
-void midtanktest6_OFF();
-
-//bool CartridgeValidationResponseFunc(MessageContainer* requestContainer);
-//void ResponseDemo(int MidtankId);
-
-bool RdInkCartridgeSensor();
-bool WasteTankCBFunction();
-
-#endif
-
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
index 8b1378917..db15a9ffd 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
@@ -1 +1,56 @@
+#ifndef WASTE_EX_H
+#define WASTE_EX_H
+
+typedef enum {
+ CartridgeStateOUT,
+ CartridgeStateIN,
+ CartridgeStateSELECTED,
+ CartridgeStateACTIVE,
+ CartridgeStateFULL
+}CartridgeStateEnum;
+
+typedef enum {
+ WasteCartridge_upper,
+ WasteCartridge_middle,
+ WasteCartridge_lower,
+ MaxWasteCartridges
+}WasteCartridgeEnum;
+
+typedef enum{
+ WasteTankStateIdle,
+ WasteTankStateFull,
+ WasteTankStateEmptying,
+ WasteTankStatePaused
+}WasteTankStateEnum;
+
+extern bool DoorState;
+/////////////////////////////// Cartridges //////////////////////////////////////
+void cartCART_INSERTED (WasteCartridgeEnum); //{called from polling function. validate, set state to IN)
+void cartCART_EXTRACTED(WasteCartridgeEnum); //{called from polling function. set state to out, if was ACTIVE – notify waste module)
+WasteCartridgeEnum cartSELECT_CART(void); //{ if there is no SELECTED cartridge select the first cartridge in IN state. If there is none, return -1}
+void cartFILLING_START(void); //{set state of SELECTED to ACTIVE}
+void cartFILLING_END(void); //{set state of ACTIVE to FULL}
+CartridgeStateEnum cartGetState (WasteCartridgeEnum);
+bool cartGetPresence (WasteCartridgeEnum CartId);
+bool cartCart_door();//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec
+bool NoCartAvailable();
+
+void Waste_Init();
+void Waste_StateMachine(void);
+void Waste_StateMachine_OneSecond_Call(void);
+bool SetWastePump( bool power);
+bool WHS_IsContainerEmpty();
+bool WHS_IsContainerFull();
+bool WHS_WasteCartridgeLowerPresent();
+bool WHS_WasteCartridgeMiddlePresent();
+bool WHS_IsEmptying();
+uint32_t Waste_CheckState(int *AlarmId);
+uint32_t Waste_Prepare(void);
+bool WHS_IsVocPpmOverAlarmLimit();
+void setWastePrepareValues(float HeadLimit,float WasteLimit);
+
+
+extern bool ReadingVocEverySec;
+
+#endif
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
index 922da21b1..e69de29bb 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
@@ -1,1410 +0,0 @@
-/* ---- 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 "common/utilities/RfidTagContent.h"
-
-#include <PMR/Diagnostics/EventType.pb-c.h>
-#include "Modules/AlarmHandling/AlarmHandling.h"
-#include "StateMachines/Initialization/PowerOffSequence.h"
-#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h"
-#include "CartridgeValidationRequest.pb-c.h"
-#include "CartridgeValidationResponse.pb-c.h"
-#include "Modules/General/buttons.h"
-#include "Modules/IFS/ifs.h"
-#include <Drivers/I2C_Communication/I2C_Task.h>
-#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
-//
-//#define CARTRIDGE_INK_TIMEOUT 60
-//#define CARTRIDGE_INK_TIMEOUTx2 120
-//#define CartridgeInkTimeOutCallBackTime eOneSecond
-//#define MidTank_Pressure_EMPTY 1000 //todo get from Moti the correct number
-//#define CARTRIDGE_CAPATICY 1500 //liters
-//#define FULL 1000
-
-#define WasteTankCallBackTime eOneSecond
-#define CartridgeCoverCallBackTime eOneSecond
-#define CartridgeCoverCallBackFastTime eTenMillisecond
-#define CartridgeWaste1CallBackTime eOneSecond
-#define CartridgeWaste2CallBackTime eOneSecond
-//#define CartridgeInkCallBackTime eOneSecond
-#define STARTCOUNT 1
-#define STOPCOUNT 0
-#define PUMPTIMEOUT 1200 // seconds; 20 minutes, per Moty, 15/4/19
-
-
-/*------------Waste Tank function-----------------------*/
-bool initWHS_WasteTank();
-bool InitCartStatus();
-
-//bool CartridgeCoverCBFunction();
-U8 CartridgeCoverCallBackFunction();
-// WHS_sensor CartridgeInkCallBackFunction();
-WHS_sensor CartridgeWaste1CallBackFunction();
-WHS_sensor CartridgeWaste2CallBackFunction();
-WHS_sensor WasteTankCallBackFunction();
-U8 CartridgeWasteFilling(bool status);
-//bool WasteTankCBFunction();
-//WHS_sensor CartridgeInkTimeOutCallBackFunction();
-
-
-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 RdCartridgeParam(cartridge_name cart_name);
-bool CartridgeAuthentication(cartridge_name cart_name);
-bool SetActiveWastCartridge();
-void SetWasteLevelEmptyingLimit(double value);
-
-
-
-RfidTagContent cartridge_info;
-
-// function for RFID:
-bool WrRFIDStatus(cartridge_name active_cartridge, cartridge_status status);
-cartridge_status RdRFIDStatus (cartridge_name active_cartridge);
-bool RD_MID_TANK_Level();
-
-//bool PowerOffInProcessGetState() {return OK;}; //todo
-bool WrRFIDStatus(cartridge_name active_cartridge, cartridge_status status) { return OK;} //todo
-cartridge_status RdRFIDStatus (cartridge_name active_cartridge) { return WasteEmpty; } //todo
-
-bool WHS_IsContainerFull(){return WHS_info.WHS_sensors.waste_tank_full_sensor;}
-bool WHS_IsContainerEmpty(){return WHS_info.WHS_sensors.waste_tank_empty_sensor;}
-
-bool WHS_IsContainerOverflow(){return WHS_info.WHS_sensors.waste_tank_over_flow_sensor;}
-bool WHS_WasteCartridgeLowerPresent(){return WHS_info.WHS_sensors.waste_cartridge1_precense_sensor;}
-bool WHS_WasteCartridgeMiddlePresent(){return WHS_info.WHS_sensors.waste_cartridge2_precense_sensor;}
-bool WHS_IsPumpActive(){return WHS_info.WHS_pump.status;}
-bool WHS_IsValveOpen(){return WHS_info.WHS_valve;}
-bool RD_MID_TANK_Level(){return 0 /* FULL*/ ;}
-//bool ColorMatch();
-//bool MidTankValvesAction(bool action);
-
-
-
-//bool MidTankValvesAction(bool action) //Cartridge_MidTank_ON of Cartridge_MidTank_OFF
-//{
-// bool ret = false;
-//
-// Valve_Set(IDS_Id_to_AirValve[WHS_info.Ink.cart_color], action ); //Atm_MidTank_OFF/ON
-// Valve_Set(IDS_Id_to_CartrideValve[WHS_info.Ink.cart_color], action ); //Atm_MidTank_OFF/ON
-//
-// ret = true;
-// return ret;
-//}
-//
-//bool ColorMatch()
-//{
-// bool ret = false;
-//
-// ret = true;
-// return ret;
-//}
-
-bool WHS_IsEmptying()
-{
- bool ret = false;
- if ( WHS_info.sttMachine == WHS_emptying )
- {
- ret = true;
- }
- return ret;
-}
-
-//char CartridgeRequestToken[36+1];
-//int CartridgeRequestId = 0x01010101;
-///* -------- cartridge function ----*/
-//uint32_t ReadCartridgeData(cartridge_name cart_name)
-//{
-// //this function triggers reading and validation of the cartridge information
-// // for now it sends a request to the tablet to inquire for the ink color/midtank id
-// MessageContainer responseContainer;
-// CartridgeValidationRequest ValidationReq = CARTRIDGE_VALIDATION_REQUEST__INIT;
-// Cartridge CartridgeData;
-//
-// strcpy(CartridgeRequestToken,"Happy days are coming to us, soon");
-// memcpy(&CartridgeRequestToken[32],&CartridgeRequestId,sizeof(CartridgeRequestId));
-// CartridgeRequestId++;
-//
-// cartridge__init(&CartridgeData);
-// CartridgeData.has_slot = true;
-// CartridgeData.slot = CARTRIDGE_SLOT__Ink;
-// CartridgeData.tag = 0;
-// CartridgeData.has_index = false;
-//
-// ValidationReq.has_action = true;
-// ValidationReq.action = CARTRIDGE_ACTION__Inserted;
-//
-// ValidationReq.cartridge = &CartridgeData;
-//
-// responseContainer = createContainer(MESSAGE_TYPE__CartridgeValidationRequest, CartridgeRequestToken, true, &ValidationReq, &cartridge_validation_request__pack, &cartridge_validation_request__get_packed_size);
-// //-------------------------------------------------------------------------------------------
-// uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
-// size_t container_size = message_container__pack(&responseContainer, container_buffer);
-// my_free(responseContainer.data.data);
-// //SendChars((char*)container_buffer, container_size);
-//
-// return OK;
-//}
-//void ResponseDemo(int MidtankId)
-//{
-// WHS_info.event = IFS_INK_authentication_pass;
-// //global mid tank id = MidtankId;
-// WHS_info.Ink.cart_color = MidtankId;
-// WasteTankCBFunction();//call cart is ok
-//}
-//bool CartridgeValidationResponseFunc(MessageContainer* requestContainer)
-//{
-// bool ret = notOK;
-// CartridgeValidationResponse* response = cartridge_validation_response__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
-//
-// Cartridge *cartridge;
-// uint32_t midtankId;
-// cartridge_name cart_name;
-//
-// // chack the massege:
-// // 1. the cartridge is valid ( autantication)
-// // 2. the pointer is not 0 !!!
-// if (response->cartridge == 0 )
-// {
-// REPORT_MSG(WHS_filling," ------------ IFS_filling message from PPC is null!!! ----------------- "); // write to log error
-// return ret;
-// }
-//
-// if (response->isvalid == true)
-// {
-// REPORT_MSG(WHS_filling," ------------ IFS_filling INK cartridge is valid ----------------- "); // write to log error
-// cartridge = response->cartridge;
-// midtankId = cartridge->index; // midtank 1-8
-// cart_name = cartridge->slot; //cart1(INK),cart2(WASTE1),cart3(WASTE1)
-// if (cartridge->slot == INK_cartridge)
-// {
-// WHS_info.Ink.cart_color = cartridge->index; // midtank 1-8
-// WHS_info.event = IFS_INK_authentication_pass;
-// }
-// WasteTankCBFunction();//call cart is ok
-// ret = OK;
-// }
-// else
-// {
-// REPORT_MSG(WHS_filling," ------------ IFS_filling INK cartridge is not valid !!!----------------- "); // write to log error
-//// cartridge = response->cartridge;
-//// mimidtankId = cartridge->index;
-//// cart_name = cartridge->slot;
-// WHS_info.event = IFS_INK_authentication_fail;
-// WasteTankCBFunction();// call cart is INVALID
-// ret = OK;
-// }
-//return ret;
-//}
-
-
-
-bool RdCartridgeParam(cartridge_name cart_name)
-{
- /*
- read all parameters from RFid cartridge:
- serial number, cartridge_status...
- waste_cartridge 1 or 1
- update waste_cartridge struct
- */
- bool ret = notOK;
- switch (cart_name)
- {
- case waste_cartridge1:
- WHS_info.cartridge_1.serial_number = temp_funcion; //to do
- WHS_info.cartridge_1.status = temp_funcion; // to do
- break;
- case waste_cartridge2:
- WHS_info.cartridge_2.serial_number = temp_funcion;
- WHS_info.cartridge_2.status = temp_funcion;
- break;
- case INK_cartridge:
- ReadCartridgeData(cart_name);
- //memcpy(cartridge_info.ColorName,RED);
-// add call back!! WasteTankCallBackTime
-// state - wait for cartridge validation
-// //WHS_info.Ink.serial_number = temp_funcion;
- //WHS_info.Ink.status = temp_funcion;
- break;
- default:
- break;
- }
- ret = OK;
- return ret;
-}
-
-bool CartridgeAuthentication(cartridge_name cart_name)
-{
- bool ret = notOK;
- // TBD;
- switch (cart_name)
- {
-// case INK_cartridge:
-// WHS_info.Ink.autheticate = PASSED; //todo
-// //Pannel_Leds(CART_1, MODE_ON);
-// break;
- case waste_cartridge1:
- WHS_info.cartridge_1.autheticate = PASSED; //todo
- //Pannel_Leds(CART_2, MODE_ON);
- break;
- case waste_cartridge2:
- WHS_info.cartridge_2.autheticate = PASSED; //todo
- //Pannel_Leds(CART_3, MODE_ON);
- break;
- default:
- WHS_info.cartridge_1.autheticate = FAILED; //todo
- WHS_info.cartridge_2.autheticate = FAILED; //todo
- //Pannel_Leds(CART_2, MODE_OFF);
- //Pannel_Leds(CART_3, MODE_OFF);
- 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 ) && (WHS_info.WHS_sensors.cartridge_cover == CLOSE))
- if ( power == OPEN )
- {
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- {
- Pumps_Control(WHS_WTANKPUMP2, OPEN); //waste_pump_power_on();
- }
- else //new WHS
- {
- Trigger_SetWHSPump(OPEN);
- }
- WHS_info.WHS_pump.status = OPEN;
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS_empty start PUMP -----------------", __FILE__, __LINE__, WHS_info.WHS_pump.status, RpMessage, 0, 0);
- WHS_info.WHS_pump.time = STARTCOUNT;
- ret = OPEN;
- }
- else
- {
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- {
- Pumps_Control(WHS_WTANKPUMP2, CLOSE); //waste_pump_power_on();
- }
- else //new WHS
- {
- Trigger_SetWHSPump(CLOSE);
- }
- WHS_info.WHS_pump.status = CLOSE;
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS_empty stop PUMP -----------------", __FILE__, __LINE__, WHS_info.WHS_pump.status, RpMessage, 0, 0);
- WHS_info.WHS_pump.time = STOPCOUNT;
- ret = CLOSE;
- }
- return ret;
-}
-
-
-
-
-bool SetValveDirection()
-{
- /*
- * waste_cartridge = 1- OPEN, 0 - CLOSE
- * VALVE_WASTE_TANK
- *
- * */
- bool ret = OK;
- //if (WHS_info.WHS_valve != no_waste_cartridge)
- if (WHS_info.active_cartridge == waste_cartridge1)
- {
- WHS_info.WHS_valve = VALVE_DIR_WASTE_CARTRIDGE1;
- ReportWithPackageFilter(WasteFilter,"------------WHS_info.WHS_valve VALVE_DIR_WASTE_CARTRIDGE1 -----------------", __FILE__, __LINE__, WHS_info.WHS_valve, RpMessage, 0 ,0);
-}
- else
- {
- WHS_info.WHS_valve = VALVE_DIR_WASTE_CARTRIDGE2;
- ReportWithPackageFilter(WasteFilter,"------------WHS_info.WHS_valve VALVE_DIR_WASTE_CARTRIDGE2 -----------------", __FILE__, __LINE__, WHS_info.WHS_valve, RpMessage, 0 ,0);
- }
-
-
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve);
- else //new WHS
- Trigger_SetWHSValveWatseCartridge(WHS_info.WHS_valve);
-
- //ret = OK;
-
- return ret;
-}
-
-
-/*-------------------------- function for WHS ------------------------------- */
-
-U8 CartridgeWasteFilling(bool status)
-{
- bool ret = notOK;
- //SetValveDirection();
- if ((status == ON) && (WHS_info.active_cartridge != no_waste_cartridge))
- {
- SetValveDirection();//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
- SetWastePump(OPEN);
- //WHS_info.WHS_pump.time = 0;
- AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false);
- if (WHS_Type == WHS_TYPE_NEW)
- {
- SetWasteLevelEmptyingLimit(GetWHSWasteTankLevelMiliLiter());
- waste_seq_step1_cont();
- }
- ret=OK;
- }
- else // stop Waste cartridge filling
- {
- SetWastePump(CLOSE);
- WHS_info.WHS_valve = VALVE_DIR_WASTE_CARTRIDGE1;
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve);
- else //new WHS
- {
- Trigger_SetWHSValveWatseCartridge(WHS_info.WHS_valve);
- waste_seq_cont_stop();
- }
-
- AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
-
- switch (WHS_info.active_cartridge)
- {
- case waste_cartridge1:
- Pannel_Leds( CART_2, MODE_OFF); //set led color
- cart2.color = colorOFF;
- ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge1 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- break;
- case waste_cartridge2:
- Pannel_Leds( CART_3, MODE_OFF); //set led color
- cart3.color = colorOFF;
- ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge2 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- break;
- case no_waste_cartridge:
- ReportWithPackageFilter(WasteFilter,"------------ !!!!!WHS No waste cartridge !!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- ReportWithPackageFilter(WasteFilter,"------------ !!!! WHS insert cartridge!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- ret = ERROR;
- break;
- default:
- break;
- }
-
-
- //write RFID status
- }
- return ret;
-}
-
-/* ------read waste tank sensors ----------- */
-#define WASTE_CARTRIDGE_SIZE 1.5
-#define WASTE_LEVEL_OVERFLOW 4.0
-#define WASTE_LEVEL_FULL 3.5
-#define WASTE_LEVEL_EMPTY 2.10
-double WasteLevelOverflow = WASTE_LEVEL_OVERFLOW;
-double WasteLevelFull = WASTE_LEVEL_FULL;
-double WasteLevelEmpty = WASTE_LEVEL_EMPTY;
-void SetWasteLevelEmptyingLimit(double value)
-{
- WasteLevelEmpty = value - WASTE_CARTRIDGE_SIZE;
- ReportWithPackageFilter(WasteFilter,"------------ SetWasteLevelEmptyingLimit -----------------", __FILE__, __LINE__, (int)(value*100), RpMessage, (int)(WasteLevelEmpty*100), 0);
-}
-bool RdWasteTankEmptySensor()
-{
- double WasteLevel = 0.0;
- 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;
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- {
- ret = WHS_GPI_WCONTAINER_WARN();
- }
- else //new WHS
- {
- WasteLevel = GetWHSWasteTankLevelMiliLiter();
- if (WasteLevel < WasteLevelEmpty)
- ret = OK;
- }
- return ret;
-}
-
-bool RdWasteTankFullSensor()
-{
- double WasteLevel = 0.0;
- 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;
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- {
- ret = WHS_GPI_WCONTAINER_FULL();
- }
- else //new WHS
- {
- WasteLevel = GetWHSWasteTankLevelMiliLiter();
- if (WasteLevel < WasteLevelFull)
- ret = OK;
- }
- return ret;
-}
-
-bool RdWasteTankOverFlowSensor()
-{
- bool ret = notOK;
- double WasteLevel = 0.0;
- //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;
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- {
- ret = WHS_GPI_WASTE_OVERFULL();
- }
- else //new WHS
- {
- WasteLevel = GetWHSWasteTankLevelMiliLiter();
- if (WasteLevel > WasteLevelOverflow)
- ret = OK;
- }
- 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 ;
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS_empty -----------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_tank_full_sensor, RpMessage, WHS_info.WHS_sensors.waste_tank_empty_sensor, 0);
- }
- 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 ;
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS_full -----------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_tank_full_sensor, RpMessage, WHS_info.WHS_sensors.waste_tank_empty_sensor, 0);
- }
- else
- {
- WHS_info.sttMachine = WHS_sttError ;
- ReportWithPackageFilter(WasteFilter,"------------ WHS sensor Error -----------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_tank_full_sensor, RpMessage, WHS_info.WHS_sensors.waste_tank_empty_sensor, 0);
- }
- return WHS_info.sttMachine;
-}
-
-
-bool initWHS_WasteTank()
-{
- WHS_info.WHS_sensors.waste_tank_empty_sensor = RdWasteTankEmptySensor();
- WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL;
- Task_sleep(15);
- UpdateStateMachine();
- AddControlCallback("Waste tank",WasteTankCBFunction, WasteTankCallBackTime , WasteTankCallBackFunction, 0,0,0);//eOneMinute
- return OK;
-}
-
-
-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;
- ReportWithPackageFilter(WasteFilter,"------------ WHS EmptySensorEvent (status) -----------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_tank_full_sensor, RpMessage, WHS_info.WHS_sensors.waste_tank_empty_sensor, 0);
- }
- 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 = 1-WHS_info.WHS_sensors.waste_tank_full_sensor;
- ReportWithPackageFilter(WasteFilter,"------------ WHS FullSensorEvent (status) -----------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_tank_full_sensor, RpMessage, WHS_info.WHS_sensors.waste_tank_empty_sensor, 0);
- }
- 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);
- ReportWithPackageFilter(WasteFilter,"------------ WHS PUMPTIMEOUT -----------------", __FILE__, __LINE__, PUMPTIMEOUT, RpMessage, 0, 0);
- return WHS_info.event = WHS_Timeout;
- }
- if ( FullSensorEvent())
- {
- return WHS_info.event;
- }
- else if ( EmptySensorEvent())
- {
- return WHS_info.event;
- }
-
- return ret;
-}
-
-bool WasteTankCBFunction()
-{
-
- bool ret = notOK;
- static bool pump_on_flag = CLOSE;
- //uint32_t Cartridge_Cover_device_Id = 0;
- double MidTank_Pressure = 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;
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS_filling ------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- }
- else
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS EMPTY sensor failed !!!!!!! ------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- }
- }
- else //SENSOREMPTY
- {
- if (WHS_info.sttMachine == WHS_emptying)
- {
- WHS_info.sttMachine = WHS_empty;
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS_empty -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- ret = CartridgeWasteFilling(OFF);
- WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction );
- WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, CartridgeCoverCallBackTime, CartridgeCoverCallBackFunction, 0,0,0 );//eOneSecond
- WrRFIDStatus(WHS_info.active_cartridge, WasteFull);//write RFID status todo
- }
- else
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS WHS EMPTY sensor failed !!!!!!! -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- }
- }
- break;
- case WHS_full_sensor:
- /* if the machine status is power down : don't start the waste emptying sequence !!!*/
- if ( PowerOffInProcessGetState() )
- break;
- if ((WHS_info.WHS_sensors.cartridge_cover == OPEN) && (WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORFULL))
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS_full , cartridge cover is open cant start the pump!!!! -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);
- ReportWithPackageFilter(WasteFilter,"------------ WHS, close the cartridge cover to start the pump!!!! -------------" , __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);
-
- AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true);
-
- WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL;
- break;
- }
- if (WHS_info.WHS_sensors.waste_tank_full_sensor == SENSORFULL)
- {
- WHS_info.sttMachine = WHS_full;
- ReportWithPackageFilter(WasteFilter,"------------ WHS, WHS_full -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.waste_tank_full_sensor, 0);
- WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction );
- WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, CartridgeCoverCallBackFastTime , CartridgeCoverCallBackFunction, 0,0,0 );//eTenMillisecond
- if (RdRFIDStatus (WHS_info.active_cartridge) == WasteEmpty)
- {
- ret = WrRFIDStatus(WHS_info.active_cartridge, WasteFilling);//write RFID status todo
- if (ret == OK)
- {
- ret = CartridgeWasteFilling(ON);
- }
- else
- {
- WrRFIDStatus(WHS_info.active_cartridge, WasteFail);//write RFID status todo
- }
- }
-
- if (ret != OK)
- {
- //recreate the full event until cartridge is inserted or authentication
- WHS_info.WHS_sensors.waste_tank_full_sensor = 1-WHS_info.WHS_sensors.waste_tank_full_sensor;
- }
-
- // cant start a new Job
- }
- else
- {
- if (WHS_info.sttMachine == WHS_full)
- {
- WHS_info.sttMachine = WHS_emptying;
- ReportWithPackageFilter(WasteFilter,"------------ WHS, WHS_emptying -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.waste_tank_full_sensor, 0);
- // can start a new JOB
- }
- else
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS, WHS FULL sensor failed !!!!!!! -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.waste_tank_full_sensor, 0);
- }
- }
- break;
-
- case WHS_cartridge_cover_sensor:
-
- if ( WHS_info.WHS_sensors.cartridge_cover == OPEN )
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS, Cartridge cover open -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);//popup message :"Cartridge cover open" //todo
- if ( WHS_info.WHS_pump.status == OPEN)
- {
- CartridgeWasteFilling(CLOSE);
- pump_on_flag = OPEN;
- }
-
-// if (cart1.color != colorOFF)
-// {
-//
-// }
-
- if ( !PowerOffInProcessGetState() )
- {
- IFS_info.Cartridge_Ink_device_Id = AddControlCallback("Ink_Cartridge", WasteTankCBFunction, CartridgeInkCallBackTime , CartridgeInkCallBackFunction , 0,0,0 ); //eOneSecond
- WHS_info.Cartridge_Waste1_device_Id = AddControlCallback("Waste1 Cartridge", WasteTankCBFunction, CartridgeWaste1CallBackTime, CartridgeWaste1CallBackFunction, 0,0,0 ); //eOneSecond
- WHS_info.Cartridge_Waste2_device_Id = AddControlCallback("Waste2 Cartridge", WasteTankCBFunction, CartridgeWaste2CallBackTime, CartridgeWaste2CallBackFunction, 0,0,0 ); //eOneSecond
- }
- else
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS, Power down in process -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);//popup message :"Cartridge cover open" //todo
- }
-
-
-
- //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 )
- {
- WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL; // todo
- // CartridgeWasteFilling(OPEN);
- pump_on_flag = CLOSE;
- }
- IFS_info.Cartridge_Ink_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_device_Id , WasteTankCBFunction );
- 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 );
- if ( IFS_info.INK_isOK_flag )
- {
- IFS_info.INK_isOK_flag = false;//0
- ReportWithPackageFilter(WasteFilter,"------------ WHS, change INK cartridge status to color Used -------------", __FILE__, __LINE__, IFS_info.INK_isOK_flag, RpMessage, 0, 0);
- // test the Mid-tank capacity is not at Nadav sequence
- MidTank_Pressure = Get_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color);
- if ( MidTank_Pressure > MidTank_Pressure_EMPTY )
- {
- ReportWithPackageFilter(WasteFilter,"------------ close door MidTank_Pressure > MidTank_Pressure_EMPTY -----------------", __FILE__,__LINE__,(int)(MidTank_Pressure_EMPTY*1000), RpMessage, (int)(MidTank_Pressure*1000), 0);
- MidTankValvesAction(Cartridge_MidTank_OFF);
- //Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color);
- ReportWithPackageFilter(WasteFilter,"------------ WHS, Mid-tank not empty -------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- break;
- }
- IFS_info.MidTank_capacity = MidTank_Pressure;
- ReportWithPackageFilter(WasteFilter,"------------ Mid-tank filling in process -----------------", __FILE__,__LINE__,(int)(MidTank_Pressure_EMPTY*1000), RpMessage, (int)(MidTank_Pressure*1000), 0);
- Pannel_Leds(CART_1, MODE_ON);
- cart1.color = BLINK;
- MidTankValvesAction(Cartridge_MidTank_ON);
- //add timeout
- IFS_TimeOutAlarm(false);
- IFS_info.Ink.time_out = 1;
- IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback("Ink Cartridge TimeOut", WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond
-
-
-// //add callback for midtank status is full
-// IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond
-// Enable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color);
-// Read_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color);
-// if ( Get_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color) > MidTank_Pressure_FULL )
-// {
-// Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color);
-// REPORT_MSG(WHS_full," ------------ Mid-tank not empty ----------------- ");
-// break;
-// }
-
- }
- }
- break;
-
- case IFS_INK_presence_sensor:
- if (IFS_info.IFS_Ink_precense_sensor == CarteidgePrecense)
- {
- // is power down in process?? //todo
- if ( !PowerOffInProcessGetState() ) // not in power down process
- {
- Pannel_Leds(CART_1, MODE_ON);
- cart1.color = colorON;
- RdCartridgeParam(INK_cartridge); //todo
- }
- else
- {
- // print: "power down in process";
- ReportWithPackageFilter(WasteFilter,"------------ WHS, Power down in process -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, IFS_info.IFS_Ink_precense_sensor, 0);
- }
- }
- else // Cartridge is out
- {
- IFS_info.INK_isOK_flag = false;//0
- Pannel_Leds(CART_1, MODE_OFF);
- cart1.color = colorOFF;
- if (IFS_info.Ink.time_out != 0)
- {
- MidTankValvesAction(Cartridge_MidTank_OFF);
- IFS_info.Ink.time_out = 0;
- IFS_info.Cartridge_Ink_TimeOut_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_TimeOut_device_Id, WasteTankCBFunction );
- }
- }
- break;
-
- case IFS_INK_authentication_pass:
- if (!ColorMatch())
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS, cartridge color does not match -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- Pannel_Leds(CART_1, MODE_ON);
- cart1.color = BLINK;
- break;
- }
-#warning The messege removed (close cartridge cover)
- //REPORT_MSG(WHS_full," ------------ close cartridge cover ----------------- ");
- IFS_info.INK_isOK_flag = true; // 1
-
- break;
-
- case IFS_INK_authentication_fail:
- break;
-
-
- case WHS_waste1_presence_sensor :
- if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == CarteidgePrecense ) // waste cartridge 1 is inserted .
- {
- //SetCartridgeLED(waste_cartridge1, led_on);
- Pannel_Leds(CART_2, MODE_ON);
- cart2.color = colorON;
- RdCartridgeParam(waste_cartridge1);
-// SetActiveWastCartridge();
-// SetValveDirection();
- if ( CartridgeAuthentication(waste_cartridge1) == PASSED) // to define authentication
- {
- //WHS_info.cartridge_1.autheticate = PASSED; //='0'
- //???WHS_info.WHS_valve = waste_cartridge1; // or we should do it only before pumping????
- AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false);
- }
- else
- {
- //WHS_info.cartridge_1.autheticate = FAILED; //='1'
- //SetCartridgeLED(waste_cartridge1, led_off);
- Pannel_Leds(CART_2, MODE_OFF);
- cart2.color = colorOFF;
- }
- }
- else // waste cartridge 1 take out
- {
- Pannel_Leds(CART_2, MODE_OFF);
- cart2.color = colorOFF;
- WHS_info.cartridge_1.autheticate = FAILED;
- }
- //SetActiveWastCartridge();
- break;
- case WHS_waste2_presence_sensor :
- if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == CarteidgePrecense ) // waste cartridge is inserted .
- {
- Pannel_Leds(CART_3, MODE_ON);//SetCartridgeLED(waste_cartridge2, led_on);
- cart3.color = colorON;
- RdCartridgeParam(waste_cartridge2);
- if ( CartridgeAuthentication(waste_cartridge2) == PASSED) // 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????
- AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false);
- }
- else
- {
- //WHS_info.cartridge_2.autheticate = FAILED; //='1'
- Pannel_Leds(CART_3, MODE_OFF);//SetCartridgeLED(waste_cartridge2, led_off);
- cart3.color = colorON;
- }
- }
- else // waste cartridge 2 take out
- {
- Pannel_Leds(CART_3, MODE_OFF);
- cart3.color = colorOFF;
- 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
- {
-
- }
- RdCartridgeParam(waste_cartridge2);
- WHS_info.WHS_valve = waste_cartridge1;
- */
- }
- //SetActiveWastCartridge();
- break;
-
- case WHS_Timeout:
- ReportWithPackageFilter(WasteFilter,"------------ WHS, WHS_Timeout -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true);
- CartridgeWasteFilling(OFF);
- break;
-
-// case IFS_Timeout:
-// REPORT_MSG(WHS_emptying," ------------ IFS_Timeout ----------------- ");
-// // try again :
-// // start timeout
-// // close and open the correct valves
-// REPORT_MSG(WHS_full," ------------ IFS_Timeout_Second_Time ----------------- ");
-// MidTankValvesAction(Cartridge_MidTank_OFF);
-// MidTankValvesAction(Cartridge_MidTank_ON);
-//
-// IFS_TimeOutAlarm();
-//
-// break;
- case IFS_Timeout_Second:
-// Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color);
- IFS_info.Cartridge_Ink_TimeOut_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_TimeOut_device_Id, WasteTankCBFunction );
- ReportWithPackageFilter(WasteFilter,"------------ WHS, Change cartridge status to Fail -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
-
- MidTankValvesAction(Cartridge_MidTank_OFF);
- cart1.color = fastBILNK;
- ReportWithPackageFilter(WasteFilter,"------------ Display Mid-tank # filling fail -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- ReportWithPackageFilter(WasteFilter,"------------ call customer support -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- Pannel_Leds(CART_1, MODE_ON);
- cart1.color = fastBILNK;
- IFS_TimeOutAlarm(true);
- break;
-
- case IFS_MidTankFull:
-// Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color);
- IFS_info.Cartridge_Ink_TimeOut_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_TimeOut_device_Id, WasteTankCBFunction );
- ReportWithPackageFilter(WasteFilter,"------------ Change cartridge status to Waste Empty -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- Pannel_Leds(CART_1, MODE_OFF);
- cart1.color = colorOFF;
- MidTankValvesAction(Cartridge_MidTank_OFF);
- ReportWithPackageFilter(WasteFilter,"------------ Display Mid-tank # filling done -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, 0, 0);
- break;
-
-
-
- case WHS_no_event:
- break;
- default: //error state
- break;
- }
- WHS_info.event = WHS_no_event;
- return ret;
-}
-
-
-
-
-/*------------------------------- Cartridge Cover -----------------------------------------*/
-
-bool RdCartridgeCoverSensor()
-{
-
- //REPORT_MSG(parameter," ------------ RD Cartridge Cover Sensor ----------------- ");
- 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);
- if ((ret == OPEN ) && (ret != WHS_info.WHS_sensors.cartridge_cover))
- {
- ReportWithPackageFilter(WasteFilter,"------------ RD Cartridge Cover Sensor is = OPEN(1) -------------", __FILE__, __LINE__, ret, RpMessage, 0, 0);
- }
- if ((ret == CLOSE ) && (ret != WHS_info.WHS_sensors.cartridge_cover))
- {
- ReportWithPackageFilter(WasteFilter,"------------ RD Cartridge Cover Sensor is = CLOSE(0) -------------", __FILE__, __LINE__, ret, RpMessage, 0, 0);
- }
- 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;
- ReportWithPackageFilter(WasteFilter,"------------ find : WHS_cartridge_cover_sensor event -------------", __FILE__, __LINE__, WHS_info.WHS_sensors.cartridge_cover, RpMessage, 0, 0);
- ret = WHS_cartridge_cover_sensor; //todo
- }
- else if (( IFS_info.INK_isOK_flag ) && ( WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN))// for Mid-tank filling
- {
- ReportWithPackageFilter(WasteFilter,"------------ Mid-tank Filling : Close cartridge cover -------------", __FILE__, __LINE__, WHS_info.WHS_sensors.cartridge_cover, RpMessage, 0, 0);
- }
- /*else if(WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN)
- {
- REPORT_MSG(parameter," ------------ Mid-tank Filling : Cartridge door open ----------------- ");
- }*/
- return ret;
-}
-
-
-
-//WHS_sensor CartridgeInkTimeOutCallBackFunction()
-//{
-// WHS_sensor ret = WHS_no_event;
-//// uint32_t time_out_second = 0 ;
-//
-// if (WHS_info.Ink.time_out) WHS_info.Ink.time_out += 1;
-// Read_MidTank_Pressure_Sensor(WHS_info.Ink.cart_color);
-// if (Get_MidTank_Pressure_Sensor(WHS_info.Ink.cart_color) >= WHS_info.MidTank_capacity + CARTRIDGE_CAPATICY)
-// {
-// WHS_info.Ink.time_out = 0;
-// WHS_info.event = IFS_MidTankFull;
-// return IFS_MidTankFull;
-// }
-// if (WHS_info.Ink.time_out == CARTRIDGE_INK_TIMEOUT)
-// {
-// //WHS_info.Ink.time_out = 0;
-// //return WHS_info.event = IFS_Timeout;
-//
-// REPORT_MSG(WHS_emptying," ------------ IFS_Timeout ----------------- ");
-// // try again :
-// // start timeout
-// // close and open the correct valves
-// REPORT_MSG(WHS_full," ------------ IFS_Timeout_Second_Time ----------------- ");
-// MidTankValvesAction(Cartridge_MidTank_OFF);
-// }
-//
-// if (WHS_info.Ink.time_out == (CARTRIDGE_INK_TIMEOUT+1)) //need to open the valve for second chance
-// {
-// MidTankValvesAction(Cartridge_MidTank_ON);
-// }
-//
-// if (WHS_info.Ink.time_out == CARTRIDGE_INK_TIMEOUTx2)
-// {
-// WHS_info.Ink.time_out = 0;
-// WHS_info.event = IFS_Timeout_Second;
-// return IFS_Timeout_Second;
-// }
-// return ret;
-//}
-
-
-
-//WHS_sensor CartridgeInkCallBackFunction()
-//{
-// uint32_t parameter = 6 ;
-//
-// WHS_sensor ret = WHS_no_event;
-// if (WHS_info.WHS_sensors.IFS_Ink_precense_sensor != RdInkCartridgeSensor())
-// {
-// REPORT_MSG(parameter," ------------ find : IFS_Ink_presence_sensor event ----------------- ");
-// WHS_info.event = IFS_INK_presence_sensor;
-// WHS_info.WHS_sensors.IFS_Ink_precense_sensor = !WHS_info.WHS_sensors.IFS_Ink_precense_sensor;
-// ret = IFS_INK_presence_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;
- ReportWithPackageFilter(WasteFilter,"------------ find : WHS_waste1_presence_sensor event -------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_cartridge1_precense_sensor, RpMessage, 0, 0);
- ret = WHS_waste1_presence_sensor;
- }
- return ret;
-}
-
-WHS_sensor CartridgeWaste2CallBackFunction()
-{
- WHS_sensor ret = WHS_no_event;
-
- 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;
- ReportWithPackageFilter(WasteFilter,"------------ find : WHS_waste2_presence_sensor event -------------", __FILE__, __LINE__, WHS_info.WHS_sensors.waste_cartridge2_precense_sensor, RpMessage, 0, 0);
- ret = WHS_waste2_presence_sensor;
- }
- return ret;
-}
-
-/*------------------------------- Waste Cartridge + IFS Cartridge -----------------------------------------*/
-bool InitCartStatus()
-{
- WHS_info.WHS_sensors.cartridge_cover = RdCartridgeCoverSensor();
-
- /* INK => CART_1 */
- ReportWithPackageFilter(WasteFilter,"------------------------------------------------------------------------------------------", __FILE__,__LINE__,0, RpMessage, 0, 0);
- ReportWithPackageFilter(WasteFilter,"------------ !!!!!!! at INIT what to do if IFS_INK is presence !!!!!!! -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0);
- ReportWithPackageFilter(WasteFilter,"------------------------------------------------------------------------------------------", __FILE__,__LINE__,0, RpMessage, 0, 0);
-
- if (RdInkCartridgeSensor())
- {
- IFS_info.IFS_Ink_precense_sensor = CarteidgePrecense;
- ReportWithPackageFilter(WasteFilter,"------------ INIT : IFS_INK is presence -----------------", __FILE__,__LINE__, IFS_info.IFS_Ink_precense_sensor, RpMessage, 0, 0);
- Pannel_Leds( CART_1, MODE_ON);
- cart1.color = colorON;
- }
- else
- {
- IFS_info.IFS_Ink_precense_sensor = CarteidgeNotPrecense;
- ReportWithPackageFilter(WasteFilter,"------------ INIT : IFS_INK is NOT presence -----------------", __FILE__,__LINE__, IFS_info.IFS_Ink_precense_sensor, RpMessage, 0, 0);
- Pannel_Leds( CART_1, MODE_OFF);
- cart1.color = colorOFF;
- }
-
- /* waste_cartridge1 => CART_2 */
- if (RdWasteCartridge1Sensor())
- {
- WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = CarteidgePrecense;
- ReportWithPackageFilter(WasteFilter,"------------ INIT : WHS_waste1 cart is presence -----------------", __FILE__,__LINE__, WHS_info.WHS_sensors.waste_cartridge1_precense_sensor, RpMessage, 0, 0);
- Pannel_Leds( CART_2, MODE_ON);
- cart2.color = colorON;
- }
- else
- {
- WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = CarteidgeNotPrecense;
- ReportWithPackageFilter(WasteFilter,"------------ INIT : WHS_waste1 cart is NOT presence !!! -----------------", __FILE__,__LINE__,WHS_info.WHS_sensors.waste_cartridge1_precense_sensor, RpMessage, 0, 0);
- Pannel_Leds( CART_2, MODE_OFF);
- cart2.color = colorOFF;
- }
-
- /* waste_cartridge2 => CART_3 */
- if (RdWasteCartridge2Sensor())
- {
- WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = CarteidgePrecense;
- ReportWithPackageFilter(WasteFilter,"------------ INIT : WHS_waste2 cart is presence -----------------", __FILE__,__LINE__, WHS_info.WHS_sensors.waste_cartridge2_precense_sensor, RpMessage, 0, 0);
- Pannel_Leds( CART_3, MODE_ON);
- cart3.color = colorON;
- }
- else
- {
- WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = CarteidgeNotPrecense;
- ReportWithPackageFilter(WasteFilter,"------------ INIT : WHS_waste2 cart is NOT presence_sensor !!! -----------------", __FILE__,__LINE__, WHS_info.WHS_sensors.waste_cartridge2_precense_sensor, RpMessage, 0, 0);
- Pannel_Leds( CART_3, MODE_OFF);
- cart3.color = colorOFF;
- }
-
- if (IFS_info.IFS_Ink_precense_sensor == CarteidgePrecense) CartridgeAuthentication(INK_cartridge);
- if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == CarteidgePrecense) CartridgeAuthentication(waste_cartridge1);
- if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == CarteidgePrecense) CartridgeAuthentication(waste_cartridge2);
- SetActiveWastCartridge();
-
- if (WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN)
- {
- ReportWithPackageFilter(WasteFilter,"------------ WHS_CartridgeCoverOPEN : add callback for cart1 and cart 2 -----------------", __FILE__,__LINE__, WHS_info.WHS_sensors.cartridge_cover, RpMessage, 0, 0);
- IFS_info.Cartridge_Ink_device_Id = AddControlCallback("Ink Cartridge CB" , WasteTankCBFunction, eOneSecond, CartridgeInkCallBackFunction , 0,0,0 );
- WHS_info.Cartridge_Waste1_device_Id = AddControlCallback("Waste1 Cartridge CB", WasteTankCBFunction, eOneSecond, CartridgeWaste1CallBackFunction, 0,0,0 );
- WHS_info.Cartridge_Waste2_device_Id = AddControlCallback("Waste2 Cartridge CB", WasteTankCBFunction, eOneSecond, CartridgeWaste2CallBackFunction, 0,0,0 );
- }
- WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, eOneSecond, CartridgeCoverCallBackFunction, 0,0,0 );
-
- return OK;
-}
-
-bool RdInkCartridgeSensor()
-{
- bool ret = notOK;
- //WHS_Read_GPI_Registers();
- ret = Is_Cartridge_Present(CART_1);
- return ret;
-}
-
-bool RdWasteCartridge1Sensor()
-{
- bool ret = notOK;
- //WHS_Read_GPI_Registers();
- ret = Is_Cartridge_Present(CART_2);
- return ret;
-}
-
-bool RdWasteCartridge2Sensor()
-{
- bool ret = notOK;
- //WHS_Read_GPI_Registers();
- 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.cartridge_1.status == WasteEmpty))
- {
- WHS_info.active_cartridge = waste_cartridge1;
- ReportWithPackageFilter(WasteFilter,"------------ WHS : active_cartridge = waste_cartridge 1 -----------------", __FILE__,__LINE__, WHS_info.active_cartridge, RpMessage, 0, 0);
- AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false);
- }
- else if (( WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == PRECENSE)
- && (WHS_info.cartridge_2.autheticate == PASSED)
- && (WHS_info.cartridge_2.status == WasteEmpty))
- {
- WHS_info.active_cartridge = waste_cartridge2;
- ReportWithPackageFilter(WasteFilter,"------------ WHS : active_cartridge = waste_cartridge 2 -----------------", __FILE__,__LINE__, WHS_info.active_cartridge, RpMessage, 0, 0);
- AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false);
- }
- else
- {
- WHS_info.active_cartridge = no_waste_cartridge;
- ReportWithPackageFilter(WasteFilter,"------------ WHS : NO active_cartridge -----------------", __FILE__,__LINE__, WHS_info.active_cartridge, RpMessage, 0, 0);
- AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true);
- }
- return ret;
-
-}
-
-
-
-/*------------------------------------------------------------------------------------------------*/
-
-
-
-U8 WHS_init(void)
-{
- SetWastePump(CLOSE);
- WHS_info.WHS_valve = VALVE_DIR_WASTE_CARTRIDGE1;
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve);
- else //new WHS
- Trigger_SetWHSValveWatseCartridge(WHS_info.WHS_valve);
- //Valve_Set(VALVE_WASTE_TANK, VALVE_DIR_WASTE_CARTRIDGE1);
- InitCartStatus();
- initWHS_WasteTank();
-
- return 0;
-}
-
-
-//void midtanktest6_ON(void)
-//{
-// Valve_Set( VALVE_2W_CART_MID_1, Cartridge_MidTank_ON);
-// Valve_Set( VALVE_2W_MID_AIR_1 , Cartridge_MidTank_ON);
-//}
-//
-//void midtanktest6_OFF(void)
-//{
-// Valve_Set( VALVE_2W_CART_MID_1, Cartridge_MidTank_OFF);
-// Valve_Set( VALVE_2W_MID_AIR_1 , Cartridge_MidTank_OFF);
-//}
-
-
-
-
-
-
-
-
-
-
-
-/*---------------------------------- 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 = OK;
- WHS_info.WHS_valve = value;
- if (WHS_Type == WHS_TYPE_UNKNOWN)
- Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve);
- else //new WHS
- Trigger_SetWHSValveWatseCartridge(WHS_info.WHS_valve);
- 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;
-}
-
-
-/*------------------------------------------------------------------------------------------------*/
-
-
-
-
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
index e69de29bb..4343c1607 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
@@ -0,0 +1,653 @@
+#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_ex.h"
+#include "modules/heaters/heaters_ex.h"
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include "Drivers/I2C_Communication/RFID_NFC/NFC.h"
+#include <Utilities/RfidTagHandling.h>
+#include "PMR/IFS/CartridgeState.pb-c.h"
+
+#include <PMR/Diagnostics/EventType.pb-c.h>
+#include "Modules/AlarmHandling/AlarmHandling.h"
+#include "StateMachines/Initialization/PowerOffSequence.h"
+#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h"
+#include "CartridgeValidationRequest.pb-c.h"
+#include "CartridgeValidationResponse.pb-c.h"
+#include "Modules/General/buttons.h"
+#include "modules/General/process.h"
+#include "Modules/General/MachineStatus.h"
+#include "Modules/IFS/ifs.h"
+#include <Drivers/I2C_Communication/I2C_Task.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h>
+
+uint8_t VocPpmAlarmLimit = 10;//PPM
+uint8_t VocPpmLimitForXSec = 10;//Sec
+bool ReadingVocEverySec = false;
+
+bool DoorState = OPEN;
+uint32_t timeout_counter = 0;
+int wasteLevel = 0;
+WasteCartridgeEnum SelectedCard = MaxWasteCartridges;
+CartridgeStateEnum CartState[MaxWasteCartridges];// = {CartridgeStateOUT,CartridgeStateOUT,CartridgeStateOUT};
+uint32_t Cartridge_Cover_Control;
+button *CartLed[MaxWasteCartridges] = {0, &cart2, &cart3};
+WasteTankStateEnum WasteTankState = WasteTankStateIdle;
+
+int init = 1;
+
+bool setWasteValve (WasteCartridgeEnum WasteCartridge);
+
+#define WASTE_CARTRIDGE_SIZE 1500
+#define WASTE_LEVEL_OVERFLOW 2700
+#define WASTE_LEVEL_FULL 2300
+#define WASTE_LEVEL_EMPTY 900
+#define WASTE_EMPTING_TIMEOUT 1500
+double wasteLevelOverflow = WASTE_LEVEL_OVERFLOW;
+double wasteLevelFull = WASTE_LEVEL_FULL;
+double wasteLevelEmpty = WASTE_LEVEL_EMPTY;
+double wasteLevelOverFlow = WASTE_LEVEL_OVERFLOW;
+
+//#define WHS_DEBUG
+
+/////////////////////////////// Cartridges //////////////////////////////////////
+void Waste_StateMachine(void);
+void cartCART_INSERTED (WasteCartridgeEnum CartId)
+{
+ assert (CartId<MaxWasteCartridges);
+ if (CartState[CartId] != CartridgeStateOUT)
+ Report("Cartridges Cart inserted wrong state", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+ CartState[CartId] = CartridgeStateIN;
+ Pannel_Leds((CartId == WasteCartridge_middle)?CART_2:CART_3, MODE_ON);
+ CartLed[CartId]->color = colorON;
+
+ Report("Cartridges Cart inserted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+}
+void cartCART_EXTRACTED(WasteCartridgeEnum CartId) //{called from polling function. set state to out, if was ACTIVE – notify waste module)
+{
+ assert (CartId<MaxWasteCartridges);
+ if (CartState[CartId] == CartridgeStateOUT)
+ Report("Cartridges Cart extracted wrong state", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+
+ Report("Cartridges Cart extracted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+ CartState[CartId] = CartridgeStateOUT;
+ Pannel_Leds((CartId == WasteCartridge_middle)?CART_2:CART_3, MODE_OFF);
+ CartLed[CartId]->color = colorOFF;
+ if (init==0)
+ WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS);
+
+}
+WasteCartridgeEnum cartSELECT_CART(void) //{ if there is no SELECTED cartridge select the first cartridge in IN state. If there is none, return -1}
+{
+ //Report("Cartridges select cart", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0);
+ if ((CartState[WasteCartridge_middle] == CartridgeStateSELECTED)||(CartState[WasteCartridge_middle] == CartridgeStateACTIVE))
+ return WasteCartridge_middle;
+ if ((CartState[WasteCartridge_lower] == CartridgeStateSELECTED)||(CartState[WasteCartridge_lower] == CartridgeStateACTIVE))
+ return WasteCartridge_lower;
+ //no selected/active cartridge yet
+ if (CartState[WasteCartridge_middle] == CartridgeStateIN) {
+ CartState[WasteCartridge_middle] = CartridgeStateSELECTED;
+ return WasteCartridge_middle;
+ }
+ if (CartState[WasteCartridge_lower] == CartridgeStateIN) {
+ CartState[WasteCartridge_lower] = CartridgeStateSELECTED;
+ return WasteCartridge_lower;
+ }
+ return MaxWasteCartridges;
+}
+
+void cartFILLING_START(void) //{set state of SELECTED to ACTIVE}
+{
+ if (CartState[WasteCartridge_middle] == CartridgeStateSELECTED) {
+ Report("Cartridges middle Cart active", __FILE__, __LINE__, WasteCartridge_middle, RpMessage, CartState[WasteCartridge_middle], 0);
+ CartState[WasteCartridge_middle] = CartridgeStateACTIVE;
+ CartLed[WasteCartridge_middle]->color = BLINK;
+ } else if (CartState[WasteCartridge_lower] == CartridgeStateSELECTED) {
+ Report("Cartridges lower Cart active", __FILE__, __LINE__, WasteCartridge_lower, RpMessage, CartState[WasteCartridge_lower], 0);
+ CartState[WasteCartridge_lower] = CartridgeStateACTIVE;
+ CartLed[WasteCartridge_lower]->color = BLINK;
+ } else {
+ Report("Cartridges start with no selected cartridge", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0);
+ }
+}
+
+void cartFILLING_END(void)
+{
+ //{set state of ACTIVE to FULL}
+ if (CartState[WasteCartridge_middle] == CartridgeStateACTIVE) {
+ CartState[WasteCartridge_middle] = CartridgeStateFULL;
+ CartLed[WasteCartridge_middle]->color = colorOFF;
+ } else if (CartState[WasteCartridge_lower] == CartridgeStateACTIVE) {
+ CartState[WasteCartridge_lower] = CartridgeStateFULL;
+ CartLed[WasteCartridge_lower]->color = colorOFF;
+ } else {
+ Report("Cartridges end with no active cartridge", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0);
+ }
+ setWasteValve(WasteCartridge_middle);
+
+}
+
+CartridgeStateEnum cartGetState(WasteCartridgeEnum CartId)
+{
+ assert (CartId<MaxWasteCartridges);
+ return CartState[CartId];
+}
+
+bool cartGetPresence (WasteCartridgeEnum CartId)
+{
+ assert (CartId<MaxWasteCartridges);
+ if (CartState[CartId] == CartridgeStateOUT)
+ return false;
+ else
+ return true;
+}
+
+bool NoCartAvailable()
+{
+ uint32_t CartId;
+
+ for(CartId = CART_2; CartId <= CART_3; CartId++) {
+ if (Is_Cartridge_Present(CartId))
+ return false;
+ }
+ return true;
+}
+
+WasteCartridgeEnum cartGetActiveCart()
+{
+ uint32_t CartId;
+
+ for (CartId = 0; CartId < MaxWasteCartridges; CartId++) {
+ if (CartState[CartId] == CartridgeStateACTIVE)
+ return CartId;
+ }
+ return MaxWasteCartridges;
+}
+
+WasteCartridgeEnum cartNotAllFull()
+{
+ uint32_t CartId;
+
+ for (CartId = WasteCartridge_middle; CartId < MaxWasteCartridges; CartId++) {
+ if (CartState[CartId] != CartridgeStateFULL)
+ return true;
+ }
+ return false;
+}
+
+bool SetWastePump( bool power)
+{
+ if ( power == OPEN ) {
+ if (WHS_Type == WHS_TYPE_UNKNOWN) {
+ Pumps_Control(WHS_WTANKPUMP2, OPEN); //waste_pump_power_on();
+ } else { //new WHS
+ Trigger_SetWHSPump(OPEN);
+ }
+ return OPEN;
+ } else {
+ if (WHS_Type == WHS_TYPE_UNKNOWN) {
+ Pumps_Control(WHS_WTANKPUMP2, CLOSE); //waste_pump_power_on();
+ } else { //new WHS
+ Trigger_SetWHSPump(CLOSE);
+ }
+ return CLOSE;
+ }
+}
+
+bool setWasteValve (WasteCartridgeEnum WasteCartridge)
+{
+ bool direction;
+
+ if (WasteCartridge == WasteCartridge_lower) {
+ direction = true;
+ } else {
+ direction = false;
+ }
+
+ if (WHS_Type == WHS_TYPE_UNKNOWN) {
+ Valve_Set(VALVE_WASTE_TANK,direction);
+ } else { //new WHS
+ Trigger_SetWHSValveWatseCartridge(direction);
+ }
+ return direction;
+}
+
+bool RdWasteTankEmptySensor()
+{
+ //double WasteLevel = 0.0;
+
+ if (WHS_Type == WHS_TYPE_UNKNOWN) {
+ return WHS_GPI_WCONTAINER_WARN();
+ } else { //new WHS
+ //WasteLevel = GetWHSWasteTankLevelMiliLiter();
+ if (wasteLevel < wasteLevelEmpty)
+ return 1; //Empty
+ }
+ return 0;
+}
+
+bool RdWasteTankFullSensor()
+{
+ //double WasteLevel = 0.0;
+
+ if (WHS_Type == WHS_TYPE_UNKNOWN) {
+ return WHS_GPI_WCONTAINER_FULL();
+ } else { //new WHS
+ //WasteLevel = GetWHSWasteTankLevelMiliLiter();
+ if (wasteLevel >= wasteLevelFull)
+ return 1; //full
+ }
+ return 0;
+}
+
+bool RdWasteTankOverFlowSensor()
+{
+ //double WasteLevel = 0.0;
+
+ if (WHS_Type == WHS_TYPE_UNKNOWN) {
+ return WHS_GPI_WASTE_OVERFULL();
+ } else {//new WHS
+ //WasteLevel = GetWHSWasteTankLevelMiliLiter();
+ if (wasteLevel > wasteLevelOverflow)
+ return 1; //overflow
+ }
+ return 0;
+}
+
+int WHS_GetCartridgeFillPercent()
+{
+ return (((wasteLevel - wasteLevelEmpty) * 100) / WASTE_CARTRIDGE_SIZE);
+}
+bool WHS_IsContainerFull()
+{
+ return RdWasteTankFullSensor();
+}
+
+bool WHS_IsContainerEmpty()
+{
+ return RdWasteTankEmptySensor();
+}
+
+bool WHS_IsContainerOverflow()
+{
+ return RdWasteTankOverFlowSensor();
+}
+
+bool WHS_WasteCartridgeLowerPresent()
+{
+ return Is_Cartridge_Present(CART_3);
+}
+
+bool WHS_WasteCartridgeMiddlePresent()
+{
+ return Is_Cartridge_Present(CART_2);
+}
+
+bool WHS_IsEmptying()
+{
+ if (WasteTankState == WasteTankStateEmptying) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void Waste_Init()
+{
+ CartState[WasteCartridge_middle] = CartridgeStateOUT;
+ CartState[WasteCartridge_lower] = CartridgeStateOUT;
+ DoorState = OPEN;
+}
+
+bool cartCart_door()//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec
+{
+ if(Get_COVER_1_State(CartridgesDoor))//to check the polarity
+ {
+ DoorState = OPEN;
+ }
+ else
+ {
+ DoorState = CLOSE;
+ }
+#ifdef WHS_DEBUG
+ DoorState = CLOSE;
+#endif
+ return DoorState;
+}
+
+uint32_t Waste_DoorOpenDuringEmptying(uint32_t IfIndex, uint32_t ReadValue)
+{
+ cartCart_door();
+ if ((DoorState == OPEN) && (WasteTankState == WasteTankStateEmptying)) {
+ SetWastePump(CLOSE);
+ WasteTankState = WasteTankStatePaused;
+ Report("move to WasteTankStatePaused", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ }
+ if ((DoorState == CLOSE) && (WasteTankState == WasteTankStatePaused)) {
+ if (cartGetActiveCart() != MaxWasteCartridges) {
+ SetWastePump(OPEN);
+ WasteTankState = WasteTankStateEmptying;
+ Report("return to WasteTankStateEmptying", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ }
+ }
+ return OK;
+}
+
+void Waste_StateMachine_OneSecond_Call(void)
+{
+ static WasteTankStateEnum prev_state = 0;
+ static int prev_wasteLevel = 0;
+
+ //call cartridge state
+ if ((Is_Cartridge_Present(CART_2) != cartGetPresence(WasteCartridge_middle)) || (init)) {
+ if (Is_Cartridge_Present(CART_2)) {
+ cartCART_INSERTED(WasteCartridge_middle);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle, CARTRIDGE_STATE__Inserted, 0);
+ } else {
+ cartCART_EXTRACTED(WasteCartridge_middle);
+ }
+ }
+ if ((Is_Cartridge_Present(CART_3) != cartGetPresence(WasteCartridge_lower)) || (init)) {
+ if (Is_Cartridge_Present(CART_3)) {
+ cartCART_INSERTED(WasteCartridge_lower);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower, CARTRIDGE_STATE__Inserted, 0);
+ } else {
+ cartCART_EXTRACTED(WasteCartridge_lower);
+ }
+ }
+
+ //call door state
+ cartCart_door();
+
+ //call waste tank level
+#ifndef WHS_DEBUG
+ wasteLevel = GetWHSWasteTankLevelMiliLiter();
+#endif
+
+ if ((WasteTankState != prev_state) || (abs(wasteLevel - prev_wasteLevel) > 50)) {
+ Report("Waste_StateMachine_OneSecond_Call", __FILE__, WasteTankState, SelectedCard, RpMessage, wasteLevel, 0);
+ prev_state = WasteTankState;
+ prev_wasteLevel = wasteLevel;
+ }
+
+ //call state machine
+ Waste_StateMachine();
+
+ if(init)
+ init = 0;
+
+#ifdef WHS_DEBUG
+ wasteLevel += 50;
+#endif
+}
+
+void Waste_StateMachine(void)
+{
+ uint32_t activeCart;
+ switch (WasteTankState)
+ {
+ case WasteTankStateIdle:
+ if(WHS_IsContainerOverflow()) {
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true);
+ } else {
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false);
+ }
+ if (cartNotAllFull() == true) {
+ AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false);
+ }
+ if(WHS_IsContainerFull()) {
+ //check if power down in process
+ if ( PowerOffInProcessGetState() ) {
+ //Report("Power-down in process", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ }
+
+ // select cartridge
+ SelectedCard = cartSELECT_CART();
+ if (SelectedCard == MaxWasteCartridges) {
+ //Report("No Available cart", __FILE__, __LINE__, SelectedCard, RpMessage, 0, 0);
+ AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true);
+ break;
+ } else {
+ AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false);
+ }
+
+ //check door
+ //moved door handling down - I want to see the alarm even if the door is open
+ if (DoorState == OPEN) {
+ //Report("Close cartridge cover", __FILE__, __LINE__, DoorState, RpMessage, 0, 0);
+ break;
+ }
+ // check RFID - check cartridge OK (inkEmpty)
+ // RFID change status - set WasteEmpty
+
+ //move to next state
+ WasteTankState = WasteTankStateFull;
+ Report("move to WasteTankStateFull", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ }
+ break;
+ case WasteTankStateFull:
+ //set cart Active
+ cartFILLING_START();
+
+ // set valve selection
+ activeCart = cartGetActiveCart();
+ //Report("WasteTankStateEmptying set valve", __FILE__, __LINE__, activeCart, RpMessage, 0, 0);
+ setWasteValve(activeCart);
+
+ // set count down
+ timeout_counter = 1;
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, false);
+
+ // set emptying limit
+ wasteLevelEmpty = wasteLevel - WASTE_CARTRIDGE_SIZE;
+ waste_seq_step1_cont();
+
+ // start a timer to observe door opening
+ Cartridge_Cover_Control = AddControlCallback("Cartridge Cover Door", Waste_DoorOpenDuringEmptying, 100, cartCart_door, 0, 0, 0);
+ Report("add control Cartridge Cover Door", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+
+ SetWastePump(OPEN);
+ Report("WasteTankStateEmptying set Pump Open", __FILE__, activeCart, wasteLevel, RpMessage, wasteLevelEmpty, 0);
+
+ //start emptying
+ // RFID change status - set wasteFilling
+ WasteTankState = WasteTankStateEmptying;
+ CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Emptying, 0);
+ break;
+ case WasteTankStateEmptying:
+ // if time out or emptying done - idle
+ activeCart = cartGetActiveCart();
+ if (timeout_counter++ > WASTE_EMPTING_TIMEOUT) {
+ SetWastePump(CLOSE);
+ cartFILLING_END();
+ WasteTankState = WasteTankStateIdle;
+ Report("WasteTankStateEmptying TimeOut", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true);
+ RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
+ timeout_counter = 0;
+ } else if (WHS_IsContainerEmpty()) {
+ SetWastePump(CLOSE);
+ cartFILLING_END();
+ waste_seq_cont_stop();
+ // RFID change status - set wasteFull
+ WasteTankState = WasteTankStateIdle;
+ RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
+ //if (cartNotAllFull() == false)
+ AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
+ Report("WasteTankStateEmptying done", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__EmptyingCompleted, WHS_GetCartridgeFillPercent());
+ timeout_counter = 0;
+ }
+ CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Emptying, WHS_GetCartridgeFillPercent());
+#ifdef WHS_DEBUG
+ wasteLevel -= 100;
+ timeout_counter += 10;
+#endif
+ break;
+ case WasteTankStatePaused:
+ Report("WasteTankStatePaused...", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ activeCart = cartGetActiveCart();
+ if (activeCart == MaxWasteCartridges)
+ {
+ SetWastePump(CLOSE);
+ cartFILLING_END();
+ waste_seq_cont_stop();
+ // RFID change status - TBD
+ WasteTankState = WasteTankStateIdle;
+ RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
+ if (cartNotAllFull() == false)
+ AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
+ Report("WasteTankStatePaused done", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ timeout_counter = 0;
+ CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
+ }
+ break;
+ default:
+ Report("wrong state", __FILE__, WasteTankState, 0, RpMessage, SelectedCard, 0);
+ break;
+ }
+}
+uint32_t Waste_CheckState(int *AlarmId)
+{
+ //check if the waste is ready to run - waste level not above overflow level and no cartridge in the slots
+ if (wasteLevel > wasteLevelOverflow)
+ {
+ Report("cannot start a job with waste tank overflow", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0);
+ JobEndReason = JOB_SAFETY_CRITICAL_ALARM;
+ usnprintf(AlarmReasonStr, 100, "cannot start a job with waste tank overflow");
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true);
+ *AlarmId = EVENT_TYPE__WASTE_CONTAINER_OVERFLOW;
+ //PrepareReady(Module_Waste,ModuleFail);
+ return JOB_SAFETY_CRITICAL_ALARM;
+ }
+ if ((WHS_IsEmptying())||(NoCartAvailable()))
+ {
+ //PrepareReady(Module_Waste,ModuleDone);
+ return JOB_OK;
+ }
+ else
+ {
+ Report("cannot start a job with cartridges in the IFS", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0);
+ JobEndReason = JOB_WASTE_HANDLING_PROBLEM;
+ AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
+ *AlarmId = EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL;
+ usnprintf(AlarmReasonStr, 100, "cannot start a job with cartridges in the IFS");
+ //PrepareReady(Module_Waste,ModuleFail);
+ return JOB_WASTE_HANDLING_PROBLEM;
+ }
+}
+bool WHS_FlowReady = false,HeadIn_FlowReady = false,HeadOut_FlowReady = false;
+uint32_t WasteReadyControlId = 0xFF;
+float AllowedRangeForHeadBlowerDeviation = 0.07,AllowedRangeForWasteBlowerDeviation = 0.20;
+void setWastePrepareValues(float HeadLimit,float WasteLimit)
+{
+ AllowedRangeForHeadBlowerDeviation = HeadLimit;
+ AllowedRangeForWasteBlowerDeviation = WasteLimit;
+}
+uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue)
+{
+ bool ready = false, headready = false,whsready = false;
+ double HeadFlow = GetWHSAirFlow(HEAD_FLOW_METER);
+ double HeadIn_Flow = PressureSensorGetPressure(HEAD_PT100_ZONE_5_0X84_0);
+ double HeadOut_Flow = PressureSensorGetPressure(HEAD_PT100_ZONE_7_0X86_0);
+ if ((HeadFlow<(headairflow*(1+AllowedRangeForWasteBlowerDeviation)))
+ &&(HeadFlow>(headairflow*(1-AllowedRangeForWasteBlowerDeviation))))
+ {
+ if (WHS_FlowReady == false)
+ Report("Module waste WHS_FlowReady ready", __FILE__, __LINE__, (int)(HeadFlow*100), RpMessage, WHS_FlowReady, 0);
+ WHS_FlowReady = true;
+ }
+ if ((HeadIn_Flow<(headBlowersFlow[0]*(1+AllowedRangeForHeadBlowerDeviation)))
+ &&(HeadIn_Flow>(headBlowersFlow[0]*(1-AllowedRangeForHeadBlowerDeviation))))
+ {
+ if (HeadIn_FlowReady == false)
+ Report("Module waste HeadIn_FlowReady ready", __FILE__, __LINE__, (int)(HeadIn_Flow*100), RpMessage, HeadIn_FlowReady, 0);
+ HeadIn_FlowReady = true;
+ }
+ if ((HeadOut_Flow<(headBlowersFlow[1]*(1+AllowedRangeForHeadBlowerDeviation)))
+ &&(HeadOut_Flow>(headBlowersFlow[1]*(1-AllowedRangeForHeadBlowerDeviation))))
+ {
+ if (HeadOut_FlowReady == false)
+ Report("Module waste HeadOut_FlowReady ready", __FILE__, __LINE__, (int)(HeadOut_Flow*100), RpMessage, WHS_FlowReady, 0);
+ HeadOut_FlowReady = true;
+ }
+ if (Head_Type <=HEAD_TYPE_FLAT)
+ headready = true;
+ else if ((HeadIn_FlowReady == true)&&(HeadOut_FlowReady == true))
+ headready = true;
+ if (WHS_Type == WHS_TYPE_UNKNOWN)
+ whsready = true;
+ else if (WHS_FlowReady == true)
+ whsready = true;
+ if ((headready == true)&&(whsready == true))
+ ready = true;
+ if (ready == true)
+ {
+ SafeRemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak);
+ WasteReadyControlId = 0xFF;
+ Report("Module waste prepare ready!", __FILE__, __LINE__, headready, RpMessage, headready, 0);
+ PrepareReady(Module_Waste,ModuleDone);
+ }
+ Report("Module waste prepare", __FILE__, __LINE__, headready, RpMessage, whsready, 0);
+ return OK;
+}
+uint32_t Waste_Prepare(void)
+{
+ WHS_FlowReady = false;HeadIn_FlowReady = false;HeadOut_FlowReady = false;
+ if (WasteReadyControlId != 0xFF)
+ RemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak);
+ //check that blowers are within 10% of designated flow: WHS, head blowers
+ WasteReadyControlId = AddControlCallback("Cartridge Cover Door", Waste_PrepareCallbak, eOneSecond, TemplateDataReadCBFunction, 0, 0, 0);
+ Report("Module waste prepare", __FILE__, __LINE__, Head_Type, RpMessage, WHS_Type, 0);
+ return OK;
+}
+
+bool WHS_IsVocPpmOverAlarmLimit()
+{
+ static uint8_t counter = 0;
+ uint8_t VocPpmAlarmLimit90Percent = 0;
+ uint32_t Temp = 0;
+
+ Temp = (uint32_t)VocPpmAlarmLimit * 90;
+ Temp /= 100;
+ VocPpmAlarmLimit90Percent = (uint8_t)Temp;
+
+ if( ( Latest_Gas_Sens_PPM > VocPpmAlarmLimit ) || //PPM
+ ( (Latest_Gas_Sens_PPM > VocPpmAlarmLimit90Percent) && (ReadingVocEverySec == true) ) ) //Hysteresis
+ {
+ Report("VOC nearing alarm state", __FILE__, (int)(Latest_Gas_Sens_PPM*100), VocPpmAlarmLimit, RpMessage, counter, 0);
+ //reading every sec
+ ReadingVocEverySec = true;
+ if(counter < 0xFF)
+ {
+ counter++;
+ }
+
+ /*if(counter > VocPpmLimitForXSec)//Sec
+ {
+ AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,true);
+ return true;//Buzzer ON if defined
+ }*/
+ }
+ else
+ {
+ AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,false);
+ //move back to noraml reading every Min.
+ ReadingVocEverySec = false;//Turn off the buzzer on the first time sampling a measurment lower than (VocPpmAlarmLimit - 10%)
+ counter = 0;
+ }
+
+ return false;
+}
+
+
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_print.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_print.c
deleted file mode 100644
index e69de29bb..000000000
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_print.c
+++ /dev/null
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c
index 485b28ccc..070f3c7e7 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c
@@ -64,6 +64,7 @@ bool newWHS_init(void)
Trigger_WHS_Rheostat_init();
status |= WHS_I2C_EEprom_Read_Buf();
+ Trigger_WHS_I2C_EEprom_Read ( 0, sizeof(WHS_Eeprom.bytes), WHS_Eeprom.Buf);
//status |= WHS_IO_Init();
//status |= init_WHS_fan();
//
@@ -86,7 +87,6 @@ bool newWHS_init(void)
// delayms(4000);
//Trigger_SetWHSBlowerVoltage (0x0C00);
-
return status;
}
@@ -147,3 +147,4 @@ bool WHS_I2C_EEprom_Write_Ch_shai_taest()
// status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Read_Buf, 7);
return status;
}
+