diff options
Diffstat (limited to 'Software/Embedded_SW')
4 files changed, 81 insertions, 15 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index 64f9d6412..1fab5ff83 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -10,6 +10,7 @@ #include <Drivers/I2C_Communication/I2C.h> #include "drivers/Heater/TemperatureSensor.h" #include <Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h> +#include "modules/control/control.h" /* GPIO TCA9555RTWR @@ -322,28 +323,92 @@ uint32_t HeadCard_Valve_Control(bool Direction) return status; } */ +uint32_t ActControlId = 0xFF; +ACTUATORS Global_Act_ID; +uint32_t HeadCard_ActuatorsCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + uint32_t status = OK; + + static uint8_t Counter = 0; + + uint32_t Motion_Status = STOPPED; + + ACTUATORS Act_ID = Global_Act_ID; -uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Active_Low_Pwr, bool Direction)//Turn on by Short Active Low! (LOW) + if (SafeRemoveControlCallback(ActControlId, HeadCard_ActuatorsCallBackFunction )==OK) + ActControlId = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)ActControlId,RpWarning,(int)HeadCard_ActuatorsCallBackFunction,0); + ///************** do your stuff + + //Read movement status + Motion_Status = HeadCard_Actuators_Status(Act_ID); + + if(Motion_Status == MOVING) + { + //RST + Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x00;//Disable movement + status |= Head_Write_IO_Reg(0x42,HIGH); + + Task_sleep(5); + + Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x01;//Enable movement + status |= Head_Write_IO_Reg(0x42,HIGH); + + Counter = Counter++; + } + + if(Counter > 2) + { + //ERROR + ReportWithPackageFilter(ThreadFilter,"Error in actuator LS",__FILE__,__LINE__,Act_ID,RpMessage,Counter,0); + + status = ERROR; + } + + return status; +} + +uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) { uint32_t status = OK; + Global_Act_ID = Act_ID; + if(Act_ID == ACTIN)//0 { - Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = Active_Low_Pwr; + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = LOW; } - else//1 + else//if(Act_ID == ACTOUT) 1 { - Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = Active_Low_Pwr; + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = LOW; } Head_I2C_EXP4_0x46.bits.OUTPUT_ACT_DIR = Direction; status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH); + //Task_sleep(500); + delayms(800); + + if(Act_ID == ACTIN)//0 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH; + } + else//if(Act_ID == ACTOUT) 1 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; + } + status |= Head_Write_IO_Reg(0x46,HIGH); + + //5sec delay - Timeout + ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (4* eOneSecond), TemplateDataReadCBFunction,0,0, 0 ); + return status; } + bool HeadCard_Activate_Cover_LS = false; typedef enum @@ -380,20 +445,20 @@ bool Get_HeadCard_LS(HEADCARD_COVER_LS HEADCARD_LS_ID) uint32_t HeadCard_Actuators_Status(ACTUATORS Act_ID)// { - uint32_t Motioin_Status = STOPPED; + uint32_t Motion_Status = STOPPED; - //Head_Read_IO_Reg(0x46,HIGH); + Head_Read_IO_Reg(0x46,HIGH); //I2C task - Actuators_Control if(Act_ID == ACTIN) { - Motioin_Status = Head_I2C_EXP4_0x46.bits.INPUT_ACTIN_EN; + Motion_Status = Head_I2C_EXP4_0x46.bits.INPUT_ACTIN_EN; } - else + else//if(Act_ID == ACTOUT) 1 { - Motioin_Status = Head_I2C_EXP4_0x46.bits.INPUT_ACTOT_EN; + Motion_Status = Head_I2C_EXP4_0x46.bits.INPUT_ACTOT_EN; } - return Motioin_Status;//Active High STOPPED/MOVING + return Motion_Status;//Active High STOPPED/MOVING } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h index bb5c647b4..c431ae0df 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h @@ -181,7 +181,7 @@ uint32_t Head_Read_IO_Reg(uint8_t TCA9555_ADDRESS, uint8_t Byte); //LOW/HIGH/LOW uint32_t HeadCard_Toggle_PT100_SEL(uint8_t HEAD_CONFIG_PT100_PT_SEL); ; -uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Active_Low_Pwr, bool Direction); +uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction); uint32_t HeadCard_Actuators_Status(ACTUATORS Act_ID); uint32_t HeadCard_Valve_Control(bool Direction); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c index 52c31bec5..ce777f393 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -437,10 +437,10 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) HeadADCPT100_SensorInitConfig(); break; case Actuators_Control: - HeadCard_Actuators_Control(I2C_ReadingMessage.parameter, (bool)I2C_ReadingMessage.parameter2,(bool)I2C_ReadingMessage.parameter3); + HeadCard_Actuators_Control(I2C_ReadingMessage.parameter, /*(bool)I2C_ReadingMessage.parameter2,*/(bool)I2C_ReadingMessage.parameter3); break; case Inputs_Reading: - Head_Read_IO_Reg(0x46, HIGH);//READ HEAD CARD LS + Head_Read_IO_Reg(0x46, HIGH);//READ HEAD CARD LS + ACT status break; case Outputs_Writing: break; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index e968717e3..76c6579da 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -381,8 +381,9 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if((request -> delay & 0xFFF000) == 0xCAF000)//Actuator { - HeadCard_Actuators_Control((ACTUATORS)((request -> delay & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction - response.progress = HeadCard_Actuators_Status((ACTUATORS)(request -> delay & 0x100)>>8); + //HeadCard_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), /*(bool)((request -> delay & 0x10)>>4), */(bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + Trigger_Head_Actuators_Control((ACTUATORS)(((request -> delay) & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + //response.progress = HeadCard_Actuators_Status((ACTUATORS)((request -> delay) & 0x100)>>8); response.has_progress = true; } else |
