diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-09-03 11:52:45 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-09-03 11:52:45 +0300 |
| commit | a7fe3ddc7349fe00f0772f6aae32ca186495ff40 (patch) | |
| tree | 3b0d4b6d936e43fb5b2c64272e97522754b3f4e5 /Software/Embedded_SW | |
| parent | cfb996898f8a35f992789fb7548117aebbfa84f7 (diff) | |
| download | Tango-a7fe3ddc7349fe00f0772f6aae32ca186495ff40.tar.gz Tango-a7fe3ddc7349fe00f0772f6aae32ca186495ff40.zip | |
Dispenser homing functions moved to IDS. valves external interface improved
Diffstat (limited to 'Software/Embedded_SW')
8 files changed, 154 insertions, 74 deletions
diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.c b/Software/Embedded_SW/Embedded/Communication/Connection.c index 0b539b276..b01750529 100644 --- a/Software/Embedded_SW/Embedded/Communication/Connection.c +++ b/Software/Embedded_SW/Embedded/Communication/Connection.c @@ -64,11 +64,11 @@ void ConnectionRequest(MessageContainer* requestContainer) FPGA_ReadVersion(1, &Major, &Year, &Month, &Day); usnprintf(FPGA2Version, 20, "%d.%d.%d.%d",Major,Year, Month, Day); - DevInfo.fpga2version = FPGA1Version; + DevInfo.fpga2version = FPGA2Version; FPGA_ReadVersion(2, &Major, &Year, &Month, &Day); usnprintf(FPGA3Version, 20, "%d.%d.%d.%d",Major,Year, Month, Day); - DevInfo.fpga3version = FPGA1Version; + DevInfo.fpga3version = FPGA3Version; Read_HW_Version(BoardVersion, AssyVersion); @@ -76,6 +76,7 @@ void ConnectionRequest(MessageContainer* requestContainer) DevInfo.assemblyversion = AssyVersion; + responseContainer = createContainer(MESSAGE_TYPE__ConnectResponse, requestContainer->token, true, &response, &connect_response__pack, &connect_response__get_packed_size); //------------------------------------------------------------------------------------------- diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h index ede5df6a4..bc740449e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h @@ -1030,29 +1030,29 @@ typedef union //F3_VALVE_OUT typedef union -{ //--------------------------// - struct // A - Air // - { // C - Cartridge // - //Dry air Valves // L - Left // +{ //--------------------------// + struct // A - Air // + { // C - Cartridge // + //Dry air Valves // L - Left // bool VALVE_2W_MID_AIR_8 : 1; //0 MIDTANK2MANIF4_VALVE_2 // R - Right // bool VALVE_2W_MID_AIR_4 : 1; //1 MIDTANK2MANIF4_VALVE_1 // F - Front // - bool VALVE_2W_MID_AIR_7 : 1; //2 MIDTANK2MANIF3_VALVE_2 // B - Back // - bool VALVE_2W_MID_AIR_3 : 1; //3 MIDTANK2MANIF3_VALVE_1 // M - Middle // - bool VALVE_2W_MID_AIR_6 : 1; //4 MIDTANK2MANIF2_VALVE_2 // -------------------- // - bool VALVE_2W_MID_AIR_2 : 1; //5 MIDTANK2MANIF2_VALVE_1 // A [7] A [8] // - bool VALVE_2W_MID_AIR_5 : 1; //6 MIDTANK2MANIF1_VALVE_2 // C [7] C [8] // + bool VALVE_2W_MID_AIR_7 : 1; //2 MIDTANK2MANIF3_VALVE_2 // B - Back // + bool VALVE_2W_MID_AIR_3 : 1; //3 MIDTANK2MANIF3_VALVE_1 // M - Middle // + bool VALVE_2W_MID_AIR_6 : 1; //4 MIDTANK2MANIF2_VALVE_2 // -------------------- // + bool VALVE_2W_MID_AIR_2 : 1; //5 MIDTANK2MANIF2_VALVE_1 // A [7] A [8] // + bool VALVE_2W_MID_AIR_5 : 1; //6 MIDTANK2MANIF1_VALVE_2 // C [7] C [8] // bool VALVE_2W_MID_AIR_1 : 1; //7 MIDTANK2MANIF1_VALVE_1 // // - // A [5] A [6] // - bool VALVE_2W_CART_MID_8 : 1; //8 CART2MIDTANK4_VALVE_2 // C [5] C [6] // + // A [5] A [6] // + bool VALVE_2W_CART_MID_8 : 1; //8 CART2MIDTANK4_VALVE_2 // C [5] C [6] // bool VALVE_2W_CART_MID_4 : 1; //9 CART2MIDTANK4_VALVE_1 // // - bool VALVE_2W_CART_MID_7 : 1; //10 CART2MIDTANK3_VALVE_2 // A [3] A [4] // - bool VALVE_2W_CART_MID_3 : 1; //11 CART2MIDTANK3_VALVE_1 // C [3] C [4] // - bool VALVE_2W_CART_MID_6 : 1; //12 CART2MIDTANK2_VALVE_2 // // - bool VALVE_2W_CART_MID_2 : 1; //13 CART2MIDTANK2_VALVE_1 // A [1] A [2] // - bool VALVE_2W_CART_MID_5 : 1; //14 CART2MIDTANK1_VALVE_2 // C [1] C [2] // + bool VALVE_2W_CART_MID_7 : 1; //10 CART2MIDTANK3_VALVE_2 // A [3] A [4] // + bool VALVE_2W_CART_MID_3 : 1; //11 CART2MIDTANK3_VALVE_1 // C [3] C [4] // + bool VALVE_2W_CART_MID_6 : 1; //12 CART2MIDTANK2_VALVE_2 // // + bool VALVE_2W_CART_MID_2 : 1; //13 CART2MIDTANK2_VALVE_1 // A [1] A [2] // + bool VALVE_2W_CART_MID_5 : 1; //14 CART2MIDTANK1_VALVE_2 // C [1] C [2] // bool VALVE_2W_CART_MID_1 : 1; //15 CART2MIDTANK1_VALVE_1 // // - }bits; // FRONT // - unsigned short ushort; //--------------------------// + }bits; // FRONT // + unsigned short ushort; //--------------------------// }VALVE_GPO_REG; diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index 66d6c457b..51446df69 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -24,6 +24,9 @@ VALVE_GPO_REG Valve_GPO_Reg; F1_GPO_REG F1_GPO_Reg; DISPENSER_VALVE_GPO_REG Dispenser_Valve_GPO_Reg; +Valves_t IDS_Id_to_AirValve[MAX_IDS_UNITS] = {VALVE_2W_MID_AIR_1,VALVE_2W_MID_AIR_2,VALVE_2W_MID_AIR_3,VALVE_2W_MID_AIR_4,VALVE_2W_MID_AIR_5,VALVE_2W_MID_AIR_6,VALVE_2W_MID_AIR_7,VALVE_2W_MID_AIR_8}; +Valves_t IDS_Id_to_CartrideValve[MAX_IDS_UNITS] = {VALVE_2W_CART_MID_1,VALVE_2W_CART_MID_2,VALVE_2W_CART_MID_3,VALVE_2W_CART_MID_4,VALVE_2W_CART_MID_5,VALVE_2W_CART_MID_6,VALVE_2W_CART_MID_7,VALVE_2W_CART_MID_8}; + typedef struct { //bool EnableDisable; //TODO - to check if needed diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h index ec6de35e1..df20d05ff 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h @@ -8,7 +8,7 @@ #ifndef DRIVERS_VALVES_VALVE_H_ #define DRIVERS_VALVES_VALVE_H_ - +#define MAX_IDS_UNITS 8 typedef enum { //Dispenser Valves @@ -21,54 +21,28 @@ typedef enum VALVE_DISPENSER_6, VALVE_DISPENSER_7, VALVE_DISPENSER_8, -/* new - //---------------------------------------------------------------------------// - //Dry Air - Middle Tank // A - Air // - VALVE_2W_MID_AIR_RB, //MIDTANK2MANIF4_VALVE_2 // C - Cartridge // - VALVE_2W_MID_AIR_RMB, //MIDTANK2MANIF4_VALVE_1 // L - Left // - VALVE_2W_MID_AIR_RMF, //MIDTANK2MANIF3_VALVE_2 // R - Right // - VALVE_2W_MID_AIR_RF, //MIDTANK2MANIF3_VALVE_1 // F - Front // - VALVE_2W_MID_AIR_LB, //MIDTANK2MANIF2_VALVE_2 // B - Back // - VALVE_2W_MID_AIR_LMB, //MIDTANK2MANIF2_VALVE_1 // M - Middle // - VALVE_2W_MID_AIR_LMF, //MIDTANK2MANIF1_VALVE_2 // -------------------- // - VALVE_2W_MID_AIR_LF, //MIDTANK2MANIF1_VALVE_1 // A [LB] A [RB] // - // C [LB] C [RB] // - // // - // A [LMB] A [RMB] // - //Cartridge - Middle Tank // C [LMB] C [RMB] // - VALVE_2W_CART_MID_RB, //CART2MIDTANK4_VALVE_2 // // - VALVE_2W_CART_MID_RMB, //CART2MIDTANK4_VALVE_1 // A [LMF] A [RMF] // - VALVE_2W_CART_MID_RMF, //CART2MIDTANK3_VALVE_2 // C [LMF] C [RMF] // - VALVE_2W_CART_MID_RF, //CART2MIDTANK3_VALVE_1 // // - VALVE_2W_CART_MID_LB, //CART2MIDTANK2_VALVE_2 // A [LF] A [RF] // - VALVE_2W_CART_MID_LMB, //CART2MIDTANK2_VALVE_1 // C [LF] C [RF] // - VALVE_2W_CART_MID_LMF, //CART2MIDTANK1_VALVE_2 // // - VALVE_2W_CART_MID_LF, //CART2MIDTANK1_VALVE_1 // FRONT // - //---------------------------------------------------------------------------// - -*/ //---------------------------------------------------------------------------// //Dry Air - Middle Tank // A - Air // - VALVE_2W_MID_AIR_8, //MIDTANK2MANIF4_VALVE_2 // C - Cartridge // - VALVE_2W_MID_AIR_4, //MIDTANK2MANIF4_VALVE_1 // L - Left // - VALVE_2W_MID_AIR_7, //MIDTANK2MANIF3_VALVE_2 // R - Right // - VALVE_2W_MID_AIR_3, //MIDTANK2MANIF3_VALVE_1 // F - Front // - VALVE_2W_MID_AIR_6, //MIDTANK2MANIF2_VALVE_2 // B - Back // - VALVE_2W_MID_AIR_2, //MIDTANK2MANIF2_VALVE_1 // M - Middle // - VALVE_2W_MID_AIR_5, //MIDTANK2MANIF1_VALVE_2 // -------------------- // - VALVE_2W_MID_AIR_1, //MIDTANK2MANIF1_VALVE_1 // A [7] A [8] // - // C [7] C [8] // + VALVE_2W_MID_AIR_8, //MIDTANK2MANIF4_VALVE_2 // C - Cartridge // + VALVE_2W_MID_AIR_4, //MIDTANK2MANIF4_VALVE_1 // L - Left // + VALVE_2W_MID_AIR_7, //MIDTANK2MANIF3_VALVE_2 // R - Right // + VALVE_2W_MID_AIR_3, //MIDTANK2MANIF3_VALVE_1 // F - Front // + VALVE_2W_MID_AIR_6, //MIDTANK2MANIF2_VALVE_2 // B - Back // + VALVE_2W_MID_AIR_2, //MIDTANK2MANIF2_VALVE_1 // M - Middle // + VALVE_2W_MID_AIR_5, //MIDTANK2MANIF1_VALVE_2 // -------------------- // + VALVE_2W_MID_AIR_1, //MIDTANK2MANIF1_VALVE_1 // A [7] A [8] // + // C [7] C [8] // // // - // A [5] A [6] // - //Cartridge - Middle Tank // C [5] C [6] // - VALVE_2W_CART_MID_8, //CART2MIDTANK4_VALVE_2 // // - VALVE_2W_CART_MID_4, //CART2MIDTANK4_VALVE_1 // A [3] A [4] // - VALVE_2W_CART_MID_7, //CART2MIDTANK3_VALVE_2 // C [3] C [4] // - VALVE_2W_CART_MID_3, //CART2MIDTANK3_VALVE_1 // // - VALVE_2W_CART_MID_6, //CART2MIDTANK2_VALVE_2 // A [1] A [2] // - VALVE_2W_CART_MID_2, //CART2MIDTANK2_VALVE_1 // C [1] C [2] // - VALVE_2W_CART_MID_5, //CART2MIDTANK1_VALVE_2 // // - VALVE_2W_CART_MID_1, //CART2MIDTANK1_VALVE_1 // FRONT // + // A [5] A [6] // + //Cartridge - Middle Tank // C [5] C [6] // + VALVE_2W_CART_MID_8, //CART2MIDTANK4_VALVE_2 // // + VALVE_2W_CART_MID_4, //CART2MIDTANK4_VALVE_1 // A [3] A [4] // + VALVE_2W_CART_MID_7, //CART2MIDTANK3_VALVE_2 // C [3] C [4] // + VALVE_2W_CART_MID_3, //CART2MIDTANK3_VALVE_1 // // + VALVE_2W_CART_MID_6, //CART2MIDTANK2_VALVE_2 // A [1] A [2] // + VALVE_2W_CART_MID_2, //CART2MIDTANK2_VALVE_1 // C [1] C [2] // + VALVE_2W_CART_MID_5, //CART2MIDTANK1_VALVE_2 // // + VALVE_2W_CART_MID_1, //CART2MIDTANK1_VALVE_1 // FRONT // //---------------------------------------------------------------------------// // Waste Valves @@ -78,6 +52,8 @@ typedef enum NUM_OF_VALVES, } Valves_t; +extern Valves_t IDS_Id_to_AirValve[MAX_IDS_UNITS]; +extern Valves_t IDS_Id_to_CartrideValve[MAX_IDS_UNITS]; void Valve_Command(Valves_t Valve_Id); void Valve_Set(Valves_t Valve_Id, bool Direction); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 20466325a..261b9e049 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -104,14 +104,14 @@ AlarmHandlingItem AlarmItem[MAX_SYSTEM_ALARMS]={ {100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_6,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser6Empty,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_7,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser7Empty,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_8,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser8Empty,NULL}, -{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_1,false,true,DEBUG_LOG_CATEGORY__Warning,0,0,0,false,EVENT_TYPE__Dispenser1LowLevel,NULL}, +/*{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_1,false,true,DEBUG_LOG_CATEGORY__Warning,0,0,0,false,EVENT_TYPE__Dispenser1LowLevel,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_2,false,true,DEBUG_LOG_CATEGORY__Warning,1,0,0,false,EVENT_TYPE__Dispenser2LowLevel,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_3,false,true,DEBUG_LOG_CATEGORY__Warning,2,0,0,false,EVENT_TYPE__Dispenser3LowLevel,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_4,false,true,DEBUG_LOG_CATEGORY__Warning,3,0,0,false,EVENT_TYPE__Dispenser4LowLevel,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_5,false,true,DEBUG_LOG_CATEGORY__Warning,4,0,0,false,EVENT_TYPE__Dispenser5LowLevel,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_6,false,true,DEBUG_LOG_CATEGORY__Warning,5,0,0,false,EVENT_TYPE__Dispenser6LowLevel,NULL}, {100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_7,false,true,DEBUG_LOG_CATEGORY__Warning,6,0,0,false,EVENT_TYPE__Dispenser7LowLevel,NULL}, -{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_8,false,true,DEBUG_LOG_CATEGORY__Warning,7,0,0,false,EVENT_TYPE__Dispenser8LowLevel,NULL}, +{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_8,false,true,DEBUG_LOG_CATEGORY__Warning,7,0,0,false,EVENT_TYPE__Dispenser8LowLevel,NULL},*/ {100,TemperatureAlarm,TEMP_SENSE_ANALOG_MIXCHIP_TEMP,250,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL}, {100,TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1,250,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL}, {100,TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2,80,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL}, diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index dfd45ec3d..0583f6caa 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -179,11 +179,11 @@ uint32_t DispenserHomingRequestCallback(uint32_t deviceID, uint32_t ReadValue) MessageContainer responseContainer; MotorHomingResponse response = MOTOR_HOMING_RESPONSE__INIT; - uint8_t DispenserId = deviceID-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; + //uint8_t DispenserId = deviceID-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; //close dry air valve in the dispenser - Valve_Set((Valves_t) (DispenserId+VALVE_2W_MID_AIR_8), Atm_MidTank_OFF); - MotorSetMicroStep(deviceID, MotorsCfg[deviceID].microstep); + //Valve_Set((Valves_t) (DispenserId+VALVE_2W_MID_AIR_8), Atm_MidTank_OFF); + //MotorSetMicroStep(deviceID, MotorsCfg[deviceID].microstep); responseContainer = createContainer(MESSAGE_TYPE__DispenserHomingResponse, HomingToken[deviceID], true, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size); responseContainer.continuous = true; @@ -223,7 +223,8 @@ uint32_t DispenserHomingRequestFunc(MessageContainer* requestContainer) { if ((JobIsActive() == false)&&(isMotorConfigured(MotorId) == true)) { - if ( Motor_Id_to_LS_Id[MotorId] != MAX_GPI) + IDS_HomeDispenser(request->index,speed,DispenserHomingRequestCallback); + /*if ( Motor_Id_to_LS_Id[MotorId] != MAX_GPI) { //open dispenser valve dispenser to midtank direction Control3WayValvesWithCallback ((Valves_t) request->index, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer @@ -235,7 +236,7 @@ uint32_t DispenserHomingRequestFunc(MessageContainer* requestContainer) MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_Id[MotorId], DispenserHomingRequestCallback); return OK; - } + }*/ } } @@ -250,11 +251,13 @@ uint32_t DispenserAbortHomingRequestFunc(MessageContainer* requestContainer) DispenserAbortHomingResponse response = DISPENSER_ABORT_HOMING_RESPONSE__INIT; + IDS_StopHomeDispenser(request->index); +/* TimerMotors_t MotorId = (request->index)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; MotorAbortMovetoLimitSwitch(MotorId); //close dry air valve in the dispenser Valve_Set((Valves_t) ((request->index)+VALVE_2W_MID_AIR_8), Atm_MidTank_OFF); - +*/ responseContainer = createContainer(MESSAGE_TYPE__DispenserAbortHomingResponse, requestContainer->token, false, &response, &dispenser_abort_homing_response__pack, &dispenser_abort_homing_response__get_packed_size); responseContainer.continuous = false; uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index ea5505642..75d86fdd7 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -21,6 +21,10 @@ uint32_t IDSEndState(void *JobDetails); uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request); +uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); +uint32_t IDS_StopHomeDispenser (uint32_t deviceID); + + float CalculateDispenserPressure (int DispenserId); float GetDispenserPressure(int DispenserId); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index e69de29bb..73d1aa2b1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -0,0 +1,93 @@ +/************************************************************************************************************************ + * Ids_maint.c + * Printing module is responsible for : + * operating the dispensers according to predefined dispensing rate from the UI + **************************************************************************************************************************/ +#include "include.h" +#include "ids.h" +#include "ids_ex.h" +#include "../control/control.h" +#include "../control/pidalgo.h" +#include "../thread/thread.h" +#include "PMR/Hardware/Hardwaremotor.pb-c.h" +#include "PMR/Hardware/HardwareDispenser.pb-c.h" +#include "StateMachines/Printing/printingSTM.h" + +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" +#include "drivers/Motors/Motor.h" +#include "drivers/Valves/Valve.h" + +FPGA_GPI_ENUM Dispenser_Id_to_LS_Id[MAX_SYSTEM_DISPENSERS] = { + GPI_LS_DISPENSER_DOWN_1, //MOTO_DISPENSER_1 = 6, + GPI_LS_DISPENSER_DOWN_2, //MOTO_DISPENSER_2 = 7, + GPI_LS_DISPENSER_DOWN_3, //MOTO_DISPENSER_3 = 8, + GPI_LS_DISPENSER_DOWN_4, //MOTO_DISPENSER_4 = 9, + GPI_LS_DISPENSER_DOWN_5, //MOTO_DISPENSER_5 = 10, + GPI_LS_DISPENSER_DOWN_6, //MOTO_DISPENSER_6 = 11, + GPI_LS_DISPENSER_DOWN_7, //MOTO_DISPENSER_7 = 12, + GPI_LS_DISPENSER_DOWN_8, //MOTO_DISPENSER_8 = 13, +}; +callback_fptr HomingRequestCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0}; +bool HomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; + +uint32_t IDS_HomeDispenserCallback(uint32_t deviceID, uint32_t ReadValue) +{ + uint8_t DispenserId = deviceID-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; + + //close dry air valve in the dispenser + Valve_Set((Valves_t) (IDS_Id_to_AirValve[deviceID]), Atm_MidTank_OFF); + MotorSetMicroStep(deviceID, MotorsCfg[deviceID].microstep); + if (HomingRequestCallback[deviceID]) + { + HomingRequestCallback[deviceID](deviceID,0); + HomingRequestCallback[deviceID] = NULL; + } + HomingActive[deviceID]= false; + +return OK; + +} + +uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback) +{ + assert(deviceID < MAX_SYSTEM_DISPENSERS); + + if (HomingActive[deviceID] == true) + return ERROR; + else + HomingActive[deviceID] = true; + + HomingRequestCallback[deviceID] = callback; + + TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + deviceID; + if ( Dispenser_Id_to_LS_Id[MotorId] != MAX_GPI) + { + //open dispenser valve dispenser to midtank direction + Control3WayValvesWithCallback ((Valves_t)deviceID, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + //Valve_Set((Valves_t) request->index, MidTank_Dispenser); + MotorSetMicroStep(deviceID, 1); + //open dry air valve in the dispenser + Valve_Set((Valves_t) (IDS_Id_to_AirValve[deviceID]), Atm_MidTank_ON); + + + MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Id[MotorId], IDS_HomeDispenserCallback); + return OK; + } +} + +uint32_t IDS_StopHomeDispenser (uint32_t deviceID) +{ + assert(deviceID < MAX_SYSTEM_DISPENSERS); + + if (HomingActive[deviceID] != true) + return ERROR; + else + HomingActive[deviceID] = false; + + TimerMotors_t MotorId = (deviceID)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; + MotorAbortMovetoLimitSwitch(MotorId); + //close dry air valve in the dispenser + Valve_Set((Valves_t) (IDS_Id_to_AirValve[deviceID]), Atm_MidTank_OFF); + MotorSetMicroStep(deviceID, MotorsCfg[deviceID].microstep); + return OK; +} |
