aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-03-14 19:02:52 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-03-14 19:02:52 +0200
commit8356b90e200c1124e6dc89fe88f18f62c68b7623 (patch)
treef556ebc63300dc8283fb673b1ceb211eb2966221 /Software/Embedded_SW/Embedded/Modules
parentd87881183d74fa692b598f170dd820adeaf54fca (diff)
parent9d04bbb2b4a2eb2eb14cc813103c856b7bde975a (diff)
downloadTango-8356b90e200c1124e6dc89fe88f18f62c68b7623.tar.gz
Tango-8356b90e200c1124e6dc89fe88f18f62c68b7623.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c165
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c75
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.h9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.c178
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.h14
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c14
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Container.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dispenser.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_ExtFlash.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_GPIO.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MotorEncoder.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_OptLimitSwitch.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_SteperMotor.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Valve.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c2
24 files changed, 365 insertions, 141 deletions
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 <driverlib/timer.h>
+#include <inc/hw_ints.h>
+
+#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)
{
@@ -114,12 +117,6 @@ void ControlInit(void)
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;
ControlArray[Device_i].ControlCallbackPtr = NULL;
ControlArray[Device_i].ControlDataReadPtr = NULL;
@@ -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 <Modules/Stubs_Handler/DataDef.h>
#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 <driverlib/timer.h>
+#include <inc/hw_ints.h>
+#include <inc/hw_memmap.h>
#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;