From 5652ed578179a7221b443d11855d555dc6ae05cd Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 14 Mar 2018 10:33:20 +0200 Subject: A first working version with folders structure and tasks seperation --- .../Modules/Control/DriverWithCallbackExample.c | 7 + .../Embedded/Modules/Control/MillisecTask.c | 165 +++++++++++++++++++ .../Embedded_SW/Embedded/Modules/Control/control.c | 75 +++------ .../Embedded_SW/Embedded/Modules/Control/control.h | 9 +- .../Embedded/Modules/General/GeneralHardware.c | 3 +- .../Embedded_SW/Embedded/Modules/General/process.c | 178 +++++++++++++-------- .../Embedded_SW/Embedded/Modules/General/process.h | 14 +- .../Embedded_SW/Embedded/Modules/Heaters/Heaters.h | 2 +- .../Embedded/Modules/Heaters/Heaters_ex.h | 1 + .../Embedded/Modules/Heaters/Heaters_init.c | 2 + .../Embedded/Modules/Heaters/Heaters_print.c | 14 +- .../Embedded/Modules/Stubs_Handler/Calculate.c | 2 +- .../Embedded/Modules/Stubs_Handler/Container.c | 2 + .../Embedded/Modules/Stubs_Handler/Progress.c | 3 +- .../Modules/Stubs_Handler/Stub_Cartridge.c | 3 +- .../Modules/Stubs_Handler/Stub_Dispenser.c | 3 +- .../Embedded/Modules/Stubs_Handler/Stub_ExtFlash.c | 3 +- .../Embedded/Modules/Stubs_Handler/Stub_GPIO.c | 3 +- .../Embedded/Modules/Stubs_Handler/Stub_Heater.c | 3 +- .../Modules/Stubs_Handler/Stub_MotorEncoder.c | 3 +- .../Modules/Stubs_Handler/Stub_OptLimitSwitch.c | 3 +- .../Modules/Stubs_Handler/Stub_SteperMotor.c | 3 +- .../Embedded/Modules/Stubs_Handler/Stub_Valve.c | 3 +- .../Embedded/Modules/Thread/Thread_print.c | 2 +- 24 files changed, 365 insertions(+), 141 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c create mode 100644 Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c b/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c new file mode 100644 index 000000000..216779f8b --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c @@ -0,0 +1,7 @@ +/* + * DriverWithCallbackExample.c + * + * Created on: 11 במרץ 2018 + * Author: shlomo + */ +uint32_t diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c new file mode 100644 index 000000000..6f3a59852 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -0,0 +1,165 @@ +/************************************************************************************************************************ + * Millisec.c + * Millisec module + * + * The millisec task is called once every 1 millisecond to gather data from the FPGA crucial modules, + * so it will be ready for the Millisec operations. it is called 300 (TBD, configurable) + * microsecond before the Millisec task, so that the data will be ready for the Millisec handling. + * the ,millisecond task holds the pointer to a double buffer of results, so that the Millisec will handle the + * most updated data, without disturbing data gathering + * + **************************************************************************************************************************/ + +////////////////////////////////State machine operation//////////////////////////////////// +//the state machine operation is used to operate in runtime correct profile flow execution +//by recieved esign flow of the user from the UI +/////////////////////////////////////////////////////////////////////////////////////////// +#include "include.h" +#include "Modules/General/GeneralHardware.h" + +#include +#include + +#include "drivers/adc_sampling/adc.h" +#include "control.h" +/******************** Definitions ********************************************/ +#define INVALID_MSG_ID 0xFFFF +#define MAX_TANGO_CONTROL_DEVICES 200 +/******************** STRUCTURES AND ENUMs ********************************************/ + +typedef enum +{ + OneMillisec, +}nillisecMessages; + +typedef struct MillisecMessage{ + uint16_t messageId; + uint16_t msglen; + uint32_t tick; + uint8_t messageData[20]; +}MillisecMessageStruc; +/******************** GLOBAL PARAMETERS ********************************************/ +Mailbox_Handle MillisecMsgQ = NULL; +bool MillisecRestart; +static GateMutex_Handle gateMillisecDB; + +uint32_t MillisecDatalog[MAX_TANGO_CONTROL_DEVICES]; +uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle +/******************** Functions ********************************************/ + +//********************************************************************** +/******************** CODE ********************************************/ +//********************************************************************** + +void MillisecInit(void) +{ + Error_Block eb; + + MillisecMsgQ = Mailbox_create(sizeof(MillisecMessageStruc), 20, NULL,NULL); + + MillisecRestart = false; + + memset(MillisecDatalog,0,sizeof(uint32_t)*MAX_TANGO_CONTROL_DEVICES); + + + gateMillisecDB = GateMutex_create(NULL, &eb); + if (gateMillisecDB == NULL) + { + System_abort("Could not create USB Wait gate"); + } + + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); + ROM_TimerConfigure(Millisec_timerBase, TIMER_CFG_PERIODIC); // 32 bits Timer + //TimerIntRegister(Millisec_timerBase, TIMER_A, Timer0Isr); // Registering isr + ROM_TimerEnable(Millisec_timerBase, TIMER_A); + ROM_IntEnable(INT_TIMER1A); + ROM_TimerIntEnable(Millisec_timerBase, TIMER_TIMA_TIMEOUT); + + ADCAcquireInit(); + + return; +} +void MillisecStop(void) +{ + MillisecRestart = false; + ADCAcquireStop(); +} + +void MillisecStart(void) +{ + MillisecRestart = true; + ROM_TimerLoadSet(Millisec_timerBase, TIMER_A,120000/*one millisecond*/); + ADCAcquireStart(0,1); +} + + +void OneMilliSecondMillisecInterrupt(UArg arg0) +{ + MillisecMessageStruc Message; + bool retcode = false; + ROM_IntMasterDisable(); + if (MillisecRestart == true) + { + ROM_TimerLoadSet(Millisec_timerBase, TIMER_A,120000/*one millisecond*/); + } + else + ROM_TimerDisable(Millisec_timerBase,TIMER_A); + + //trigger the ADC collection - check and set priorities to make sure handling timing is correct. + //we might want to call it from the task, afetr execution of other taks!!! + ADC_TriggerCollection(); + //send message to the Millisec task + Message.messageId = OneMillisec; + Message.tick = UsersysTickGet(); + Message.msglen = sizeof(MillisecMessageStruc); + if (MillisecMsgQ != NULL) + retcode = Mailbox_post(MillisecMsgQ , &Message, BIOS_NO_WAIT); + + ROM_TimerIntClear(Millisec_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt + // + // Enable all interrupts. + // + ROM_IntMasterEnable(); + return ; +} + +uint32_t MillisecLoop(uint32_t tick) +{ + //call all modules Millisec functions + //test dancers and speed encoders + //check all callback units (state machine waiting for completion of a change) + bool Ten_msTick, Hundred_msTick, Onesecond_Tick; + Ten_msTick = (tick%eTenMilliSecond == 0) ?true:false; + Hundred_msTick = (tick%eHunderdMillisecond == 0) ?true:false; + Onesecond_Tick = (tick%eOneSecond == 0) ?true:false; + + //gather data from FPGA + 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 MillisecTask(UArg arg0, UArg arg1) +{ + MillisecMessageStruc Message; + //char str[60]; + //uint16_t length; + //Clock_setTimeout(HostKAClock, 1000); + //Clock_start(HostKAClock); + MillisecInit(); + + while(1) + { + Mailbox_pend(MillisecMsgQ , &Message, BIOS_WAIT_FOREVER); + switch (Message.messageId) + { + case OneMillisec: + MillisecLoop(Message.tick); + break; + default: + break; + } + } +} diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 8f389855e..abc61972d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -56,13 +56,6 @@ #define INVALID_MSG_ID 0xFFFF #define MAX_TANGO_CONTROL_DEVICES 200 /******************** STRUCTURES AND ENUMs ********************************************/ -typedef struct -{ - uint32_t PartId; // the identity of the inspected/controlled part in the Devices enum. - DeviceDataFunction Callback; - uint32_t lastStatus; -}DriverDeviceStruc; -DriverDeviceStruc DevicesArray[MAX_PORT_ENUM]; typedef struct @@ -73,6 +66,7 @@ typedef struct DataReadCBFunction ControlDataReadPtr; ControlCBFunction ControlCallbackPtr; CTRL_TIMING_ENUM ControlTiming; + uint32_t lastStatus; }ControlDeviceStruc; typedef enum @@ -86,6 +80,9 @@ typedef struct ControlMessage{ uint32_t tick; uint8_t messageData[20]; }ControlMessageStruc; + +int ControlPhaseDelay = 300; //the control task enters only after data gathering in the millisecond task is finished. +//this parameters defines how many microseconds in the delay. it is used only on starting the control loop on the first time /******************** GLOBAL PARAMETERS ********************************************/ Mailbox_Handle ControlMsgQ = NULL; bool ControlRestart; @@ -100,6 +97,12 @@ void OneMilliSecondFunction(UArg arg0); //********************************************************************** /******************** CODE ********************************************/ //********************************************************************** +uint32_t TemplateDataReadCBFunction (uint32_t deviceID, uint32_t Parameter) +{ + return 0; +} + + void ControlInit(void) { @@ -112,12 +115,6 @@ void ControlInit(void) memset(ControlDatalog,0,sizeof(uint32_t)*MAX_TANGO_CONTROL_DEVICES); - for (Device_i = 0; Device_i < MAX_TANGO_CONTROL_DEVICES; Device_i++) - { - DevicesArray[Device_i].Callback = NULL; - DevicesArray[Device_i].lastStatus = ERROR; - } - for (Device_i = 0; Device_i < MAX_TANGO_CONTROL_DEVICES; Device_i++) { ControlArray[Device_i].ControlActive = false; @@ -151,7 +148,7 @@ void ControlStop(void) void ControlStart(void) { ControlRestart = true; - ROM_TimerLoadSet(Control_timerBase, TIMER_BOTH,120000/*one millisecond*/); + ROM_TimerLoadSet(Control_timerBase, TIMER_A,120000+(ControlPhaseDelay*120)/*one millisecond*/); ADCAcquireStart(0,1); } @@ -163,22 +160,20 @@ void ControlStart(void) * both these callbacks can be removed. if a new call is arriving, it invalidates the previous one (no dual control or data) * ***************************************************************************************************************************************************/ -int AddControlCallback(uint32_t deviceId, ControlCBFunction Callback, CTRL_TIMING_ENUM CtrlFrequency ) +int AddControlCallback(uint32_t deviceId, ControlCBFunction Callback, CTRL_TIMING_ENUM CtrlFrequency, DataReadCBFunction DriverfPtr, uint32_t Parameter ) { assert(deviceId < MAX_TANGO_CONTROL_DEVICES); assert(Callback); + assert(DriverfPtr); unsigned int key; - if(ControlArray[deviceId].ControlDataReadPtr == NULL) - { - LOG_ERROR (deviceId, "No dataread function for device"); - return ERROR; - } key = GateMutex_enter(gateControlDB); ControlArray[deviceId].ControlTiming = CtrlFrequency; ControlArray[deviceId].ControlCallbackPtr = Callback; ControlArray[deviceId].ControlActive = true; + ControlArray[deviceId].ControlDataReadPtr = DriverfPtr; + ControlArray[deviceId].Parameter = Parameter; GateMutex_leave(gateControlDB, key); return OK; @@ -194,6 +189,7 @@ int RemoveControlCallback(uint32_t deviceId , ControlCBFunction Callback) key = GateMutex_enter(gateControlDB); ControlArray[deviceId].ControlTiming = eNoControl; ControlArray[deviceId].ControlCallbackPtr = NULL; + ControlArray[deviceId].ControlDataReadPtr = NULL; ControlArray[deviceId].ControlActive = false; GateMutex_leave(gateControlDB, key); return OK; @@ -203,41 +199,18 @@ int RemoveControlCallback(uint32_t deviceId , ControlCBFunction Callback) } -int RegisterDevice(uint32_t deviceId, DataReadCBFunction Callback, uint32_t Parameter) -{ - assert(deviceId < MAX_TANGO_CONTROL_DEVICES); - assert(Callback); - unsigned int key; - key = GateMutex_enter(gateControlDB); - ControlArray[deviceId].Parameter = Parameter; - ControlArray[deviceId].ControlDataReadPtr = Callback; - GateMutex_leave(gateControlDB, key); - return OK; - -} -int UnRegisterDevice(uint32_t deviceId, DataReadCBFunction Callback ) -{ - assert(deviceId < MAX_TANGO_CONTROL_DEVICES); - unsigned int key; - if (Callback == ControlArray[deviceId].ControlDataReadPtr) - { - key = GateMutex_enter(gateControlDB); - ControlArray[deviceId].Parameter = 0; - ControlArray[deviceId].ControlDataReadPtr = NULL; - ControlDatalog[deviceId] = 0; - GateMutex_leave(gateControlDB, key); - return OK; - } - else - return ERROR; - -} void OneMilliSecondControlInterrupt(UArg arg0) { ControlMessageStruc Message; bool retcode = false; ROM_IntMasterDisable(); + if (ControlRestart == true) + { + ROM_TimerLoadSet(Control_timerBase, TIMER_A,120000/*one millisecond*/); + } + else + ROM_TimerDisable(Control_timerBase, TIMER_A); //trigger the ADC collection - check and set priorities to make sure handling timing is correct. //we might want to call it from the task, afetr execution of other taks!!! @@ -248,10 +221,6 @@ void OneMilliSecondControlInterrupt(UArg arg0) Message.msglen = sizeof(ControlMessageStruc); if (ControlMsgQ != NULL) retcode = Mailbox_post(ControlMsgQ , &Message, BIOS_NO_WAIT); - if (ControlRestart == true) - { - ROM_TimerLoadSet(Control_timerBase, TIMER_BOTH,120000/*one millisecond*/); - } ROM_TimerIntClear(Control_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt // diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index ab259993a..292bbeb82 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -8,7 +8,7 @@ /////////////////////////////////////////////////////////////////////////////////////////// #include "include.h" -typedef uint32_t (* DeviceDataFunction)(uint32_t deviceID, uint32_t *Value); +//typedef uint32_t (* DeviceDataFunction)(uint32_t deviceID, uint32_t *Value); typedef uint32_t (* ControlCBFunction)(uint32_t deviceID, uint32_t ReadValue); typedef uint32_t (* DataReadCBFunction)(uint32_t deviceID, uint32_t Parameter); typedef enum { @@ -23,8 +23,7 @@ typedef enum { void ControlInit(void); void ControlStop(void); void ControlStart(void); -int AddControlCallback(uint32_t deviceID, ControlCBFunction Callback, CTRL_TIMING_ENUM CtrlFrequency ); -int RemoveControlCallback(uint32_t deviceID, ControlCBFunction Callback ); -int RegisterDevice(uint32_t deviceID, DataReadCBFunction Callback, uint32_t Parameter); -int UnRegisterDevice(uint32_t deviceID, DataReadCBFunction Callback ); +int AddControlCallback(uint32_t deviceId, ControlCBFunction Callback, CTRL_TIMING_ENUM CtrlFrequency, DataReadCBFunction DriverfPtr, uint32_t Parameter ); +int RemoveControlCallback(uint32_t deviceId, ControlCBFunction Callback ); +uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter); diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 1f5e3aa84..21f39374d 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -337,7 +337,8 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer) responseContainer = createContainer(MESSAGE_TYPE__UploadHardwareConfigurationResponse, requestContainer->token, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size); uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); - SendChars((char*)container_buffer, container_size); + //USBCDCD_sendData(container_buffer, container_size,10); + SendChars(container_buffer, container_size); free(container_buffer); free(requestContainer); diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index f15c65f22..f1af0baa1 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -10,112 +10,164 @@ #include #include "heaters/heaters_ex.h" +#include "PMR/Printing/ProcessParameters.pb-c.h" #include "PMR/Printing/UploadProcessParametersRequest.pb-c.h" #include "PMR/Printing/UploadProcessParametersResponse.pb-c.h" #include "PMR/Hardware/HardwarePidControlType.pb-c.h" #include "PMR/common/MessageContainer.pb-c.h" -void ProcessRequestFunc(MessageContainer* requestContainer) -{ - MessageContainer responseContainer; - uint8_t* container_buffer; - uint32_t status = 0; - - UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); - ProcessParameters* ProcessParams = request->processparameters; - - - UploadProcessParametersResponse response = UPLOAD_PROCESS_PARAMETERS_RESPONSE__INIT; - - responseContainer = createContainer(MESSAGE_TYPE__UploadProcessParametersResponse, requestContainer->token, true, &response, &upload_process_parameters_request__pack, &upload_process_parameters_request__get_packed_size); - container_buffer = malloc(message_container__get_packed_size(&responseContainer)); - +double dyeingspeed = 0; +double dryerbufferlength = 0; +double mininkuptake = 0; +double feedertension = 0; +double pullertension = 0; +double windertension = 0; +double headairflow = 0; +double dryerairflow = 0; +int32_t tableindex = 0; - /* - * - * uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) - * - struct _ProcessParameters +uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) { - protobuf_c_boolean has_dyeingspeed; - double dyeingspeed; - protobuf_c_boolean has_dryerbufferlength; - double dryerbufferlength; - protobuf_c_boolean has_mininkuptake; - double mininkuptake; - protobuf_c_boolean has_feedertension; - double feedertension; - protobuf_c_boolean has_pullertension; - double pullertension; - protobuf_c_boolean has_windertension; - double windertension; - protobuf_c_boolean has_headairflow; - double headairflow; - protobuf_c_boolean has_dryerairflow; - double dryerairflow; - protobuf_c_boolean has_tableindex; - int32_t tableindex; -}; - + uint32_t status = 0; - */ if (ProcessParams->has_mixertemp) { - if(ProcessParams->mixertemp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__MixerHeater, true, ProcessParams->mixertemp); + if (ProcessParams->mixertemp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__MixerHeater, true, + ProcessParams->mixertemp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__MixerHeater, false, ProcessParams->mixertemp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__MixerHeater, false, + ProcessParams->mixertemp); } if (ProcessParams->has_headzone1temp) { - if(ProcessParams->headzone1temp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true, ProcessParams->headzone1temp); + if (ProcessParams->headzone1temp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true, + ProcessParams->headzone1temp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false, ProcessParams->headzone1temp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false, + ProcessParams->headzone1temp); } if (ProcessParams->has_headzone2temp) { - if(ProcessParams->headzone2temp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true, ProcessParams->headzone2temp); + if (ProcessParams->headzone2temp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true, + ProcessParams->headzone2temp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false, ProcessParams->headzone2temp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false, + ProcessParams->headzone2temp); } if (ProcessParams->has_headzone3temp) { - if(ProcessParams->headzone3temp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, true, ProcessParams->headzone3temp); + if (ProcessParams->headzone3temp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, true, + ProcessParams->headzone3temp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, false, ProcessParams->headzone3temp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, false, + ProcessParams->headzone3temp); } if (ProcessParams->has_dryerzone1temp) { - if(ProcessParams->dryerzone1temp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w, true, ProcessParams->dryerzone1temp); + if (ProcessParams->dryerzone1temp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w, true, + ProcessParams->dryerzone1temp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w, false, ProcessParams->dryerzone1temp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w, false, + ProcessParams->dryerzone1temp); } if (ProcessParams->has_dryerzone2temp) { - if(ProcessParams->dryerzone2temp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1, true, ProcessParams->dryerzone2temp); + if (ProcessParams->dryerzone2temp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1, true, + ProcessParams->dryerzone2temp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1, false, ProcessParams->dryerzone2temp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1, false, + ProcessParams->dryerzone2temp); } if (ProcessParams->has_dryerzone3temp) { - if(ProcessParams->dryerzone3temp) - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2, true, ProcessParams->dryerzone3temp); + if (ProcessParams->dryerzone3temp) + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2, true, + ProcessParams->dryerzone3temp); else - status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2, false, ProcessParams->dryerzone3temp); + status |= HeaterCommandRequestMessage( + HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2, false, + ProcessParams->dryerzone3temp); } + if (ProcessParams->has_dyeingspeed) + { + dyeingspeed = ProcessParams->dyeingspeed; + } + if (ProcessParams->has_dryerbufferlength) + { + dryerbufferlength = ProcessParams->dryerbufferlength; + } + if (ProcessParams->has_mininkuptake) + { + mininkuptake = ProcessParams->mininkuptake; + } + if (ProcessParams->has_feedertension) + { + feedertension = ProcessParams->feedertension; + } + if (ProcessParams->has_pullertension) + { + pullertension = ProcessParams->pullertension; + } + if (ProcessParams->has_windertension) + { + windertension = ProcessParams->windertension; + } + if (ProcessParams->has_headairflow) + { + headairflow = ProcessParams->headairflow; + } + if (ProcessParams->has_dryerairflow) + { + dryerairflow = ProcessParams->dryerairflow; + } + return status; +} + +void ProcessRequestFunc(MessageContainer* requestContainer) +{ + MessageContainer responseContainer; + uint8_t* container_buffer; + uint32_t status = 0; + + UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + ProcessParameters* ProcessParams = request->processparameters; + + + UploadProcessParametersResponse response = UPLOAD_PROCESS_PARAMETERS_RESPONSE__INIT; + + responseContainer = createContainer(MESSAGE_TYPE__UploadProcessParametersResponse, requestContainer->token, true, &response, &upload_process_parameters_request__pack, &upload_process_parameters_request__get_packed_size); + container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + + + status = HandleProcessParameters(ProcessParams); if (status) { responseContainer.has_error = true; responseContainer.error = (ErrorCode)status; } size_t container_size = message_container__pack(&responseContainer, container_buffer); - SendChars((char*)container_buffer, container_size); + //USBCDCD_sendData(container_buffer, container_size,10); + SendChars(container_buffer, container_size); free(container_buffer); free(requestContainer); } diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.h b/Software/Embedded_SW/Embedded/Modules/General/process.h index aa7b157a2..f23f7a8fc 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.h +++ b/Software/Embedded_SW/Embedded/Modules/General/process.h @@ -8,8 +8,20 @@ #ifndef MODULES_GENERAL_PROCESS_H_ #define MODULES_GENERAL_PROCESS_H_ +#include "PMR/Printing/ProcessParameters.pb-c.h" +extern double dyeingspeed; +extern double dryerbufferlength; +extern double mininkuptake; +extern double feedertension; +extern double pullertension; +extern double windertension; +extern double headairflow; +extern double dryerairflow; +extern int32_t tableindex; -void ProcessRequestFunc(MessageContainer* requestContainer); + +extern void ProcessRequestFunc(MessageContainer* requestContainer); +extern uint32_t HandleProcessParameters(ProcessParameters* ProcessParams); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h index beaf32b2a..148d2891c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h @@ -58,5 +58,5 @@ extern HeaterPIDControlConfig HeaterControl[MAX_HEATERS_NUM]; extern HeaterControlConfig_t HeaterPIDConfig[MAX_HEATERS_NUM]; extern HeaterCommand HeaterCmd[MAX_HEATERS_NUM]; extern uint32_t DeviceId2Heater[MAX_HEATERS_NUM]; - +extern uint32_t Heater_timerBase; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index b5249d302..061a46501 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -7,3 +7,4 @@ uint32_t HeaterConfigSetSharedHeatersParams (uint32_t outputproportionalcycletim uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature); +uint32_t Heaters_Init(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index 55da2ecfa..1162ff11e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -58,6 +58,8 @@ bool AcHeaterConfigured[MAX_AC_HEATERS] = {0}; */ uint32_t Heaters_Init(void) { + ROM_TimerDisable(Heater_timerBase, TIMER_A); + return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 3eeff9ec3..f1920f68f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -18,6 +18,8 @@ #include "../control/pidalgo.h" #include "include.h" #include +#include +#include #include "heaters.h" #include "Drivers/Heater/Heater.h" @@ -31,7 +33,7 @@ bool HeatersRestart = false; uint32_t OutputProportionalSingleStep = 0; //A/C Heaters step size from one decision point to another - in cpu clocks. 120000 = 1 millisecod uint32_t Heater_timerBase = TIMER2_BASE; //Timer handle uint32_t OutputProportionalCycleTime = 0; //A/C Heaters Cycle time in milliseconds - one for all heaters -char TimeSliceAllocation[MAX_TIMESLICES] = {0}; +char TimeSliceAllocation[MAX_TIMESLICES] = {0xFF}; bool InitialHeatingState = false; /******************** FUNCTIONS ********************************************/ @@ -68,7 +70,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) PrepareHeater(HeaterId,Temperature); //prepare the heaters control info //set the power balance handler (if not set yet) ROM_TimerConfigure(Heater_timerBase, TIMER_CFG_PERIODIC); // 32 bits Timer - ROM_IntEnable(INT_TIMER2B); + ROM_IntEnable(INT_TIMER2A); ROM_TimerIntEnable(Heater_timerBase, TIMER_TIMA_TIMEOUT); // if the heater is off (?) start it. ActivateHeater(HeaterId); @@ -121,7 +123,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) HeaterPIDConfig[HeaterId].m_mesuredParam = 0; HeaterPIDConfig[HeaterId].m_preError = 0; HeaterPIDConfig[HeaterId].m_SetParam = SetTemperatue;//need to update SetParams on presegment stage - AddControlCallback(DeviceId2Heater[HeaterId], HeaterControlCBFunction, eHunderdMillisecond); + AddControlCallback(DeviceId2Heater[HeaterId], HeaterControlCBFunction, eHunderdMillisecond,TemplateDataReadCBFunction,HeaterId); return OK; } @@ -197,6 +199,7 @@ void EightMilliSecondHeatersInterrupt(UArg arg0) char str[100]; uint8_t len = 0; + ROM_TimerIntClear(Heater_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt len = usnprintf(str, 100, "\r\n EightMilliSecondHeatersInterrupt SliceCounter %d Owner %d H1000 %d H2000 %d" ,SliceCounter,TimeSliceAllocation[SliceCounter],HeatersRestart,NumberOFSlicesInUse); Report(str, __FILE__,__LINE__,0, RpMessage, SliceCounter, TimeSliceAllocation[SliceCounter]); @@ -235,10 +238,11 @@ void EightMilliSecondHeatersInterrupt(UArg arg0) if (HeatersRestart == true) { - ROM_TimerLoadSet(Heater_timerBase, TIMER_BOTH,OutputProportionalSingleStep/*twelve millisecond???*/); + ROM_TimerLoadSet(Heater_timerBase, TIMER_A,OutputProportionalSingleStep/*twelve millisecond???*/); } + else + TimerDisable(Heater_timerBase, TIMER_A); - ROM_TimerIntClear(Heater_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt // // Enable all interrupts. // diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c index f12b92adc..df706ee69 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c @@ -5,7 +5,7 @@ #include "include.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Container.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Container.c index b9c3ffbd0..1014c08fc 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Container.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Container.c @@ -17,6 +17,8 @@ #include "Stub_ExtFlash.h" #include "General/GeneralHardware.h" #include "heaters/heaters_ex.h" +#include "Drivers/USB_Communication/USBCDCD.h" +#include "Drivers/USB_Communication/usb_serial_buffer.h" #include "StateMachines/Printing/PrintingSTM.h" #include "Modules/General/process.h" #include "Common/report/report.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index c44df4ef7..2fa0f891c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -5,7 +5,8 @@ #include "include.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + //#include "graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c index 166cf9e7a..0f3f9dfd9 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c @@ -9,7 +9,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dispenser.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dispenser.c index 384133e7e..63e72c4fc 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dispenser.c @@ -6,7 +6,8 @@ #include "include.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ExtFlash.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ExtFlash.c index 5b7577dfe..75483cf21 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ExtFlash.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ExtFlash.c @@ -16,7 +16,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_GPIO.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_GPIO.c index 07ef4a360..1858a8ddb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_GPIO.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_GPIO.c @@ -23,7 +23,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c index ff2f2ce1c..0499d5d66 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c @@ -15,7 +15,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MotorEncoder.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MotorEncoder.c index 346b595e2..807fa69ab 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MotorEncoder.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MotorEncoder.c @@ -14,7 +14,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_OptLimitSwitch.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_OptLimitSwitch.c index 5da89ab10..7c166db48 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_OptLimitSwitch.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_OptLimitSwitch.c @@ -15,7 +15,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_SteperMotor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_SteperMotor.c index 03807934b..baf66af8f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_SteperMotor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_SteperMotor.c @@ -15,7 +15,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Valve.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Valve.c index ef38bb496..c69b41d7b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Valve.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Valve.c @@ -14,7 +14,8 @@ #include "inc/hw_uart.h" #include "driverlib/gpio.h" -#include "drivers/twine_usblib/usb_serial_adapter.h" +#include "Drivers/USB_Communication/USBCDCD.h" + #include "drivers/twine_graphicslib/graphics_adapter.h" #include "Container.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 10baaed8e..13c81fb39 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -186,7 +186,7 @@ static ReturnCode PrepareState(void *JobDetails) MotorControlConfig[Motor_i].m_mesuredParam = 0; MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage - AddControlCallback(DeviceId2Motor[Motor_i], ThreadControlCBFunction, eOneMillisecond); + AddControlCallback(DeviceId2Motor[Motor_i], ThreadControlCBFunction, eOneMillisecond,TemplateDataReadCBFunction,Motor_i); } //set 3 dancers to the profile positions return NextState; -- cgit v1.3.1