aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-06-23 09:42:30 +0300
committerAvi Levkovich <avi@twine-s.com>2020-06-23 09:42:30 +0300
commit6138caa64d75f6580790095e1cdbbb00ed58d795 (patch)
treebb8eccbc637d7e133ade69238ff64f790e2efdd9 /Software/Embedded_SW
parentd215fe8f95a8522ff8ef915d5666087a2f271f2e (diff)
parentda3c540b1b9079a3357a7a9b7f37d07127ce0b09 (diff)
downloadTango-6138caa64d75f6580790095e1cdbbb00ed58d795.tar.gz
Tango-6138caa64d75f6580790095e1cdbbb00ed58d795.zip
merge conflicts
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c27
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c5
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c38
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.c104
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.h9
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c20
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/Safety.c42
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c19
-rw-r--r--Software/Embedded_SW/Embedded/Software Release Notes.txt30
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c2
17 files changed, 199 insertions, 127 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
index c48538752..60707d0cb 100644
--- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
+++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
@@ -20,7 +20,7 @@ typedef struct
} TangoVersion_t;
-TangoVersion_t _gTangoVersion = {1,4,6,32};
+TangoVersion_t _gTangoVersion = {1,4,6,33};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
index ffbbf6608..9ae12d0b4 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
@@ -427,7 +427,7 @@ uint32_t StubDispenserEEpromRequestFunc(MessageContainer* requestContainer)
MessageContainer responseContainer;
uint32_t status = OK;
- StubDispenserEEpromData *DispenserEEpromInstance;
+ StubDispenserEEpromData *DispenserEEpromInstance = NULL;
Report("StubDispenserEEpromRequestFunc",__FILE__,__LINE__,request->dispenserid,RpWarning,(int)request->burnrequest,0);
if (request->burnrequest == true)
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
index 0cc1db9f6..e4f7f81ad 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
@@ -64,6 +64,8 @@ uint32_t Write_Head_Card_Heaters_Commands()
}
else
Report(" Write_Head_Card_Heaters",__FILE__,__LINE__,255,RpWarning,0,0);
+ if (status)
+ ReadFailures++;
return status;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c
index 35d0a0b1e..108676b47 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.c
@@ -22,6 +22,10 @@ ADDR 0x8E
#include "modules/control/millisecTask.h"
#include "Modules/AlarmHandling/AlarmHandling.h"
#include "drivers/Heater/TemperatureSensor.h"
+
+#include "PMR/Diagnostics/EventType.pb-c.h"
+//#include "StateMachines/Initialization/InitSequence.h"
+
//#include "PT100RTD.h"
#include "../I2C_Head_Mux.h"
@@ -92,8 +96,8 @@ uint32_t I2C_Write_SensorId(uint32_t I2C_ID, TEMPERATURE_SENSOR_ID_ENUM SensorId
I2C_ADC_ADS122C04_SLAVE_ADD = SensorId_To_SlaveAdd(SensorId);
status |= I2C_Write(I2C_ID, I2C_ADC_ADS122C04_SLAVE_ADD, I2C_Write_buf, No_BytesToWrite);
- if (status)
- Report("I2C_Write_SensorId error", __FILE__,Arb_Loss_Count,status, RpMessage,SensorId, 0);
+ //if (status)
+ // ReportWithPackageFilter(LoadFilter,"I2C_Write_SensorId error", __FILE__,Arb_Loss_Count,status, RpMessage,SensorId, 0);
return status;
}
@@ -126,6 +130,8 @@ uint32_t I2C_Read_SensorId(uint32_t I2C_ID, TEMPERATURE_SENSOR_ID_ENUM SensorId,
//TODO Choose TEMP1 sensor by I/O
I2C_ADC_ADS122C04_SLAVE_ADD = SensorId_To_SlaveAdd(SensorId);
status |= I2C_Read(I2C_ID, I2C_ADC_ADS122C04_SLAVE_ADD + 1, I2C_Read_buf, No_BytesToRead);
+ //if (status)
+ // ReportWithPackageFilter(LoadFilter,"I2C_Read_SensorId error", __FILE__,Arb_Loss_Count,status, RpMessage,SensorId, 0);
return status;
}
@@ -210,8 +216,8 @@ uint32_t HeadADCPT100_SendReadDataCommand(TEMPERATURE_SENSOR_ID_ENUM SensorId)
//delayms(10);
Status |= I2C_Read_SensorId(I2C_ID_HEAD_CARD, SensorId, temp, 3);
- if (Status)
- Report("HeadADCPT100_SendReadDataCommand error", __FILE__,Arb_Loss_Count,Status, RpMessage,SensorId, 0);
+ //if (Status)
+ // ReportWithPackageFilter(LoadFilter,"HeadADCPT100_SendReadDataCommand error", __FILE__,Arb_Loss_Count,Status, RpMessage,SensorId, 0);
//First send the MSB so we need to reorder the bytes
Data_ADC_Head = temp[0];
@@ -852,7 +858,7 @@ uint32_t Get_HeadCard_PT100(TEMPERATURE_SENSOR_ID_ENUM SensorId)
return TempSensorResponse[SensorId].Temperature_C_mult_by_100;
}
-uint16_t ReadCalls = 0;ReadFailures = 0;
+uint16_t ReadCalls = 0, ReadFailures = 0, ReadResets = 0;
bool I2C_Failure = false;
#define I2C_FAILURES_PERIOD 100
#define I2C_FAILURES_LIMIT 30
@@ -884,10 +890,15 @@ uint32_t Set_HeadCard_PT100() //call every 50mSec (minimum delay 30mSec)
ReadFailures++;
if(ReadFailures>I2C_FAILURES_LIMIT) //30 failures in 10 seconds
{
+ ReadResets++;
//I2C_Failure = true;
- ReportWithPackageFilter(HeatersFilter,"Head I2C interface failure ",__FILE__,__LINE__,ReadFailures,RpError, ReadCalls,0);
- //SetMachineState(MACHINE_STATE_BUILT_IN_FAILED);
- //AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE,true);
+ ReportWithPackageFilter(HeatersFilter,"Head I2C interface failure ",__FILE__,ReadResets,ReadFailures,RpError, ReadCalls,0);
+ if (ReadResets > 50)
+ {
+ Report("Head malfunctioning, shut down",__FILE__,ReadResets,ReadFailures,RpError, ReadCalls,0);
+ //SetMachineState(MACHINE_STATE_BUILT_IN_FAILED);
+ AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE,true);
+ }
}
}
return Status;
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c
index b5790b6a2..a9f037942 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c
@@ -17,6 +17,7 @@
#include "driverlib/sysctl.h"
#include "driverlib/i2c.h"
#include "I2C.h"
+#include "i2c_fifo.h"
#define I2C_DELAY 3000
uint8_t Main_Mux_Flag = UNKNOWN;
@@ -69,6 +70,8 @@ void Configuring_Master_I2C2(/*uint32_t ui32SysClock*/)
#else
I2CMasterInitExpClk(I2C2_BASE, ui32SysClock, false);//The last parameter sets the I2C data transfer rate: false for 100kbps and true for 400kbps
#endif
+
+ i2c_fifo_setup(I2C2_BASE);
}
//--------------------------------------------------------------
@@ -122,6 +125,7 @@ void Configuring_Master_I2C3(/*uint32_t ui32SysClock*/)
I2CMasterInitExpClk(I2C3_BASE, ui32SysClock, false);//The last parameter sets the I2C data transfer rate: false for 100kbps and true for 400kbps
#endif
+ i2c_fifo_setup(I2C3_BASE);
}
@@ -175,6 +179,7 @@ void Configuring_Master_I2C4(/*uint32_t ui32SysClock*/)
I2CMasterInitExpClk(I2C4_BASE, ui32SysClock, false);//The last parameter sets the I2C data transfer rate: false for 100kbps and true for 400kbps
#endif
+ i2c_fifo_setup(I2C4_BASE);
}
void Init_All_I2C()
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h
index d8b2d1286..ed4c1228f 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h
@@ -17,6 +17,8 @@ uint32_t I2C_control(uint32_t I2C_ID, uint32_t Slave_Add, bool RW,uint32_t Byte2
void Init_All_I2C();
void I2C_ReadingTask_Init(void);
+extern uint16_t ReadFailures;
+
//-------------------------------------------------------------------------------------------------------------
//uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t No_BytesTWrite, uint32_t *Bytes2Write );
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
index 79c986978..ab05c92a9 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
@@ -19,7 +19,7 @@
#include "driverlib/sysctl.h"
#include "driverlib/i2c.h"
#include "inc/hw_i2c.h"
-
+#include "i2c_fifo.h"
#include "i2c.h"
@@ -179,9 +179,8 @@ uint32_t I2C_ReadBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data
uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf, uint32_t No_BytesToWrite )
{
-
uint32_t status = OK;
-
+ uint8_t* buff = (uint8_t *)I2C_Write_buf;
uint32_t I2C_BASE;
if (I2C_ID == 4)
@@ -208,14 +207,11 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf,
//Byte2Write = Byte2Write & 0xFF;
-// if(No_BytesTWrite == 1)
-// {
-// status = Write_Single_I2C(I2C_BASE, Slave_Add,Bytes2Write[0] & 0xFF);
-// }
-// else
-// {
-//
-// }
+ /*if(No_BytesToWrite <= 2) {
+ status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
+ } else {
+ status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite);
+ }*/
//uint32_t I2C_W_buf[256] = {0},i;
@@ -249,7 +245,7 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u
{
uint32_t status = OK;
-
+ uint8_t* buff = (uint8_t *)I2C_Read_buf;
uint32_t I2C_BASE;
if (I2C_ID == 4)
@@ -276,24 +272,8 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u
//Byte2Write = Byte2Write & 0xFF;
-// if(No_BytesTWrite == 1)
-// {
-// status = Write_Single_I2C(I2C_BASE, Slave_Add,Bytes2Write[0] & 0xFF);
-// }
-// else
-// {
-//
-// }
-
- //uint32_t I2C_W_buf[256] = {0},i;
-
-// for(i = 0; i < request->n_bytestwrite;i++)
-// {
-// I2C_W_buf[i] = request->bytestwrite[i];
-// }
-
- //status = I2C_WriteBuff(I2C_BASE, Slave_Add, Bytes2Write, No_BytesTWrite);
status = I2C_ReadBuff(I2C_BASE, Slave_Add, I2C_Read_buf, No_BytesToRead);
+ //status = I2C_ReadFifo(I2C_BASE, Slave_Add, buff, No_BytesToRead);
if (status)
{
if (Arb_Loss_Count++ > 10)
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.c
index ce69fdb93..b72e23576 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.c
@@ -20,7 +20,7 @@
#include "driverlib/i2c.h"
#define MAX_FIFO_BURST 8
-
+#define I2C_BUSY_DELAY 5000
///
/**
* Flushes I2C fifos
@@ -36,13 +36,25 @@ void i2c_flush(uint32_t base){
* @param base Base address of I2C transceiver
* @param highspeed True if 400kbit, else 100kbit
*/
-void i2c_setup(uint32_t base, bool highspeed){
- //I2CMasterInitExpClk(base, g_syshz, highspeed);
- I2CTxFIFOConfigSet(base, I2C_FIFO_CFG_TX_MASTER);
- I2CRxFIFOConfigSet(base, I2C_FIFO_CFG_RX_MASTER);
+void i2c_fifo_setup(uint32_t base) {
+ I2CTxFIFOConfigSet(base, I2C_FIFO_CFG_TX_MASTER | I2C_FIFO_CFG_TX_TRIG_3);
+ I2CRxFIFOConfigSet(base, I2C_FIFO_CFG_RX_MASTER | I2C_FIFO_CFG_RX_TRIG_2);
+ I2CMasterGlitchFilterConfigSet(base, I2C_MASTER_GLITCH_FILTER_8);
i2c_flush(base);
}
+uint32_t I2C_BusyWithTimeout(uint32_t base)
+{
+ uint32_t count = 0;
+ while(I2CMasterBusy(base) && (count++ < 10)) {
+ SysCtlDelay(I2C_BUSY_DELAY);
+ if(count > 10) {
+ return I2C_MASTER_ERR_CLK_TOUT;
+ }
+ }
+ return 0;
+}
+
/**
* Writes array over I2C to address given
* @param base Base address of I2C transceiver
@@ -51,12 +63,11 @@ void i2c_setup(uint32_t base, bool highspeed){
* @param len Length of data
* @return 0 if success, else value of I2CMasterErr
*/
-uint32_t I2C_WriteFifo(uint32_t base, uint8_t addr, void *data, size_t len){
- size_t offset = 0;
- size_t len_mod = len % MAX_FIFO_BURST;
- size_t final_burst = (len_mod !=0 )? len_mod : MAX_FIFO_BURST;
- uint32_t err;
- size_t i = 0;
+uint32_t I2C_WriteFifo(uint32_t base, uint8_t addr, uint8_t *data, uint32_t len){
+ uint32_t offset = 0;
+ uint32_t len_mod = len % MAX_FIFO_BURST;
+ uint32_t final_burst = (len_mod !=0 )? len_mod : MAX_FIFO_BURST;
+ uint32_t i, err;
// Send configuration to INA219 config register
I2CMasterSlaveAddrSet(base, addr, false);
@@ -64,85 +75,66 @@ uint32_t I2C_WriteFifo(uint32_t base, uint8_t addr, void *data, size_t len){
for(offset = 0; offset < (len-1)/MAX_FIFO_BURST; offset++){
I2CMasterBurstLengthSet(base, MAX_FIFO_BURST);
for(i = 0; i < MAX_FIFO_BURST; ++i){
- I2CFIFODataPut(base, ((uint8_t *)data)[offset*MAX_FIFO_BURST+i]);
+ I2CFIFODataPutNonBlocking(base, *data++);
}
if( 0 == offset){
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_BURST_SEND_START);
}else{
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_BURST_SEND_CONT);
}
- err = I2CMasterErr(base);
- if(err != I2C_MASTER_ERR_NONE){
- goto error;
- }
}
I2CMasterBurstLengthSet(base, final_burst);
for(i = 0; i < final_burst; ++i){
- I2CFIFODataPut(base, ((uint8_t *)data)[offset*MAX_FIFO_BURST+i]);
+ I2CFIFODataPutNonBlocking(base, *data++);
}
if(len <= MAX_FIFO_BURST){
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_SINGLE_SEND);
}else{
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_BURST_SEND_FINISH);
}
- err = I2CMasterErr(base);
- if(err != I2C_MASTER_ERR_NONE){
- goto error;
+ if((err = I2C_BusyWithTimeout(base)) != 0) {
+ return err;
+ } else {
+ err = I2CMasterErr(base);
}
- while(I2CMasterBusy(base));
- return 0;
-error:
return err;
}
-/**
- * Reads array over I2C from address given
- * @param base Base address of I2C transceiver
- * @param addr Address of I2C device to read from
- * @param data Data to read
- * @param len Length of data
- * @return 0 if success, else value of I2CMasterErr
- */
-uint32_t I2C_ReadFifo(uint32_t base, uint8_t addr, void *data, size_t len){
- size_t offset = 0;
- size_t len_mod = len % MAX_FIFO_BURST;
- size_t final_burst = (len_mod !=0 )? len_mod : MAX_FIFO_BURST;
- uint32_t err;
- size_t i = 0;
+uint32_t I2C_ReadFifo(uint32_t base, uint8_t addr, uint8_t *data, uint32_t len) {
+ uint32_t len_mod = len % MAX_FIFO_BURST;
+ uint32_t final_burst = (len_mod !=0 )? len_mod : MAX_FIFO_BURST;
+ uint32_t i, offset, err;
// Send configuration to INA219 config register
+ I2CRxFIFOFlush(base);
I2CMasterSlaveAddrSet(base, addr, true);
-
- for(offset = 0; offset < (len-1)/MAX_FIFO_BURST; offset++){
+ for(offset = 0; offset < len/MAX_FIFO_BURST; offset++) {
I2CMasterBurstLengthSet(base, MAX_FIFO_BURST);
- for(i = 0; i < MAX_FIFO_BURST; ++i){
- ((uint8_t *)data)[offset*MAX_FIFO_BURST+i] = I2CFIFODataGet(base);
- }
- if(0 == offset){
+
+ if(0 == offset) {
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_BURST_RECEIVE_START);
- }else{
+ } else {
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_BURST_RECEIVE_CONT);
}
- err = I2CMasterErr(base);
- if(err != I2C_MASTER_ERR_NONE){
- goto error;
+ if((err = I2C_BusyWithTimeout(base)) != 0)
+ return err;
+ for(i = 0; i < MAX_FIFO_BURST; ++i) {
+ I2CFIFODataGetNonBlocking(base, data++);
}
}
+
I2CMasterBurstLengthSet(base, final_burst);
- for(i = 0; i < final_burst; ++i){
- ((uint8_t *)data)[offset*MAX_FIFO_BURST+i] = I2CFIFODataGet(base);
- }
if(len <= MAX_FIFO_BURST){
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_SINGLE_RECEIVE);
- }else{
+ } else {
I2CMasterControl(base, I2C_MASTER_CMD_FIFO_BURST_RECEIVE_FINISH);
}
- err = I2CMasterErr(base);
- if(err != I2C_MASTER_ERR_NONE){
- goto error;
+ if((err = I2C_BusyWithTimeout(base)) != 0)
+ return err;
+ for(i = 0; i < final_burst; ++i) {
+ I2CFIFODataGetNonBlocking(base, data++);
}
- return 0;
-error:
+ err = I2CMasterErr(base);
return err;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.h
index 2e2ccc37a..6ff5b5ce6 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_FIFO.h
@@ -8,10 +8,9 @@
#ifndef DRIVERS_I2C_COMMUNICATION_I2C_FIFO_H_
#define DRIVERS_I2C_COMMUNICATION_I2C_FIFO_H_
-void i2c_setup(uint32_t base, bool highspeed);
-uint32_t I2C_ReadFifo(uint32_t base, uint8_t addr, void *data, size_t len);
-uint32_t I2C_WriteFifo(uint32_t base, uint8_t addr, void *data, size_t len);
-
-
+void i2c_fifo_setup(uint32_t base);
+uint32_t I2C_ReadFifo(uint32_t base, uint32_t addr, uint8_t *data, uint32_t len);
+uint32_t I2C_WriteFifo(uint32_t base, uint32_t addr, uint8_t *data, uint32_t len);
+uint32_t I2C_BusyWithTimeout(uint32_t base);
#endif /* DRIVERS_I2C_COMMUNICATION_I2C_FIFO_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
index 7590113c1..c36d27d74 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
@@ -41,9 +41,9 @@ typedef struct
}WhsControlConfig_t;
WhsControlConfig_t WHS_ControlData = {0};
-#define MAX_WHS_CONTROL_SAMPLES 10
+/*#define MAX_WHS_CONTROL_SAMPLES 10
float WhsBlowerSamples[MAX_WHS_CONTROL_SAMPLES] ;
-int WhsBlowerSamplesPointer = 0;
+int WhsBlowerSamplesPointer = 0;*/
bool Read_Max5805_device_ID();
double calc_Q_average(WHS_Flow_Meter ORF_id,double Q_temp);
@@ -236,9 +236,9 @@ bool WHS_init_Blower()
WHS_ControlData.m_preError = 0;
WHS_ControlData.m_SetParam = 5.0;//need to update SetParams on presegment stage
- WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES/2;
+ //WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES/2;
- memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples));
+ //memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples));
return status;
}
@@ -614,7 +614,7 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam)
float avreageSampleValue = 0;
int i;
- WhsBlowerSamples[WhsBlowerSamplesPointer] = measuredParam;//(-1 * TranslatedReadValue);
+ /*WhsBlowerSamples[WhsBlowerSamplesPointer] = measuredParam;//(-1 * TranslatedReadValue);
WhsBlowerSamplesPointer++;
if (WhsBlowerSamplesPointer >= WHS_ControlData.SamplesFilterSize)
WhsBlowerSamplesPointer = 0;
@@ -622,7 +622,7 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam)
avreageSampleValue += WhsBlowerSamples[i];
avreageSampleValue = avreageSampleValue / (int)WHS_ControlData.SamplesFilterSize;
- /*WHS_ControlData.m_mesuredParam = avreageSampleValue;*/
+ WHS_ControlData.m_mesuredParam = avreageSampleValue;*/
WHS_ControlData.m_mesuredParam = measuredParam;
WHS_ControlData.m_SetParam = setParam;
WHS_ControlData.m_calculatedError = PIDAlgorithmCalculation((float)WHS_ControlData.m_SetParam , (float)WHS_ControlData.m_mesuredParam,
@@ -687,14 +687,14 @@ uint32_t WHS_PidRequestMessage(void* request)
WHS_ControlData.m_preError = 0;
WHS_ControlData.m_SetParam = PID_Request->outputproportionalcycletime;//need to update SetParams on presegment stage
- WHS_ControlData.SamplesFilterSize = PID_Request->pvinputfilterfactormode;
+ /*WHS_ControlData.SamplesFilterSize = PID_Request->pvinputfilterfactormode;
if (PID_Request->pvinputfilterfactormode > MAX_WHS_CONTROL_SAMPLES)
WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES;
if (PID_Request->pvinputfilterfactormode < 0.5) // = 0
WHS_ControlData.SamplesFilterSize = MAX_WHS_CONTROL_SAMPLES/2;
-
- memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples));
- WhsBlowerSamplesPointer = 0;
+*/
+ //memset (WhsBlowerSamples,0,sizeof(WhsBlowerSamples));
+ //WhsBlowerSamplesPointer = 0;
return OK;
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
index 0d6cd35c7..b2e623a11 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
@@ -674,7 +674,7 @@ uint32_t MotorMovetoLimitSwitch (TimerMotors_t MotorId,bool direction, uint32_t
}
MotorTimeout[MotorId] = 0;
- MotorTimeLag[MotorId] = eTenMillisecond;
+ MotorTimeLag[MotorId] = 5; //five milliseconds for better accuracy
MotorTimeLimit[MotorId] = timeout;
if ((MotorId == HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD)||(HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH)||(HARDWARE_MOTOR_TYPE__MOTO_SCREW))
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index 8af4720a6..eded4bdce 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -976,6 +976,13 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
AlarmId = Alarm_i;
ReportWithPackageFilter(AlarmFilter,"an alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0);
break;
+ case EVENT_TYPE__ELECTRICAL_CABINET_OVERTEMPERATURE:
+ case EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE:
+ case EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE_2:
+ FoundReason = JOB_TEMPERATURE_ALARM;
+ AlarmId = Alarm_i;
+ ReportWithPackageFilter(AlarmFilter,"machine internal over-temperature is preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0);
+ break;
default:
break;
}
@@ -1214,7 +1221,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
}
break;
case ALARM_SOURCE_TYPE__CurrentAlarm:
- if (CheckCurrentAlarms)
+ if ((CheckCurrentAlarms)&&(getIdleState()==false))
{
if (AlarmItem[Alarm_i].ModuleDeviceId == 0xFF)
{
@@ -1338,7 +1345,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
break;
if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Warning)
FluidLevelWarning = AlarmItem[Alarm_i].AlarmValue;
- else if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Error)
+ else if ((AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Error)&&(AlarmItem[Alarm_i].AlarmDirection == UNDER_VALUE))
FluidLevelError = AlarmItem[Alarm_i].AlarmValue;
value = Get_MidTank_Int1000_Sensor(AlarmItem[Alarm_i].DeviceId);
if (AlarmItem[Alarm_i].AlarmDirection == OVER_VALUE)
diff --git a/Software/Embedded_SW/Embedded/Modules/General/Safety.c b/Software/Embedded_SW/Embedded/Modules/General/Safety.c
index e8454370c..400b083e4 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/Safety.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/Safety.c
@@ -65,7 +65,46 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
if (AllDispensersInSafety)
{
- if (Get_COVER_1_State(DryerDoor))
+ if (WHS_GPI_SW_FILTER_PRES())
+ {
+ //report and handle filter missing
+ AlarmHandlingSetAlarm(EVENT_TYPE__AIR_FILTER_NOT_INSTALLED, true);
+ mAirFilterAlarmState = true;
+ AirFilterAlarmState = true;
+ }
+ else
+ {
+ if (WHS_GPI_WASTE_FLOW_SWITCH() == false)
+ {
+ //report and handle air flow failure
+ //if blower if off handling is different
+ AlarmHandlingSetAlarm(EVENT_TYPE__NO_AIR_PRESSURE, true);
+ mAirFlowAlarmState = true;
+ AirFlowAlarmState = true;
+ }
+ else
+ {
+ if (Get_COVER_1_State(DryerDoor))
+ {
+ //report and handle dryer door open
+ AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, true);
+ mDrierDoorAlarmState = true;
+ DrierDoorAlarmState = true;
+ }
+ else
+ {
+ //if (WHS_GPI_WASTE_OVERFULL()) - cannot read this switch
+ {
+ //report and handle waste overflow
+ AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true);
+ mWasteOverflowAlarmState = true;
+ WasteOverflowAlarmState = true;
+ }
+ }
+ }
+ }
+
+/* if (Get_COVER_1_State(DryerDoor))
{
//report and handle dryer door open
AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, true);
@@ -103,6 +142,7 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
}
}
}
+ */
}
else if (AnyDispensersInSafety)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
index b796cae50..0e3bf95a4 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
@@ -106,6 +106,11 @@ uint32_t InternalWindingConfigMessage(JobSpool* request)
InternalWinderCfg.segmentoffsetpulses = request->segmentoffsetpulses;
InternalWinderCfg.spoolbackingrate = request->backingrate;
InternalWinderCfg.startoffsetpulses = request->startoffsetpulses;
+ if (request->has_limitswitchstartpointoffset)
+ {
+ InternalWinderCfg.startoffsetpulses += request->limitswitchstartpointoffset;
+ Report("limit switch start point offset",__FILE__,__LINE__,(int)(request->startoffsetpulses),RpWarning,(int)(request->limitswitchstartpointoffset), 0);
+ }
InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate;
InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*3;//request->rotationsperpassage;
if (request->rotationsperpassage > 6.1)
@@ -543,7 +548,7 @@ uint32_t WinderDistanceToSpoolEnded(uint32_t deviceID, uint32_t ReadValue)
}
uint32_t ScrewDTSCallback(uint32_t deviceID, uint32_t BusyFlag)
{
- REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback called");
+ Report("ScrewDTSCallback called", __FILE__,__LINE__,msec_millisecondCounter, RpMessage, ScrewSpeed, 0);
SafeRemoveControlCallback(ScrewDTSControlId, ScrewDTSCallback);
if (ScrewControlId != 0xFF)
@@ -566,7 +571,7 @@ uint32_t WinderDistanceToSpoolState(void )
REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState");
ScrewDTSControlId = AddControlCallback("screw DTS",ScrewDTSCallback, DTS_Time-WinderBackToBaseTime,TemplateDataReadCBFunction,0,0,0);
- REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback start");
+ Report("ScrewDTSCallback start", __FILE__,DTS_Time,msec_millisecondCounter, RpMessage, WinderBackToBaseTime, 0);
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index e7a333cc2..21211481e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -794,16 +794,6 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
}
uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams)
{
- /*
- FEEDER_MOTOR,
- DRYER_MOTOR,
- POOLER_MOTOR,
- WINDER_MOTOR,
- MotorControlConfig[Motor_i].m_params.Kd = MotorsControl[Pid_Id].derivativetime;
- MotorControlConfig[Motor_i].m_params.Kp = MotorsControl[Pid_Id].proportionalgain;
- MotorControlConfig[Motor_i].m_params.Ki = MotorsControl[Pid_Id].integraltime;
-
- */
if (ThreadParams == NULL)
{
return OK;
@@ -828,6 +818,7 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams)
MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi;
if(ThreadParams->winderd)
MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderd;
+ ReportWithPackageFilter(ThreadFilter,"Rockers activity",__FILE__,__LINE__,(int)Thread_Rockers_Bypass,RpWarning,(int)ThreadParams->bypassrockers,0);
if(ThreadParams->bypassrockers)
Thread_Rockers_Bypass = true;
@@ -850,14 +841,20 @@ uint32_t Release_Right_TFU_Tension()
{
Report("Release_Right_TFU_Tension",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_RDANCER,RpMessage,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].pulseperround/4,0);
RTFU_Up = false;
- status = MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].pulseperround/2, Release_Right_TFU_TensionCallback,1000);
+ status = MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].pulseperround/4* MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].microstep, Release_Right_TFU_TensionCallback,1000);
}
return status;
}
+uint32_t Adjust_Right_TFU_Tension_2nd_Callback(uint32_t MotorId, uint32_t ReadValue)
+{
+ Report("Adjust_Right_TFU_Tension_2ndCallback 4 more steps",__FILE__,__LINE__,MotorId,RpMessage,0,0);
+ return OK;
+}
uint32_t Adjust_Right_TFU_Tension_Callback(uint32_t MotorId, uint32_t ReadValue)
{
Report("Adjust_Right_TFU_Tension_Callback",__FILE__,__LINE__,MotorId,RpMessage,0,0);
+ MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize,4* MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].microstep, Release_Right_TFU_TensionCallback,1000);
RTFU_Up = true;
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt
index ac4f813eb..b53a7016f 100644
--- a/Software/Embedded_SW/Embedded/Software Release Notes.txt
+++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt
@@ -1,3 +1,33 @@
+Embedded SW Release note - Version 1.4.6.33 - Pack 2+
+=============================================================
+remove logs from I2C errors - show only summary.
+stop job, prevent job on internal heating.
+remove current alarm on entering idle.
+motor go to switch - improve accuracy.
+handle machine specific spool offset.
+add additional 4 steps for the RTFU raising in RML feeder tension.
+fix midtank warning bug (these alarm went missing).
+fix safety handling.
+
+I2C FIFO in code (not active yet).
+
+Embedded SW Release note - Version 1.4.6.32 - Pack 2+
+=============================================================
+remove file system semaphore protection.
+new paramete for motors for powerstep drivers.
+preparation for dispensers test (compilation flag).
+fix dispenser new pressure sensor reading.
+whs pid fixing, minimum and maximum limits, alarms.
+prevent job on VOC / air flow alarms
+dancers motors homing - update (clear) EEPROM
+skip HW Config storing if there is no change
+minimal fill-up level for new midtankks - 0.5 litres
+test for dancers PID on more than 1 millisecond - set by controloutputtype
+thread movement waits for LTFU tension preparation
+prevent job on missing spool - PP machines
+
+
+
Embedded SW Release note - Version 1.4.6.31 - Pack 2+
=============================================================
fix bug in SW update - test many short jobs.
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
index ced5e2677..629804170 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
@@ -417,6 +417,8 @@ uint32_t InitSequenceInitialBlowerActivation(void)
{
Control_Voltage_To_Blower(1); //stop the blower
Task_sleep (1000);
+ Trigger_WHS_MAX11614_Read_allADC();
+ Task_sleep (10);
if (ResetReason & SYSCTL_CAUSE_POR)
{
for (i=0;i<8;i++)