diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-06-29 18:24:41 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-06-29 18:24:41 +0300 |
| commit | 7707bbff3cf8d37d9cab419353ce8d6f28a482b0 (patch) | |
| tree | 261f658492da004a6d0924c9f292ed78f96ffe82 /Software/Embedded_SW | |
| parent | eff63ca3c731160af00f8385771fbdbdeed0ceaf (diff) | |
| download | Tango-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.c | 132 |
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; + } +} |
