From 4880b344601c12c50fb78429896ef98b693bcd4b Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 24 May 2018 13:31:50 +0300 Subject: stack enlarged, merge and some changes --- .../Embedded/Modules/General/GeneralHardware.c | 69 +++++++++++++++++----- 1 file changed, 55 insertions(+), 14 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 99198dd09..e73f16a10 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -321,31 +321,72 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer) UploadHardwareConfigurationResponse response = UPLOAD_HARDWARE_CONFIGURATION_RESPONSE__INIT; UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + if (UploadRequest == NULL) + { + LOG_ERROR (0, "Wrong Data Allocation"); + return ERROR; + } HardwareConfiguration *request = UploadRequest->hardwareconfiguration; if (request->n_winders == 1) status += InternalWinderConfigMessage(request->winders); status += MotorsInit(); - for (Motor_i = 0; Motor_i < request->n_motors ; Motor_i++) + if (request->n_motors < NUM_OF_MOTORS) + { + for (Motor_i = 0; Motor_i < request->n_motors ; Motor_i++) status += MotorsConfigMessage(request->motors[Motor_i]); - for (Dancer_i = 0; Dancer_i < request->n_dancers ; Dancer_i++) - status += DancerConfigMessage(request->dancers[Dancer_i]); - for (PID_i = 0; PID_i < request->n_pidcontrols ; PID_i++) + } + else + { + LOG_ERROR (request->n_motors, "Wrong Data"); + upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); + return ERROR; + } + if (request->n_dancers <= NUM_OF_DANCERS) + { + for (Dancer_i = 0; Dancer_i < request->n_dancers ; Dancer_i++) + status += DancerConfigMessage(request->dancers[Dancer_i]); + } + else + { + LOG_ERROR (request->n_dancers, "Wrong Data"); + upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); + return ERROR; + } + if (request->n_pidcontrols <= HARDWARE_PID_CONTROL_TYPE__Dispenser8) + { + for (PID_i = 0; PID_i < request->n_pidcontrols ; PID_i++) + { + if (request->pidcontrols[PID_i]->hardwarepidcontroltype <= HARDWARE_PID_CONTROL_TYPE__MixerHeater) + status += HeaterConfigRequestMessage(request->pidcontrols[PID_i]); + else if ((request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__MotorDryer)&& + (request->pidcontrols[PID_i]->hardwarepidcontroltype < HARDWARE_PID_CONTROL_TYPE__Dispenser1)) + status += MotorPidRequestMessage(request->pidcontrols[PID_i]); + else if (request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__Dispenser1) + status += IDS_DispenserPidRequestMessage(request->pidcontrols[PID_i]); + } + } + else + { + LOG_ERROR (request->n_pidcontrols, "Wrong Data"); + upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); + return ERROR; + } + if (request->n_dispensers <= MAX_SYSTEM_DISPENSERS) + { + for (Dispenser_i = 0; Dispenser_i < request->n_dispensers ; Dispenser_i++) + status += DispenserConfigMessage(request->dispensers[Dispenser_i]); + } + else { - if (request->pidcontrols[PID_i]->hardwarepidcontroltype <= HARDWARE_PID_CONTROL_TYPE__MixerHeater) - status += HeaterConfigRequestMessage(request->pidcontrols[PID_i]); - else if ((request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__MotorDryer)&& - (request->pidcontrols[PID_i]->hardwarepidcontroltype < HARDWARE_PID_CONTROL_TYPE__Dispenser1)) - status += MotorPidRequestMessage(request->pidcontrols[PID_i]); - else if (request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__Dispenser1) - status += IDS_DispenserPidRequestMessage(request->pidcontrols[PID_i]); + LOG_ERROR (request->n_dispensers, "Wrong Data"); + upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); + return ERROR; } - for (Dispenser_i = 0; Dispenser_i < request->n_dispensers ; Dispenser_i++) - status += DispenserConfigMessage(request->dispensers[Dispenser_i]); //status += HeaterConfigSetSharedHeatersParams (request->outputproportionalcycletime, request->outputproportionalsinglestep); ControlStart(); - ThreadInitialTestStub(request); + //ThreadInitialTestStub(request); responseContainer = createContainer(MESSAGE_TYPE__UploadHardwareConfigurationResponse, requestContainer->token, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size); -- cgit v1.3.1 From 138fe61879c98c0fe2fbc15f69d4cfd9b7dc66cb Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 24 May 2018 14:53:02 +0300 Subject: Stub_RealTimeUsageRequest --- .../Embedded_SW/Embedded/Communication/Container.c | 6 +- .../Embedded/Modules/Control/MillisecTask.c | 65 ++++++++++++---------- .../Modules/Stubs_Handler/StubRealTimeUsage.c | 15 +---- 3 files changed, 42 insertions(+), 44 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index dd9f74c9a..5b96aec24 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -26,8 +26,7 @@ #include "Modules/Stubs_Handler/Stub_Dancer.h" #include "Modules/Stubs_Handler/Stub_SpeedSensor.h" #include "Modules/Stubs_Handler/Stub_IntADC.h" - - +#include "Modules/Stubs_Handler/StubRealTimeUsage.h" #include "Modules/General/GeneralHardware.h" #include "Modules/heaters/heaters_ex.h" @@ -206,6 +205,9 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__StubSpeedSensorRequest: Stub_SpeedSensorRequest(requestContainer); break; + case MESSAGE_TYPE__StubRealTimeUsageRequest: + Stub_RealTimeUsageRequest(requestContainer); + break; case MESSAGE_TYPE__StubIntADCReadRequest: Stub_IntADCReadRequest(requestContainer); break; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index cae09cfd8..3e9218392 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -159,9 +159,11 @@ void OneMilliSecondMillisecInterrupt(UArg arg0) ROM_IntMasterEnable(); return ; } +uint32_t PT100Activity = 0; int32_t MillisecWriteToTempSensor(uint32_t TempSensorId, unsigned long Data, int Length, MSecFptr Callback) { if (TempSensorId >= MAX_TEMPERATURE_SENSOR_ID) return -1; + PT100Activity++; PT100Data[TempSensorId].Callback = Callback; PT100Data[TempSensorId].Data = Data; PT100Data[TempSensorId].Length = Length; @@ -173,6 +175,8 @@ int32_t MillisecWriteToTempSensor(uint32_t TempSensorId, unsigned long Data, int int32_t MillisecReadFromTempSensor(uint32_t TempSensorId, unsigned long Data, int Length, MSecFptr Callback) { if (TempSensorId >= MAX_TEMPERATURE_SENSOR_ID) return -1; + PT100Activity++; //read request + PT100Activity++; //get response PT100Data[TempSensorId].Callback = Callback; PT100Data[TempSensorId].Data = Data; PT100Data[TempSensorId].Length = Length; @@ -291,34 +295,39 @@ uint32_t MillisecLoop(uint32_t tick) } } //FPGA_GetTempSensorBusy(); - for (Sensor_i = TEMP_SENSE_ANALOG_MIXCHIP_TEMP;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) - { - //if (TempDriverDriverResponse[Sensor_i].Busy == true) - // continue; - if (PT100Data[Sensor_i].WaitForData == true) //Read request sent, data is waiting - { - if (SPIGetFPGAResponse(Sensor_i,&MotorInfo) == OK) //got the data from the FPGA - { - PT100Data[Sensor_i].WaitForData = false; - if (PT100Data[Sensor_i].Callback) - PT100Data[Sensor_i].Callback(Sensor_i,MotorInfo); - } - } - if (PT100Data[Sensor_i].Active == true) - { - SPISendFPGARequest(Sensor_i,PT100Data[Sensor_i].Data,PT100Data[Sensor_i].Length); - PT100Data[Sensor_i].Active = false; - if (PT100Data[Sensor_i].DataRequired == true) - { - PT100Data[Sensor_i].WaitForData = true; // mark the motor for data request next round - } - else - { - if (PT100Data[Sensor_i].Callback) - PT100Data[Sensor_i].Callback(Sensor_i,0); // call the callback to report execution - } - } - } + if (PT100Activity) + { + for (Sensor_i = TEMP_SENSE_ANALOG_MIXCHIP_TEMP;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) + { + //if (TempDriverDriverResponse[Sensor_i].Busy == true) + // continue; + if (PT100Data[Sensor_i].WaitForData == true) //Read request sent, data is waiting + { + if (SPIGetFPGAResponse(Sensor_i,&MotorInfo) == OK) //got the data from the FPGA + { + PT100Data[Sensor_i].WaitForData = false; + if (PT100Data[Sensor_i].Callback) + PT100Data[Sensor_i].Callback(Sensor_i,MotorInfo); + } + PT100Activity--; + } + if (PT100Data[Sensor_i].Active == true) + { + SPISendFPGARequest(Sensor_i,PT100Data[Sensor_i].Data,PT100Data[Sensor_i].Length); + PT100Data[Sensor_i].Active = false; + if (PT100Data[Sensor_i].DataRequired == true) + { + PT100Data[Sensor_i].WaitForData = true; // mark the motor for data request next round + } + else + { + if (PT100Data[Sensor_i].Callback) + PT100Data[Sensor_i].Callback(Sensor_i,0); // call the callback to report execution + } + PT100Activity--; + } + } + } Dancer_Data[FEEDER_DANCER] = Read_Dancer_Position(FEEDER_DANCER); Dancer_Data[POOLER_DANCER] = Read_Dancer_Position(POOLER_DANCER); Dancer_Data[WINDER_DANCER] = Read_Dancer_Position(WINDER_DANCER); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c index 74dcba2fe..fbfb0ed85 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c @@ -16,11 +16,6 @@ #include #include -#include -#include -#include -#include -#include #include #include @@ -35,15 +30,7 @@ #include "MessageContainer.pb-c.h" #include "Stub_Status.h" -#include "drivers/FPGA/FPGA.h" -#include "drivers/SPI/SPI_Comm.h" - -#include "drivers/FPGA/Moters_Driver/L6470.h" - -#include "driverlib/ssi.h" -#include "drivers/SPI/SPI_Comm.h" -#include "drivers/FPGA/FPGA_SSI_Comm.h" -#include "Modules/Thread/Thread_ex.h" +#include "common/utilities/idle_task.h" #include "Modules/thread/thread.h" -- cgit v1.3.1 From 296f2c7ca8d4e64d4c7ed3f0830861010f546a71 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 24 May 2018 18:07:02 +0300 Subject: Alarm Handling module introduced (Task, Init, Loop functions) --- Software/Embedded_SW/Embedded/Embedded.cfg | 7 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 102 +++++++++++++++++++++ .../Embedded/Modules/AlarmHandling/AlarmHandling.h | 15 +++ .../Embedded/Modules/Heaters/Heaters_init.c | 10 +- .../Embedded/Modules/Thread/Thread_print.c | 1 + .../Embedded/StateMachines/Printing/JobSTM.c | 4 +- 6 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c create mode 100644 Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 8ee187e7c..8b7325d36 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -143,7 +143,7 @@ Program.global.millisec = Task.create("&MillisecTask", task8Params); var task9Params = new Task.Params(); task9Params.instance.name = "HeatersControl"; -task9Params.priority = 6; +task9Params.priority = 7; Program.global.HeatersControl = Task.create("&HeatersControlTask", task9Params); var task10Params = new Task.Params(); @@ -151,6 +151,11 @@ task10Params.instance.name = "communicationTx"; task10Params.priority = 3; Program.global.communicationTx = Task.create("&communicationTxTask", task10Params); +var task11Params = new Task.Params(); +task11Params.instance.name = "AlarmHandling"; +task11Params.priority = 6; +Program.global.AlarmHandling = Task.create("&AlarmHandlingTask", task11Params); + /* ================ NDK configuration ================ */ /*var Ndk = xdc.loadPackage('ti.ndk.config'); var Global = xdc.useModule('ti.ndk.config.Global'); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c new file mode 100644 index 000000000..1733498c5 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -0,0 +1,102 @@ +/* + * AlarmHandling.c + + * + * Created on: 24 may 2018 + * Author: shlomo + */ + +#include "include.h" +#include "Modules/General/GeneralHardware.h" + +#include "AlarmHandling.h" +#include +#include + +#include "drivers/adc_sampling/adc.h" +#include "Control/control.h" + +#include "drivers/Motors/Motor.h" +#include "drivers/Danser_SSI/SSI_Comm.h" +#include "drivers/Heater/TemperatureSensor.h" +#include "drivers/FPGA/FPGA_SPI_Comm.h" +#include "drivers/FPGA/FPGA.h" + +#include "modules/thread/thread_ex.h" + +Task_Handle AlarmHandling_Task_Handle; +Mailbox_Handle AlarmHandlingMsgQ = NULL; +static GateMutex_Handle gateAlarmHandlingDB; + +/******************** Functions ********************************************/ +//uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); +//********************************************************************** +typedef enum +{ + AlarmHandlingTrigger, +}AlarmHandlingMessages; + +typedef struct AlarmHandlingMessage{ + uint16_t messageId; + uint16_t msglen; + uint32_t tick; + uint8_t messageData[20]; +}AlarmHandlingMessageStruc; + +/******************** CODE ********************************************/ +//********************************************************************** + +void AlarmHandlingInit(void) +{ + Error_Block eb; + int i; + + Error_init(&eb); + + AlarmHandlingMsgQ = Mailbox_create(sizeof(AlarmHandlingMessageStruc), 20, NULL,&eb); + + + //memset(AlarmHandlingDatalog,0,sizeof(uint32_t)*MAX_TANGO_CONTROL_DEVICES); + + /*gateAlarmHandlingDB = GateMutex_create(NULL, &eb); + if (gateAlarmHandlingDB == NULL) + { + System_abort("Could not create USB Wait gate"); + }*/ + + + return; +} +uint32_t AlarmHandlingLoop(uint32_t tick) +{ + return OK; +} +/****************************************************************************** + * ======== messageTsk ======== + * Task for this function is created statically. See the project's .cfg file. + * this message task is created statically in system initialization, + ******************************************************************************/ +void AlarmHandlingTask(UArg arg0, UArg arg1) +{ + AlarmHandlingMessageStruc Message; + //char str[60]; + //uint16_t length; + //Clock_setTimeout(HostKAClock, 1000); + //Clock_start(HostKAClock); + AlarmHandlingInit(); + AlarmHandling_Task_Handle = Task_self(); + while(1) + { + Mailbox_pend(AlarmHandlingMsgQ , &Message, BIOS_WAIT_FOREVER); + switch (Message.messageId) + { + case AlarmHandlingTrigger: + AlarmHandlingLoop(Message.tick); + break; + default: + break; + } + } +} + + diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h new file mode 100644 index 000000000..c5eb88660 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h @@ -0,0 +1,15 @@ +/* + * AlarmHandling.h + * + * Created on: 24 במאי 2018 + * Author: shlomo + */ + +#ifndef MODULES_ALARMHANDLING_ALARMHANDLING_H_ +#define MODULES_ALARMHANDLING_ALARMHANDLING_H_ + + + + + +#endif /* MODULES_ALARMHANDLING_ALARMHANDLING_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index ea8953519..ba766509b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -67,7 +67,7 @@ char stubToken[36] = {0}; void HeatingTestRequest(MessageContainer* requestContainer) { -#ifdef DEBUG_TEST_FUNCTIONS +//#ifdef DEBUG_TEST_FUNCTIONS MessageContainer responseContainer; uint8_t* container_buffer; uint32_t status = 0; @@ -119,10 +119,10 @@ void HeatingTestRequest(MessageContainer* requestContainer) //free(requestContainer); stub_heating_test_request__free_unpacked(request,NULL); -#else - LOG_ERROR (-1, "Heating Control not on debug"); - return ERROR; -#endif +//#else +// LOG_ERROR (-1, "Heating Control not on debug"); +// return ERROR; +//#endif } void HeatingTestPollRequest(MessageContainer* requestContainer) { diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 67f2227d2..c036f4913 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -310,6 +310,7 @@ bool InitialProcess = false; #endif } Winder_Prepare(); + PrepareReady(Module_Thread,ModuleDone); //set 3 dancers to the profile positions InitialProcess = true; return OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 6f0d6de63..761f4fffb 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -137,8 +137,8 @@ static ReturnCode PrepareState(void *JobDetails) PrepareWaiting[Module_Winder] = ModuleWaiting; PrepareWaiting[Module_Thread] = ModuleWaiting; ThreadPrepareState(&CurrentJob); - PrepareWaiting[Module_IDS] = ModuleWaiting; - IDSPrepareState(JobDetails); + //PrepareWaiting[Module_IDS] = ModuleWaiting; + //IDSPrepareState(JobDetails); /* * typedef enum -- cgit v1.3.1