aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2021-01-05 02:30:42 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2021-01-05 02:30:42 +0200
commit0567570ce97b80f264c7b9f4a632b99eb80c1a17 (patch)
tree0c2af79f6b851d3e4dcc6624ece77a2953a2ee6c /Software/Embedded_SW
parentde4b469ee790b837f2ecf1e0c549a54da79f5667 (diff)
parent25ab46e3ff07e9f15a5e04cc671280cf69d6f99d (diff)
downloadTango-0567570ce97b80f264c7b9f4a632b99eb80c1a17.tar.gz
Tango-0567570ce97b80f264c7b9f4a632b99eb80c1a17.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c2
-rw-r--r--Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c1
-rw-r--r--Software/Embedded_SW/Embedded/Communication/Connection.c4
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h10
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c4
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c19
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SSI_Comm.c3
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c6
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c55
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h10
-rw-r--r--Software/Embedded_SW/Embedded/Main.c45
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c17
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IFS/ifs.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c26
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c35
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c17
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c2
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c21
21 files changed, 233 insertions, 61 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c
index fcede699f..921d5f07f 100644
--- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c
+++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/MCU_MAIN_pinout.c
@@ -865,7 +865,7 @@ PinoutSet(void)
#ifdef USE_UART4_FOR_BTSR
// Configure the GPIO Pin PR0 for BTSR RS485 UART - Set as output to change to uart4 RS485 Direction:
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTR_BASE, GPIO_PIN_0);
- ROM_GPIOPinWrite(GPIO_PORTR_BASE, GPIO_PIN_0, 0);
+ ROM_GPIOPinWrite(GPIO_PORTR_BASE, GPIO_PIN_0, 1);//RX 1 (remove the error CAB ERR on the BTSR screen?)
#endif
//
// Configure the GPIO Pin Mux for PR1
diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c
index 10fbdfafa..4e7e5364d 100644
--- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c
+++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c
@@ -1,5 +1,6 @@
#include <stdbool.h>
#include <stdint.h>
+#include <DataDef.h>
#include <driverlib/gpio.h>
#include <inc/hw_memmap.h>
diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.c b/Software/Embedded_SW/Embedded/Communication/Connection.c
index ec15c1596..c33f3710c 100644
--- a/Software/Embedded_SW/Embedded/Communication/Connection.c
+++ b/Software/Embedded_SW/Embedded/Communication/Connection.c
@@ -193,7 +193,7 @@ void KeepAliveRequestFunc(MessageContainer* requestContainer)
//keep_alive_request__free_unpacked(request,NULL);
}
-int KARequestId = 0x01010101;
+int KARequestId = 0x41414141;
char KARequestToken[36+1];
void KeepAliveResponseFunc(MessageContainer* requestContainer)
{
@@ -215,7 +215,7 @@ void KeepAliveRequest1Second(void)
KeepAliveResponse request = KEEP_ALIVE_REQUEST__INIT;
- strcpy(KARequestToken,"Happy days are coming to us, soon");
+ strcpy(KARequestToken,"Happy days are coming to us, soonZYX");
memcpy(&KARequestToken[32],&KARequestId,sizeof(KARequestId));
KARequestId++;
//Report("keepalive request sent",__FILE__,__LINE__,KARequestId,RpWarning,msec_millisecondCounter, 0);
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index 3115f6828..3b8a71444 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -36,7 +36,15 @@
#endif
//#define BTSR_ROTATED_WINDER_TFU
-//#define USE_UART4_FOR_BTSR // need change in FRPGA FPGA_1 yy > 0x20 + jumpers in main board need to read HW Version
+//#define UFEEDER_BTSR
+#ifdef UFEEDER_BTSR
+#define BTSR_NO_FEEDER_TFU
+#define BTSR_NO_PULLER_TFU
+#define BTSR_ROTATED_WINDER_TFU
+#endif
+
+//#define USE_UART4_FOR_BTSR // need change in FRPGA FPGA_1 yy > 0x20 + jumpers in main board need to read HW Version - no need when working only with stubs
+//#define FORCE_BTSR_CARD_0023 // only for testing, include changes for BTSR without ASSY ID. use it with USE_UART4_FOR_BTSR
//#define USE_RFID_STUB //stub only. to use it undef USE_RFID_LOGIC
//#define RFID_READ_ONLY //
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c
index 0b308408c..62d283f0b 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA.c
@@ -358,8 +358,12 @@ uint32_t Get_Dryer_Fan_Tacho()
}
uint32_t Read_Dryer_Fan_Tacho()
{
+#ifndef EVALUATION_BOARD
Drayer_Fan_Speed_RPM = Calculate_Tacho_Fan_Speed(FPGA_Freq, 12, F1_Prescaler1_reg5, F1_Tacho_reg8);
return Drayer_Fan_Speed_RPM;
+#else
+ return 100;
+#endif
}
void Control_Dryer_Fan_PWM(uint8_t PWM_Command_Precent)// 0 - 100%
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
index e9c674b25..360eb3351 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
@@ -482,9 +482,10 @@ uint32_t ActivateCleanerPump()
uint32_t DeActivateCleanerPump()
{
-
+#ifndef EVALUATION_BOARD
F2_CTRL_Reg.ushort &= ~CLEANER_PUMP_SSR3_CTRL;
F2_CTRL = F2_CTRL_Reg.ushort;
+#endif
return OK;
}
//----------------------------------
@@ -494,16 +495,20 @@ void Power_Off()//Power Down
#ifdef WATCHDOG
ROM_WatchdogResetDisable(WATCHDOG0_BASE);
#endif
+#ifndef EVALUATION_BOARD
F2_CTRL_Reg.ushort |= PDOWN_RL1_CTRL;
F2_CTRL = F2_CTRL_Reg.ushort;
+#endif
}
void Power_Reset()// Resets the MCU
{
utilsStoreLocalTime();
+#ifndef EVALUATION_BOARD
F3_SW_RESET_reg &= ~BIT0;
SysCtlDelay(1000);
F3_SW_RESET_reg |= BIT0;
+#endif
SysCtlReset();
}
@@ -511,15 +516,19 @@ void Power_Reset()// Resets the MCU
uint32_t ActivateChiller() //WHS Cooler / WHS DX Cooler
{
+#ifndef EVALUATION_BOARD
F2_CTRL_Reg.ushort |= CHILLER_SSR9_CTRL;
F2_CTRL = F2_CTRL_Reg.ushort;
+#endif
return OK;
}
uint32_t DeActivateChiller() //WHS Cooler / WHS DX Cooler
{
+#ifndef EVALUATION_BOARD
F2_CTRL_Reg.ushort &= ~CHILLER_SSR9_CTRL;
F2_CTRL = F2_CTRL_Reg.ushort;
+#endif
return OK;
}
@@ -1231,13 +1240,13 @@ char Read_HW_Version(unsigned char *Brd_ID, unsigned char *Assy_ID)
if (ROM_GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_4) == GPIO_PIN_4)
*Brd_ID |= 0x01;
- if (ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_3) == GPIO_PIN_3)
+ if (ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_3) == GPIO_PIN_3)//ASSY_ID3
*Assy_ID |= 0x08;
- if (ROM_GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_7) == GPIO_PIN_7)
+ if (ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_5) == GPIO_PIN_5)//ASSY_ID2
*Assy_ID |= 0x04;
- if (ROM_GPIOPinRead(GPIO_PORTS_BASE, GPIO_PIN_1) == GPIO_PIN_1)
+ if (ROM_GPIOPinRead(GPIO_PORTS_BASE, GPIO_PIN_1) == GPIO_PIN_1)//ASSY_ID1
*Assy_ID |= 0x02;
- if (ROM_GPIOPinRead(GPIO_PORTP_BASE, GPIO_PIN_5) == GPIO_PIN_5)
+ if (ROM_GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PIN_7) == GPIO_PIN_7)//ASSY_ID0
*Assy_ID |= 0x01;
return PASSED;
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SSI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SSI_Comm.c
index 765ba1a7a..36a349682 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SSI_Comm.c
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SSI_Comm.c
@@ -132,6 +132,7 @@ uint8_t FPGA_SSI_Dryer_ENC_Transnit()
uint32_t FPGA_SSI_Dryer_ENC_Receive()
{
+#ifndef EVALUATION_BOARD
INT2SHORT Int2Short;
unsigned int temp;
@@ -147,6 +148,6 @@ uint32_t FPGA_SSI_Dryer_ENC_Receive()
Dryer_ENC.Gen_status = temp & 0x3;
temp = temp >> 2;
Dryer_ENC.Position = (temp & 0x3FFF);
-
+#endif
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c
index 57b57a41d..307d815ee 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/DAC/Blower.c
@@ -156,8 +156,10 @@ uint32_t Turn_the_Blower_On()
voltage = Default_Voltage;
if (WHS_Type == WHS_TYPE_UNKNOWN)
{
+#ifndef EVALUATION_BOARD
status = Write_Control_Register();
status |= Write_DAC_and_Input_Register(DAC_mV2Bits(Default_Voltage));
+#endif
}
else //new WHS
{
@@ -177,7 +179,9 @@ uint32_t Control_Voltage_To_Blower(uint32_t mV)
}
if (WHS_Type == WHS_TYPE_UNKNOWN)
{
+#ifndef EVALUATION_BOARD
status |= Write_DAC_and_Input_Register(DAC_mV2Bits(mV));
+#endif
}
else //new WHS
{
@@ -196,7 +200,9 @@ uint32_t Turn_the_Blower_Off()
if (WHS_Type == WHS_TYPE_UNKNOWN)
{
+#ifndef EVALUATION_BOARD
status |= Write_DAC_and_Input_Register(0);
+#endif
}
else //new WHS
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c
index c04cabc4a..0593342b1 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c
@@ -137,7 +137,7 @@ uint32_t Reset_and_Check_IFS_Availability(PANEL_BUTTON_OR_CRAT_ID Cart_ID)
// IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED;
// }
#else
- IFS_Availability[Cart_ID-1] = WITHOUT_IFS;
+ IFS_Availability[Cart_ID-1] = IFS_AVAILABILITY_UNKNOWN;
#endif
return status;
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
index e90f0622e..00fd2b440 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
@@ -317,7 +317,7 @@ uint32_t MotorRunCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) //TODO
if (failCounter>=8)
{
Report("arm stopped",__FILE__,failCounter,encoder,RpWarning,temp,0);
- MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Hiz);
+ MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop);
RunningContinues = false;
}
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
index 71d26888d..20c6d5a00 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
@@ -22,7 +22,7 @@
#include "PMR/EmbeddedParameters/MainCardStoredDataResponse.pb-c.h"
#include "PMR/EmbeddedParameters/MainCardStoredDataRequest.pb-c.h"
#include "PMR/EmbeddedParameters/MainCardStoredItem.pb-c.h"
-
+#include "PMR/Printing/BTSRParameters.pb-c.h"
uint32_t E2Prom_Data[MAX_EEPROM_STORAGE] = {0,0,0,0,0,0};
uint32_t MCU_E2PromProgram(int Address,uint32_t Data)
@@ -86,13 +86,15 @@ void MCU_E2PromUpdateResetReason(int i)
uint32_t Head;
uint32_t RESC = SysCtlResetCauseGet();
+#ifndef EVALUATION_BOARD
+
EEPROMRead(&Head,EEPROM_RESET_REASON_HEAD_ADDRESS, 4);
if (Head>=EEPROM_RESET_REASON_MAX_DATA) Head=0;
Head++;
RESC+=(i*0x1000);
EEPROMProgram(&Head, EEPROM_RESET_REASON_HEAD_ADDRESS, 4);
EEPROMProgram(&RESC, (EEPROM_RESET_REASON_HEAD_ADDRESS+(Head*4)), 4);
-
+#endif
}
/*************************************************/
@@ -360,4 +362,53 @@ void MainCardEEpromWriteRequestFunc(MessageContainer* requestContainer)
stub_main_card_eeprom_write_request__free_unpacked(request,NULL);
}
+uint32_t BtsrSaveParamsToEeprom(void *Data)
+{
+ BTSRParameters* BtsrPrameters = Data;
+ BTSRParameters ExistingBtsrPrameters ;
+ uint32_t status = 0;
+ float data;
+
+ BtsrReadParamsFromEeprom(&ExistingBtsrPrameters);
+ if (memcmp(BtsrPrameters,&ExistingBtsrPrameters,sizeof(ExistingBtsrPrameters)))
+ {
+ data = BtsrPrameters->feedingtension;
+ status |= MCU_E2PromProgram(EEPROM_BTSR_FEEDING_TENSION, data);
+ status |= MCU_E2PromProgram(EEPROM_BTSR_TYPE, BtsrPrameters->btsryarntype);
+ status |= MCU_E2PromProgram(EEPROM_BTSR_APPLICATION, BtsrPrameters->btsrapplicationtype);
+ data = BtsrPrameters->threadlengthfactor;
+ status |= MCU_E2PromProgram(EEPROM_BTSR_LENGTH_OFFSET, data);
+ data = BtsrPrameters->tensionerror;
+ status |= MCU_E2PromProgram(EEPROM_BTSR_TENSION_ERROR, data);
+ data = BtsrPrameters->spooltension;
+ status |= MCU_E2PromProgram(EEPROM_BTSR_SPOOL_TENSION, data);
+ data = BtsrPrameters->exittension;
+ status |= MCU_E2PromProgram(EEPROM_BTSR_EXIT_TENSION, data);
+ }
+ return status;
+}
+
+uint32_t BtsrReadParamsFromEeprom(void *Data)
+{
+ BTSRParameters* BtsrPrameters = Data;
+ uint32_t status = 0;
+ float data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_FEEDING_TENSION, &data);
+ BtsrPrameters->feedingtension = data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_TYPE, &data);
+ BtsrPrameters->btsryarntype = data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_APPLICATION, &data);
+ BtsrPrameters->btsrapplicationtype = data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_LENGTH_OFFSET, &data);
+ BtsrPrameters->threadlengthfactor = data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_TENSION_ERROR, &data);
+ BtsrPrameters->tensionerror = data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_SPOOL_TENSION, &data);
+ BtsrPrameters->spooltension = data;
+ status |= MCU_E2PromRead(EEPROM_BTSR_EXIT_TENSION, &data);
+ BtsrPrameters->exittension = data;
+ Report("BtsrReadParamsFromEeprom",__FILE__,__LINE__,(int)(BtsrPrameters->feedingtension*1000),RpWarning,(int)(BtsrPrameters->tensionerror*1000),(int)(BtsrPrameters->exittension*1000));
+ Report("BtsrReadParamsFromEeprom",__FILE__,__LINE__,(int)(BtsrPrameters->btsrapplicationtype),RpWarning,(int)(BtsrPrameters->btsryarntype),(int)(BtsrPrameters->threadlengthfactor*1000));
+ return status;
+}
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
index aee812973..24f229b2c 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
@@ -47,6 +47,13 @@ typedef enum {
EEPROM_PRESSURE_SENSOR_V0_0,
EEPROM_PRESSURE_SENSOR_V0_1,
EEPROM_DRIER_LOADING_ARM_ANGLE,
+ EEPROM_BTSR_FEEDING_TENSION,
+ EEPROM_BTSR_EXIT_TENSION,
+ EEPROM_BTSR_TYPE,
+ EEPROM_BTSR_APPLICATION,
+ EEPROM_BTSR_TENSION_ERROR,
+ EEPROM_BTSR_LENGTH_OFFSET,
+ EEPROM_BTSR_SPOOL_TENSION,
MAX_EEPROM_STORAGE
}EEPROM_STORAGE_USAGE_ENUM;
#define MAX_SERIAL_NUM_LEN 5 //5*4 bytes
@@ -89,6 +96,9 @@ void MainCardEEpromReadRequestFunc(MessageContainer* requestContainer);
uint32_t MCU_E2PromEmbeddedVersionProgram(void);
uint32_t MCU_E2PromEmbeddedVersionRead();
+uint32_t BtsrReadParamsFromEeprom(void *);
+uint32_t BtsrSaveParamsToEeprom(void *);
+
extern char Serial[21];
diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c
index 9c647e847..5d7def1d6 100644
--- a/Software/Embedded_SW/Embedded/Main.c
+++ b/Software/Embedded_SW/Embedded/Main.c
@@ -117,6 +117,8 @@
//*****************************************************************************
static volatile uint32_t g_ui32SysTickCount = 0;
+unsigned char Brd_ID = 0, Assy_ID = 0;
+
// Flags used to pass commands from interrupt context to the main loop.
static volatile uint32_t g_ui32Flags;
@@ -238,7 +240,7 @@ int main(void)
{
FRESULT Fresult = FR_OK;
time_t time_store = 0;
- unsigned char Brd_ID = 0, Assy_ID = 0;
+
// Enable interrupts to the processor.
//
ROM_IntMasterDisable();
@@ -314,6 +316,7 @@ int main(void)
HibernateCalendarSet(&LocalTime);
}
OpenLogFile();
+#ifndef EVALUATION_BOARD
Data = MCU_E2PromEmbeddedVersionRead();
memcpy (&Version,&Data,4);
i = memcmp(&Version,&_gTangoVersion,4);
@@ -325,7 +328,7 @@ int main(void)
MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0);
}
MCU_E2PromRead(EEPROM_INIT_FAILURE_COUNTER,&InitFailures);
-
+#endif
Init_All_I2C();
#ifndef EVALUATION_BOARD
Block_Main_MUX_TCA9548A_0xE4();//unused, same i2c as head and whs cards
@@ -356,21 +359,6 @@ int main(void)
I2C_DispRFIDTask_Init();//I2C Task for dispensers & RFID
-
- Read_HW_Version(&Brd_ID, &Assy_ID);
-
-
-#ifdef USE_UART4_FOR_BTSR
- if(Assy_ID > 0)
- {
- BTSR_Init();
- }
- else
- {
- ReportWithPackageFilter(ThreadFilter,"BTSR - ERROR: Wrong HW Version",__FILE__,__LINE__,(int)Brd_ID,RpError,(int)Assy_ID,0);
- }
-#endif
-
#if defined(USE_RFID_LOGIC) || defined(USE_RFID_STUB)
//Trigger_RFID_Init(); //Init_IFS();//must be done after FPGA_Init
Init_IFS();
@@ -408,9 +396,26 @@ int main(void)
Trigger_RS485_Direction_Init();//init i/o
}
- #ifdef USE_UART4_FOR_BTSR
- InitConsole_BTSR_UART4(ui32SysClock);
- #endif
+ Read_HW_Version(&Brd_ID, &Assy_ID);
+
+ if(Assy_ID > 4)//Bit2 = 1 for BTSR
+ {
+ InitConsole_BTSR_UART4(ui32SysClock);
+
+ #ifdef USE_UART4_FOR_BTSR
+ BTSR_Init();
+ #endif
+ }
+ else
+ {
+ #ifdef FORCE_BTSR_CARD_0023
+ InitConsole_BTSR_UART4(ui32SysClock);
+ BTSR_Init();
+ #endif
+
+ ReportWithPackageFilter(ThreadFilter,"HW does NOT support BTSR",__FILE__,__LINE__,(int)Brd_ID,RpError,(int)Assy_ID,0);
+ }
+
//EMAC_initEMAC();
ControlInit();
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index c5fffff60..f9401c248 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -618,7 +618,7 @@ uint16_t realtimetest[101];
uint16_t dbgflag[50];
uint32_t dbttime[50];
bool Ten_msTick, Fifty_msTick, Hundred_msTick , m20msecTick,m90msecTick, Onesecond_Tick,Tensecond_Tick,OneMinute_Tick,TenMinutes_Tick,OneHourTick,Gradient_Tick;
-bool O700Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick,O800Millisecond_Tick;
+bool O700Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick,O800Millisecond_Tick,m50msecTick;
uint32_t MillisecLowLoop(uint32_t tick)
{
@@ -636,7 +636,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
Fifty_msTick = (tick%eHundredMillisecond == 40) ?true:false; //eFiftyMillisecond
Hundred_msTick = (tick%eHundredMillisecond == 0) ?true:false;
m20msecTick = (tick%eHundredMillisecond == 20) ?true:false;
- //m70msecTick = (tick%eHundredMillisecond == 70) ?true:false;
+ m50msecTick = (tick%50== 0) ?true:false;
m90msecTick = (tick%eHundredMillisecond == 90) ?true:false;
O700Millisecond_Tick = (tick%eOneSecond == 700) ?true:false;
O200Millisecond_Tick = (tick%eOneSecond == 200) ?true:false;
@@ -672,6 +672,14 @@ uint32_t MillisecLowLoop(uint32_t tick)
dbgflag[2]++;
dbttime[2] = msec_millisecondCounter;
Read_Dryer_ENC_Position();
+ dbgflag[3]++;
+ }
+ if (m50msecTick) //50 milli
+ {
+#ifdef USE_UART4_FOR_BTSR
+ //call every 50mSec
+ BTSR_State_Machine(RUFeeder1);
+#endif
}
if (m20msecTick)
{
@@ -682,11 +690,6 @@ uint32_t MillisecLowLoop(uint32_t tick)
WHS_Read_GPI_Registers();
Trigger_PT100_Read();//call every 50mSec (minimum delay 30mSec)
//Set_HeadCard_PT100();//call every 50mSec (minimum delay 30mSec)
-
- #ifdef USE_UART4_FOR_BTSR
- //call every 50mSec
- BTSR_State_Machine(RUFeeder1);
- #endif
}
if (m90msecTick)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 19507775e..eb5f12136 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -859,6 +859,11 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
TargetNumberOfStepsPreRun = InitialDispenserTimeout;
MaximalPressurePreRun = InitialDispenserPressure;
+ if(Head_Type == HEAD_TYPE_ARC)
+ {
+ MotorMovetoLimitSwitch(HARDWARE_MOTOR_TYPE__MOTO_DH_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 30, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], NULL,30000);
+ }
+
for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++)
{
TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[Motor_i];
@@ -1376,8 +1381,8 @@ uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId)
//for (Brush_i=JobBrushStopId;Brush_i<PrevSegment->brushstopscount;Brush_i++) #bug 3348 - unhandled jobstops stops too soon
for (Brush_i=JobBrushStopId;Brush_i<PrevSegment->brushstopscount;Brush_i++)
{
- if (status == ERROR)
- break;
+ //if (status == ERROR)
+ // break;
tFileBrushStop = GetNextBrushStopFromJobFile();
if (tFileBrushStop)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
index 2c67a623b..5b0cf9cb7 100644
--- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
+++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
@@ -49,7 +49,7 @@ double MidTankEmptyLimit = MidTank_Pressure_EMPTY;
MidTankStateEnum midTankState = 0;
char CartridgeRequestToken[36+1];
-int CartridgeRequestId = 0x01010101;
+int CartridgeRequestId = 0x31313131;
bool RdInkCartridgeSensor()
{
@@ -199,7 +199,7 @@ uint32_t ReadInkCartridgeData()
CartridgeValidationRequest ValidationReq = CARTRIDGE_VALIDATION_REQUEST__INIT;
Cartridge CartridgeData;
- strcpy(CartridgeRequestToken,"Happy days are coming to us, soon");
+ strcpy(CartridgeRequestToken,"Happy days are coming to us, soonXXX");
memcpy(&CartridgeRequestToken[32],&CartridgeRequestId,sizeof(CartridgeRequestId));
CartridgeRequestId++;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index ffbb504db..2b1e52134 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -320,8 +320,21 @@
{
TimeoutsCounter = 0;
load.color = fastBILNK;
- usnprintf(LoadErrorMsg, 100, "/Stage %s - %s timeout",LoadStagesStr[LoadStages], MotorStr[MotorId]);
- Report(LoadErrorMsg,__FILE__,__LINE__,LoadStages,RpWarning,TimeoutsCounter,0);
+ if (LoadStages == THREAD_LOAD_INITIAL_TENSION)
+ {
+ usnprintf(LoadErrorMsg, 100, "/Stage %s - no cone in winder!!",LoadStagesStr[LoadStages]);
+ Report(LoadErrorMsg,__FILE__,__LINE__,LoadStages,RpWarning,TimeoutsCounter,0);
+ }
+ else if (LoadStages == THREAD_LOAD_JOG_THREAD)
+ {
+ usnprintf(LoadErrorMsg, 100, "/Stage %s - Dryer door is open!!",LoadStagesStr[LoadStages]);
+ Report(LoadErrorMsg,__FILE__,__LINE__,LoadStages,RpWarning,TimeoutsCounter,0);
+ }
+ else
+ {
+ usnprintf(LoadErrorMsg, 100, "/Stage %s - %s timeout",LoadStagesStr[LoadStages], MotorStr[MotorId]);
+ Report(LoadErrorMsg,__FILE__,__LINE__,LoadStages,RpWarning,TimeoutsCounter,0);
+ }
LoadStatus = ERROR;
ThreadLoadingReport();
@@ -447,13 +460,13 @@
{
REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Initial_Tension");
load.color = BLINK;
+ CallbackCounter++;
if (FPGA_Read_limit_Switches(GPI_SW_SPOOL_EXISTS)==LIMIT)
{
REPORT_MSG(LIMIT, "No cone in winder");
Thread_Load_HomingCallback(HARDWARE_MOTOR_TYPE__MOTO_WINDER,NO_LIMIT);
//return ERROR;
}
- CallbackCounter++;
MotorMovetoBreakSensor (HARDWARE_MOTOR_TYPE__MOTO_WINDER,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].directionthreadwize, 500, Thread_Load_HomingCallback,10000);
return OK;
@@ -805,6 +818,13 @@
//Jog Thread Shortly To Make Sure Spool Is Running. Report End Of Loading
{
REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Jog_Thread");
+ if (Get_COVER_1_State(DryerDoor))
+ {
+ CallbackCounter++;
+ REPORT_MSG(LIMIT, "Dryer door open");
+ Thread_Load_HomingCallback(HARDWARE_MOTOR_TYPE__MOTO_WINDER,NO_LIMIT);
+ return ERROR;
+ }
keepfeedertension = feedertension;
ProcessParametersKeep.feedertension = 0.0;
ThreadJoggingFunc(20);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 87ad612ba..697f1bd5d 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -36,7 +36,7 @@
#include "Modules/AlarmHandling/AlarmHandling.h"
#include "Control/MillisecTask.h"
#include "drivers/Flash_ram/MCU_E2Prom.h"
-
+#include "Drivers/Uart_Comm/BTSR/BTSR.h"
#include "drivers/SSI_Comm/SSI_Comm.h"
////////////////////////////////State machine operation////////////////////////////////////
@@ -79,6 +79,7 @@ double LengthCalculationMultiplier;
uint32_t PoolerPreviousPosition = 0, PoolerCurrentPosition = 0;
double PoolerTotalProcessedLength = 0.0;
double PoolerLengthCalculationMultiplier;
+double threadlengthfactor = 1.0;
double TempPoolerTotalProcessedLength = 0.0;
double TempTotalProcessedLength = 0.0;
@@ -109,6 +110,7 @@ void SendSegmentFail(void);
double KeepNormalizedError = 0;
bool ThreadControlActive = false;
+extern BTSR_t BTSR[MaxUFeeders];
////////////////////////Slow Motor State////////////////////////////////////
//uint32_t ThreadPreSegmentState(void *JobDetails);
@@ -337,9 +339,13 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}**/
//}
-#ifdef BTSR_NO_PULLER_TFU
- if (CurrentControlledSpeed[WINDER_MOTOR]>100)
- length = dyeingspeed/10;
+#ifdef UFEEDER_BTSR
+ length = BTSR[RUFeeder1].LengthInMeter * threadlengthfactor;
+#else
+ #ifdef BTSR_NO_PULLER_TFU
+ if (CurrentControlledSpeed[WINDER_MOTOR]>100)
+ length = dyeingspeed/10;
+ #endif
#endif
PoolerTotalProcessedLength+= (length/100);
TempPoolerTotalProcessedLength = PoolerTotalProcessedLength;
@@ -1080,6 +1086,16 @@ uint32_t ThreadPrepareState(void *JobDetails)
initialpos = 0xFFFF;
Poolerinitialpos = 0xFFFF;
PrepareState = true;
+
+#ifdef UFEEDER_BTSR
+ int application = JobTicket->btsrparameters->btsrapplicationtype;
+ int type = JobTicket->btsrparameters->btsryarntype;
+ uint16_t tension = (uint16_t)(JobTicket->btsrparameters->feedingtension*10);
+ uint16_t tension_err = (uint16_t)(JobTicket->btsrparameters->tensionerror*10);
+ uint16_t alarm_time = 5; //no parameter
+ threadlengthfactor = JobTicket->btsrparameters->threadlengthfactor;
+#endif
+
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,false);
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER,false);
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER,false);
@@ -1097,8 +1113,18 @@ uint32_t ThreadPrepareState(void *JobDetails)
IntersegmentLength = JobTicket->intersegmentlength;
PrepareWaitCount = 0;
+
+#ifdef UFEEDER_BTSR
+ status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, JobTicket->btsrparameters->exittension);
+ ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)JobTicket->btsrparameters->exittension,0);
+ BTSR_RML_Settings(RUFeeder1, application, type, tension, tension_err, alarm_time);
+ BTSR_Reset_Length(RUFeeder1, HIGHEST);
+ BTSR_Read_Length(RUFeeder1, HIGHEST);
+ ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension BTSR",__FILE__,application,type,RpError,tension,tension_err);
+#else
status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, windertension);
ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)windertension,0);
+#endif
#ifndef BTSR_NO_PULLER_TFU
status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__MiddleDancer, pullertension);
ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Puller",__FILE__,HARDWARE_DANCER_TYPE__MiddleDancer,PrepareWaitCount,RpWarning,(int)pullertension,0);
@@ -1107,6 +1133,7 @@ uint32_t ThreadPrepareState(void *JobDetails)
status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__RightDancer, feedertension);
ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Feeder",__FILE__,HARDWARE_DANCER_TYPE__RightDancer,PrepareWaitCount,RpWarning,(int)feedertension,0);
#endif
+
FirstCalcInJob = true;
if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)
{
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
index 0da78dc9c..06dac8fdc 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
@@ -213,21 +213,26 @@ uint32_t InitSequenceMidTankCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag
Disable_MidTank_Pressure_Reading(portId);
Valve_Set(IDS_Id_to_AirValve[portId], Atm_MidTank_OFF ); //Atm_MidTank_OFF/ON
//Control3WayValvesWithCallback ((Valves_t)portId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer
-
}
else if (MidTankOperationCounter >= MidTankReadPressure)
{
//read pressure for midtank (MidTankOperationCounter-MidTankCloseAir)
portId = MidTankOperationCounter%MAX_SYSTEM_DISPENSERS;
- Read_MidTank_Pressure_Sensor(portId);
+ if((IfIndex==0)||(Get_MidTank_Pressure_Sensor(portId)<0.5))
+ {
+ Read_MidTank_Pressure_Sensor(portId);
+ }
}
else if (MidTankOperationCounter >= MidTankOpenAir)
{
//open air valve for midtank (MidTankOperationCounter-MidTankOpenAir)
portId = (MidTankOperationCounter - MidTankOpenAir) ; //0-7
- Enable_MidTank_Pressure_Reading(portId);
- Valve_Set(IDS_Id_to_AirValve[portId], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON
- Control3WayValvesWithCallback ((Valves_t)portId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer
+ if((IfIndex==0)||(Get_MidTank_Pressure_Sensor(portId)<0.5))
+ {
+ Enable_MidTank_Pressure_Reading(portId);
+ Valve_Set(IDS_Id_to_AirValve[portId], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON
+ Control3WayValvesWithCallback ((Valves_t)portId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer
+ }
}
MidTankOperationCounter++;
return OK;
@@ -544,6 +549,8 @@ uint32_t InitSequenceWaitForCoolerCallBackFunction(uint32_t IfIndex, uint32_t Bu
}
else
Report("InitSequenceWaitForCoolerCallBackFunction called too late",__FILE__,__LINE__,(int)InitStages,RpWarning,(int)MachineStateDetail,0);
+ MidTankControlId = AddControlCallback("Init Midtank", InitSequenceMidTankCallBackFunction, 300/*eHundredMillisecond*/, TemplateDataReadCBFunction,1,0, 0 );
+
return OK;
}
uint32_t InitSequenceWaitForCooler(void)
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c
index 17166a095..4ab177244 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c
@@ -115,7 +115,7 @@ void PowerIdleSetIdle(void)
if (HandleProcessParameters(&ProcessParametersClear,false)!= OK)
{
LOG_ERROR (1, "Turn Heaters idle failed");
- return;
+ //return;
}
if (BlowerCfg.enabled == true)
{
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index bbb75328b..9f5151117 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -81,7 +81,7 @@
#include "modules/ids/ids_ex.h"
#include "Modules/heaters/heaters_ex.h"
#include "Modules/control/control.h"
-
+#include "drivers/Flash_ram/MCU_E2Prom.h"
#define MAX_TICKET_SIZE 10000
@@ -106,6 +106,7 @@ JobBrushStop *TbrushStop;
JobDispenser *Tdispenser;
JobSpool *Tspool;
HeadCleaningParameters *CleaningParameters = NULL;
+BTSRParameters *BtsrPrameters = NULL;
bool CopyConfigured[MAX_SYSTEM_MODULES];
bool CleaningJobActive = false, JoggingJobActive = false;
char ErrorMsg[100];
@@ -134,7 +135,6 @@ static ReturnCode ExitState(void *JobDetails);
void AbortJob(char *Msg);
void HandleJobEnd(JobEndReasonEnum JobEndReason);
-
typedef enum
{
Idle= 0,
@@ -483,6 +483,9 @@ uint32_t ThreadJoggingFunc(int speed)
Tspool->has_limitswitchstartpointoffset = false;
Ticket.spool = Tspool;
Ticket.threadparameters = &SavedThreadParameters;
+#ifdef UFEEDER_BTSR
+ BtsrReadParamsFromEeprom(Ticket.btsrparameters);
+#endif
CurrentJob = &Ticket;
InternalWindingConfigMessage(Tspool);
JoggingJobActive = true;
@@ -681,6 +684,9 @@ uint32_t ThreadCleaningJob(int speed)
Tspool->has_limitswitchstartpointoffset = false;
Ticket.spool = Tspool;
Ticket.threadparameters = &SavedThreadParameters;
+#ifdef UFEEDER_BTSR
+ BtsrReadParamsFromEeprom(Ticket.btsrparameters);
+#endif
CurrentJob = &Ticket;
job_length = CurrentJob->length + dryerbufferMeters;
@@ -923,7 +929,7 @@ void Stub_AbortJobRequest(MessageContainer* requestContainer)
//********************************************************************************************************************
void JobRequestFunc(MessageContainer* requestContainer)
{
- uint32_t status = NOT_SUPPORTED;
+ uint32_t rc, status = NOT_SUPPORTED;
MessageContainer responseContainer;
uint8_t* container_buffer;
ErrorCode error = ERROR_CODE__NONE;
@@ -1029,7 +1035,16 @@ void JobRequestFunc(MessageContainer* requestContainer)
Report("Save job cleaning parameters", __FILE__, __LINE__, CleaningParameters->cleanerflow, RpWarning, CleaningParameters->archeadcleaningmotorspeed, 0);
}
+ if (Ticket->btsrparameters)
+ {
+ ///store last updated BTSR parameters
+ if (BtsrPrameters == NULL)
+ BtsrPrameters = my_malloc(sizeof(BTSRParameters));
+ memcpy(BtsrPrameters, Ticket->btsrparameters, sizeof(BTSRParameters));
+ rc = BtsrSaveParamsToEeprom(BtsrPrameters);
+ Report("Save job BTSR parameters", __FILE__, __LINE__, BtsrPrameters->feedingtension, RpWarning, rc, 0);
+ }
}
else
{