From 3640afb74b3e7b3e232f56a14104866690495c9a Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 18 Jun 2018 12:31:20 +0300 Subject: Motor Control Fixed, new winder works, CurrentJob holds the job request message --- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 94 ++++++++++++++++++++++ .../Embedded/Modules/AlarmHandling/AlarmHandling.h | 2 +- .../Embedded/Modules/Control/MillisecTask.c | 2 + .../Embedded/Modules/Thread/Thread_Winder.c | 5 +- 4 files changed, 100 insertions(+), 3 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 5ec7c6b16..e8779d265 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -23,6 +23,14 @@ #include "drivers/FPGA/FPGA.h" #include "modules/thread/thread_ex.h" +#include +#include +#include +#include + +char DiagnosticsToken[36] = {0}; +bool DiagnosticsActive = false; + Task_Handle AlarmHandling_Task_Handle; Mailbox_Handle AlarmHandlingMsgQ = NULL; @@ -33,6 +41,7 @@ Mailbox_Handle AlarmHandlingMsgQ = NULL; typedef enum { AlarmHandlingTrigger, + AlarmHandlingSendDiagnostics }AlarmHandlingMessages; typedef struct AlarmHandlingMessage{ @@ -44,6 +53,42 @@ typedef struct AlarmHandlingMessage{ /******************** CODE ********************************************/ //********************************************************************** +uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) +{ + uint32_t status = NOT_SUPPORTED; + //MessageContainer responseContainer; + +// ReportInitParams InitParams; + + StartDiagnosticsRequest* request = start_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + strcpy (DiagnosticsToken, requestContainer->token); + DiagnosticsActive = true; + + start_diagnostics_request__free_unpacked(request,NULL); + return status; +} +uint32_t StopDiagnosticsRequestFunc(MessageContainer* requestContainer) +{ + + MessageContainer responseContainer; + + StopDiagnosticsRequest* request = stop_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + StopDiagnosticsResponse response = STOP_DIAGNOSTICS_RESPONSE__INIT; + + DiagnosticsActive = false; + + responseContainer = createContainer(MESSAGE_TYPE__StopDiagnosticsResponse, requestContainer->token, false, &response, &stop_diagnostics_response__pack, &stop_diagnostics_response__get_packed_size); + responseContainer.continuous = false; + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + free(responseContainer.data.data); + //USBCDCD_sendData(container_buffer, container_size,10); + SendChars(container_buffer, container_size); + //free (container_buffer); + +return OK; +} void AlarmHandlingInit(void) { @@ -72,11 +117,58 @@ void AlarmHandlingIterate(UArg arg0) return ; } +void AlarmHandler_SendDiagnostics(void) +{ + AlarmHandlingMessageStruc Message; + //send message to the Millisec task + Message.messageId = AlarmHandlingSendDiagnostics; + Message.tick = UsersysTickGet(); + Message.msglen = sizeof(AlarmHandlingMessageStruc); + if (AlarmHandlingMsgQ != NULL) + Mailbox_post(AlarmHandlingMsgQ , &Message, BIOS_NO_WAIT); + + + return ; +} uint32_t AlarmHandlingLoop(uint32_t tick) { return OK; } +void SendDiagnostics(void) +{ + MessageContainer responseContainer; + + StartDiagnosticsResponse response = START_DIAGNOSTICS_RESPONSE__INIT; + + if (DiagnosticsActive == false) + return; + + /*DiagnosticsMonitors *monitors; + size_t n_digitalpins; + DigitalPin **digitalpins; + extern bool FPGA_Gpi_Buf[MAX_GPI]; + +void Read_FPGA_GPI_Rgisters(); +bool FPGA_Read_limit_Switches(FPGA_GPI_ENUM Limit_Switch); + + size_t n_componentsstates; + ValueComponentState **componentsstates; + size_t n_events; + Event **events;*/ + + + responseContainer = createContainer(MESSAGE_TYPE__StartDiagnosticsResponse, DiagnosticsToken, false, &response, &start_diagnostics_response__pack, &start_diagnostics_response__get_packed_size); + responseContainer.continuous = true; + + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + free(responseContainer.data.data); + //USBCDCD_sendData(container_buffer, container_size,10); +// SendChars(container_buffer, container_size); + //free (container_buffer); + +} /****************************************************************************** * ======== messageTsk ======== * Task for this function is created statically. See the project's .cfg file. @@ -99,6 +191,8 @@ void AlarmHandlingTask(UArg arg0, UArg arg1) case AlarmHandlingTrigger: AlarmHandlingLoop(Message.tick); break; + case AlarmHandlingSendDiagnostics: + SendDiagnostics(); default: break; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h index c5eb88660..9e1be07e2 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h @@ -9,7 +9,7 @@ #define MODULES_ALARMHANDLING_ALARMHANDLING_H_ - +void AlarmHandler_SendDiagnostics(void); #endif /* MODULES_ALARMHANDLING_ALARMHANDLING_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 312f970d6..67de0271f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -16,6 +16,7 @@ /////////////////////////////////////////////////////////////////////////////////////////// #include "include.h" #include "Modules/General/GeneralHardware.h" +#include "Modules/AlarmHandling/AlarmHandling.h" #include "MillisecTask.h" #include @@ -342,6 +343,7 @@ uint32_t MillisecLoop(uint32_t tick) { for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) MillisecReadFromTempSensor(Sensor_i, NULL); + AlarmHandler_SendDiagnostics(); } if (O900Millisecond_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index e99d3df0b..3505ff3c6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -111,7 +111,7 @@ uint32_t ScrewDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if (BusyfirstCall) { BusyfirstCall = false; - return; + return OK; } //ScrewCurrentDirection: false moves out, true moves home if (BusyFlag == NOTBUSY) @@ -182,7 +182,8 @@ uint32_t Winder_End(void) { //stop screw ScrewNumberOfSteps = 0; - RemoveControlCallback(ScrewControlId,ScrewDirectionChange); + if (ScrewControlId != 0xFF) + RemoveControlCallback(ScrewControlId,ScrewDirectionChange); return MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Hard_Hiz); } void Winder_ScrewHomeLimitSwitchInterrupt(void) -- cgit v1.3.1 From 1fd773deb7bba088c5f1c13a1b9ccab85f927ddc Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Mon, 18 Jun 2018 13:47:32 +0300 Subject: update the valve module --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Common/Sys_PinOut_Config/MCU_MAIN_pinout.c | 2 +- .../Common/Sys_PinOut_Config/MCU_MAIN_pinout.h | 2 +- .../Embedded/Common/Sys_PinOut_Config/Pin.c | 2 +- .../Embedded/Common/Sys_PinOut_Config/Pin.h | 2 +- .../Embedded_SW/Embedded/Common/report/filter.c | 2 +- Software/Embedded_SW/Embedded/DataDef.h | 9 +++ Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c | 2 +- .../Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h | 15 ++++ .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 47 ++++++++----- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h | 20 ++++++ .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 66 ++++++++++------- .../Embedded_SW/Embedded/Drivers/Heater/Heater.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 2 +- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 82 +++++++++++++++++++++- .../Embedded_SW/Embedded/Drivers/Valves/Valve.h | 22 +++--- Software/Embedded_SW/Embedded/Main.c | 1 - .../Embedded/Modules/Control/MillisecTask.c | 5 +- .../Embedded/Modules/Heaters/Heaters_init.c | 1 - .../Modules/Stubs_Handler/StubRealTimeUsage.c | 1 - .../Embedded/Modules/Stubs_Handler/Stub_Motor.c | 4 +- .../Stubs_Handler/Stub_ReadEmbeddedVersion.c | 2 +- 22 files changed, 219 insertions(+), 74 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index cd5e6c034..10b496573 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -7,9 +7,9 @@ #include #include #include +#include #include -#include "DataDef.h" typedef struct { diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c index 88198353e..bd9336db3 100644 --- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c +++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c @@ -40,9 +40,9 @@ // //***************************************************************************** +#include #include #include -#include "datadef.h" #include "inc/hw_gpio.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.h b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.h index 94a9e8c0b..d97ab0e0a 100644 --- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.h +++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.h @@ -54,7 +54,7 @@ extern "C" { #endif -#include "datadef.h" +#include "../../DataDef.h" //***************************************************************************** // diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.c b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.c index 9a2ecd5af..5798b01ee 100644 --- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.c +++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.c @@ -38,7 +38,6 @@ #include #include -#include "datadef.h" #include #include #include @@ -46,6 +45,7 @@ #include #include #include +#include #include "Common/Sys_PinOut_Config/Pin.h" diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.h b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.h index abdb85cbe..90cfe166c 100644 --- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.h +++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin.h @@ -38,7 +38,7 @@ #ifndef __PIN_H__ #define __PIN_H__ -#include "datadef.h" +#include "../../DataDef.h" #ifdef EVALUATION_BOARD extern void PortFunctionInit(void); diff --git a/Software/Embedded_SW/Embedded/Common/report/filter.c b/Software/Embedded_SW/Embedded/Common/report/filter.c index f6ce8fda4..b922e53bc 100644 --- a/Software/Embedded_SW/Embedded/Common/report/filter.c +++ b/Software/Embedded_SW/Embedded/Common/report/filter.c @@ -18,6 +18,7 @@ * ******************************************************************************/ +#include #include "report.h" #include #include @@ -27,7 +28,6 @@ #include "filter.h" #include "distributor.h" /* reportDistribute */ -#include //#define MAX_STRING_LEN 255 diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 95d0bd6f1..c4db06fb1 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -30,6 +30,15 @@ enum #define ENABLE 1 #define DISABLE 0 +//Valves Directions: +#define MidTank_Dispenser 1 //? +#define Dispenser_Mixer 0 //? +#define Cartridge_MidTank_ON 1 +#define Cartridge_MidTank_OFF 0 +#define Atm_MidTank_ON 1 +#define Atm_MidTank_OFF 0 + + #define NEW 0 #define USED 1 diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c index 50b3d627e..3cd4c8f0d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c @@ -1,5 +1,4 @@ #include "include.h" -#include #include #include #include @@ -10,6 +9,7 @@ #include "FPGA_COMM.h" #include "driverlib/sysctl.h" //for SysCtlDelay #include +#include #include "Drivers/Peripheral_GPIO/GPIO.h" unsigned short GPO_01_Reg; diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h index 49da97aa5..6cdf486e7 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h @@ -1405,6 +1405,21 @@ typedef union unsigned short ushort; }LS_DISPENSER_7_8; +//F1_GPI_EXTWINDER_D +typedef union +{ + struct + { + bool F1_GPI_EXTWINDER_3 : 1; //0 + bool F1_GPI_EXTWINDER_2 : 1; //1 + bool F1_GPI_EXTWINDER_1 : 1; //2 + bool F1_GPI_TFEED_BREAK_2 : 1; //3 + bool F1_GPI_TFEED_BREAK_1 : 1; //4 + unsigned short RESERVE : 11; //5-15 + + }bits; + unsigned short ushort; +}GPI_EXTWINDER_TFEED_BREAK; //------------------------------ MOTOR DRIVER L_6470 ------------------------------ diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index e848c1b94..e05979f6e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -9,7 +9,6 @@ #include #include #include - #include "modules/control/millisecTask.h" #include "modules/thread/thread.h" @@ -30,11 +29,14 @@ void Read_FPGA_GPI_Rgisters() FPGA_Gpi.Reg.GPI_LS2_D = F1_GPI_LS2_D; FPGA_Gpi.Reg.GPI_LS3_D = F1_GPI_LS3_D; + FPGA_Gpi.Reg.LS_01 = F2_LS_01_Direct; FPGA_Gpi.Reg.LS_01 = F2_LS_01_Direct; FPGA_Gpi.Reg.LS_01 = F2_LS_01_Direct; FPGA_Gpi.Reg.LS_01 = F2_LS_01_Direct; + FPGA_Gpi.Reg.GPI_EXTWINDER = F1_GPI_EXTWINDER_D; + for(i=0;i /////////////////////////////////////////////////////////////////////////////// @@ -294,9 +295,34 @@ int MotorSendFPGARequest(TimerMotors_t MotorId,uint32_t Data, uint32_t Length) // return ERROR; } +typedef enum +{ + MOTOR_CONFIG_INIT, + MOTOR_CONFIG_HARD_HIZ, + MOTOR_CONFIG_ACC, + MOTOR_CONFIG_DEC, + MOTOR_CONFIG_MAX_SPEED, + MOTOR_CONFIG_STEP_MODE, + MOTOR_CONFIG_CONFIG, + MOTOR_CONFIG_KVAL_HOLD, + MOTOR_CONFIG_KVAL_RUN, + MOTOR_CONFIG_KVAL_ACC, + MOTOR_CONFIG_KVAL_DEC, + MOTOR_CONFIG_ST_SLP, + MOTOR_CONFIG_INT_SPD, + MOTOR_CONFIG_FN_SLP_ACC, + MOTOR_CONFIG_FN_SLP_DEC, + MOTOR_CONFIG_OCD_TH, + MOTOR_CONFIG_STALL_TH, + MOTOR_CONFIG_K_THERM, + MOTOR_CONFIG_END +}MOTOR_CONFIG_STAGES_ENUM; +MOTOR_CONFIG_STAGES_ENUM ConfigStages[NUM_OF_MOTORS] = {MOTOR_CONFIG_INIT}; void FPGA_SetMotorsInit() { + uint8_t i=0; + //LOW logic level resets the logic and puts the device into Standby mode. F1_Moto_Driver_NSTBYRST1 = 0; F1_Moto_Driver_NSTBYRST2 = 0; @@ -310,6 +336,12 @@ void FPGA_SetMotorsInit() F2_Moto_Driver_NSTBYRST1 = 0xFFFF; F3_Moto_Driver_NSTBYRST1 = 0xFFFF; + for(i=0;i #include #include #include @@ -20,6 +19,7 @@ #include "driverlib/sysctl.h" #include +#include #include "Drivers/Peripheral_GPIO/GPIO.h" #include #include "PMR/Hardware/HardwarePIDControl.pb-c.h" diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index f96efa72e..fe334c53d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -409,7 +409,7 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, bool LimitSwit if (LimitSwitch == LIMIT) { - StopMotor(MotorId,Hard_Hiz); + StopMotor((TimerMotors_t)MotorId,Hard_Hiz); //stop this control loop RemoveControlCallback(MotorMovetoLimitSwitchControlId[MotorId], MotorMoveToLimitSwitchCallBackFunction ); //possibly: start regular control (speed etc) diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index 5013bbc16..8b375b311 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -18,6 +18,8 @@ #include "drivers/FPGA/FPGA_Comm.h" #include +#include "Modules/Control/Control.h" + VALVE_GPO_REG Valve_GPO_Reg; F1_GPO_REG F1_GPO_Reg; DISPENSER_VALVE_GPO_REG Dispenser_Valve_GPO_Reg; @@ -41,13 +43,28 @@ typedef struct ValveRequestStruct ValveRequest[NUM_OF_VALVES]; ValveResponseStruct ValveRsponse[NUM_OF_VALVES]; +typedef enum +{ + IfValvesTypeNone, + IfTypeMidTankToManif, + IfTypeCartToMidTank, + IfTypeWasteTank, + IfTypeMixchipWastech, + IfTypeDisopenser, + MAX_INTERFACE_VALVES_TYPES +}SYSTEM_INTERFACE_VALVES_TYPES_ID_ENUM; + +#define Number_Of_Disopensers 8 +callback_fptr Valve3WayModuleCallback[Number_Of_Disopensers] = {0, 0, 0, 0, 0, 0, 0, 0,}; +uint32_t Valve3WayControlId[Number_Of_Disopensers] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + void Valve_Command(Valves_t Valve_Id) { switch(Valve_Id) { //Dry air Valves - case VALVE_MIDTANK_To_MANIF_4_2: + case VALVE_MIDTANK_To_MANIF_4_2: Valve_GPO_Reg.bits.MIDTANK2MANIF4_VALVE_2 = ValveRequest[Valve_Id].Direction; break; case VALVE_MIDTANK_To_MANIF_4_1: @@ -139,7 +156,7 @@ void Valve_Command(Valves_t Valve_Id) { F1_gpo_01 |= F1_GPO_Reg.ushort; } - else if((Valve_Id >= VALVE_DISPENSER_1) | (Valve_Id <= VALVE_DISPENSER_8)) + else if(/*(Valve_Id >= VALVE_DISPENSER_1) |*/ (Valve_Id <= VALVE_DISPENSER_8)) { F2_DISPENSER_VALVE_OUT |= Dispenser_Valve_GPO_Reg.ushort; } @@ -162,7 +179,7 @@ void SetAllDispensersValves(bool Direction) } } -void FPGA_GetDispenserValveBusyOCD() +void FPGA_GetDispenserValveBusyOCD() // MillisecLoop { uint8_t i; @@ -263,3 +280,62 @@ void EnableDisableAllDispensersValves(bool EnableOrDisable ) } } + +void Valve_Set(Valves_t Valve_Id, bool Direction) +{ + ValveRequest[Valve_Id].Direction = Direction; + Valve_Command( Valve_Id); +} + +//------------------------------------------------------------------------------------------------------------------------ +bool Valve3WayGetBusyState(uint32_t _ValveId, uint32_t parameter) +{ + + return ValveRsponse[_ValveId].Busy; +} + +//Internal handling +uint32_t Valve3WayCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + uint32_t ValveId; + if (IfIndex>>8 != IfTypeDisopenser) + { + LOG_ERROR (IfIndex, "Wrong 3Way Valve Interface type"); + return 0xFFFFFFFF; + } + ValveId = IfIndex&0xFF; + + if (BusyFlag == NOTBUSY) + { + //stop this control loop + RemoveControlCallback(Valve3WayControlId[ValveId], Valve3WayCallBackFunction ); + + //call the module callback + Valve3WayModuleCallback[ValveId](ValveId,BusyFlag); + + } + return OK; +} + +//External call +uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callback_fptr callback) //direction: MidTank_Dispenser or Dispenser_Mixer +{ + uint8_t delay; + assert (callback); + + Valve3WayModuleCallback[_ValveId] = callback; + + EnableDisableDispenserValve(_ValveId, ENABLE); + + for(delay=0;delay<100;delay++);//Need Small delay (0.1-1)ms + + Valve_Set(_ValveId, direction); + + Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eTenMilliSecond, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); + + EnableDisableDispenserValve(_ValveId, DISABLE); + + return Valve3WayControlId[_ValveId]; +} + + diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h index ff27b3d65..7af24aed7 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h @@ -11,6 +11,17 @@ typedef enum { + //Dispenser Valves + // must be from ubdex 0-7 in order to use Valve3WayModuleCallback and Valve3WayControlId as array of 8 ! + VALVE_DISPENSER_1, + VALVE_DISPENSER_2, + VALVE_DISPENSER_3, + VALVE_DISPENSER_4, + VALVE_DISPENSER_5, + VALVE_DISPENSER_6, + VALVE_DISPENSER_7, + VALVE_DISPENSER_8, + //Dry air Valves VALVE_MIDTANK_To_MANIF_4_2, VALVE_MIDTANK_To_MANIF_4_1, @@ -35,20 +46,11 @@ typedef enum VALVE_WASTE_TANK, VALVE_MIXCHIP_WASTECH, - //Dispenser Valves - VALVE_DISPENSER_1, - VALVE_DISPENSER_2, - VALVE_DISPENSER_3, - VALVE_DISPENSER_4, - VALVE_DISPENSER_5, - VALVE_DISPENSER_6, - VALVE_DISPENSER_7, - VALVE_DISPENSER_8, - NUM_OF_VALVES, } Valves_t; void Valve_Command(Valves_t Valve_Id); +void Valve_Set(Valves_t Valve_Id, bool Direction); void SetAllDispensersValves(bool Direction); void FPGA_GetDispenserValveBusyOCD();// OCD - Over Current Detection diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index c83164055..429c2792a 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -27,7 +27,6 @@ #include "drivers/twine_graphicslib/graphics_adapter.h" #include #include - #include "Sys_PinOut_Config/MCU_MAIN_pinout.h" /* diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 847b777fa..b9079919c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -29,9 +29,11 @@ #include "drivers/Heater/TemperatureSensor.h" #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "drivers/FPGA/FPGA.h" +#include "drivers/Valves/Valve.h" #include "modules/thread/thread_ex.h" #include "Drivers/Peripheral_GPIO/GPIO.h" +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ @@ -236,6 +238,7 @@ uint32_t MillisecLoop(uint32_t tick) FPGA_GetBusy(); //load the busy motor information to all motors FPGA_Read_limit_Switches_Registers(); //Read_FPGA_GPI_Rgisters();//FPGA_Read_limit_Switches(); + //FPGA_GetDispenserValveBusyOCD(); #endif temp += MotorActivity; if (MotorActivity) @@ -338,9 +341,9 @@ uint32_t MillisecLoop(uint32_t tick) Dancer_Data[WINDER_DANCER] = Read_Dancer_Position(WINDER_DANCER); if (Hundred_msTick) { + ACTIVITY_RED_LED_CHANGE_MODE; for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) MillisecReadFromTempSensor(Sensor_i, NULL); - ACTIVITY_RED_LED_CHANGE_MODE; } if (Onesecond_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index ff9b92ae0..b988e6238 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -21,7 +21,6 @@ #include "include.h" #include #include - #include "heaters_ex.h" #include "heaters.h" #include "Drivers/Heater/Heater.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c index fbfb0ed85..ed4d44491 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c @@ -16,7 +16,6 @@ #include #include - #include #include diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c index 01c91c72b..3b9cfe9a8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c @@ -200,7 +200,7 @@ void Stub_MotorRunRequest(MessageContainer* requestContainer) StubMotorRunRequest* request = stub_motor_run_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); float temp = (float)request->speed; - Run_Value = SpdCalc(temp); + Run_Value = /*SpdCalc*/(temp); Direction = request->direction; #ifdef EVALUATION_BOARD //SPI_Control(SKIP_INIT); @@ -214,7 +214,7 @@ void Stub_MotorRunRequest(MessageContainer* requestContainer) #else TimerMotors_t Motor_Id = (TimerMotors_t)request->motor_id; //to remove warning - FPGA_GetBusy(); + //FPGA_GetBusy(); MotorSetDirection(Motor_Id,Direction); MotorSetSpeed(Motor_Id, Run_Value); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ReadEmbeddedVersion.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ReadEmbeddedVersion.c index b357155ce..c10afb070 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ReadEmbeddedVersion.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ReadEmbeddedVersion.c @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -29,7 +30,6 @@ #include "Common/SW_Info/SW_Info.h" -#include "DataDef.h" void Stub_ReadEmbeddedVersionRequest(MessageContainer* requestContainer) { -- cgit v1.3.1