aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-06-29 18:24:41 +0300
committerAvi Levkovich <avi@twine-s.com>2020-06-29 18:24:41 +0300
commit7707bbff3cf8d37d9cab419353ce8d6f28a482b0 (patch)
tree261f658492da004a6d0924c9f292ed78f96ffe82 /Software/Embedded_SW
parenteff63ca3c731160af00f8385771fbdbdeed0ceaf (diff)
downloadTango-7707bbff3cf8d37d9cab419353ce8d6f28a482b0.tar.gz
Tango-7707bbff3cf8d37d9cab419353ce8d6f28a482b0.zip
Start the Cartridges module
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c
new file mode 100644
index 000000000..8d11589be
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c
@@ -0,0 +1,132 @@
+/*
+ * Cartridges.c
+ *
+ * Created on: Jun 29, 2020
+ * Author: avi
+ */
+#include "include.h"
+#include "DataDef.h"
+#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
+
+typedef enum
+{
+ UPPER_CART,
+ LOWER_CART,
+ UNKNOWN_CART,//at power up
+ NONE_CART,//NA
+}WASTE_ID;
+
+//WASTE_ID Waste_Id;
+
+typedef enum
+{
+ CART_UNKNOWN,//after power-up...
+ CART_OUT,
+ CART_IN,
+ CART_SELECTED,
+}CART_STATE;
+
+typedef enum
+{
+ CART_INIT,//unknown, acquire info, decide
+ CART_IDLE,//empty + valid (RFID tag OK), ready to use
+ CART_FULL,
+ CART_EMPTYING,
+ CART_EMPTYING_PAUSED,
+ CART_BLOCKED,//RFID FAILED ...
+}CART_STATUS;// mode
+
+typedef struct
+{
+ CART_STATE State;
+ uint8_t RFID_Legality;
+ double Leval;//waste tank level mili litters
+ uint8_t Warnings;//empty / full / overflow
+ bool Emptying_Process;// YES / NO
+ uint8_t Emptying_Duration; //if Emptying_Process YES
+}WASTE_HANDLING;
+
+typedef struct
+{
+ uint8_t Door; // OPEN / CLOSE / unknown
+ uint8_t Waste_Active; // CART_2 / CART_3 / NONE
+ WASTE_HANDLING Waste_Handling[2];
+}CART_HANDLING;
+
+CART_HANDLING Cart_Handling;
+
+void cartWaste_Init()
+{
+ //Initial state - OUT
+ Cart_Handling.Waste_Handling[UPPER_CART].State = CART_UNKNOWN;
+ Cart_Handling.Waste_Handling[LOWER_CART].State = CART_UNKNOWN;
+
+ Pannel_Leds(CART_2,MODE_OFF);
+ Pannel_Leds(CART_3,MODE_OFF);
+
+ Cart_Handling.Door = UNKNOWN;
+ Cart_Handling.Waste_Active = NONE_CART;
+}
+
+void 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
+ {
+ Cart_Handling.Door = OPEN;
+ }
+ else
+ {
+ Cart_Handling.Door = CLOSE;
+ }
+}
+
+void cartCART_INSERTED(WASTE_ID CartId) //every 1 sec.
+{
+ switch(CartId)
+ {
+ case UPPER_CART:
+ if(Is_Cartridge_Present(CART_2) == true)
+ {
+ Cart_Handling.Waste_Handling[UPPER_CART].State = CART_IN;
+ Pannel_Leds(CART_2,MODE_ON);
+ }
+ break;
+ case LOWER_CART:
+ if(Is_Cartridge_Present(CART_3) == true)
+ {
+ Cart_Handling.Waste_Handling[LOWER_CART].State = CART_IN;
+ Pannel_Leds(CART_3,MODE_ON);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void cartCART_EXTRACTED(WASTE_ID CartId)
+{
+ if(Cart_Handling.Waste_Active == CART_SELECTED)
+ {
+ #warning notify waste module
+ }
+
+ Cart_Handling.Waste_Handling[CartId].State = CART_OUT;
+
+ switch(CartId)
+ {
+ case UPPER_CART:
+ if(Is_Cartridge_Present(CART_2) == false)
+ {
+ Pannel_Leds(CART_2,MODE_OFF);
+ }
+ break;
+ case LOWER_CART:
+ if(Is_Cartridge_Present(CART_3) == false)
+ {
+ Pannel_Leds(CART_3,MODE_OFF);
+ }
+ break;
+ default:
+ break;
+ }
+}