aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorMirta <mirta@twine-s.com>2020-11-23 16:13:53 +0200
committerMirta <mirta@twine-s.com>2020-11-23 16:13:53 +0200
commit91c007adced573e09b77ab4be4a5aba623a816cc (patch)
tree250221fc2def7d59f1393be8394f766faf576656 /Software/Embedded_SW
parent4e9af2b852eb3b9eecfa09e9bc76869558e183cb (diff)
parent50a3c0b857b4aa88a9e3970d69256f12b5b24eb8 (diff)
downloadTango-91c007adced573e09b77ab4be4a5aba623a816cc.tar.gz
Tango-91c007adced573e09b77ab4be4a5aba623a816cc.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/SWUpdate/FileSystem.c9
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c2
-rw-r--r--Software/Embedded_SW/Embedded/Communication/Connection.c21
-rw-r--r--Software/Embedded_SW/Embedded/Communication/Connection.h4
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h45
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c11
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/fan_click.c31
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c4
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h4
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c24
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c445
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h41
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c30
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.c1233
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.h119
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.c10
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h38
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.c294
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h19
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h40
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.c219
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h17
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.c1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.c276
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h39
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c12
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.c45
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.h0
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c2
-rw-r--r--Software/Embedded_SW/Embedded/Embedded.cfg10
-rw-r--r--Software/Embedded_SW/Embedded/Main.c54
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c45
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c21
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c12
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c14
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c18
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c93
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c46
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS.h3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c85
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IFS/ifs.c32
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c42
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c12
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c75
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c44
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c8
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c54
-rw-r--r--Software/Embedded_SW/Embedded/Software Release Notes.txt27
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c5
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c3
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h1
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c23
69 files changed, 3417 insertions, 392 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index 76c2fe9f2..77efa1cfd 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -653,7 +653,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
GetFilesRequest* request = get_files_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
GetFilesResponse response = GET_FILES_RESPONSE__INIT;
-
+ //struct tm RTC_time;
#define MAX_NUM_OF_FILES 20
DIR dir;
FILINFO* fno[MAX_NUM_OF_FILES];
@@ -727,6 +727,13 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
else
usnprintf(&FullPath[i], 50, "%s%s%s", request->path,"/", fno[i]->fname);
Data[i].fullpath = &FullPath[i][0];
+ /*RTC_time.tm_year=(fno[i]->fdate>>9)+1980;//populate the time struct (FAT start==1980, RTC.year==0)
+ RTC_time.tm_mon=(fno[i]->fdate>>5)&0x000F;
+ RTC_time.tm_mday=fno[i]->fdate&0x001F;
+ RTC_time.tm_hour=(fno[i]->ftime>>11)&0x001F;
+ RTC_time.tm_min=(fno[i]->ftime>>5)&0x003F;
+ RTC_time.tm_sec=(fno[i]->ftime<<1)&0x003E;*/
+
}
response.n_items = NumOfFiles;
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 fd6889185..8d2d9462a 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,5,2,0};
+TangoVersion_t _gTangoVersion = {1,5,3,0};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c b/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c
index 420e1dbc3..749152b2e 100644
--- a/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c
@@ -819,7 +819,7 @@ usnprintf(char * restrict s, size_t n, const char * restrict format, ...)
//
// Call vsnprintf to perform the conversion.
//
- ret = uvsnprintf(s, n, format, arg);
+ ret = vsnprintf(s, n, format, arg);
//
// End the varargs processing.
diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.c b/Software/Embedded_SW/Embedded/Communication/Connection.c
index af60541aa..5396938fd 100644
--- a/Software/Embedded_SW/Embedded/Communication/Connection.c
+++ b/Software/Embedded_SW/Embedded/Communication/Connection.c
@@ -53,9 +53,25 @@ void StopRecurringReports(void)
PowerUpStopReporting();
MachineUpdateStopReporting();
PowerDownStopReporting();
+ HomingStopReporting();
KeepAliveActive = false;
}
+struct tm LocalTime;//Months since January - [0,11]
+
+TimeAScii LocalTimeInAScii;
+
+void LocalTimeToAScii()//'D''D''/''M''M''/''Y''Y' Nedded for RFID
+{
+ LocalTimeInAScii.Byte.YearL = '0' + LocalTime.tm_year%10;
+ LocalTimeInAScii.Byte.YearH = '0' + (LocalTime.tm_year/10)%10;
+ LocalTimeInAScii.Byte.SlashM = '/';
+ LocalTimeInAScii.Byte.MonthL = '0' + (LocalTime.tm_mon)%10;
+ LocalTimeInAScii.Byte.MonthH = '0' + ((LocalTime.tm_mon)/10)%10;
+ LocalTimeInAScii.Byte.SlashD = '/';
+ LocalTimeInAScii.Byte.DayL = '0' + LocalTime.tm_mday%10;
+ LocalTimeInAScii.Byte.DayH = '0' + (LocalTime.tm_mday/10)%10;
+}
void ConnectionRequest(MessageContainer* requestContainer)
{
MessageContainer responseContainer;
@@ -83,6 +99,10 @@ void ConnectionRequest(MessageContainer* requestContainer)
if (request->has_unixtime)
utilsUpdateDateTime(request->unixtime);//(request->seconds);
+ ulocaltime(request->unixtime, &LocalTime);
+ LocalTime.tm_mon +=1;//since we get from ulocaltime Months since January - [0,11]
+
+ LocalTimeToAScii();
StopRecurringReports();
/*
extern TangoVersion_t _gTangoVersion;
@@ -140,6 +160,7 @@ void DisconnectionRequest(MessageContainer* requestContainer)
DiagnosticsStop();
JobStopReporting();
AlarmHandlingStop();
+ HomingStopReporting();
//UART_ResetBuffers();
//-------------------------------------------------------------------------------------------
uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.h b/Software/Embedded_SW/Embedded/Communication/Connection.h
index c0a31344f..c4f8c1df2 100644
--- a/Software/Embedded_SW/Embedded/Communication/Connection.h
+++ b/Software/Embedded_SW/Embedded/Communication/Connection.h
@@ -9,6 +9,8 @@
#ifndef COMMUNICATION_CONNECTION_H_
#define COMMUNICATION_CONNECTION_H_
+extern TimeAScii LocalTimeInAScii;
+
void ConnectionRequest(MessageContainer* requestContainer);
void DisconnectionRequest(MessageContainer* requestContainer);
void KeepAliveRequestFunc(MessageContainer* requestContainer);
@@ -17,5 +19,7 @@ void KeepAliveOneSecondCall(void);
extern int KeepAliveOneSecondCounter;
extern bool keepalivetest;
+extern struct tm LocalTime;
+extern TimeAScii LocalTimeInAScii;
#endif /* COMMUNICATION_CONNECTION_H_ */
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index 755e5a962..91b3df6bf 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -29,8 +29,12 @@
#define BTSR_NO_FEEDER_TFU
#define BTSR_NO_PULLER_TFU
#endif
-//#define USE_POWERSTEP01 -NA
+#define USE_RFID_STUB //stub only. to use it undef USE_RFID_LOGIC
+//#define RFID_READ_ONLY //
+#define USE_RFID_LOGIC //See more settings in RFID_Settings.h
+//#define USE_POWERSTEP01 -NA
+//#define LIGHT_COLORS
//#define EMC_FORCE_MOT_CLOCK_INTERNAL
//#define VAC_TEST
@@ -46,7 +50,7 @@ extern bool Special_Dispensers;
#define USE_OLD_HEAD_EEPROM
-//#define USE_RFID
+
//#define USE_VOC_BUZZER_ALARM
#define I2C_2_Data_Transfer_Rate_400kbps
@@ -58,6 +62,7 @@ extern bool Special_Dispensers;
#define NFC_HARDWARE_RESET 0x01
+#define REPEATED_INIT_FAILURE_LIMIT 10
//#define RUN_AS_MAIN_JIG//(TEST_POWERSTEP01) send GATECFG parameters to work without sending parameters via machine studio + ADC + ADCINT
#define ON 1
@@ -74,11 +79,12 @@ enum
VERIFIED = 255
};
-typedef enum Status_Enum
+typedef enum Status_Enum // don't change used for RFID
{
- S_NA,
- S_SUCCEEDED,
- S_FAILED
+ S_NA = 0,
+ S_SUCCEEDED = 1,
+ S_FAILED = -2,
+ S_NOTINUSE = -1
}STATUS_ENUM;
@@ -304,6 +310,23 @@ typedef enum
#define BIT30 0x40000000 //0x01 << 30
#define BIT31 0x80000000 //0x01 << 31
+//LocalTimeInAScii
+typedef union
+{
+ struct
+ {
+ uint8_t DayH; //0
+ uint8_t DayL; //1
+ uint8_t SlashD; //2
+ uint8_t MonthH; //3
+ uint8_t MonthL; //4
+ uint8_t SlashM; //5
+ uint8_t YearH; //6
+ uint8_t YearL; //7
+ }Byte;
+ uint8_t Buf[8];
+ uint64_t Uint64;
+}TimeAScii;
#define MAX_PWM_Command 100
@@ -319,6 +342,8 @@ typedef enum
THREAD_LOAD ,
}PANEL_BUTTON_OR_CRAT_ID;
+#define CART(readerID) ((PANEL_BUTTON_OR_CRAT_ID)(readerID+1))//readerID 0-2 , CRAT_ID 1-3
+
typedef enum
{
MODE_OFF = 0,
@@ -635,9 +660,15 @@ Supports diagnostic <id> (--diag_suppress, - pds)
#define HEAD6_PT100 TEMP_SENSE_AN_ENCLOSURETEMP3
#define MIXER_PT100 TEMP_SENSE_ANALOG_MIXCHIP_TEMP
+#ifdef LIGHT_COLORS
+#define LUBRICANT_DISPENSER 9
+#define CLEANER_DISPENSER 9
+#define MAX_DYE_DISPENSERS MAX_SYSTEM_DISPENSERS
+#else
#define LUBRICANT_DISPENSER 7
#define CLEANER_DISPENSER 6
-//#define AUTO_HOME_DISPENSERS
+#define MAX_DYE_DISPENSERS 6
+#endif
#define MAX_CARTRIDGES 3
typedef enum
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 00502d3ba..080522d0d 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
@@ -1133,6 +1133,17 @@ uint8_t Init_Machine_Leds()
return Status;
}
+bool Is_AnyCartridge_presence()
+{
+ bool IsAnyCartPresent = true;
+
+ #ifndef EVALUATION_BOARD
+ if(F3_CARTx_PRES_02_Direct & (BIT5 | BIT6 | BIT7))
+ IsAnyCartPresent = false;
+ #endif
+
+ return IsAnyCartPresent;
+}
bool Is_Cartridge_Present(PANEL_BUTTON_OR_CRAT_ID Cartridge)
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h
index e707a9b39..7342f9998 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h
@@ -261,6 +261,7 @@ uint8_t Pannel_Leds(PANEL_BUTTON_OR_CRAT_ID Pannel_Led_Id, OPERATION_MODE LED_Mo
uint8_t Init_Machine_Leds();
bool Is_Cartridge_Present(PANEL_BUTTON_OR_CRAT_ID Cartridge);
+bool Is_AnyCartridge_presence();
char Read_HW_Version(unsigned char *Brd_ID, unsigned char *Assy_ID);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h
index 394a69e1d..438d552ff 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h
@@ -75,5 +75,6 @@ uint8_t Head_Fan_Read_Tacho(bool Fan);
uint8_t Head_Read_Config_Reg();
uint8_t Head_Fan_config();
uint8_t Head_Fans_Init();
+uint8_t Head_Check_Fan_Controller_Type();
#endif /* DRIVERS_I2C_COMMUNICATION_HEAD_CARD_FAN_HEAD_FAN_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/fan_click.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/fan_click.c
index 728531488..ab68d6539 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/fan_click.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Fan/fan_click.c
@@ -26,7 +26,7 @@ uint8_t readbuffer[2];
uint8_t writebuffer[2];
-uint32_t I2C_HEAD_FAN_SLAVE_ADD = 0x5C;
+uint32_t I2C_HEAD_FAN_SLAVE_ADD = UNKNOWN;
FAN_CLICK_INFO Fan_Click_Info;
@@ -195,6 +195,34 @@ uint8_t Head_fan_click_revision()
return status;
}
+uint8_t Head_Check_Fan_Controller_Type()
+{
+ uint8_t status = ERROR;
+
+ Select_Main_Head_Mux_Channel();
+
+ if(I2C_HEAD_FAN_SLAVE_ADD == UNKNOWN)
+ {
+ I2C_HEAD_FAN_SLAVE_ADD = 0x5C;
+ status = Head_fan_click_productID();
+
+ if((Fan_Click_Info.Product_ID != 0x36) || (status != OK))
+ {
+ I2C_HEAD_FAN_SLAVE_ADD = 0x5E;
+ status = Head_fan_click_productID();
+ }
+
+ if((Fan_Click_Info.Product_ID != 0x36) || (status != OK))
+ {
+ I2C_HEAD_FAN_SLAVE_ADD = 0x00;
+ ReportWithPackageFilter(GeneralFilter,"unable to recognize the Head fan controller", __FILE__,__LINE__, status, RpMessage, 0, 0);
+ status = ERROR;
+ }
+ }
+ return status;
+}
+
+
uint8_t Head_Read_Config_Reg()
{
uint8_t status = OK;
@@ -296,6 +324,7 @@ uint8_t Head_Fans_Init()
{
uint8_t status = OK;
+ Head_Check_Fan_Controller_Type();
Head_Read_Config_Reg();
//Output is configured as a push-pull output
EMC2302_Write.Reg.PWM_Output_Config |= 0x3;//Bit0 Output PWM1, Bit2 Output PWM2, 0 open drain, 1 push-pull
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c
index 1bcf47fe8..c02683290 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.c
@@ -23,7 +23,9 @@
#define I2C_DELAY 3000
uint8_t Main_Mux_Flag = UNKNOWN;
-uint32_t I2C_BUSY_DELAY = 100;
+//uint32_t I2C_BUSY_DELAY = 100;
+uint32_t I2C_2_3_BUSY_DELAY = 3000; //I2C2_BASE, I2C3_BASE (3000 only for first communication changed to 100 in main)
+uint32_t I2C_4_BUSY_DELAY = 3000; //I2C4_BASE (RFID + Dispensers) (RFUD working only with 3000)
void InitI2C2()
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h
index 56c386aa8..eb5ea03de 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C.h
@@ -11,6 +11,10 @@
extern uint32_t Arb_Loss_Count;
extern uint32_t I2C_BUSY_DELAY;
+
+extern uint32_t I2C_2_3_BUSY_DELAY; //I2C2_BASE, I2C3_BASE
+extern uint32_t I2C_4_BUSY_DELAY; //I2C4_BASE (RFID + Dispensers)
+
//#define I2C_BUSY_DELAY 100//15000
uint32_t I2C_control(uint32_t I2C_ID, uint32_t Slave_Add, bool RW,uint32_t Byte2Write );
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 2dd26e98c..147778d05 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_fifo.h"
#include "i2c.h"
uint32_t LastReadI2C_BASE; unsigned char LastReadaddr; unsigned char* LastReaddata; unsigned int LastReadlen;
@@ -44,6 +44,17 @@ uint32_t I2C_WriteBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* dat
{
uint32_t status = OK;
+ uint32_t I2C_BUSY_DELAY;
+
+ if(I2C_BASE == I2C4_BASE)
+ {
+ I2C_BUSY_DELAY = I2C_4_BUSY_DELAY;
+ }
+ else
+ {
+ I2C_BUSY_DELAY = I2C_2_3_BUSY_DELAY;
+ }
+
if (I2CMasterBusy(I2C_BASE))
{
ReportWithPackageFilter(CommFilter,"I2C_WriteBuff busy", __FILE__,__LINE__,status, RpMessage, Task_self(), 0);
@@ -98,6 +109,17 @@ uint32_t I2C_ReadBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data
{
uint32_t status = OK;
+ uint32_t I2C_BUSY_DELAY;
+
+ if(I2C_BASE == I2C4_BASE)
+ {
+ I2C_BUSY_DELAY = I2C_4_BUSY_DELAY;
+ }
+ else
+ {
+ I2C_BUSY_DELAY = I2C_2_3_BUSY_DELAY;
+ }
+
if (I2CMasterBusy(I2C_BASE))
{
ReportWithPackageFilter(CommFilter,"I2C_ReadBuff busy", __FILE__,__LINE__, status, RpMessage, Task_self(), 0);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c
new file mode 100644
index 000000000..79d31393b
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c
@@ -0,0 +1,445 @@
+/*
+ * I2C_RFID_Disp_Task.c
+ *
+ * Created on: Oct 23, 2019
+ * Author: shlomo
+ *
+ * Task for I2C4_BASE
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "include.h"
+#include "inc/hw_memmap.h"
+
+#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+#include <Drivers/I2C_Communication/RFID_NFC/NFC.h>
+
+#include "drivers/I2C_Communication/Dispenser_Card/I2C_Dispenser_Card_Mux.h"
+#include "drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h"
+
+
+Task_Handle DispRFID_Task_Handle;
+Mailbox_Handle RFID_ReadingMsgQ = NULL;
+typedef enum
+{
+ //RFID
+// RFID_ReaderAvailability,
+ RFID_Initialization,
+ RFID_PrepareForDiscovery,
+ RFID_Indetification,
+ RFID_GetUid,
+// RFID_CheckPassword,
+ RFID_CheckValidity,
+ RFID_CheckUpdateCounter,
+ RFID_CheckHashValue,
+// RFID_CheckUpdateBlocked,
+ RFID_ReadData,
+ RFID_CheckCRC,
+// RFID_WriteValue,
+ RFID_UpdateData,
+ RFID_UpdateCheckSum,
+
+ RFID_Update_Ink_Fill,
+ RFID_Update_Ink_Used,
+ RFID_Update_Ink_Empty,
+ RFID_Update_Ink_Filled_MachineID,
+
+ RFID_Update_Waste_Fill,
+ RFID_Update_Waste_Full,
+ RFID_Update_Waste_Empty,
+ RFID_Update_Waste_Filled_MachineID,
+
+ RFID_UpdateWCounter,
+ RFID_UpdateCRC,
+
+ RFID_DisconnectComm,
+ RFID_TestTask,
+ RFID_End,
+ //-----------------------------
+ //Dispensers
+ DispenserReadData,
+ Dispensers_End,
+
+}RFID_ReadingMessages;
+
+typedef struct RFID_ReadingMessage{
+ RFID_ReadingMessages messageId;
+ uint32_t TargetID; //readerID / dispenserId
+ uint32_t parameter1;
+}RFID_ReadingMessageStruc;
+
+void Trigger_RFID_Init(/*RFID_READER_ID readerID*/)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Initialization;
+ //RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_Prepare(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_PrepareForDiscovery;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_Discovery(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Indetification;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_GetUid(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_GetUid;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_ReadData(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_ReadData;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_CheckCRC(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_CheckCRC;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_CheckHash(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_CheckHashValue;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_CheckValid(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_CheckValidity;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_CheckCounter(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_CheckUpdateCounter;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+
+
+void Trigger_RFID_UpdateInkFill(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Ink_Fill;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateInkUsed(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Ink_Used;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateInkEmpty(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Ink_Empty;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateInkMachineID(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Ink_Filled_MachineID;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_TestTask(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_TestTask;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateWasteFill(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Waste_Fill;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateWasteFull(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Waste_Full;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateWasteEmpty(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Waste_Empty;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateWasteMachineID(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_Update_Waste_Filled_MachineID;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateWCounter(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_UpdateWCounter;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+void Trigger_RFID_UpdateCRC(RFID_READER_ID readerID)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = RFID_UpdateCRC;
+ RFID_ReadingMessage.TargetID = readerID;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
+//----------------------------------------------------------------
+void Trigger_Dispenser_ReadData(int dispenserId)
+{
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+
+ RFID_ReadingMessage.messageId = DispenserReadData;
+ RFID_ReadingMessage.TargetID = dispenserId;
+ if (RFID_ReadingMsgQ != NULL)
+ Mailbox_post(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+//------------------------------------------------------------------
+void DispRFID_Task(UArg arg0, UArg arg1)
+{
+ RFID_READER_ID readerID;
+ uint8_t Dispenser_ID;
+
+ RFID_ReadingMessageStruc RFID_ReadingMessage;
+ //RFID_ReadingMsgQ = Mailbox_create(sizeof(RFID_ReadingMessageStruc), 10, NULL,NULL);
+ DispRFID_Task_Handle = Task_self();
+
+ while(1)
+ {
+ Mailbox_pend(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_WAIT_FOREVER);
+
+ /* select the correct I2C bus */
+ if (RFID_ReadingMessage.messageId < RFID_End)
+ {
+ readerID = (RFID_READER_ID)(RFID_ReadingMessage.TargetID);
+ SetReader(readerID);
+ }
+ else if (RFID_ReadingMessage.messageId < Dispensers_End)
+ {
+ Dispenser_ID = (uint8_t)(RFID_ReadingMessage.TargetID);
+ Select_Dispenser_Mux_Channel(Dispenser_ID);//
+ }
+ else
+ {
+ //TBWhen connecting to few targets in the message if used need to open few channels in the mux
+ }
+
+ switch (RFID_ReadingMessage.messageId)
+ {
+ // --- RFID ---
+ case RFID_Initialization:
+ Init_IFS();
+ break;
+ case RFID_PrepareForDiscovery:
+ TagStage[readerID] = Tag_PrepareForDiscovery;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Indetification:
+ TagStage[readerID] = Tag_Indetification;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_GetUid:
+ TagStage[readerID] = Tag_GetUid;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_ReadData:
+ TagStage[readerID] = Tag_ReadValue;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_CheckCRC:
+ TagStage[readerID] = Tag_CheckCRC;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_CheckHashValue:
+ TagStage[readerID] = Tag_CheckHashValue;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_CheckValidity:
+ TagStage[readerID] = Tag_CheckValidity;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_CheckUpdateCounter:
+ TagStage[readerID] = Tag_CheckUpdateCounter;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_UpdateData:
+ TagStage[readerID] = Tag_UpdateValue;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Ink_Fill:
+ TagStage[readerID] = Tag_Update_Ink_Fill;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Ink_Used:
+ TagStage[readerID] = Tag_Update_Ink_Used;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Ink_Empty:
+ TagStage[readerID] = Tag_Update_Ink_Empty;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Ink_Filled_MachineID:
+ TagStage[readerID] = Tag_UpdateInkMachineID;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Waste_Fill:
+ TagStage[readerID] = Tag_Update_Waste_Fill;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Waste_Full:
+ TagStage[readerID] = Tag_Update_Waste_Full;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Waste_Empty:
+ TagStage[readerID] = Tag_Update_Waste_Empty;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_Update_Waste_Filled_MachineID:
+ TagStage[readerID] = Tag_UpdateWasteMachineID;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_UpdateWCounter:
+ TagStage[readerID] = Tag_UpdateWCounter;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_UpdateCRC:
+ TagStage[readerID] = Tag_UpdateCRC;
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ break;
+ case RFID_TestTask:
+ TagStage[readerID] = Tag_PrepareForDiscovery;
+ RFIDTagComm_StateMachine(readerID, Auto);
+ break;
+
+ // --- Dispensers ---
+ case DispenserReadData:
+ Dispenser_EEPROM_Read_Data(Dispenser_ID);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void I2C_DispRFIDTask_Init(void)
+{
+ Task_Params DispRFID_TaskParams;
+
+ RFID_ReadingMsgQ = Mailbox_create(sizeof(RFID_ReadingMessageStruc), 10, NULL,NULL);
+ Task_Params_init(&DispRFID_TaskParams);
+ DispRFID_TaskParams.instance->name = "RFID";
+ DispRFID_TaskParams.priority = 10;
+ DispRFID_TaskParams.stackSize = 4096;
+ DispRFID_Task_Handle = Task_create((Task_FuncPtr)DispRFID_Task, &DispRFID_TaskParams, NULL);
+}
+
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h
new file mode 100644
index 000000000..5be55ce11
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h
@@ -0,0 +1,41 @@
+/*
+ * I2C_RFID_Disp_Task.h
+ *
+ * Created on: 2 Nov 2020
+ * Author: avi
+ */
+
+#ifndef DRIVERS_RFID_TASK_RFID_TASK_H_
+#define DRIVERS_RFID_TASK_RFID_TASK_H_
+
+void Trigger_RFID_Init();
+void Trigger_RFID_Prepare(RFID_READER_ID readerID);
+void Trigger_RFID_Discovery(RFID_READER_ID readerID);
+void Trigger_RFID_GetUid(RFID_READER_ID readerID);
+void Trigger_RFID_ReadData(RFID_READER_ID readerID);
+void Trigger_RFID_CheckHash(RFID_READER_ID readerID);
+
+void Trigger_RFID_CheckValid(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateInkFill(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateInkUsed(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateInkEmpty(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateInkMachineID(RFID_READER_ID readerID);
+
+void Trigger_RFID_UpdateWasteFill(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateWasteFull(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateWasteEmpty(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateWasteMachineID(RFID_READER_ID readerID);
+void Trigger_RFID_CheckCounter(RFID_READER_ID readerID);
+void Trigger_RFID_TestTask(RFID_READER_ID readerID);
+void I2C_DispRFIDTask_Init(void);
+
+
+void Trigger_RFID_UpdateWCounter(RFID_READER_ID readerID);
+void Trigger_RFID_UpdateCRC(RFID_READER_ID readerID);
+
+
+void Trigger_Dispenser_ReadData(int dispenserId);
+
+
+
+#endif /* DRIVERS_RFID_TASK_RFID_TASK_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
index ea804fc04..cb0b002fa 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
@@ -56,7 +56,7 @@ typedef enum
HeadArcPressureAction,
HeadValveAction,
- DispenserReadData,
+ //DispenserReadData, // I2C4 moved to RFID task
/* enum for WHS :*/
WHS_start,
@@ -271,17 +271,17 @@ void Trigger_Head_MixerValve(int direction)
return;
}
-void Trigger_Dispenser_ReadData(int dispenserId)
-{
- I2C_ReadingMessageStruc I2C_ReadingMessage;
- //uint8_t Midtank_i;
-
- I2C_ReadingMessage.messageId = DispenserReadData;
- I2C_ReadingMessage.parameter = dispenserId;
- if (I2C_ReadingMsgQ != NULL)
- Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT);
- return;
-}
+//void Trigger_Dispenser_ReadData(int dispenserId) // I2C4 moved to RFID task
+//{
+// I2C_ReadingMessageStruc I2C_ReadingMessage;
+// //uint8_t Midtank_i;
+//
+// I2C_ReadingMessage.messageId = DispenserReadData;
+// I2C_ReadingMessage.parameter = dispenserId;
+// if (I2C_ReadingMsgQ != NULL)
+// Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT);
+// return;
+//}
void Trigger_HeaterWriting(void)
{
@@ -742,9 +742,9 @@ void I2C_ReadingTask(UArg arg0, UArg arg1)
case Head_ACT_ON_Writing:
Head_Write_IO_Reg(0x46,HIGH);//ACT ON
break;
- case DispenserReadData:
- Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter);
- break;
+// case DispenserReadData: // I2C4 moved to RFID task
+// Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter);
+// break;
case WHS_PT100_Reading:
for (Sensor_i = WHS_PT100_1_0X80_0; Sensor_i <= WHS_PT100_4_0X82_1; Sensor_i++)
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
index 387a8f692..59f988b44 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
@@ -62,6 +62,6 @@ void Trigger_Head_Magnet(int direction);
void Trigger_Head_MixerValve(int direction);
void Trigger_Head_PressureArc(bool Enable_Disable);
-void Trigger_Dispenser_ReadData(int dispenserId);
+//void Trigger_Dispenser_ReadData(int dispenserId);
#endif /* DRIVERS_I2C_COMMUNICATION_I2C_TASK_H_ */
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 4057b4912..c04cabc4a 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
@@ -10,12 +10,12 @@
#include <stdbool.h>
#include <string.h> //memset
#include <DataDef.h>
+#include <Utilities/delay.h>
#include "driverlib/sysctl.h"
#include "driverlib/i2c.h"
#include <Drivers/I2C_Communication/I2C.h>
#include "drivers/FPGA/FPGA_Comm.h"
#include <Drivers/I2C_Communication/RFID_NFC/PN7150/PN7150.h>
-#include <Utilities/delay.h>
#include "I2C_IFS_Mux.h"
#include "NFC_MainBaord.h"
#include "Modules/Control/Control.h"
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.c
index a1139591d..ef38f2b24 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.c
@@ -10,17 +10,31 @@
#include <string.h> //memset
#include <DataDef.h>
#include "datadef.h"
+#include <Utilities/delay.h>
#include "drivers/I2C_Communication/I2C.h"
#include "drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h"
-#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+
+#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include <Drivers/I2C_Communication/RFID_NFC/NFC.h>
-#include <Utilities/delay.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h>
+#include <Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h>
+#include <Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h>
+
+uint8_t RFID_Discovery_TimeOut[3] = {RFID_Discovery_TimeOut_Limit,RFID_Discovery_TimeOut_Limit,RFID_Discovery_TimeOut_Limit};
+bool RequestForDiscovery[3] = {false,false,false};//request from WHS logic
+bool DiscoverRFIDTagEvery100mSec[3] = {false,false,false};
-RFID_TAG_State_Machine TagStage = Tag_Idle;
+RFID_TAG_State_Machine TagStage[3] = {Tag_Idle,Tag_Idle,Tag_Idle};
NxpNci_RfIntf_t tagInfo;
+RFID_STATUS RFID_Status_Words[Max_Readers];
+
bool Init_RFID_Reader(RFID_READER_ID Reader_ID)//0-2
{
static bool firstTime = true;
@@ -45,7 +59,7 @@ bool Init_RFID_Reader(RFID_READER_ID Reader_ID)//0-2
}
-uint8_t RFID_Pint_Errors(uint8_t readerID, RFID_RETURN_CODE Err_Code)
+uint8_t RFID_Print_Errors(uint8_t readerID, RFID_RETURN_CODE Err_Code)
{
uint8_t Status = ERROR;
@@ -124,7 +138,7 @@ uint8_t Connect_to_RFID_Reder(uint8_t readerID)//2
{
RFIDRetValue = getUID( readerID, &tagInfo, uid );
RFID_Status = RFIDRetValue;
- Status |= RFID_Pint_Errors(readerID, RFIDRetValue);
+ Status |= RFID_Print_Errors(readerID, RFIDRetValue);
/*
//password authentication
PwdRetVal = checkPwd( newPwd, newPACK );
@@ -163,106 +177,896 @@ uint8_t Connect_to_RFID_Reder(uint8_t readerID)//2
return Status;
}
-RFID_RETURN_CODE TagWriteData()
+
+NFC_Tag NFC_Tag_R[Max_Readers];//read
+NFC_Tag NFC_Tag_W[Max_Readers];//write (for testing / stub)
+NFC_Tag NFC_Tag_U[Max_Readers];//read with updates
+
+//NFCTag_t NFC_Tag_W_Struct;
+
+
+RFID_RETURN_CODE TagWriteData(RFID_READER_ID readerID)
{
+ uint8_t index = 0;
+ uint32_t dummy = 0;
+ uint32_t Tuint32 = 0;
+ //uint16_t Tuint16 = 0;
+ //uint8_t Tuint8 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+
+ //NxpNci_RfIntf_t TagInfo;
+
+ uint8_t tagMemory[256];
+
+// uint8_t Serial[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G'};
+
+ //RFID_READER_ID readerID = (RFID_READER_ID)(Active_RFID_Reader -1);
+
+// for(index = 0; index < sizeof(Serial); index++)
+// {
+// Serial[index] = 'a'+index;
+// }
+///*
+// for(index = 0; index < sizeof(NFC_Tag_W_Struct.CartSN); index++)
+// {
+// NFC_Tag_W_Struct.CartSN[index] = 'M'+index;
+// }
+//
+// RFIDRetValue = WriteValue( readerID, &TagInfo, NFC_Tag_W_Struct.CartSN, 0, dummy );
+// */
+// /*
+// for(index = 0; index < sizeof(NFC_Tag_W[readerID].Struct.CartSN); index++)
+// {
+// NFC_Tag_W[readerID].Struct.CartSN[index] = 'c'+index;
+// }
+//
+// RFIDRetValue = WriteValue( readerID, &TagInfo, NFC_Tag_W[readerID].Struct.CartSN, 0, dummy );
+// */
+// RFIDRetValue = WriteValue( readerID, &tagInfo, Serial, 0, dummy );
+
+ //Serial
+ strcpy(NFC_Tag_W[readerID].Struct.Serial, "123456789abcdefg");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.Serial, 0, dummy );
+
+ //factory id
+ strcpy(NFC_Tag_W[readerID].Struct.factoryID, "FID");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.factoryID, 1, dummy );
+/*
+ //////////////////
+ //uint8_t fillingSystem[2] = {0xab, 0xcd};
+ uint16_t fillingSystem = 50;//50 -> write 0x3035 ASCII 35 00
+ //filling system
+ //RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 2, fillingSystem );
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 2, fillingSystem );
+*/
+ //filling system
+ NFC_Tag_W[readerID].Struct.fillingSystem = 50;
+ Tuint32 = NFC_Tag_W[readerID].Struct.fillingSystem;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 2, Tuint32 );
+ //work order
+ strcpy(NFC_Tag_W[readerID].Struct.workOrder, "WORK-ORDER");
+
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.workOrder, 3, dummy );
+ //color name
+ strcpy(NFC_Tag_W[readerID].Struct.colorName, "-COLOR-NAME-");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.colorName, 4, dummy );
+
+ //category
+ strcpy(NFC_Tag_W[readerID].Struct.catagory, "CY");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.catagory, 5, dummy );
+
+ //type
+ NFC_Tag_W[readerID].Struct.type = 4321;
+ Tuint32 = NFC_Tag_W[readerID].Struct.type;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 6, Tuint32 );
+
+ delayms(2);
+
+ //cartSize
+ NFC_Tag_W[readerID].Struct.cartSize = 8765;
+ Tuint32 = NFC_Tag_W[readerID].Struct.cartSize;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 7, Tuint32 );
+
+ delayms(2);
+
+ /////////////////
+
+ //inkVolume
+ NFC_Tag_W[readerID].Struct.inkVolume = 9696;
+ Tuint32 = NFC_Tag_W[readerID].Struct.inkVolume;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 8, Tuint32 );
+
+ delayms(2);
+ //inkBatch
+
+ strcpy(NFC_Tag_W[readerID].Struct.inkBatch, "-inkBatch-");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.inkBatch, 9, dummy );
+ delayms(2);
+ //inkMfgDate
+ strcpy(NFC_Tag_W[readerID].Struct.inkMfgDate, "inkMfgDa");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.inkMfgDate, 10, dummy );
+ delayms(2);
+ //inkEolDate
+ strcpy(NFC_Tag_W[readerID].Struct.inkEolDate, "31/12/21");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.inkEolDate, 11, dummy );
+ delayms(2);
+ //CartFillDate
+ strcpy(NFC_Tag_W[readerID].Struct.CartFillDate, "CarFDate");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.CartFillDate, 12, dummy );
+ delayms(2);
+ //WasteFillDate
+ strcpy(NFC_Tag_W[readerID].Struct.WasteFillDate, "WastDate");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.WasteFillDate, 13, dummy );
+ delayms(2);
+ //Misc
+ NFC_Tag_W[readerID].Struct.Misc = 1234;
+ Tuint32 = NFC_Tag_W[readerID].Struct.Misc;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 14, Tuint32 );
+ delayms(2);
+ //pluginCounter
+ NFC_Tag_W[readerID].Struct.pluginCounter = 56;
+ Tuint32 = NFC_Tag_W[readerID].Struct.pluginCounter;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 15, Tuint32 );
+ delayms(2);
+ //inkFill
+ NFC_Tag_W[readerID].Struct.inkFill = 7;
+ Tuint32 = NFC_Tag_W[readerID].Struct.inkFill;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 16, Tuint32 );
+ delayms(2);
+ //inkUsed
+ NFC_Tag_W[readerID].Struct.inkUsed = 8;
+ Tuint32 = NFC_Tag_W[readerID].Struct.inkUsed;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 17, Tuint32 );
+ delayms(2);
+ //inkEmpty
+ NFC_Tag_W[readerID].Struct.inkEmpty = 9;
+ Tuint32 = NFC_Tag_W[readerID].Struct.inkEmpty;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 18, Tuint32 );
+ //wasteEmpty
+ NFC_Tag_W[readerID].Struct.wasteEmpty = 1;
+ Tuint32 = NFC_Tag_W[readerID].Struct.wasteEmpty;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 19, Tuint32 );
+ //wasteFilling
+ NFC_Tag_W[readerID].Struct.wasteFilling = 2;
+ Tuint32 = NFC_Tag_W[readerID].Struct.wasteFilling;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 20, Tuint32 );
+ //wasteFull
+ NFC_Tag_W[readerID].Struct.wasteFull = 3;
+ Tuint32 = NFC_Tag_W[readerID].Struct.wasteFull;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 21, Tuint32 );
+ //blocked
+ NFC_Tag_W[readerID].Struct.blocked = TAG_NOT_BLOCKED;
+ Tuint32 = NFC_Tag_W[readerID].Struct.blocked;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 22, Tuint32 );
+ //fail
+ NFC_Tag_W[readerID].Struct.fail = 5;
+ Tuint32 = NFC_Tag_W[readerID].Struct.fail;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 23, Tuint32 );
+ //wasteCounter
+ NFC_Tag_W[readerID].Struct.wasteCounter = 0;
+ Tuint32 = NFC_Tag_W[readerID].Struct.wasteCounter;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 24, Tuint32 );
+ //MachineIdInl
+ strcpy(NFC_Tag_W[readerID].Struct.MachineIdInl, "MachineIdInl1234");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.MachineIdInl, 25, dummy );
+ //WasteFillDate
+ strcpy(NFC_Tag_W[readerID].Struct.MachineIdWst, "MachineIdWst1234");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.MachineIdWst, 26, dummy );
+ //WasteFillDate
+ strcpy(NFC_Tag_W[readerID].Struct.reserved, "reserved12345");
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.reserved, 27, dummy );
+ //counter
+ NFC_Tag_W[readerID].Struct.counter = 1;//5678;
+ Tuint32 = NFC_Tag_W[readerID].Struct.counter;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 28, Tuint32 );
+ //tagValid
+ NFC_Tag_W[readerID].Struct.tagValid = TAG_VALID;
+ Tuint32 = NFC_Tag_W[readerID].Struct.tagValid;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 29, Tuint32 );
+
+ //hash
+ calcHash( tagInfo.Info.NFC_VPP.ID, sizeof(tagInfo.Info.NFC_VPP.ID), NFC_Tag_W[readerID].Struct.HashValue );//read the UID, calculate Hash and write the hash
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_W[readerID].Struct.HashValue, 30, dummy );
+
+ //crc
+ //crc_ccitt_init();
+ NFC_Tag_W[readerID].Struct.Checksum_CRC16 = crc_ccitt_update(NFC_Tag_W[readerID].Buf,(sizeof(NFC_Tag_W[readerID].Buf) - sizeof(NFC_Tag_W[readerID].Struct.Checksum_CRC16)));//calculate the crc without tag id and without crc fields
+ Tuint32 = NFC_Tag_W[readerID].Struct.Checksum_CRC16;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 31, Tuint32 );
+
return SUCCESS;
}
+
+//RFID_RETURN_CODE Read_Tag_All_Data()
+//{
+//
+// // uint8_t index = 0;
+// uint32_t dummy = 0;
+// //uint8_t Tuint8 = 0;
+// //uint16_t Tuint16 = 0;
+// uint32_t Tuint32 = 0;
+// //uint64_t Tuint64 = 0;
+// //uint8_t Tuint8_buf10[10] = 0;
+// RFID_RETURN_CODE RFIDRetValue;
+//
+// //NxpNci_RfIntf_t TagInfo;
+//
+// uint8_t tagMemory[1024];
+//
+// RFID_READER_ID readerID = (RFID_READER_ID)(Active_RFID_Reader -1);
+//
+// //serial
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.Serial, 0, &dummy );
+// //factory id
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.factoryID, 1, &dummy );
+// //filling system
+// //RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 2, NFC_Tag_R[readerID].Struct.fillingSystem );
+// //RFIDRetValue = ReadValue( readerID, &tagInfo, &NFC_Tag_R[readerID].Struct.fillingSystem, 2, &dummy );//OK read hex (for writubg 50 read 0335 ASCII 0)
+// /*NFC_Tag_R[readerID].Struct.fillingSystem = ReadValue( readerID, &tagInfo, tagMemory, 2, &dummy );*/
+// //RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 2, NFC_Tag_R[readerID].Struct.fillingSystem );
+// /* working ok*/
+//
+//
+// Tuint32=0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 2, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.fillingSystem = (uint16_t)Tuint32;
+//
+//
+// //work order
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.workOrder, 3, &dummy );
+// //color name
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.colorName, 4, &dummy );
+// //category
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.catagory, 5, &dummy );
+// //type
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 6, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.type = Tuint32;
+// //cartSize
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 7, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.cartSize = Tuint32;
+// //inkVolume
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 8, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.inkVolume = Tuint32;
+// //inkBatch
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.inkBatch, 9, &dummy );
+// //inkMfgDate
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.inkMfgDate, 10, &dummy );
+// //inkEolDate
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.inkEolDate, 11, &dummy );
+// //CartFillDate
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.CartFillDate, 12, &dummy );
+// //WasteFillDate
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.WasteFillDate, 13, &dummy );
+//
+//
+// //Misc
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 14, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.Misc = Tuint32;
+// //pluginCounter
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 15, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.pluginCounter = (uint16_t)Tuint32;
+//
+// //inkFill
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 16, &Tuint32 );//FAIL
+// NFC_Tag_R[readerID].Struct.inkFill = (uint8_t)Tuint32;
+//
+// //inkUsed
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 17, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.inkUsed = (uint8_t)Tuint32;
+//
+// //inkEmpty
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 18, &Tuint32 );//FAIL
+// NFC_Tag_R[readerID].Struct.inkEmpty = (uint8_t)Tuint32;
+// //wasteEmpty
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 19, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.wasteEmpty = (uint8_t)Tuint32;
+// //wasteFilling
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 20, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.wasteFilling = (uint8_t)Tuint32;
+// //wasteFull
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 21, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.wasteFull = (uint8_t)Tuint32;
+// //blocked
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 22, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.blocked = (uint8_t)Tuint32;
+// //fail
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 23, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.fail = (uint8_t)Tuint32;
+// //wasteCounter
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 24, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.wasteCounter = (uint16_t)Tuint32;
+// //MachineIdInl
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.MachineIdInl, 25, &dummy );
+// //MachineIdWst
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.MachineIdWst, 26, &dummy );
+// //reserved
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.reserved, 27, &dummy );
+// //counter
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 28, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.counter = Tuint32;
+// //tagValid
+// Tuint32 = 0;
+// RFIDRetValue = ReadValue( readerID, &tagInfo, tagMemory, 29, &Tuint32 );
+// NFC_Tag_R[readerID].Struct.tagValid = (uint8_t)Tuint32;
+// //hash
+// RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.HashValue, 30, &dummy );
+//
+//
+// //////////////
+//
+// return RFIDRetValue;
+//
+//}
+
+
+//--------------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------------
+/*
+typedef union
+{
+ uint8_t Byte[4];
+ uint32_t Word;
+}Word_to_Bytes;
+*/
+//typedef union
+//{
+// uint8_t Byte[4];
+// uint32_t Short;
+//}Short_to_Bytes;
+
+#define TagMaxFieldLength 16 // why 256? max is 16
+
+#define Uartsize sizeof(NFC_Tag)
+
+
+void Init_NFC_Tag_Union(RFID_READER_ID readerID)
+{
+ uint8_t i = 0;
+
+ memset(NFC_Tag_R[readerID].Buf, 0, Uartsize);
+
+ for(i=0;i<8;i++)//Copy UID
+ {
+ NFC_Tag_R[readerID].Struct.tagId[i] = tagInfo.Info.NFC_VPP.ID[i];
+ }
+
+ //Padding fields:
+ NFC_Tag_R[readerID].Struct.Padding_1_8bit = NFC_Tag_R[readerID].Struct.Paddind_2_8bit = NFC_Tag_R[readerID].Struct.Paddind_3_8bit = 0xFF;
+ NFC_Tag_R[readerID].Struct.Paddind_1_16bit = NFC_Tag_R[readerID].Struct.Paddind_2_16bit = NFC_Tag_R[readerID].Struct.Paddind_3_16bit = NFC_Tag_R[readerID].Struct.Paddind_4_16bit = 0xFFFF;
+
+}
+
+RFID_RETURN_CODE Read_Tag_All_Data()
+{
+ uint32_t dummy = 0;
+ RFID_RETURN_CODE RFIDRetValue = SUCCESS;
+ uint8_t tagMemory[256];
+ uint32_t valueNum = 0;
+ uint8_t value[TagMaxFieldLength];
+ uint32_t BufferIndex = 8;//start with Serial field
+ uint8_t valueIndex, i;
+ Word_to_Bytes Word2Bytes;
+
+ RFID_READER_ID readerID = (RFID_READER_ID)(Active_RFID_Reader -1);
+
+ Init_NFC_Tag_Union(readerID);
+
+ for(valueIndex = 0; valueIndex < NUMBER_OF_FIELDS; valueIndex++)
+ {
+ delayms(5);// need to check without it sometimes read wrong values (0xFF... in Serial, MachineIdInl at MachineIdWst)
+
+ while((NFC_Tag_R[readerID].Buf[BufferIndex] != 0x00) && (BufferIndex < (Uartsize-1)))
+ {
+ NFC_Tag_R[readerID].Buf[BufferIndex] = 0; // reset the padding fields in order to calculate the crc
+ BufferIndex++; //Skip padding fields
+ }
+
+ if (Fields[valueIndex].isNum == true )//Number
+ {
+ valueNum = 0;
+ RFIDRetValue |= ReadValue( readerID, &tagInfo, tagMemory, valueIndex, &valueNum );
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFIDRetValue = SUCCESS;
+ delayms(5);
+ RFIDRetValue |= ReadValue( readerID, &tagInfo, tagMemory, valueIndex, &valueNum );//try again
+ }
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFIDRetValue = SUCCESS;
+ delayms(5);
+ RFIDRetValue |= ReadValue( readerID, &tagInfo, tagMemory, valueIndex, &valueNum );//try again
+ }
+
+ Word2Bytes.Word = valueNum;
+
+ if(Fields[valueIndex].fieldLength == 1)
+ {
+ NFC_Tag_R[readerID].Buf[BufferIndex] = Word2Bytes.Byte[0];
+ BufferIndex+=1;
+ }
+ else if(Fields[valueIndex].fieldLength == 2)
+ {
+ for ( i = 0; i < 2; i++)
+ {
+ NFC_Tag_R[readerID].Buf[BufferIndex+i] = Word2Bytes.Byte[i];
+ }
+ BufferIndex+=2;
+ }
+ else if(Fields[valueIndex].fieldLength == 4)
+ {
+ for ( i = 0; i < 4; i++)
+ {
+ NFC_Tag_R[readerID].Buf[BufferIndex+i] = Word2Bytes.Byte[i];
+ }
+ BufferIndex+=4;
+ }
+ }
+ else// ASCI text
+ {
+ RFIDRetValue |= ReadValue( readerID, &tagInfo, value, valueIndex, &dummy );
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFIDRetValue = SUCCESS;
+ delayms(5);
+ RFIDRetValue |= ReadValue( readerID, &tagInfo, value, valueIndex, &dummy );//try again
+ }
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFIDRetValue = SUCCESS;
+ delayms(5);
+ RFIDRetValue |= ReadValue( readerID, &tagInfo, value, valueIndex, &dummy );//try again
+ }
+
+ for ( i = 0; i < Fields[valueIndex].fieldLength; i++)
+ {
+ NFC_Tag_R[readerID].Buf[BufferIndex] = value[i];
+ BufferIndex+=1;
+ }
+ }
+ }
+
+ return RFIDRetValue;
+}
+
+//--------------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------------
+
RFID_RETURN_CODE TagReadData()
{
+ uint32_t dummy = 0;
+ RFID_RETURN_CODE RFIDRetValue;
- return SUCCESS;
+ RFID_READER_ID readerID = (RFID_READER_ID)(Active_RFID_Reader -1);
+
+ RFIDRetValue = ReadValue( readerID, &tagInfo, NFC_Tag_R[readerID].Struct.Serial, 0, &dummy );
+ return RFIDRetValue;
}
-RFID_RETURN_CODE WriteCRCValue()
+RFID_RETURN_CODE WriteWCounter(RFID_READER_ID readerID)
{
+ RFID_RETURN_CODE RFIDRetValue = SUCCESS;
- return SUCCESS;
+ RFIDRetValue = incrementCounter( readerID, &tagInfo);//every time updating data
+
+ return RFIDRetValue;
}
-uint32_t RFIDTagComm_StateMachine(StateMachineMode Mode)
+RFID_RETURN_CODE WriteCRCValue(RFID_READER_ID readerID)
+{
+ uint32_t Tuint32 = 0;
+ uint8_t tagMemory[256];
+ RFID_RETURN_CODE RFIDRetValue = SUCCESS;
+
+ //RFIDRetValue = incrementCounter( readerID, &tagInfo);//every time updating data
+
+ //crc_ccitt_init();
+ NFC_Tag_U[readerID].Struct.Checksum_CRC16 = crc_ccitt_update(NFC_Tag_U[readerID].Buf,(sizeof(NFC_Tag_U[readerID].Buf) - sizeof(NFC_Tag_U[readerID].Struct.Checksum_CRC16)));//calculate the crc without tag id and without crc fields
+ Tuint32 = NFC_Tag_U[readerID].Struct.Checksum_CRC16;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 31, Tuint32 );
+
+ return RFIDRetValue;
+}
+
+bool NFC_Check_CRC(RFID_READER_ID readerID)//after reading all data from tag
+{
+ bool status = ERROR;
+ uint32_t CRC;
+
+ //crc_ccitt_init();
+ CRC = crc_ccitt_update(NFC_Tag_R[readerID].Buf,(sizeof(NFC_Tag_R[readerID].Buf) - sizeof(NFC_Tag_R[readerID].Struct.Checksum_CRC16)));
+
+ if(NFC_Tag_R[readerID].Struct.Checksum_CRC16 == CRC)
+ {
+ status = OK;
+ }
+
+ return status;
+
+}
+uint8_t counterd_dis = 0;
+
+bool follow_stages[MAX_TAG_State_Machine] = {ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR};
+uint32_t RFIDTagComm_StateMachine(RFID_READER_ID readerID, StateMachineMode Mode)
{
uint32_t Status = OK;
RFID_RETURN_CODE RFIDRetValue;
- RFID_READER_ID readerID = (RFID_READER_ID)(Active_RFID_Reader -1);
+ //RFID_READER_ID readerID = (RFID_READER_ID)(Active_RFID_Reader -1);
+ uint8_t i = 0;
+ //uint8_t ReadingCounter;
+ int RetValue = 0;
+
- switch(TagStage)
+ switch(TagStage[readerID])
{
case Tag_Idle:
//Tag Not Active
+ follow_stages[TagStage[readerID]] = OK;
break;
case Tag_PrepareForDiscovery:
+
+
RFIDRetValue = RFID_StartDiscovery(readerID);
- if((RFIDRetValue == SUCCESS) && (Mode == Auto))
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.ReaderPreDiscovery = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_Indetification;
+ }
+ else
{
- TagStage = Tag_Indetification;
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.ReaderPreDiscovery = S_FAILED;
+
}
- break;
+ delayms(1);
+ if(Mode == OneStep)
+ {
+ break;
+ }
case Tag_Indetification:
- RFIDRetValue = RFID_WaitForDiscoveryNotification(readerID, &tagInfo);
- if((RFIDRetValue == SUCCESS) && (Mode == Auto))
+
+ //RFIDRetValue = RFID_WaitForDiscoveryNotification(readerID, &tagInfo);
+ do
+ {
+ RFIDRetValue = RFID_WaitForDiscoveryNotification(readerID, &tagInfo);
+ delayms(100);
+ counterd_dis++;
+
+
+
+ }while(RFIDRetValue != SUCCESS);
+
+ if(RFIDRetValue == SUCCESS)
{
- TagStage = Tag_GetUid;
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagDiscovery = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_GetUid;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagDiscovery = S_FAILED;
+ }
+ delayms(1);
+ if(Mode == OneStep)
+ {
+ break;
}
- break;
case Tag_GetUid:
RFIDRetValue = getUID( readerID, &tagInfo, uid );
- if((RFIDRetValue == SUCCESS) && (Mode == Auto))
+ if(RFIDRetValue == SUCCESS)
{
- TagStage = Tag_WriteValue;
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagGetUID = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_WriteValue;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagGetUID = S_FAILED;
+ //while(1);
}
- break;
- case Tag_CheckPwd:
- break;
- case Tag_CheckValidity:
- break;
- case Tag_UpdateCounter:
- break;
- case Tag_CheckHashValue:
- break;
- case Tag_InvalidLock:
+// memset(NFC_Tag_R[readerID].Buf,0,sizeof(NFCTag_t));
+//
+// for(i=0;i<8;i++)//Copy UID
+// {
+// NFC_Tag_R[readerID].Struct.tagId[i] = tagInfo.Info.NFC_VPP.ID[i];
+// }
+ delayms(1);
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+/* case Tag_CheckPwd:
break;
+ */
+
+/* case Tag_InvalidLock:
+ break;*/
+
+#ifndef RFID_READ_ONLY
+ case Tag_WriteValue:
+
+ RFIDRetValue = TagWriteData(readerID);
+
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagwriteData = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_ReadValue;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagwriteData = S_FAILED;
+ while(1);
+ }
+ delayms(1);
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+#endif
case Tag_ReadValue:
- RFIDRetValue = TagReadData();
+ //RFIDRetValue = Read_Tag_All_Data();//TagReadData();
+
+ //
+ /* ReadingCounter = 0;
+ do
+ {
+ RFIDRetValue = Read_Tag_All_Data();
+ ReadingCounter++;
+ }
+ while ((NFC_Check_CRC() == ERROR) && (ReadingCounter < 1));//if the crc is wrong read the tag again (max 3 times)
+
+ if(NFC_Check_CRC() == ERROR)
+ {
+ while(true);
+ }*/
+
+ RFIDRetValue = Read_Tag_All_Data();
+
- if((RFIDRetValue == SUCCESS) && (Mode == Auto))
+ //
+
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagReadData = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_CheckUpdateBlocked;
+ }
+ else
{
- TagStage = Tag_WriteValue;
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagReadData = S_FAILED;
}
+ delayms(1);
- break;
- case Tag_WriteValue:
+ for(i = 0; i < sizeof(NFCTag_t); i++)
+ {
+ NFC_Tag_U[readerID].Buf[i] = NFC_Tag_R[readerID].Buf[i];
+ }
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+ case Tag_CheckCRC:
+ if(NFC_Check_CRC(readerID) != OK)
+ {
+ RFID_Status_Words[readerID].errors.TAgCheckDataCRC = S_FAILED;
+ }
+ else
+ {
+ RFID_Status_Words[readerID].errors.TAgCheckDataCRC = S_SUCCEEDED;
+ }
+ if(Mode == OneStep)
+ {
+ break;
+ }
+ case Tag_CheckUpdateBlocked:
- RFIDRetValue = TagWriteData();
+ RFIDRetValue = IsTagBlocked(readerID);//check blocked bit
- if((RFIDRetValue == SUCCESS) && (Mode == Auto))
+ if(RFIDRetValue == SUCCESS)
{
- TagStage = Tag_DisconnectComm;
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TAgCheckBlockedField = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_CheckHashValue;
}
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TAgCheckBlockedField = S_FAILED;
+ }
+ #warning Add here blacklist functionality
+ //check black list
+ // update block bit + checsum + block field for changing
+ delayms(1);
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+ case Tag_CheckHashValue:
+ RetValue = checkHashValue( readerID, &tagInfo);
+ if(RetValue == 1)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagCheckHash = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_CheckValidity;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagCheckHash = S_FAILED;
+ //while(1);
+ }
+ delayms(1);
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+ case Tag_CheckValidity:
+
+ RFIDRetValue = IsTagValid(readerID);
+
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagCheckValidity = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_CheckUpdateCounter;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagCheckValidity = S_FAILED;
+ //while(1);
+ }
+ delayms(1);
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+#ifndef RFID_READ_ONLY
+ case Tag_CheckUpdateCounter:
+ RetValue = incrementCounterAndCompare( readerID, &tagInfo);
+
+ if(RetValue == 1)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagCheckCounterLimit = S_SUCCEEDED;
+ RFID_Status_Words[readerID].errors.TagUpdateCounters = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_UpdateCheckSum;
+ }
+ else if(RetValue == -1)
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagCheckCounterLimit = S_FAILED;
+ }
+ else if(RetValue == -2)
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagUpdateCounters = S_FAILED;
+ }
+
+ delayms(1);
+
+ if(Mode == OneStep)
+ {
break;
- case Tag_UpdateCheckSum:
- crc_ccitt_init();
- //crc_ccitt_update(buf,len);
- WriteCRCValue();
+ }
+ case Tag_UpdateWCounter:
+ RFIDRetValue = WriteWCounter(readerID);
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagUpdateWriteCounter = S_SUCCEEDED;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagUpdateWriteCounter = S_FAILED;
+ }
break;
+
+ case Tag_UpdateCRC:
+/*
+ RFIDRetValue = WriteCRCValue(readerID);
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagUpdateCRC = S_SUCCEEDED;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagUpdateCRC = S_FAILED;
+ }
+ break;
+
+ */
+ case Tag_UpdateCheckSum://after updating the counter
+
+ RFIDRetValue = WriteCRCValue(readerID);
+ if(RFIDRetValue == SUCCESS)
+ {
+ follow_stages[TagStage[readerID]] = OK;
+ RFID_Status_Words[readerID].errors.TagUpdateCRC = S_SUCCEEDED;
+ if(Mode == Auto)
+ TagStage[readerID] = Tag_DisconnectComm;
+ }
+ else
+ {
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagUpdateCRC = S_FAILED;
+ //while(1); /---------------------------------------------------------------------------------------------- ERROR
+ }
+
+ if(Mode == OneStep)
+ {
+ break;
+ }
+#endif
case Tag_DisconnectComm:
RFIDRetValue = RFID_StopDiscovery(readerID);
- if((RFIDRetValue == SUCCESS) && (Mode == Auto))
+ if(RFIDRetValue == SUCCESS)
+ {
+ TagStage[readerID] = Tag_Idle;
+ RFID_Status_Words[readerID].errors.TagDisconnect = S_SUCCEEDED;
+ }
+ else
{
- TagStage = Tag_Idle;
+ follow_stages[TagStage[readerID]] = ERROR;
+ RFID_Status_Words[readerID].errors.TagDisconnect = S_FAILED;
+ //while(1); /---------------------------------------------------------------------------------------------- ERROR
}
break;
@@ -270,7 +1074,344 @@ uint32_t RFIDTagComm_StateMachine(StateMachineMode Mode)
break;
}
- Status |= RFID_Pint_Errors(readerID, RFIDRetValue);
+ Status |= RFID_Print_Errors(readerID, RFIDRetValue);
return Status;
}
+
+/*
+//-------------------------------------------------------------------------------
+//every 1 sec
+
+void RFIDCycleEvery1Sec()
+{
+ static RFID_READER_ID readerID;
+ static bool FirstTime = true;
+
+ for(readerID = READER_1; readerID < Max_Readers ; readerID++)
+ {
+ Active_RFID_Reader = readerID + 1;
+
+ if ( (Is_Cartridge_Present(Active_RFID_Reader) == true) &&
+ (RFID_Status_Words[readerID].errors.ReaderInit == S_SUCCEEDED) &&
+ ( (FirstTime == true) ||
+ (RequestForDiscovery[readerID] == true)
+ )
+ )
+ {
+ if(RFID_Status_Words[readerID].errors.TagDiscovery == S_SUCCEEDED)
+ {
+ FirstTime = false;
+ }
+ else
+ {
+ Trigger_RFID_TestTask(readerID);
+ }
+
+// if(RFID_Status_Words[readerID].errors.TagDiscovery != S_SUCCEEDED)
+// {
+// DiscoverRFIDTagEvery100mSec[readerID] = true;
+// RFID_Discovery_TimeOut[readerID] = RFID_Discovery_TimeOut_Limit;
+// }
+// else if(TagStage[readerID] < Tag_DisconnectComm)
+// {
+// DiscoverRFIDTagEvery100mSec[readerID] = true;
+// }
+//
+ }
+// else if(Is_Cartridge_Present(Active_RFID_Reader) == false)
+// {
+// //Initial values
+// RFID_Status_Words[readerID].uint &= 0x000F;//Reset status except ReaderAvailability + ReaderInit
+// FirstTime = true;
+// RequestForDiscovery[readerID] = false;
+// DiscoverRFIDTagEvery100mSec[readerID] = false;
+// }
+ else if (RFID_Status_Words[readerID].errors.TagDisconnect == S_SUCCEEDED)
+ {
+ FirstTime = false;
+ }
+
+ }
+// FirstTime = false;
+}
+//---------------------------------------------------------------------------------
+//every 100 m sec
+
+void RFIDCallEvery100mSec(RFID_READER_ID readerID)
+{
+ if ((RFID_Status_Words[readerID].errors.TagDiscovery != S_SUCCEEDED) && (RFID_Discovery_TimeOut[readerID] > 0))
+ {
+ if(RFID_Status_Words[readerID].errors.ReaderPreDiscovery != S_SUCCEEDED)
+ {
+ //call ReaderPreDiscovery[i]
+ TagStage[readerID] = Tag_PrepareForDiscovery;
+ }
+ else
+ {
+ //call TagDiscovery[i]
+ TagStage[readerID] = Tag_Indetification;
+ }
+ RFIDTagComm_StateMachine(readerID, OneStep);
+ RFID_Discovery_TimeOut[readerID]--;
+ }
+ else if( (RFID_Discovery_TimeOut[readerID] == 0) && (RFID_Status_Words[readerID].errors.TagDiscovery != S_SUCCEEDED) )
+ {
+ //RFID_Discovery_TimeOut error
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ }
+ else if ((RFID_Status_Words[readerID].errors.TagDiscovery == S_SUCCEEDED) && (TagStage[readerID] < Tag_DisconnectComm))
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ TagStage[readerID] = Tag_GetUid;
+ //if(TagStage[readerID] < Tag_DisconnectComm)
+ // TagStage[readerID]++;
+ RFIDTagComm_StateMachine(readerID, Auto);
+ }
+ else
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ }
+}
+//------------------------------------------------------------
+*/
+
+//-------------------------------------------------------------------------------
+//every 1 sec
+
+void RFIDCycleEvery1Sec()
+{
+ static RFID_READER_ID readerID;
+ //static bool FirstTime = true;
+
+ if(Is_AnyCartridge_presence() == true)//at least one is presence
+ {
+ for(readerID = READER_1; readerID < Max_Readers ; readerID++)
+ {
+ Active_RFID_Reader = readerID + 1;
+
+ if ( (Is_Cartridge_Present(Active_RFID_Reader) == true) &&
+ (RFID_Status_Words[readerID].errors.ReaderInit == S_SUCCEEDED)
+ )
+ {
+ //if(RFID_Status_Words[readerID].errors.ReaderPreDiscovery != S_SUCCEEDED)
+ if(RFID_Status_Words[readerID].errors.ReaderPreDiscovery == S_NA)
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ Trigger_RFID_Prepare(readerID);//Send Commnd to start discovery
+ //Trigger_RFID_TestTask(readerID);
+ }
+ else if(RFID_Status_Words[readerID].errors.ReaderPreDiscovery == S_FAILED)
+ {
+ //IFS Error - Reader error!!!
+ }
+ else // S_SUCCEEDED - recieve the start discovery command
+ {
+ if(RFID_Status_Words[readerID].errors.TagDiscovery == S_NA)
+ {
+ Trigger_RFID_Discovery(readerID);//check if discovery
+ }
+ else if(RFID_Status_Words[readerID].errors.TagDiscovery == S_FAILED)
+ {
+ //didn't find tag yet - TBD - Tag error after X cycles !!!!
+ }
+ else // S_SUCCEEDED
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = true;
+ }
+ }
+ }
+ else
+ {
+ if(RFID_Status_Words[readerID].errors.ReaderInit == S_FAILED)
+ {
+ //IFS Error - Reader error!!!
+ }
+ else
+ if(Is_Cartridge_Present(Active_RFID_Reader) == false)
+ {
+ //Initial values
+ RFID_Status_Words[readerID].uint64bit &= 0x000F;//Reset status except ReaderAvailability + ReaderInit
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ }
+ }
+ }
+ }
+}
+//---------------------------------------------------------------------------------
+//every 100 m sec
+
+
+void RFIDCallEvery100mSec(RFID_READER_ID readerID)
+{
+ static uint16_t Offset = 0;
+ STATUS_ENUM Status = 0;
+
+ if (Is_Cartridge_Present(Active_RFID_Reader) == true)
+ {
+ Status = (RFID_Status_Words[readerID].uint64bit & (0x0300 << Offset))>>(8 + Offset);
+
+ switch(Status)
+ {
+ case S_NA:
+ switch (Offset)
+ {
+ case 0x00:
+ Trigger_RFID_GetUid(readerID);
+ break;
+ case 0x02:
+ #ifdef RFID_NOTUSE_PASSWORD
+ RFID_Status_Words[readerID].errors.TagCheckPassword = S_NOTINUSE;
+ #else
+ Trigger_RFID_GetPassword(readerID);
+ #endif
+ break;
+ case 0x04:
+ Trigger_RFID_ReadData(readerID);
+ break;
+ case 0x06:
+ #ifdef RFID_NOTUSE_CRC
+ RFID_Status_Words[readerID].errors.TAgCheckDataCRC = S_NOTINUSE;
+ #else
+ Trigger_RFID_CheckCRC(readerID);
+ #endif
+ break;
+ case 0x08:
+ #ifdef RFID_NOTUSE_HASHTABLE
+ RFID_Status_Words[readerID].errors.TagCheckHash = S_NOTINUSE;
+ #else
+ Trigger_RFID_CheckHash(readerID);
+ #endif
+ break;
+ case 0x0A:
+ #ifdef RFID_NOTUSE_VALIDITY
+ RFID_Status_Words[readerID].errors.TagCheckValidity = S_NOTINUSE;
+ #else
+ Trigger_RFID_CheckValid(readerID);
+ #endif
+ break;
+ case 0x0C:
+ #ifdef RFID_NOTUSE_COUNTER
+ RFID_Status_Words[readerID].errors.TagCounterLimit = S_NOTINUSE;
+ #else
+
+ #ifdef RFID_FORCE_READER2
+ RFID_Check_EOL_Date();
+ #endif
+
+ if(readerID != READER_1)
+ {
+ RFID_Update_Waste_Filled_Date(readerID);
+ }
+ else if(readerID == READER_1)
+ {
+ RFID_Check_EOL_Date();
+ }
+ Trigger_RFID_CheckCounter(readerID);
+ #endif
+ break;
+ case 0x0E:
+ #ifdef RFID_NOTUSE_BLACKLIST
+ RFID_Status_Words[readerID].errors.TAgCheckBlockedField = S_NOTINUSE;
+ #else
+ Trigger_RFID_CheckBlockedField(readerID);
+ #endif
+ break;
+ case 0x10:
+ //Trigger_RFID..
+ break;
+ case 0x12:
+ //Trigger_RFID..
+ break;
+
+ default:
+ break;
+
+ }
+
+ break;
+ case S_FAILED:
+ case 2:
+ //Tag Error;
+ break;
+ case S_SUCCEEDED:
+ case S_NOTINUSE:
+ case 3:
+ if(Offset < 0xC0000000)
+ Offset = Offset + 2;
+ break;
+ }
+ }
+ else
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ }
+
+
+}
+
+/*
+void RFIDCallEvery100mSec(RFID_READER_ID readerID)
+{
+ if (Is_Cartridge_Present(Active_RFID_Reader) == true)
+ {
+ if(RFID_Status_Words[readerID].errors.TagGetUID == S_NA)
+ {
+ Trigger_RFID_GetUid(readerID);
+ }
+ else if(RFID_Status_Words[readerID].errors.TagGetUID == S_FAILED)
+ {
+ //Tag error!!!
+ }
+ else // S_SUCCEEDED
+ {
+ if(RFID_Status_Words[readerID].errors.TagReadData == S_NA)
+ {
+ Trigger_RFID_ReadData(readerID);// + CRC
+ }
+ else if(RFID_Status_Words[readerID].errors.TagReadData == S_FAILED)
+ {
+ //Tag error!!!
+ }
+ else // TagReadData S_SUCCEEDED
+ {
+ #ifdef RFID_NOTUSE_CRC
+ RFID_Status_Words[readerID].errors.TAgCheckDataCRC = S_NOTINUSE;
+ #endif
+
+ if((RFID_Status_Words[readerID].errors.TAgCheckDataCRC == S_SUCCEEDED) || (RFID_Status_Words[readerID].errors.TAgCheckDataCRC == S_NOTINUSE))
+ {
+ if(RFID_Status_Words[readerID].errors.TagCheckHash == S_NA)
+ {
+ Trigger_RFID_CheckHash(readerID);
+ }
+ else if(RFID_Status_Words[readerID].errors.TagCheckHash == S_FAILED)
+ {
+ //Tag error!!!
+ }
+ else // S_SUCCEEDED
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = false; // temporaray - move to the next stage
+ }
+ }
+ else
+ {
+ //Tag error!!!
+ }
+ }
+ }
+ }
+ else
+ {
+ DiscoverRFIDTagEvery100mSec[readerID] = false;
+ }
+
+}
+*/
+//------------------------------------------------------------
+
+void UpdateWCounterCRC(RFID_READER_ID readerID)//Call after any change in the tag - to call from WriteValue function
+{
+ Trigger_RFID_UpdateWCounter(readerID);//Counts writes to the tag (not include this counter and CRC)
+ Trigger_RFID_UpdateCRC(readerID);
+}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.h
index 1e1f0fd91..d09fd0430 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC.h
@@ -8,6 +8,12 @@
#ifndef DRIVERS_I2C_COMMUNICATION_RFID_NFC_NFC_H_
#define DRIVERS_I2C_COMMUNICATION_RFID_NFC_NFC_H_
+#define TAG_NOT_VALID 0
+#define TAG_VALID 1
+
+#define TAG_NOT_BLOCKED 0
+#define TAG_BLOCKED 1
+
typedef enum
{
Tag_Idle,
@@ -16,23 +22,128 @@ typedef enum
Tag_GetUid,
Tag_CheckPwd,
Tag_CheckValidity,
- Tag_UpdateCounter,
+ Tag_CheckUpdateCounter,
Tag_CheckHashValue,
- Tag_InvalidLock,
+ Tag_CheckUpdateBlocked,//blacklist
Tag_ReadValue,
Tag_WriteValue,
+ Tag_CheckCRC,
Tag_UpdateCheckSum,
+ Tag_UpdateValue,
+ Tag_Update_Ink_Fill,
+ Tag_Update_Ink_Used,
+ Tag_Update_Ink_Empty,
+ Tag_UpdateInkMachineID,
+ Tag_Update_Waste_Fill,
+ Tag_Update_Waste_Full,
+ Tag_Update_Waste_Empty,
+ Tag_UpdateWasteMachineID,
+ Tag_UpdateWCounter,
+ Tag_UpdateCRC,
Tag_DisconnectComm,
+ MAX_TAG_State_Machine,
}RFID_TAG_State_Machine;
-extern RFID_TAG_State_Machine TagStage;
+/*
+typedef struct
+{
+ //STATUS_ENUM: 0 - S_NA, 1 - S_SUCCEEDED, 2 - S_FAILED
+ STATUS_ENUM ReaderAvailability : 2; //0-1
+ STATUS_ENUM ReaderInit : 2; //2-3
+ STATUS_ENUM ReaderPreDiscovery : 2; //4-5
+ STATUS_ENUM TagDiscovery : 2; //6-7
+ STATUS_ENUM TagGetUID : 2; //8-9
+ STATUS_ENUM TagCheckPassword : 2; //10-11 //temporary - TagUpdateBlokedField
+ STATUS_ENUM TagReadData : 2; //12-13
+ STATUS_ENUM TAgCheckDataCRC : 2; //14-15
+ STATUS_ENUM TagCheckHash : 2; //16-17
+ STATUS_ENUM TagValidity : 2; //18-19
+ STATUS_ENUM TagCounterLimit : 2; //20-21
+ STATUS_ENUM TagUpdateCounters : 2; //22-23
+ STATUS_ENUM TAgCheckBlockedField : 2; //24-25
+ STATUS_ENUM TagwriteData : 2; //26-27
+ STATUS_ENUM TagUpdateCRC : 2; //28-29
+ STATUS_ENUM TagDisconnect : 2; //30-31
+}RFID_Errors;
+
+//RFID_Status_Word
+typedef union
+{
+ RFID_Errors errors;
+ uint32_t uint;
+}RFID_STATUS;
+*/
+
+
+typedef struct
+{
+ //STATUS_ENUM: 0 - S_NA, 1 - S_SUCCEEDED, 2 - S_FAILED
+ STATUS_ENUM ReaderAvailability : 2; //0-1
+ STATUS_ENUM ReaderInit : 2; //2-3
+ STATUS_ENUM ReaderPreDiscovery : 2; //4-5
+ STATUS_ENUM TagDiscovery : 2; //6-7
+ STATUS_ENUM TagGetUID : 2; //8-9
+ STATUS_ENUM TagCheckPassword : 2; //10-11
+ STATUS_ENUM TagReadData : 2; //12-13
+ STATUS_ENUM TAgCheckDataCRC : 2; //14-15
+ STATUS_ENUM TagCheckHash : 2; //16-17
+ STATUS_ENUM TagCheckValidity : 2; //18-19
+ STATUS_ENUM TagCheckCounterLimit : 2; //20-21 ----
+ STATUS_ENUM TagUpdateCounters : 2; //22-23 ----
+ STATUS_ENUM TAgCheckBlockedField : 2; //24-25
+ STATUS_ENUM TagwriteData : 2; //26-27 ----
+ STATUS_ENUM TagUpdateCRC : 2; //28-29
+ STATUS_ENUM TagDisconnect : 2; //30-31
+
+ STATUS_ENUM TagUpdateInkFill : 2; //32-31
+ STATUS_ENUM TagUpdateInkUsed : 2; //34-35
+ STATUS_ENUM TagUpdateInkEmpty : 2; //36-37
+ STATUS_ENUM TagUpdateInkMachineID : 2; //38-39
+ STATUS_ENUM TagUpdateWasteFill : 2; //40-41
+ STATUS_ENUM TagUpdateWasteFull : 2; //42-43
+ STATUS_ENUM TagUpdateWasteEmpty : 2; //44-45
+ STATUS_ENUM TagUpdateWasteMachineID : 2; //46-47
+ STATUS_ENUM TagUpdateBlockedField : 2; //48-49
+ STATUS_ENUM TagUpdateValidity : 2; //50-51
+ STATUS_ENUM TagUpdateWriteCounter : 2; //52-53
+ STATUS_ENUM TagLockFields : 2; //54-55
+ STATUS_ENUM TagEOL : 2; //56-57
+ STATUS_ENUM TagUpdateWasteFillDate : 2; //58-59
+ STATUS_ENUM TagSpare6061 : 2; //60-61
+ STATUS_ENUM TagSpare6232 : 2; //62-63
+}RFID_Errors;
+
+//RFID_Status_Word
+typedef union
+{
+ RFID_Errors errors;
+ uint64_t uint64bit;
+}RFID_STATUS;
+
+extern RFID_STATUS RFID_Status_Words[Max_Readers];
+
+extern RFID_TAG_State_Machine TagStage[3];
bool Init_RFID_Reader(RFID_READER_ID Reader_ID);
uint8_t Connect_to_RFID_Reder(uint8_t readerID);
-uint32_t RFIDTagComm_StateMachine(StateMachineMode Mode);
+uint32_t RFIDTagComm_StateMachine(RFID_READER_ID readerID, StateMachineMode Mode);
+RFID_RETURN_CODE WriteCRCValue(RFID_READER_ID readerID);
+void RFIDCycleEvery1Sec();
+void RFIDCallEvery100mSec(RFID_READER_ID readerID);
+
+void UpdateWCounterCRC(RFID_READER_ID readerID);//Call after any change in the tag - to call from WriteValue function
extern uint8_t uid[7];
extern RFID_RETURN_CODE RFID_Status;
+extern NFC_Tag NFC_Tag_R[Max_Readers];
+extern NFC_Tag NFC_Tag_W[Max_Readers];
+extern NFC_Tag NFC_Tag_U[Max_Readers];
+
+extern NxpNci_RfIntf_t tagInfo;
+
+extern bool RequestForDiscovery[3];//request from WHS logic
+extern bool DiscoverRFIDTagEvery100mSec[3];
+
#endif /* DRIVERS_I2C_COMMUNICATION_RFID_NFC_NFC_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.c
index 74b00f4ad..b3614ec48 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.c
@@ -14,6 +14,9 @@
#include "driverlib/sysctl.h"
#include <Drivers/I2C_Communication/I2C.h>
#include "drivers/FPGA/FPGA_Comm.h"
+#include <Utilities/delay.h>
+#include "Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h"
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include <Drivers/I2C_Communication/RFID_NFC/PN7150/PN7150.h>
#include <Drivers/I2C_Communication/RFID_NFC/Test_RFID.h>
#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
@@ -21,7 +24,6 @@
#include "Drivers/I2C_Communication/RFID_NFC/NFC.h"
#include "driverlib/i2c.h"
#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.h>
-#include <Utilities/delay.h>
//#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.h>
//#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h>
//#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
@@ -191,19 +193,25 @@ void Init_IFS()//must be done after FPGA_Init
if(Status == OK) // Cstage = 14
{
IFS_Init_Status[Cart_i] = IFS_RECOGNIZED_INIT_PASSED;
+ RFID_Status_Words[Cart_i].errors.ReaderAvailability = S_SUCCEEDED;
+ RFID_Status_Words[Cart_i].errors.ReaderInit = S_SUCCEEDED;
ReportWithPackageFilter(IDSFilter,"------------ IFS RFID reader Initialization Passed -----------------", __FILE__,__LINE__, Cart_i, RpMessage, 0, 0);
Active_RFID_Reader = (PANEL_BUTTON_OR_CRAT_ID)(Cart_i +1);
}
else if(Cstage == 0)//failed in the first step - NFC_Config
{
IFS_Init_Status[Cart_i] = IFS_NOT_RECOGNIZED;
+ RFID_Status_Words[Cart_i].errors.ReaderAvailability = S_FAILED;
ReportWithPackageFilter(IDSFilter,"------------ IFS RFID reader Not recognized-----------------", __FILE__,__LINE__, Cart_i, RpMessage, 0, 0);
}
else //(Cstage > 0) - Passed HW + SW reset, failed in initialization
{
IFS_Init_Status[Cart_i] = IFS_RECOGNIZED_INIT_FAILED;
+ RFID_Status_Words[Cart_i].errors.ReaderInit = S_FAILED;
ReportWithPackageFilter(IDSFilter,"------------ IFS RFID reader Initialization failed-----------------", __FILE__,__LINE__, Cart_i, RpMessage, 0, 0);
}
+
+ IFS_Availability[Cart_i] = IFS_Init_Status[Cart_i];
}
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h
index 1440dba1f..fe9ee34bf 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h
@@ -22,6 +22,7 @@ typedef enum
READER_1 = 0,
READER_2 = 1,
READER_3 = 2,
+ Max_Readers = 3,
}RFID_READER_ID;
#ifndef EVALUATION_BOARD
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h
index 70e82cb39..7d11720a5 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h
@@ -8,6 +8,42 @@
#ifndef DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFIDTAGINFO_H_
#define DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFIDTAGINFO_H_
+typedef enum
+{
+ Serial_i = 0,
+ FactoryID_i = 1,
+ FillingSystem_i = 2,
+ WorkOrder_i = 3,
+ ColorName_i = 4,
+ Catagory_i = 5,
+ Type_i = 6,
+ CartSize_i = 7,
+ InkVolume_i = 8,
+ InkBatch_i = 9,
+ InkMfgDate_i = 10,
+ InkEolDate_i = 11,
+ CartFillDate_i = 12,
+ WasteFillDate_i = 13,
+ Misc_i = 14,
+ PluginCounter_i = 15,
+ InkFill_i = 16,
+ InkUsed_i = 17,
+ InkEmpty_i = 18,
+ WasteEmpty_i = 19,
+ WasteFilling_i = 20,
+ WasteFull_i = 21,
+ Blocked_i = 22,
+ Fail_i = 23,
+ WasteCounter_i = 24,
+ MachineIdInl_i = 25,
+ MachineIdWst_i = 26,
+ rReserved_i = 27,
+ Counter_i = 28,
+ TagValid_i = 29,
+ HashValue_i = 30,
+ CRC16_i = 31,
+}RFIFvalueIndex;
+
typedef struct
{
uint8_t tagId[8]; //RFID Tag unique ID
@@ -77,7 +113,7 @@ typedef struct
typedef union
{
NFCTag_t Struct;
- uint8_t Buf[sizeof(NFCTag_t)];
+ uint8_t Buf[sizeof(NFCTag_t)];
}NFC_Tag;
#endif /* DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFIDTAGINFO_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.c
new file mode 100644
index 000000000..a14b3b4e7
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.c
@@ -0,0 +1,294 @@
+/*
+ * RFID_IFS.c
+ *
+ * Created on: 24 Sep 2020
+ * Author: avi
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h> //memset
+#include <DataDef.h>
+#include "datadef.h"
+#include <Utilities/delay.h>
+#include "drivers/I2C_Communication/I2C.h"
+#include "drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h"
+#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+#include <Drivers/I2C_Communication/RFID_NFC/NFC.h>
+#include "drivers/Flash_ram/MCU_E2Prom.h"
+#include "Communication/Connection.h"
+#include "RFID_Settings.h"
+
+bool RFID_Check_EOL_Date() // InK EOL only for READER_1
+{
+
+ uint8_t Status = OK;
+ uint8_t EolYear = 0;
+ uint8_t EolMonth = 0;
+ uint8_t EolDay = 0;
+
+ RFID_READER_ID readerID = READER_1;// InK EOL only for READER_1
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+//#ifdef USE_RFID_LOGIC
+ if(RFID_Status_Words[readerID].errors.TagEOL == S_NA)
+ {
+ EolYear = (NFC_Tag_R[readerID].Struct.inkEolDate[6] - '0') *10 + (NFC_Tag_R[readerID].Struct.inkEolDate[7] - '0');
+ EolMonth = (NFC_Tag_R[readerID].Struct.inkEolDate[3] - '0') *10 + (NFC_Tag_R[readerID].Struct.inkEolDate[4] - '0');
+ EolDay = (NFC_Tag_R[readerID].Struct.inkEolDate[0] - '0') *10 + (NFC_Tag_R[readerID].Struct.inkEolDate[1] - '0');
+
+ if((EolYear <19) || (EolMonth > 12 ) || (EolDay > 31))
+ {
+ Status = WARNING;//illegal Date value
+ }
+ else if((LocalTime.tm_year < 20) || (LocalTime.tm_mday == 0) || ((LocalTime.tm_mon) > 12) || (LocalTime.tm_mday > 31))
+ {
+ Status = WARNING;//illegal Date value
+ }
+ else
+ if(EolYear > LocalTime.tm_year)
+ {
+ Status = ERROR;
+ }
+ else
+ if(EolYear < LocalTime.tm_year)
+ {
+ Status = OK;
+ }
+ else
+ {
+ if(EolMonth > (LocalTime.tm_mon))
+ {
+ Status = ERROR;
+ }
+ else
+ if(EolMonth < (LocalTime.tm_mon))
+ {
+ Status = OK;
+ }
+ else
+ {
+ if(EolDay > LocalTime.tm_mday)
+ {
+ Status = ERROR;
+ }
+ else
+ if(EolDay <= LocalTime.tm_mday)
+ {
+ Status = OK;
+ }
+ }
+ }
+
+ if(Status == OK)
+ {
+ RFID_Status_Words[readerID].errors.TagEOL = S_SUCCEEDED;
+ }
+ else if(Status == WARNING)
+ {
+ //RFID_Status_Words[readerID].errors.TagEOL = S_FAILED;//?
+ //we have no date from USB comm.
+ //leave the TagEOL ERROR as S_NA
+ //Print log error
+ }
+ else
+ {
+ RFID_Status_Words[readerID].errors.TagEOL = S_FAILED;
+ }
+ }
+//#endif
+ return Status;
+}
+
+
+bool RFID_Check_Coloer_Match(uint8_t * UserColorName, uint8_t ColorNameSize)
+{
+#ifdef USE_RFID_LOGIC
+ uint8_t i = 0;
+
+ RFID_READER_ID readerID = READER_1;// InK EOL only for READER_1
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(ColorNameSize > sizeof(NFC_Tag_R[readerID].Struct.colorName))
+ return ERROR;
+
+ for(i = 0; i < ColorNameSize; i++)
+ {
+ if(NFC_Tag_R[readerID].Struct.colorName[i] != UserColorName[i])
+ return ERROR;
+ }
+#endif
+ return OK;
+}
+
+bool RFID_Update_Ink_Fill()//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+
+ RFID_READER_ID readerID = READER_1;// InK EOL only for READER_1
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ uint32_t Tuint32 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+ uint8_t tagMemory[1024];
+
+ if(NFC_Tag_R[readerID].Struct.inkFill != 0)
+ {
+ return ERROR;
+ }
+
+ //inkFill
+ NFC_Tag_U[readerID].Struct.inkFill = 1;
+ Tuint32 = NFC_Tag_U[readerID].Struct.inkFill;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 16, Tuint32 );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateInkFill = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateInkFill = S_SUCCEEDED;
+#endif
+ return OK;
+}
+
+bool RFID_Update_Ink_Used()//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+
+ RFID_READER_ID readerID = READER_1;// InK EOL only for READER_1
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ uint32_t Tuint32 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+ uint8_t tagMemory[1024];
+
+ if(NFC_Tag_R[readerID].Struct.inkUsed != 0)
+ {
+ return ERROR;
+ }
+
+ //inkUsed
+ NFC_Tag_U[readerID].Struct.inkUsed = 1;
+ Tuint32 = NFC_Tag_U[readerID].Struct.inkUsed;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 17, Tuint32 );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateInkUsed = S_FAILED;
+ return ERROR;
+
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateInkUsed = S_SUCCEEDED;
+#endif
+
+ return OK;
+}
+
+bool RFID_Update_Ink_Empty()//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+ uint32_t Tuint32 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+ uint8_t tagMemory[1024];
+
+ RFID_READER_ID readerID = READER_1;// InK EOL only for READER_1
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(NFC_Tag_R[readerID].Struct.inkEmpty != 0)
+ {
+ return ERROR;
+ }
+
+ //inkEmpty
+ NFC_Tag_U[readerID].Struct.inkEmpty = 1;
+ Tuint32 = NFC_Tag_U[readerID].Struct.inkEmpty;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 18, Tuint32 );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateInkEmpty = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateInkEmpty = S_SUCCEEDED;
+#endif
+
+ return OK;
+}
+
+bool RFID_Update_Ink_Filled_MachineID()//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+ RFID_RETURN_CODE RFIDRetValue;
+ uint32_t dummy = 0;
+ uint8_t i = 0;
+
+ RFID_READER_ID readerID = READER_1;// InK EOL only for READER_1
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(NFC_Tag_R[readerID].Struct.MachineIdInl != 0)
+ {
+ return ERROR;
+ }
+
+ //MachineIdInl
+ for(i = 0; i < sizeof(NFC_Tag_U[readerID].Struct.MachineIdInl); i++)
+ {
+ NFC_Tag_U[readerID].Struct.MachineIdInl[i] = Serial[i] + 0x30; // move to ASCII
+ }
+
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_U[readerID].Struct.MachineIdInl, 25, dummy );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateInkMachineID = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateInkMachineID = S_SUCCEEDED;
+#endif
+
+ return OK;
+}
+
+
+uint32_t RFID_Get_Identification_Status(RFID_READER_ID readerID)
+{
+ //return OK if the steps Availability,Init,PreDiscovery,Discovery,UID,Password,Read,CRC,Hash,Validity Passed (or skipped if NA)
+#warning To add support for blacklist
+ if( (RFID_Status_Words[readerID].errors.TagCheckValidity == S_NOTINUSE) ||
+ (RFID_Status_Words[readerID].errors.TagCheckValidity == S_SUCCEEDED) ||
+ (RFID_Status_Words[readerID].errors.TagCheckValidity == 0x03) )//NA
+ {
+ return OK;
+ }
+
+ return ERROR;
+}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h
new file mode 100644
index 000000000..cc929f467
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h
@@ -0,0 +1,19 @@
+/*
+ * RFID_IFS.h
+ *
+ * Created on: 24 Sep 2020
+ * Author: avi
+ */
+
+#ifndef DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_IFS_H_
+#define DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_IFS_H_
+
+bool RFID_Check_EOL_Date(); // InK EOL only for READER_1
+bool RFID_Check_Coloer_Match(uint8_t * UserColorName, uint8_t ColorNameSize);
+bool RFID_Update_Ink_Fill();
+bool RFID_Update_Ink_Used();
+bool RFID_Update_Ink_Empty();
+bool RFID_Update_Ink_Filled_MachineID();
+uint32_t RFID_Get_Identification_Status(RFID_READER_ID readerID);
+
+#endif /* DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_IFS_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h
new file mode 100644
index 000000000..dec268ea5
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h
@@ -0,0 +1,40 @@
+/*
+ * RFID_Settings.h
+ *
+ * Created on: 22 Sep 2020
+ * Author: avi
+ */
+
+#ifndef DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_SETTINGS_H_
+#define DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_SETTINGS_H_
+
+//#define RFID_LOCK_FILEDS_FOR_READ_ONLY
+#define RFID_NOTUSE_BLACKLIST
+#define RFID_NOTUSE_PASSWORD
+#define RFID_NOTUSE_CRC
+
+#define RFID_NOTUSE_VALIDITY
+//#define RFID_NOTUSE_COUNTER
+#define RFID_NOTUSE_HASHTABLE
+//#define RFID_USE_EMOTY_TAG_FOR_WASTE
+
+//#define RFID_FORCE_READER2 //only for development
+
+#ifdef RFID_FORCE_READER2
+ #warning RFID_FORCE_READER2 is set !!!
+#endif
+
+#define USE_DELAY_WRITE_TAG
+//#define USE_DELAY_READ_TAG
+
+#ifdef USE_DELAY_WRITE_TAG
+ #define RFID_WRITE_DELAY 5000// 5m
+#endif
+
+#ifdef USE_DELAY_READ_TAG
+ #define RFID_READ_DELAY 10000// 10m
+#endif
+
+//-------------------------------------------
+#define RFID_Discovery_TimeOut_Limit 6
+#endif /* DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_SETTINGS_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.c
new file mode 100644
index 000000000..5906d1678
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.c
@@ -0,0 +1,219 @@
+/*
+ * RFID_Waste.c
+ *
+ * Created on: 24 Sep 2020
+ * Author: avi
+ */
+
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h> //memset
+#include <DataDef.h>
+#include "datadef.h"
+#include <Utilities/delay.h>
+#include "drivers/I2C_Communication/I2C.h"
+#include "drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h"
+#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+#include <Drivers/I2C_Communication/RFID_NFC/NFC.h>
+#include "drivers/Flash_ram/MCU_E2Prom.h"
+#include "Communication/Connection.h"
+#include "RFID_Settings.h"
+
+bool RFID_Update_Waste_Fill(RFID_READER_ID readerID)//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+ uint32_t Tuint32 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+ uint8_t tagMemory[1024];
+
+ if((readerID != READER_2) && (readerID != READER_3))
+ return ERROR;
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(NFC_Tag_R[readerID].Struct.wasteFilling != 0)
+ {
+ return ERROR;
+ }
+
+ //wasteFilling
+ NFC_Tag_U[readerID].Struct.wasteFilling = 1;
+ Tuint32 = NFC_Tag_U[readerID].Struct.wasteFilling;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 20, Tuint32 );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateWasteFill = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateWasteFill = S_SUCCEEDED;
+#endif
+ return OK;
+}
+
+bool RFID_Update_Waste_Full(RFID_READER_ID readerID)//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+ uint32_t Tuint32 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+ uint8_t tagMemory[1024];
+
+ if((readerID != READER_2) && (readerID != READER_3))
+ return ERROR;
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(NFC_Tag_R[readerID].Struct.wasteFull != 0)
+ {
+ return ERROR;
+ }
+
+ //wasteFull
+ NFC_Tag_U[readerID].Struct.wasteFull = 1;
+ Tuint32 = NFC_Tag_U[readerID].Struct.wasteFull;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 21, Tuint32 );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateWasteFull = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateWasteFull = S_SUCCEEDED;
+#endif
+
+ return OK;
+}
+
+bool RFID_Update_Waste_Empty(RFID_READER_ID readerID)//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+ uint32_t Tuint32 = 0;
+ RFID_RETURN_CODE RFIDRetValue;
+ uint8_t tagMemory[1024];
+
+ if((readerID != READER_2) && (readerID != READER_3))
+ return ERROR;
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(NFC_Tag_R[readerID].Struct.inkEmpty != 0)
+ {
+ return ERROR;
+ }
+
+ //wasteEmpty
+ NFC_Tag_U[readerID].Struct.wasteEmpty = 1;
+ Tuint32 = NFC_Tag_U[readerID].Struct.wasteEmpty;
+ RFIDRetValue = WriteValue( readerID, &tagInfo, tagMemory, 19, Tuint32 );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateWasteEmpty = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateWasteEmpty = S_SUCCEEDED;
+#endif
+
+ return OK;
+}
+
+bool RFID_Update_Waste_Filled_MachineID(RFID_READER_ID readerID)//must update CRC
+{
+#ifdef USE_RFID_LOGIC
+ RFID_RETURN_CODE RFIDRetValue;
+ uint32_t dummy = 0;
+ uint8_t i = 0;
+
+ if(RFID_Status_Words[readerID].errors.TagUpdateWasteMachineID == S_NA)
+ {
+ if((readerID != READER_2) && (readerID != READER_3))
+ return ERROR;
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(NFC_Tag_R[readerID].Struct.MachineIdWst != 0)
+ {
+ return ERROR;
+ }
+
+ //WasteFillDate
+ for(i = 0; i < sizeof(NFC_Tag_U[readerID].Struct.MachineIdWst); i++)
+ {
+ NFC_Tag_U[readerID].Struct.MachineIdWst[i] = Serial[i] + 0x30; // move to ASCII
+ }
+
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_U[readerID].Struct.MachineIdWst, 26, dummy );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateWasteMachineID = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateWasteMachineID = S_SUCCEEDED;
+ }
+#endif
+ return OK;
+}
+
+bool RFID_Update_Waste_Filled_Date(RFID_READER_ID readerID)//must update CRC
+{
+//#ifdef USE_RFID_LOGIC
+ RFID_RETURN_CODE RFIDRetValue;
+ uint32_t dummy = 0;
+ uint8_t i = 0;
+
+ if(RFID_Status_Words[readerID].errors.TagUpdateWasteFillDate == S_NA)
+ {
+ if((readerID != READER_2) && (readerID != READER_3))
+ return ERROR;
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(LocalTimeInAScii.Uint64 == 0) //we have no date from USB comm.
+ {
+ //Add log print
+ return WARNING;// leave the TagUpdateWasteFillDate ERROR as S_NA
+ }
+
+ //WasteFillDate
+ for(i = 0; i< 8; i++)
+ NFC_Tag_U[readerID].Struct.WasteFillDate[i] = LocalTimeInAScii.Buf[i];
+
+ RFIDRetValue = WriteValue( readerID, &tagInfo, NFC_Tag_U[readerID].Struct.WasteFillDate, 13, dummy );
+
+ //RFIDRetValue |= WriteCRCValue(readerID);
+
+ if(RFIDRetValue != SUCCESS)
+ {
+ RFID_Status_Words[readerID].errors.TagUpdateWasteFillDate = S_FAILED;
+ return ERROR;
+ }
+ RFID_Status_Words[readerID].errors.TagUpdateWasteFillDate = S_SUCCEEDED;
+ }
+//#endif
+ return OK;
+}
+
+
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h
new file mode 100644
index 000000000..0a55d693c
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h
@@ -0,0 +1,17 @@
+/*
+ * RFID_Waste.h
+ *
+ * Created on: 24 Sep 2020
+ * Author: avi
+ */
+
+#ifndef DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_WASTE_H_
+#define DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_WASTE_H_
+
+bool RFID_Update_Waste_Fill(RFID_READER_ID readerID);
+bool RFID_Update_Waste_Full(RFID_READER_ID readerID);
+bool RFID_Update_Waste_Empty(RFID_READER_ID readerID);
+bool RFID_Update_Waste_Filled_MachineID(RFID_READER_ID readerID);
+bool RFID_Update_Waste_Filled_Date(RFID_READER_ID readerID);
+
+#endif /* DRIVERS_I2C_COMMUNICATION_RFID_NFC_RFID_WASTE_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.c
index 9b1343321..322844146 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.c
@@ -1,5 +1,6 @@
#include "include.h"
#include <Drivers/I2C_Communication/I2C.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.h>
#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h>
#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h
index dc98d7da1..4dfa37811 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC_Settings.h
@@ -4,7 +4,7 @@
#define NXPNCI_I2C_ADDR 0x28
#define MAX_NCI_FRAME_SIZE 258
#define TIMEOUT_COMMAND 1000
-#define TIMEOUT_DISCOVERY 200
+#define TIMEOUT_DISCOVERY 500//200 AVI
#define TIMEOUT_EXT 100
// NCI standard dedicated settings
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.c
index 4171a62a6..7035d172e 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.c
@@ -1,7 +1,15 @@
#include "include.h"
+#include "datadef.h"
+#include "Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h"
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_NFC.h>
#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h>
+#include "Drivers/I2C_Communication/RFID_NFC/NFC.h"
#include "../NFC_MainBaord.h"
+#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h>
+#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
#define NUM_OF_READERS 4
#define T2T_BLOCK_SIZE 4 // tested only in NTAG216
@@ -188,7 +196,7 @@ int checkPwd(uint8_t *pwd, uint8_t *PACK)
return 1;
}
-bool setPwdValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd )
+bool setPwdValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd )
{
uint8_t succeededSize, pwdAddr = 0xE5;
//if ( pwdAuth( oldPwd, BLOCK_SIZE, &succeededSize) == true)
@@ -199,7 +207,7 @@ bool setPwdValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd )
return false;
}
-bool setPACKValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd )
+bool setPACKValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd )
{
uint8_t succeededSize, pwdAddr = 0xE6, dataSize = 2;
@@ -209,7 +217,7 @@ bool setPACKValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd
return false;
}
-bool activatePwd( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t startingBlock )
+bool activatePwd(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t startingBlock )
{
uint8_t pageData[100], dataAddr = 0xE3;
uint16_t succeededSize;
@@ -302,7 +310,7 @@ RFID_RETURN_CODE RFID_CardModeSend(uint32_t readerID, NxpNci_RfIntf_t *tagInfo,
}
return UNSUPPORTED_PROTOCOL;
}
-
+/* AVI-
bool IsTagValid(uint32_t readerID, NxpNci_RfIntf_t *tagInfo){
uint8_t data[16], tagValid;
if ( ReadValue( readerID, tagInfo, data, 29, &tagValid ) == SUCCESS )
@@ -311,8 +319,30 @@ bool IsTagValid(uint32_t readerID, NxpNci_RfIntf_t *tagInfo){
+}*/
+
+bool IsTagValid(uint32_t readerID)//AVI+
+{
+ bool Status = OK;
+
+ if(NFC_Tag_R[readerID].Struct.tagValid != TAG_VALID)
+ Status = ERROR;
+
+ return Status;
+}
+
+
+bool IsTagBlocked(uint32_t readerID)//AVI+
+{
+ bool Status = OK;
+
+ if(NFC_Tag_R[readerID].Struct.blocked != TAG_NOT_BLOCKED)
+ Status = ERROR;
+
+ return Status;
}
+
uint32_t GetCounter (uint32_t readerID, NxpNci_RfIntf_t *tagInfo)
{
uint8_t data[16];
@@ -334,7 +364,7 @@ void GetBlocksToRead( uint16_t* firstBlock, uint16_t* lastBlock, uint16_t beginB
}
// the function gets a value and places it into an array that can be written back to the memory
-RFID_RETURN_CODE SetFieldValueIntoBlocks( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *data, uint8_t* dataLen, uint8_t *value, uint8_t valueIndex ){
+RFID_RETURN_CODE SetFieldValueIntoBlocks(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *data, uint8_t* dataLen, uint8_t *value, uint8_t valueIndex ){
uint16_t firstBlock, lastBlock;
RFID_RETURN_CODE retCode;
uint16_t succeededReadSize = 0;
@@ -353,14 +383,52 @@ RFID_RETURN_CODE SetFieldValueIntoBlocks( uint32_t readerID, NxpNci_RfIntf_t *ta
}
-RFID_RETURN_CODE WriteValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, uint32_t valueNum )
+RFID_RETURN_CODE WriteValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, uint32_t valueNum )
{
RFID_RETURN_CODE retCode;
uint8_t dataSize;
int i;
- uint8_t data[512], valueNumChar[4] = {0};
+ uint8_t data[256], valueNumChar[4] = {0};
uint16_t succeededSize = 0;
uint8_t startBlock;
+
+// uint8_t Serial[16],index;
+
+// if(valueIndex == 0)
+// {
+// for(index = 0; index < sizeof(Serial); index++)
+// {
+// Serial[index] = value[index];
+// }
+// index ++;
+// }
+/*
+ if(Active_RFID_Reader != CART_2)
+ {
+ SetReader(READER_2);//select I2C MUX on main board
+
+ }
+ delayms(5);
+*/
+
+ #ifdef RFID_FORCE_READER2
+ readerID = READER_2;// Just for testing
+ #endif
+
+ if(Active_RFID_Reader != CART(readerID))
+ {
+ Active_RFID_Reader = CART(readerID);
+ SetReader(readerID);//select I2C MUX on main board
+
+ #ifdef USE_DELAY_WRITE_TAG
+ //delayms(5);
+ Task_sleep(RFID_WRITE_DELAY);
+ #endif
+ }
+
+ //SetReader(readerID);//select I2C MUX on main board
+ delayms(5);
+
if ( Fields[valueIndex].isNum == true )
{
for ( i = Fields[valueIndex].fieldLength - 1; i >= 0 ; i-- )
@@ -378,12 +446,18 @@ RFID_RETURN_CODE WriteValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_
return retCode;
startBlock = GetBlockLocation( Fields[valueIndex].fieldLocation );
retCode = RFID_CardModeSend( readerID, tagInfo, data, startBlock, dataSize, &succeededSize);
+
+ if ((valueIndex != Counter_i) && (valueIndex != CRC16_i) && (retCode == SUCCESS))//UPDATE WRITE COUNTER + CRC
+ {
+ UpdateWCounterCRC(readerID);
+ }
+
return retCode;
}
-
-uint32_t ReadValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, RFID_RETURN_CODE *rfidCode )
+/*
+uint32_t ReadValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, RFID_RETURN_CODE *rfidCode )
{
uint32_t retCode = 0;
uint8_t i, data[512];
@@ -407,8 +481,42 @@ uint32_t ReadValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value,
}
return retCode;
}
+*/
-RFID_RETURN_CODE getUID( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid )
+RFID_RETURN_CODE ReadValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, uint32_t *valueNum )
+{
+ RFID_RETURN_CODE retCode = 0;
+ uint8_t i, data[256];
+ uint16_t succeededSize = 0;
+
+ uint32_t temp;
+
+ uint8_t startBlock = GetBlockLocation( Fields[valueIndex].fieldLocation );
+
+#ifdef USE_DELAY_READ_TAG
+ delayms(RFID_READ_DELAY);//AVI+
+#endif
+
+ retCode = RFID_CardModeReceive( readerID, tagInfo, data, startBlock, Fields[valueIndex].fieldLength + BLOCK_SIZE, &succeededSize);
+ if ( retCode != SUCCESS )
+ return retCode;
+ memcpy( value, &data[ Fields[valueIndex].fieldLocation % BLOCK_SIZE], Fields[valueIndex].fieldLength ) ;
+ if ( Fields[valueIndex].isNum == true )
+ {
+ temp = 0;
+ for ( i = 0; i < Fields[valueIndex].fieldLength; i++ )
+ {
+ temp *= 10;
+ temp += (value[i] - '0');
+
+ }
+ *valueNum = temp;
+
+ }
+ return retCode;
+}
+
+RFID_RETURN_CODE getUID(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid )
{
RFID_RETURN_CODE retCode = 0;
uint16_t succeededSize = 0, block = 0, bytes = 7;
@@ -421,7 +529,7 @@ RFID_RETURN_CODE getUID( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *u
return retCode;
}
-RFID_RETURN_CODE getPwd( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *pwd )
+RFID_RETURN_CODE getPwd(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *pwd )
{
RFID_RETURN_CODE retCode = 0;
uint16_t succeededSize = 0, block = 230, bytes = 4;
@@ -544,7 +652,7 @@ void InitFields()
Fields[26].isNum = false;
//reserved
Fields[27].fieldLocation = 184;
- Fields[27].fieldLength = 16;
+ Fields[27].fieldLength = 13;//AVI+ 16->13
Fields[27].isNum = false;
//counter
Fields[28].fieldLocation = 197;
@@ -558,6 +666,11 @@ void InitFields()
Fields[30].fieldLocation = 202;
Fields[30].fieldLength = 16;
Fields[30].isNum = false;
+ //crc //AVI+ how many bits?? valueNum in ReadValue is 32 bit
+ Fields[31].fieldLocation = 218;
+ Fields[31].fieldLength = 4;
+ Fields[31].isNum = true;
+
}
@@ -848,7 +961,7 @@ void calcHash( uint8_t *input, uint16_t inputLen, uint8_t *output )
MD5Final( output, &context);
}
-bool setHashValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen )
+bool setHashValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen )
{
RFID_RETURN_CODE retCode;
uint8_t hashValue[16], dummy = 0;
@@ -858,8 +971,8 @@ bool setHashValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, ui
return true;
return false;
}
-
-int checkHashValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen )
+/*
+int checkHashValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen )//AVI-
{
RFID_RETURN_CODE retCode;
uint8_t i, hashValueCalc[16], hashValueOnTag[16], dummy = 0;
@@ -881,8 +994,28 @@ int checkHashValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, u
}
return -2;
}
+*/
-bool lockDataSetOnInit( uint32_t readerID, NxpNci_RfIntf_t *tagInfo )
+
+uint8_t hashValueCalc[16];
+int checkHashValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo )//AVI+
+{
+ uint8_t i/*, hashValueCalc[16]*/;
+
+ calcHash( NFC_Tag_R[readerID].Struct.tagId, sizeof(NFC_Tag_R[readerID].Struct.tagId), hashValueCalc);
+
+ for ( i = 0; i < 16; i++ )
+ {
+ if ( hashValueCalc[i] != NFC_Tag_R[readerID].Struct.HashValue[i] )
+ {
+ setTagInvalidAndLock( readerID, tagInfo );
+ return -1;
+ }
+ }
+ return 1;
+}
+
+bool lockDataSetOnInit(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo )
{
RFID_RETURN_CODE retCode;
uint16_t succeededSize = 0;
@@ -914,7 +1047,50 @@ bool lockDataSetOnInit( uint32_t readerID, NxpNci_RfIntf_t *tagInfo )
return false;
}
-bool setTagInvalidAndLock( uint32_t readerID, NxpNci_RfIntf_t *tagInfo )
+bool setTagInvalidAndLock(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo )//+ update checksum //AVI+
+{
+ RFID_RETURN_CODE retCode;
+ #ifdef RFID_LOCK_FILEDS_FOR_READ_ONLY
+ uint16_t succeededSize = 0;
+ uint8_t block = 0xE2, tagValid = 0;
+ #endif
+ uint32_t Tuint32;
+ uint8_t data[16];
+
+ NFC_Tag_U[readerID].Struct.tagValid = TAG_NOT_VALID;
+ Tuint32 = NFC_Tag_U[readerID].Struct.tagValid;
+ retCode = WriteValue( readerID, tagInfo, data, 29, Tuint32 );
+
+ //retCode |= WriteCRCValue(readerID);
+
+ if ( retCode == SUCCESS )
+ {
+ #ifdef RFID_LOCK_FILEDS_FOR_READ_ONLY
+ //lock page 50, pages 48 - 63 (bit 02 of byte 1)
+ retCode = RFID_CardModeReceive( readerID, tagInfo, data, block, BLOCK_SIZE, &succeededSize);
+ if ( retCode == SUCCESS )
+ {
+ retCode = RFID_CardModeReceive( readerID, tagInfo, data, block, BLOCK_SIZE, &succeededSize);
+ if ( retCode == SUCCESS )
+ {
+ data[0] |= 0x08;//lock pages 48 - 63 (bit 02 of byte 1)
+ retCode = RFID_CardModeSend( readerID, tagInfo, data, block, BLOCK_SIZE, &succeededSize);
+ if ( retCode == SUCCESS )
+ {
+ return true;
+ }
+ }
+
+ }
+ #else
+ return true;
+ #endif
+
+ }
+ return false;
+}
+/* AVI-
+bool setTagInvalidAndLock(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo )
{
RFID_RETURN_CODE retCode;
uint16_t succeededSize = 0;
@@ -938,9 +1114,9 @@ bool setTagInvalidAndLock( uint32_t readerID, NxpNci_RfIntf_t *tagInfo )
}
return false;
-}
-
-int incrementCounterAndCompare( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, int limit )
+}*/
+/*
+int incrementCounterAndCompare(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, int limit )//AVI-
{
RFID_RETURN_CODE retCode;
uint16_t succeededSize = 0;
@@ -956,18 +1132,66 @@ int incrementCounterAndCompare( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, int
if ( retCode != SUCCESS )
return -2;
return 1;
+}*/
+
+int incrementCounterAndCompare( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo)//AVI+
+{
+ RFID_RETURN_CODE retCode;
+ uint8_t tagMemory[1024];
+
+ if (( NFC_Tag_R[readerID].Struct.pluginCounter == 0 ) && (readerID == READER_1))
+ {
+ //OK
+ NFC_Tag_U[readerID].Struct.pluginCounter = NFC_Tag_R[readerID].Struct.pluginCounter + 1; // need to update CRC
+
+ retCode = WriteValue( readerID, tagInfo, tagMemory, 28, NFC_Tag_U[readerID].Struct.pluginCounter );
+ //Add log print
+ }
+ else if (( NFC_Tag_R[readerID].Struct.wasteCounter == 0 ) && ((readerID == READER_2) || (readerID == READER_3)))
+ {
+ //OK
+ NFC_Tag_U[readerID].Struct.wasteCounter = NFC_Tag_R[readerID].Struct.wasteCounter + 1; // need to update CRC
+
+ retCode = WriteValue( readerID, tagInfo, tagMemory, 28, NFC_Tag_U[readerID].Struct.wasteCounter );
+ //Add log print
+ }
+ else
+ {
+ return -1;
+ //Add log print
+ }
+
+ if ( retCode != SUCCESS )
+ {
+ return -2;
+ }
+ return 1;
}
-void crc_ccitt_init(void)
+RFID_RETURN_CODE incrementCounter( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo)//AVI+
{
- m_crc = 0xffff;
+ RFID_RETURN_CODE retCode;
+ uint8_t tagMemory[1024];
+
+ NFC_Tag_U[readerID].Struct.counter = NFC_Tag_R[readerID].Struct.counter + 1; // need to update CRC
+
+ retCode = WriteValue( readerID, tagInfo, tagMemory, 28, NFC_Tag_U[readerID].Struct.counter );
+
+ return retCode;
}
-void crc_ccitt_update(unsigned char * buf, int len)
+//void crc_ccitt_init(void)//AVFI-
+//{
+// m_crc = 0xffff;
+//}
+
+uint32_t crc_ccitt_update(unsigned char * buf, int len)
{
int i, j;
- for ( i = 0; i < len; i++ )
+ uint32_t m_crc = 0xffff;
+
+ for ( i = 8; i < len; i++ )//AVI 0-> 8 start after tag id
{
m_crc ^= buf[i];
for ( j = 0; j < 8; j++ )
@@ -978,6 +1202,10 @@ void crc_ccitt_update(unsigned char * buf, int len)
m_crc = (m_crc >> 1);
}
}
+
+ m_crc %= 10000; //AVI+ because we are using ASCII the max number in 32 bit is 9999 - need to check with logitag
+
+ return m_crc;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h
index b07c79f4f..150779f70 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h
@@ -3,6 +3,7 @@
#include "LT_NFC_Info.h"
#include "include.h"
+#include "datadef.h"
typedef enum {
SUCCESS = 0,
@@ -56,7 +57,7 @@ typedef struct{
} FIELDS_LOCATIONS;
FIELDS_LOCATIONS Fields[NUMBER_OF_FIELDS];
-unsigned int m_crc;
+//unsigned int m_crc; //AVI-
RFID_RETURN_CODE RFID_Connect(uint32_t readerID);
RFID_RETURN_CODE RFID_Disconnect(uint32_t readerID);
@@ -68,23 +69,29 @@ RFID_RETURN_CODE RFID_StopDiscovery(uint32_t readerID);
RFID_RETURN_CODE RFID_WaitForDiscoveryNotification(uint32_t readerID, NxpNci_RfIntf_t *pRfIntf);
RFID_RETURN_CODE RFID_CardModeReceive(uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *data, uint8_t startBlock, uint16_t dataSize, uint16_t *succeededSize);
RFID_RETURN_CODE RFID_CardModeSend(uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *data, uint8_t startBlock, uint16_t dataSize, uint16_t *succeededSize);
-bool IsTagValid(uint32_t readerID, NxpNci_RfIntf_t *tagInfo);
+//bool IsTagValid(uint32_t readerID, NxpNci_RfIntf_t *tagInfo);
+bool IsTagValid(uint32_t readerID);//AVI+
+bool IsTagBlocked(uint32_t readerID);//AVI+
uint32_t GetCounter (uint32_t readerID, NxpNci_RfIntf_t *tagInfo);
-RFID_RETURN_CODE WriteValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, uint32_t valueNum );
+RFID_RETURN_CODE WriteValue(RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, uint32_t valueNum );
-uint32_t ReadValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, RFID_RETURN_CODE *rfidCode );
-RFID_RETURN_CODE getUID( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid );
+//uint32_t ReadValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, RFID_RETURN_CODE *rfidCode );
+RFID_RETURN_CODE ReadValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *value, uint8_t valueIndex, uint32_t *valueNum );
+RFID_RETURN_CODE getUID( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid );
void calcHash( uint8_t *input, uint16_t inputLen, uint8_t *output );
-bool setHashValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen );
-int checkHashValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen );
-RFID_RETURN_CODE getPwd( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *pwd );
+bool setHashValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen );
+//int checkHashValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *uid, uint16_t inputLen );
+int checkHashValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo );//AVI+
+RFID_RETURN_CODE getPwd( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *pwd );
int checkPwd(uint8_t *pwd, uint8_t *PACK );
-bool setPwdValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd );
-bool setPACKValue( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd );
-bool activatePwd( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t startingBlock );
-bool lockDataSetOnInit( uint32_t readerID, NxpNci_RfIntf_t *tagInfo );
-bool setTagInvalidAndLock( uint32_t readerID, NxpNci_RfIntf_t *tagInfo );
-int incrementCounterAndCompare( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, int limit );
+bool setPwdValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd );
+bool setPACKValue( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *newPwd );
+bool activatePwd( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t startingBlock );
+bool lockDataSetOnInit( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo );
+bool setTagInvalidAndLock( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo );
+//int incrementCounterAndCompare( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, int limit );//AVI-
+int incrementCounterAndCompare( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo);//AVI+
+RFID_RETURN_CODE incrementCounter( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo);//AVI+
/////////////////////////////////////////////////////////////////////////////////////
void MD5Init( MD5_CTX * );
void MD5Update( MD5_CTX *, unsigned char *, unsigned int );
@@ -92,7 +99,7 @@ void MD5Final( unsigned char results[16], MD5_CTX * );
//////////////////////////////////////
void crc_ccitt_init(void);
-void crc_ccitt_update(unsigned char * buf, int len);
+uint32_t crc_ccitt_update(unsigned char * buf, int len);
//////////////////////////////////////
// helpers
@@ -100,6 +107,6 @@ void InitFields();
void SetFieldsLocationLen();
uint16_t GetBlockLocation(uint16_t byte);
void GetBlocksToRead( uint16_t* firstBlock, uint16_t* lastBlock, uint16_t beginByte, uint16_t length);
-RFID_RETURN_CODE SetFieldValueIntoBlocks( uint32_t readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *data, uint8_t* dataLen, uint8_t *value, uint8_t valueIndex );
+RFID_RETURN_CODE SetFieldValueIntoBlocks( RFID_READER_ID readerID, NxpNci_RfIntf_t *tagInfo, uint8_t *data, uint8_t* dataLen, uint8_t *value, uint8_t valueIndex );
/////////////////////////////////////
#endif
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c
index f22d53a77..73bc2f9af 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c
@@ -233,7 +233,7 @@ uint8_t WHS_Check_Fan_Controller_Type(WHS_fan_num fan_number)
if((Fan_Driver_Info[fan_number].Product_ID != 0x36) || (status != OK))
{
I2CFanViaSwitch_ADD_Buf[fan_number] = 0x00;
- ReportWithPackageFilter(WasteFilter,"unable to recognize the an controller", __FILE__,__LINE__, status, RpMessage, fan_number, 0);
+ ReportWithPackageFilter(WasteFilter,"unable to recognize the WHS fan controller", __FILE__,__LINE__, status, RpMessage, fan_number, 0);
status = ERROR;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c
index 3e36d3bba..ea45c89fe 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c
@@ -689,7 +689,7 @@ bool WHS_Control_blub(bool value)
}
else
{
- #warning Add warning message
+ LOG_ERROR (WHS_HW_Ver, "wrong whs hw version");
status = ERROR;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
index 779d7e82f..ae862505a 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
@@ -354,7 +354,7 @@ uint32_t MotorRunCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO
{
angle = Calculate_Arm_Distance(Arm_Drier_Center,temp);
- if ((angle<400)||(angle>16000))
+ if (abs(angle)<400)
{
BusyFlag = NOTBUSY;
}
@@ -376,7 +376,7 @@ uint32_t MotorRunCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //TODO
Report("motor timeout",__FILE__,__LINE__,MotorId,RpMessage,MotorTimeout[MotorId],0);
Busy = BUSY;
}
- Report("MotorRunCallBackFunctionMotorRunCallBackFunction curr prev return",__FILE__,encoder,temp,RpWarning,AccumulatedArmMovement,0);
+ Report("MotorRunCallBackFunction curr prev return",__FILE__,encoder,temp,RpWarning,AccumulatedArmMovement,0);
//call the module callback
if (MotorCallback[MotorId])
{
@@ -1128,10 +1128,10 @@ float Calculate_Arm_Angle(uint32_t Drier_Center,uint32_t Current_Angle)
int Calculate_Arm_Distance(uint32_t Drier_Center,uint32_t Current_Angle)
{
int angle;
- if (Current_Angle >= Drier_Center)
+ //if (Current_Angle >= Drier_Center)
angle = Current_Angle - Drier_Center;
- else
- angle = Current_Angle + 0x3FFF - Drier_Center;
+ //else
+ // angle = Current_Angle + 0x3FFF - Drier_Center;
ReportWithPackageFilter(DiagnosticsFilter,"Calculate_Arm_Distance",__FILE__,angle,Current_Angle,RpMessage,Drier_Center,0);
return angle;
}
@@ -1163,7 +1163,7 @@ uint32_t LoadingArmReset_Callback(uint32_t MotorId, uint32_t ReadValue)
{
ReportWithPackageFilter(DiagnosticsFilter,"LoadingArmReset_Callback OK",__FILE__,__LINE__,Arm_Drier_Center,RpMessage,ReadValue,0);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,0);
- if ((angle<400)||(angle>16000))
+ if (abs(angle)<400)
//if (fabs(angle)<0.2)
{
ReportWithPackageFilter(DiagnosticsFilter,"drier center proximity",__FILE__,temp,Arm_Drier_Center,RpMessage,angle,0);
diff --git a/Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.c b/Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.c
deleted file mode 100644
index f5101d9e7..000000000
--- a/Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * RFID_Task.c
- *
- * Created on: Oct 23, 2019
- * Author: shlomo
- */
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "include.h"
-#include "inc/hw_memmap.h"
-
-#include <Drivers/RFID/RFID_Task.h>
-Task_Handle RFID_Task_Handle;
-Mailbox_Handle RFID_ReadingMsgQ = NULL;
-typedef enum
-{
- RFID_Initialization,
-}RFID_ReadingMessages;
-
-typedef struct RFID_ReadingMessage{
- RFID_ReadingMessages messageId;
- PANEL_BUTTON_OR_CRAT_ID CartId;
-}RFID_ReadingMessageStruc;
-
-void RFID_Task(UArg arg0, UArg arg1)
-{
- RFID_ReadingMessageStruc RFID_ReadingMessage;
- RFID_ReadingMsgQ = Mailbox_create(sizeof(RFID_ReadingMessageStruc), 10, NULL,NULL);
- RFID_Task_Handle = Task_self();
-// double dbl_setpoint_Q = 0.0;
-
- while(1)
- {
- Mailbox_pend(RFID_ReadingMsgQ , &RFID_ReadingMessage, BIOS_WAIT_FOREVER);
-
- switch (RFID_ReadingMessage.messageId)
- {
- case RFID_Initialization:
- break;
- default:
- break;
- }
- }
-}
diff --git a/Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.h b/Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.h
deleted file mode 100644
index e69de29bb..000000000
--- a/Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.h
+++ /dev/null
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 f4b72bb0f..750d02f6b 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
@@ -212,8 +212,10 @@ void MainCardStoredItemRequestFunc(MessageContainer* requestContainer)
response.maincardstoreddata = &MainCardStoredDataInstance;
MainCardStoredDataInstance.maincards_n = &Serial[0];
MainCardStoredDataInstance.n_storeditem = MAX_EEPROM_STORAGE;
+ MainCardStoredDataInstance.storeditem = my_malloc(MAX_EEPROM_STORAGE*sizeof(MainCardStoredItem *));
for (i = 0;i<MAX_EEPROM_STORAGE;i++)
{
+ main_card_stored_item__init(&StoredData[i]);
StoredData[i].has_address = true;
StoredData[i].has_data = true;
StoredData[i].address = i;
diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg
index 7fdf21819..d636d53d1 100644
--- a/Software/Embedded_SW/Embedded/Embedded.cfg
+++ b/Software/Embedded_SW/Embedded/Embedded.cfg
@@ -174,17 +174,17 @@ MillisecLowTaskParams.instance.name = "MilliSecondLow";
MillisecLowTaskParams.stackSize = 4096;
MillisecLowTaskParams.priority = 12;
Program.global.millisecLow = Task.create("&MillisecLowTask", MillisecLowTaskParams);
-
-var RFID_TaskParams = new Task.Params();
+/*
+var RFID_TaskParams = new Task.Params(); --- moved to I2C_RFID_Disp_Task.c
RFID_TaskParams.instance.name = "RFID";
RFID_TaskParams.stackSize = 4096;
-RFID_TaskParams.priority = 11;
+RFID_TaskParams.priority = 10;
Program.global.millisecLow = Task.create("&RFID_Task", RFID_TaskParams);
-
+*/
var ADCProcessTaskParams = new Task.Params();
ADCProcessTaskParams.instance.name = "adcProcess";
ADCProcessTaskParams.stackSize = 512;
-ADCProcessTaskParams.priority = 10;
+ADCProcessTaskParams.priority = 9;
Program.global.adcProcess = Task.create("&ADCProcessTask", ADCProcessTaskParams);
var FPGALoad = new Task.Params();
diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c
index c1d83abb3..6c40b7916 100644
--- a/Software/Embedded_SW/Embedded/Main.c
+++ b/Software/Embedded_SW/Embedded/Main.c
@@ -91,9 +91,11 @@
#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
#include <Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include <Drivers/I2C_Communication/RFID_NFC/NFC.h>
#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include <Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h>
#include <Utilities/delay.h>
//*****************************************************************************
//
@@ -182,8 +184,8 @@ Void errHook(Error_Block *eb)
System_printf("assertion violation: ");
f_write(LogFileHandle,"\r\nassertion violation: ",22,&Bytes );
}
+ CloseLogFile();
}
- CloseLogFile();
#ifdef WATCHDOG
@@ -222,6 +224,7 @@ void Init_EVB()
int main(void)
{
+ FRESULT Fresult = FR_OK;
// Enable interrupts to the processor.
//
ROM_IntMasterDisable();
@@ -255,6 +258,39 @@ int main(void)
LOG_ERROR (iFResult, "Error during init Flash File System");
assert(iFResult);
}
+ Fresult = f_mkdir("0://SysInfo");
+ if ((Fresult != FR_OK)&&(Fresult != FR_EXIST))
+ {
+#ifdef WATCHDOG
+ ROM_WatchdogResetDisable(WATCHDOG0_BASE);
+ uint32_t timeout = 0xFFFFFFFFU;
+ ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout);
+#endif
+ STATUS_GREEN_LED_ON;
+ ACTIVITY_GREEN_LED_ON;
+ COMM_GREEN_LED_ON;
+
+ STATUS_RED_LED_ON;
+ ACTIVITY_RED_LED_ON;
+ COMM_RED_LED_ON;
+ //FFS error
+ Report("FFS error - rebuilding", __FILE__,__LINE__,Fresult, RpMessage,0, 0);
+ FRESULT iFResult = Init_Flash_File_System(true);// true
+ Fresult = f_mkdir("0://SysInfo");
+
+ ACTIVITY_GREEN_LED_OFF;
+ COMM_GREEN_LED_OFF;
+
+ STATUS_RED_LED_OFF;
+ ACTIVITY_RED_LED_OFF;
+ COMM_RED_LED_OFF;
+#ifdef WATCHDOG
+ ROM_WatchdogResetEnable(WATCHDOG0_BASE);
+ timeout = 120000000*3;
+ ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout);
+#endif
+ }
+
OpenLogFile();
Data = MCU_E2PromEmbeddedVersionRead();
memcpy (&Version,&Data,4);
@@ -271,12 +307,13 @@ int main(void)
Init_All_I2C();
#ifndef EVALUATION_BOARD
Block_Main_MUX_TCA9548A_0xE4();//unused, same i2c as head and whs cards
- I2C_BUSY_DELAY = 3000; //temporary workaround!!!
+
Check_Head_Type_Via_EEPROM();//without trigger
Check_WHS_Type_Via_EEPROM();//without trigger
- I2C_BUSY_DELAY = 100; //temporary workaround!!!
+ I2C_2_3_BUSY_DELAY = 100; //I2C2_BASE, I2C3_BASE
//WHS_Type = WHS_TYPE_NEW; //for testing
+ //Head_Type = HEAD_TYPE_ARC; //for testing
if ((Head_Type >= HEAD_TYPE_UNKNOWN_WITH_CARD)&&(WHS_Type == WHS_TYPE_NEW))
{
@@ -284,7 +321,7 @@ int main(void)
}
if ((Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD)||(WHS_Type == WHS_TYPE_NEW))
{
- I2C_ReadingTask_Init();
+ I2C_ReadingTask_Init();//I2C Task for HEAD + WHS
}
if (Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD)
{
@@ -295,7 +332,14 @@ int main(void)
STATUS_GREEN_LED_ON;
FPGA_Init();
- Check_IFS_Availability();//Init_IFS();//must be done after FPGA_Init
+ I2C_DispRFIDTask_Init();//I2C Task for dispensers & RFID
+
+ #if defined(USE_RFID_LOGIC) || defined(USE_RFID_STUB)
+ Trigger_RFID_Init(); //Init_IFS();//must be done after FPGA_Init
+ #else
+ Check_IFS_Availability();
+ #endif
+
#endif
MAP_FPULazyStackingEnable();
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index e754b0df2..eceb92d63 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -631,8 +631,16 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId)
switch (AlarmItem[AlarmId].AlarmSource)
{
case ALARM_SOURCE_TYPE__TemperatureAlarm:
- usnprintf(AlarmReasonStr, 100, "Temperature problem in heater %d",AlarmItem[AlarmId].DeviceId);
- return JOB_TEMPERATURE_ALARM;
+ if (AlarmItem[AlarmId].Severity == DEBUG_LOG_CATEGORY__Critical)
+ {
+ usnprintf(AlarmReasonStr, 100, "Safety Critical Alarm %d",AlarmItem[AlarmId].EventType);
+ return JOB_SAFETY_CRITICAL_ALARM;
+ }
+ else
+ {
+ usnprintf(AlarmReasonStr, 100, "Temperature problem in heater %d",AlarmItem[AlarmId].DeviceId);
+ return JOB_TEMPERATURE_ALARM;
+ }
case ALARM_SOURCE_TYPE__LimitSwitchAlarm:
usnprintf(AlarmReasonStr, 100, "Dispenser %d empty",AlarmItem[AlarmId].DeviceId);
return JOB_OUT_OF_DYE;
@@ -987,13 +995,20 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
}
if ((IFS_Availability[1] == IFS_RECOGNIZED_INIT_PASSED)&&(IFS_Availability[2] == IFS_RECOGNIZED_INIT_PASSED)) //ifs installed -check cartridges
{
-
- tempFoundReason = Waste_CheckState(&AlarmId);
- if (tempFoundReason!=JOB_OK)
- {
- FoundReason = tempFoundReason;
- ReportWithPackageFilter(AlarmFilter,"waste handling alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0);
- }
+ tempFoundReason = Waste_CheckState(&AlarmId);
+ if (tempFoundReason!=JOB_OK)
+ {
+ for (Alarm_i = 0;Alarm_i<NumOfSystemAlarms;Alarm_i++)
+ {
+ if (AlarmId == (AlarmItem[Alarm_i].EventType))
+ {
+ FoundReason = tempFoundReason;
+ AlarmId = Alarm_i;
+ ReportWithPackageFilter(AlarmFilter,"waste handling alarm preventing job", __FILE__,AlarmId,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0);
+ break;
+ }
+ }
+ }
}
if ((AlarmState[Alarm_i].Status == true)&&(FoundReason == JOB_OK))
{
@@ -1025,6 +1040,18 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
if (FoundReason == JOB_OK)
{
FoundReason = Winder_Check_Cone();
+ if (FoundReason!=JOB_OK)
+ {
+ for (Alarm_i = 0;Alarm_i<NumOfSystemAlarms;Alarm_i++)
+ {
+ if (AlarmItem[Alarm_i].EventType == EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST)
+ {
+ AlarmId = Alarm_i;
+ ReportWithPackageFilter(AlarmFilter,"cone not in place - preventing job", __FILE__,AlarmId,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0);
+ break;
+ }
+ }
+ }
}
if (FoundReason != JOB_OK)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 1057ddbc3..3de362af9 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -524,11 +524,13 @@ int TemperatureSum[MAX_HEAD_CARD_TEMP_SENS_ID];
int TemperatureMin[MAX_HEAD_CARD_TEMP_SENS_ID];
int TemperatureMax[MAX_HEAD_CARD_TEMP_SENS_ID];
int TemperatureCount[MAX_HEAD_CARD_TEMP_SENS_ID];
-int TemperatureCalc[MAX_HEAD_CARD_TEMP_SENS_ID];
+int TemperatureCalc[MAX_HEAD_CARD_TEMP_SENS_ID] = {2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1,2.1};
void MillisecUpdateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId,int temperature)
{
//if(TemperatureCount[SensorId]++>=10)
// TemperatureCount[SensorId] = 0;
+ if ((temperature>28000)||(temperature<900))
+ return;
TemperatureCount[SensorId]++;
if (TemperatureMax[SensorId]<temperature) TemperatureMax[SensorId]=temperature;
if (TemperatureMin[SensorId]>temperature) TemperatureMin[SensorId]=temperature;
@@ -540,7 +542,11 @@ int MillisecCalculateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId)
TemperatureSum[SensorId]-=TemperatureMax[SensorId];
TemperatureSum[SensorId]-=TemperatureMin[SensorId];
calc = TemperatureSum[SensorId] / (TemperatureCount[SensorId]-2);
-
+ if (TemperatureSum[SensorId]>10)
+ {
+ if(abs(TemperatureMax[SensorId]-TemperatureMin[SensorId])>2000)
+ Report("Millisec Temp spike",__FILE__,SensorId,(int)TemperatureMax[SensorId],RpWarning,(int) TemperatureMin[SensorId],0);
+ }
TemperatureSum[SensorId] = 0;
TemperatureCount[SensorId] = 0;
TemperatureMin[SensorId] = 30000;
@@ -703,14 +709,14 @@ uint32_t MillisecLowLoop(uint32_t tick)
Trigger_InputsReading();
- #ifdef USE_RFID
+ #ifdef USE_RFID_LOGIC
//every 100 m sec
for(readerID = READER_1; readerID < Max_Readers ; readerID++)
{
if(DiscoverRFIDTagEvery100mSec[readerID] == true)
{
RFIDCallEvery100mSec(readerID);
- break;
+ //break;
}
}
#endif
@@ -821,12 +827,13 @@ uint32_t MillisecLowLoop(uint32_t tick)
//call IFS state machine
midTankStateMachine();
- #ifdef USE_RFID
- RFIDCycleEvery1Sec();
- #endif
+
}
if (Tensecond_Tick)
{
+ #ifdef USE_RFID_LOGIC
+ RFIDCycleEvery1Sec();
+ #endif
}
if (OneMinute_Tick)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
index cfd4db0e6..11a48b587 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
@@ -545,23 +545,15 @@ void CopyTemperaturesToMonitor(void)
headblowervoltage2 = HeadBlowersGetRPM(HEAD_FAN_LEFT);
DiagnosticsMonitor.headblowervoltage1 = &headblowervoltage1;
DiagnosticsMonitor.headblowervoltage2 = &headblowervoltage2;
-#warning machine to machine test
+//#warning machine to machine test
DiagnosticsMonitor.headzone4temperature =
HeaterTemperature[HEATER_TYPE__HeaterZone4];
- DiagnosticsMonitor.headzone6temperature =
- HeaterTemperature[HEATER_TYPE__HeaterZone6];
- DiagnosticsMonitor.headzone8temperature =
- HeaterTemperature[HEATER_TYPE__HeaterZone8];
DiagnosticsMonitor.headzone9temperature =
HeaterTemperature[HEATER_TYPE__HeaterZone9];
DiagnosticsMonitor.headzone10temperature =
HeaterTemperature[HEATER_TYPE__HeaterZone10];
DiagnosticsMonitor.n_headzone4temperature =
HeaterCounterIndex[HEATER_TYPE__HeaterZone4];
- DiagnosticsMonitor.n_headzone6temperature =
- HeaterCounterIndex[HEATER_TYPE__HeaterZone6];
- DiagnosticsMonitor.n_headzone8temperature =
- HeaterCounterIndex[HEATER_TYPE__HeaterZone8];
DiagnosticsMonitor.n_headzone9temperature =
HeaterCounterIndex[HEATER_TYPE__HeaterZone9];
DiagnosticsMonitor.n_headzone10temperature =
@@ -1013,8 +1005,6 @@ void DiagnosticOneSecCollection(void)
DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone12, MillisecGetTemperatures(HEAD_PT100_ZONE_12_0X8A_1));
#warning MACHINE TO MACHINE TEST
DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone4, MillisecGetTemperatures(HEAD_PT100_ZONE_4_0X82_1));
- DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone6, MillisecGetTemperatures(HEAD_PT100_ZONE_6_0X84_1));
- DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone8, MillisecGetTemperatures(HEAD_PT100_ZONE_8_0X86_1));
DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone9, MillisecGetTemperatures(HEAD_PT100_ZONE_9_0X88_0));
DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone10, MillisecGetTemperatures(HEAD_PT100_ZONE_10_0X88_1));
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h
index 7ec1962f3..e0afad820 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h
@@ -54,6 +54,7 @@ uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer);
void DiaglosticChangeBlowerData();
+void HomingStopReporting(void);
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
index c7f8740d1..086525bc1 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
@@ -46,6 +46,16 @@ uint32_t Diagnostics_Dryer_UnLoading(void);
uint32_t Diagnostics_Dryer_Loading(void);
int kval_upper_value;
+void HomingStopReporting(void)
+{
+ int i;
+ for (i = 0; i< NUM_OF_MOTORS;i++)
+ {
+ HomingToken[i][0] == 0;
+ }
+ LOG_ERROR(0,"HomingStopReporting");
+}
+
/********************************************************************************
* Motor Homing
********************************************************************************/
@@ -475,7 +485,7 @@ uint32_t Diagnostics_Set_Load_Arm_To_Stopper_Callback(uint32_t deviceID, uint32_
angle = Calculate_Arm_Distance(D_DrierPrevLocation,temp);
- if ((angle<14000 )||(BusyFlag == BUSY)) // OK - take another round
+ if ((abs (angle)<14000 )||(BusyFlag == BUSY)) // OK - take another round
{
responseContainer.has_error = true;
responseContainer.error = ERROR_CODE__GENERAL_ERROR;
@@ -611,7 +621,7 @@ uint32_t Diagnostics_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue
ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Dryer_Loading_Callback",__FILE__,(int)angle,(int)ReadValue,RpMessage,temp,0);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,D_numberOfCycles);
- if ((angle>14000 )&&(ReadValue == NOTBUSY)) // OK - take another round
+ if ((abs(angle)>14000 )&&(ReadValue == NOTBUSY)) // OK - take another round
{
D_DrierPrevLocation = temp;
//ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index 193a35e12..6c4293f6f 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -446,12 +446,19 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
LOG_ERROR (0, "Wrong Data Allocation");
return ERROR;
}
- if (InitFailures > 3)
+ if (InitFailures > REPEATED_INIT_FAILURE_LIMIT)
{
Report("HWConfigurationInit repeated failure",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0);
AlarmHandlingSetAlarm (EVENT_TYPE__POWER_UP_BIT_FAILURE,ON);
return ERROR;
}
+ else
+ {
+ if (InitFailures > 2)
+ {
+ Report("HWConfigurationInit repeated failure going up",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0);
+ }
+ }
HardwareConfiguration *request = UploadRequest->hardwareconfiguration;
@@ -628,7 +635,6 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
return OK;
}
char Serial[21];
-MidTankData MidTankInfo[MAX_SYSTEM_DISPENSERS];
uint32_t MachineCalibrationDataRequestFunc(MessageContainer* requestContainer)
{
@@ -636,6 +642,7 @@ uint32_t MachineCalibrationDataRequestFunc(MessageContainer* requestContainer)
MachineCalibrationDataRequest *request = machine_calibration_data_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
uint32_t *DancersData = my_malloc(MAX_SYSTEM_DANCERS*sizeof(uint32_t));
MidTankData ** MidTankDataCollect = my_malloc(sizeof(MidTankData *)*MAX_SYSTEM_DISPENSERS);
+ MidTankData MidTankInfo[MAX_SYSTEM_DISPENSERS];
int i;
for (i = 0;i<MAX_SYSTEM_DANCERS;i++)
@@ -655,7 +662,8 @@ uint32_t MachineCalibrationDataRequestFunc(MessageContainer* requestContainer)
//MCU_E2PromSerialNumRead(&Serial);
MachineCalibrationDataResponse response = MACHINE_CALIBRATION_DATA_RESPONSE__INIT;
- machine_calibration_data__init(&response.machinecalibrationdata);
+ response.machinecalibrationdata = my_malloc(sizeof(MachineCalibrationData));
+ machine_calibration_data__init(response.machinecalibrationdata);
response.machinecalibrationdata->n_dancermiddlepoint = MAX_SYSTEM_DANCERS;
response.machinecalibrationdata->dancermiddlepoint = DancersData;
response.machinecalibrationdata->machineserialnumber = Serial;
@@ -885,7 +893,9 @@ void FlashInitAndLoad(void)
}
Report("Hardware Initialized", __FILE__,__LINE__,Bytes, RpMessage, GENHWCFG_MAP_IN_FLASH, 0);
- StoreDancerConfigMessage();
+ StoreDancerConfigMessage(0);
+ StoreDancerConfigMessage(1);
+ StoreDancerConfigMessage(2);
Report("Dancer Initialized", __FILE__,DancersCfg[0].zeropoint,DancersCfg[1].zeropoint, RpMessage, DancersCfg[2].zeropoint, 0);
/*Bytes = AlarmHandlingLoadFile();
if (Bytes>0)
diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c
index 4c248e94b..bf68b64f0 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c
@@ -245,7 +245,7 @@ return OK;
* */
char WasteEmptyingToken[36+1] = {0};
-uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State, double percentage)
+uint32_t CartridgeStateUpdate(CartridgeSlot Slot, int32_t index, CartridgeState State, double percentage)
{
if (WasteEmptyingToken[0] == 0)
return ERROR;
@@ -271,6 +271,9 @@ uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State, double pe
CartData.has_slot = true;
CartData.slot = Slot;
+ CartData.has_index = true;
+ CartData.index = index;
+
/*
struct _CartridgeStatus
{
@@ -327,9 +330,9 @@ uint32_t StartInkFillingStatusRequestFunc(MessageContainer* requestContainer)
StartInkFillingStatusRequest* request = start_ink_filling_status_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
ustrncpy (WasteEmptyingToken, requestContainer->token,36);
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink,CARTRIDGE_STATE__None,0);
- CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle,CARTRIDGE_STATE__None,0);
- CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower,CARTRIDGE_STATE__None,0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink,0, CARTRIDGE_STATE__None,0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle, 0, CARTRIDGE_STATE__None,0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower, 1, CARTRIDGE_STATE__None,0);
start_ink_filling_status_request__free_unpacked(request,NULL);
return status;
// case MESSAGE_TYPE__StartWasteEmptyingRequest:
diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h
index ed3ec205d..a9539e0fa 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h
+++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h
@@ -19,7 +19,7 @@ void SetMachineStatus (MachineState State);
int MachineUpdateResponseFunc(void);
uint32_t StartInkFillingStatusRequestFunc(MessageContainer* requestContainer);
-uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State, double percentage);
+uint32_t CartridgeStateUpdate(CartridgeSlot Slot, int32_t index, CartridgeState State, double percentage);
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c
index 021dd243f..946958a08 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c
@@ -92,8 +92,8 @@ void HeadBlowersInit()
HeadBlowerControl[0].m_params.MAX = 200;
HeadBlowerControl[0].m_params.MIN = -200;
HeadBlowerControl[0].m_params.Kd = 0;
- HeadBlowerControl[0].m_params.Kp = 350;
- HeadBlowerControl[0].m_params.Ki = 25;
+ HeadBlowerControl[0].m_params.Kp = 800;
+ HeadBlowerControl[0].m_params.Ki = 80;
HeadBlowerControl[0].m_params.IntegralErrorMultiplier = 10;
HeadBlowerControl[0].m_params.ProportionalErrorMultiplier = 10;
HeadBlowerControl[0].m_params.epsilon = 0;
@@ -110,8 +110,8 @@ void HeadBlowersInit()
HeadBlowerControl[1].m_params.MAX = 200;
HeadBlowerControl[1].m_params.MIN = -200;
HeadBlowerControl[1].m_params.Kd = 0;
- HeadBlowerControl[1].m_params.Kp = 350;
- HeadBlowerControl[1].m_params.Ki = 25;
+ HeadBlowerControl[1].m_params.Kp = 800;
+ HeadBlowerControl[1].m_params.Ki = 80;
HeadBlowerControl[1].m_params.IntegralErrorMultiplier = 10;
HeadBlowerControl[1].m_params.ProportionalErrorMultiplier = 10;
HeadBlowerControl[1].m_params.epsilon = 0;
@@ -212,108 +212,148 @@ uint32_t HeadBlowersOffGet()
ReportWithPackageFilter(HeatersFilter,"HeadBlowersOffGet",__FILE__,__LINE__,HeadBlowersEnable,RpError, 0,0);
return HeadBlowersEnable;
}
+static int8_t count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0;
+static int8_t count6 = 0, count7 = 0, count8 = 0, count9 = 0, count10 = 0;
+void setArcHeadAlarms(uint32_t AlarmId, bool value)
+{
+ AlarmHandlingSetAlarm(AlarmId, value);
+ if (value == true)
+ {
+ switch(AlarmId)
+ {
+ /*case EVENT_TYPE__DYEING_HEAD_ARC_LID_IS_OPEN:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count9,RpError, 0,0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_TUNNEL_LID_IS_OPEN:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count9,RpError, 0,0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_STOPPED:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count9,RpError, 0,0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_STOPPED:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count9,RpError, 0,0);
+ break;*/
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_RPM_TOO_LOW:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count3,RpError, HeadBlowersGetRPM(HEAD_FAN_RIGHT),0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_RPM_TOO_LOW:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count4,RpError, HeadBlowersGetRPM(HEAD_FAN_LEFT),0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count5,RpError, PressureSensorGetPressure(HEAD_FAN_RIGHT),0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count7,RpError, PressureSensorGetPressure(HEAD_FAN_LEFT),0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count6,RpError, PressureSensorGetPressure(HEAD_FAN_RIGHT),0);
+ break;
+ case EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW:
+ ReportWithPackageFilter(HeatersFilter,"ArcHeadAlarms on",__FILE__,AlarmId,count8,RpError, PressureSensorGetPressure(HEAD_FAN_LEFT),0);
+ break;
+ }
+ }
+}
void ArcHeadAlarms(void)
{
double currentFlow = 0.0;
- static int8_t count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0;
- static int8_t count6 = 0, count7 = 0, count8 = 0, count9 = 0, count10 = 0;
if (FPGA_Read_limit_Switches(I2C_HEADCARD_COVER_LS_ARC) != LIMIT) {
if (++count9 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_ARC_LID_IS_OPEN, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_ARC_LID_IS_OPEN, true);
count9 = (count9 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count9);
} else {
if (--count9 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_ARC_LID_IS_OPEN, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_ARC_LID_IS_OPEN, false);
count9 = (count9 < 0)?(0):(count9);
}
if (FPGA_Read_limit_Switches(I2C_HEADCARD_COVER_LS_TUNNEL_ARC) != LIMIT) {
if (++count10 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_TUNNEL_LID_IS_OPEN, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_TUNNEL_LID_IS_OPEN, true);
count10 = (count10 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count10);
} else {
if (--count10 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_TUNNEL_LID_IS_OPEN, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_TUNNEL_LID_IS_OPEN, false);
count10 = (count10 < 0)?(0):(count10);
}
if (Head_Fan_Tach[0] == 0x1FFE) {
if (++count1 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_STOPPED, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_STOPPED, true);
count1 = (count1 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count1);
} else {
if (--count1 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_STOPPED, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_STOPPED, false);
count1 = (count1 < 0)?(0):(count1);
}
if (Head_Fan_Tach[1] == 0x1FFE) {
if (++count2 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_STOPPED, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_STOPPED, true);
count2 = (count2 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count2);
} else {
if (--count2 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_STOPPED, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_STOPPED, false);
count2 = (count2 < 0)?(0):(count2);
}
if (HeadBlowersGetRPM(HEAD_FAN_RIGHT) < 2000) {
if (++count3 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_RPM_TOO_LOW, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_RPM_TOO_LOW, true);
count3 = (count3 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count3);
} else {
if (--count3 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_RPM_TOO_LOW, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FAN_RPM_TOO_LOW, false);
count3 = (count3 < 0)?(0):(count3);
}
if (HeadBlowersGetRPM(HEAD_FAN_LEFT) < 2000) {
if (++count4 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_RPM_TOO_LOW, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_RPM_TOO_LOW, true);
count4 = (count4 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count4);
} else {
if (--count4 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_RPM_TOO_LOW, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FAN_RPM_TOO_LOW, false);
count4 = (count4 < 0)?(0):(count4);
}
currentFlow = PressureSensorGetPressure(HEAD_FAN_RIGHT);
if (currentFlow > 5.0) {
if (++count5 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH, true);
count5 = (count5 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count5);
} else {
if (--count5 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH, false);
count5 = (count5 < 0)?(0):(count5);
}
if (currentFlow < 1.0) {
if (++count6 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW, true);
count6 = (count6 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count6);
} else {
if (--count6 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW, false);
count6 = (count6 < 0)?(0):(count6);
}
currentFlow = PressureSensorGetPressure(HEAD_FAN_LEFT);
if (currentFlow > 5.0) {
if (++count7 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH, true);
count7 = (count7 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count7);
} else {
if (--count7 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH, false);
count7 = (count7 < 0)?(0):(count7);
}
if (currentFlow < 1.0) {
if (++count8 == ARC_ALARM_LIMIT)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW, true);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW, true);
count8 = (count8 > ARC_ALARM_LIMIT)?(ARC_ALARM_LIMIT):(count8);
} else {
if (--count8 == 0)
- AlarmHandlingSetAlarm(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW, false);
+ setArcHeadAlarms(EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW, false);
count8 = (count8 < 0)?(0):(count8);
}
}
@@ -411,6 +451,7 @@ uint32_t HeadBlowerCommandRequestMessage(int blowerId, float flow)
ReportWithPackageFilter(HeatersFilter,"flow not in range",__FILE__, flow, blowerId,RpError, 0,0);
return ERROR;
}
+ ReportWithPackageFilter(HeatersFilter,"HeadBlower configured",__FILE__,blowerId,(int)(flow*100),RpError, PressureSensorV0[blowerId],0);
headBlowersFlow[blowerId] = flow;
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 84013add6..def9c5530 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -1053,7 +1053,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
}
if (abs(readValue - HeaterPreviousRead[index])>2000)
{
- ReportWithPackageFilter(HeatersFilter,"Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index);
+ ReportWithPackageFilter(HeatersFilter,"Temperature Spike AC",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index);
#ifdef IGNORE_SPIKE
HeaterPreviousRead[index] = readValue;
#else
@@ -1345,18 +1345,18 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
DeActivateHeater(HEATER_TYPE__DryerMainHeater);
HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0);
HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0);
- if (HeaterSpikeRead[index] == 0)
- {
- HeaterSpikeRead[index] = readValue;
- }
- else
- {
- ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
- HeaterPreviousRead[index] = HeaterSpikeRead[index];
- HeaterSpikeRead[index] = 0;
- }
-
}
+ if (HeaterSpikeRead[index] == 0)
+ {
+ HeaterSpikeRead[index] = readValue;
+ }
+ else
+ {
+ ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
+ HeaterPreviousRead[index] = HeaterSpikeRead[index];
+ HeaterSpikeRead[index] = 0;
+ }
+
return ERROR;
#endif
}
@@ -1580,20 +1580,20 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
#ifdef IGNORE_SPIKE
HeaterPreviousRead[index] = readValue;
#else
- //if (readValue > HeaterCmd[index].targettemperatue)
+ if (readValue > HeaterCmd[index].targettemperatue)
{
DeActivateHeater(index);
HeaterRecalculateHeaterParams(index, 0);
- if (HeaterSpikeRead[index] == 0)
- {
- HeaterSpikeRead[index] = readValue;
- }
- else
- {
- ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
- HeaterPreviousRead[index] = HeaterSpikeRead[index];
- HeaterSpikeRead[index] = 0;
- }
+ }
+ if (HeaterSpikeRead[index] == 0)
+ {
+ HeaterSpikeRead[index] = readValue;
+ }
+ else
+ {
+ ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
+ HeaterPreviousRead[index] = HeaterSpikeRead[index];
+ HeaterSpikeRead[index] = 0;
}
#endif
}
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
index d86d7ab2d..0f8108dad 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
@@ -5,9 +5,6 @@
#include "drivers/motors/motor.h"
#include "ids_ex.h"
-#define LUBRICANT_DISPENSER 7
-#define CLEANER_DISPENSER 6
-
extern uint32_t DispenserPrepareSpeed ;
extern double DispenserPreparePressure ;
extern uint32_t DispenserPrepareTimeout ;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
index 0ae017c13..59b9a56be 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
@@ -107,6 +107,16 @@ uint32_t IDS_Cleaning_Move_Actuators()
CleaningStageCounter++;
return OK;
}
+
+uint32_t IDS_Cleaning_stop_cleaner_motor()
+{
+ TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DH_LID;
+ if (Head_Type != HEAD_TYPE_ARC)
+ return OK;
+
+ MotorStop(MotorId,Soft_Stop);
+ return OK;
+}
/*uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed)
{
uint32_t status = OK;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index 57d3ff5e2..0a8060496 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -118,5 +118,6 @@ void DispenserDataRequestFunc(MessageContainer* requestContainer);
void IDS_Start_Pid_Testing(int DispenserId);
void IDS_Stop_Pid_Testing(int DispenserId);
uint32_t cleaningMotorCBFunction (uint32_t deviceID, uint32_t Parameter1);
+uint32_t IDS_Cleaning_stop_cleaner_motor();
#endif /* MODULES_IDS_IDS_EX_H_ */
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index fcd1c05a2..a28d00a91 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -43,7 +43,6 @@ typedef struct
}DispenserControlConfig_t;
HardwarePidControl *DispensersControl;
HardwarePidControl DispensersCtrl[MAX_SYSTEM_DISPENSERS];
-#define MAX_DYE_DISPENSERS 6
#define IDS_PRESEGMENT_TIME_STEP 50
#define INITIAL_CLEANER_SPEED 300
@@ -251,6 +250,7 @@ JobDescriptionFileBrushStop *FirstBrushStop = NULL;
DispenserUsedInJob[Dispenser_i] = false;
}
n_segments = 0;
+#ifndef LIGHT_COLORS
if (MotorsCfg[DispenserIdToMotorId[CLEANER_DISPENSER]].hardwaremotortype == DispenserIdToMotorId[CLEANER_DISPENSER])
{
DispenserUsedInJob[CLEANER_DISPENSER] = true;
@@ -261,7 +261,7 @@ JobDescriptionFileBrushStop *FirstBrushStop = NULL;
DispenserUsedInJob[CLEANER_DISPENSER] = false;
EnableCleaning = false;
}
-
+#endif
if (JobTicket->enablelubrication == true)
{
//DispenserUsedInJob[LUBRICANT_DISPENSER] = true;
@@ -522,7 +522,20 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
char IdMessage[100];
int SegmentPrepareWFCFCounter = 0;
bool pressureReady = false,endOfPrepareWCF = false;
-
+int BuildIdsJobPrintString(char *dest,char *desc, int info)
+{
+ int len = 0,i;
+ int DispenserSpeed[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0};
+ if (dest == NULL)
+ return 0;
+ for (i = 0; i<MAX_SYSTEM_DISPENSERS; i++)
+ {
+ if (DispenserUsedInJob[i])
+ DispenserSpeed[i] = CurrentDispenserSpeed[i];
+ }
+ len = usnprintf(dest, 80,"%s %d K %d,C %d,M %d,Y %d,TI %d",desc,(int)info,DispenserSpeed[0],DispenserSpeed[1],DispenserSpeed[2],DispenserSpeed[3],DispenserSpeed[4]);
+ return len;
+}
bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,double pressure)
{
TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId];
@@ -565,7 +578,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
double segmentfirst_speed;
double pressure;
ModuleStateEnum result = ModuleDone;
- bool DispenserReady[MAX_DYE_DISPENSERS] = {false,false,false,false,false,false};
+ bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false};
//REPORT_MSG((int)DispenserPrepareControlId, "Prepare Callback");
@@ -591,10 +604,10 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
{
DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond);
HW_Motor_Id = DispenserIdToMotorId[i];
- if ((DispenserTotalPrepareSteps[i]>TargetNumberOfStepsPreRun)&&(DispenserTotalPrepareSteps[i]<(TargetNumberOfStepsPreRun+InitialDispenserSpeed)))
+ /*if ((DispenserTotalPrepareSteps[i]>TargetNumberOfStepsPreRun)&&(DispenserTotalPrepareSteps[i]<(TargetNumberOfStepsPreRun+InitialDispenserSpeed)))
{
ReportWithPackageFilter(IDSFilter,"IDS dispenser pre-run ended",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(pressure*100),0);
- }
+ }*/
if (DispenserTotalPrepareSteps[i]<TargetNumberOfStepsPreRun)
{
AdjustDispenserSpeedToPressure(i,MaximalPressurePreRun,pressure);
@@ -617,6 +630,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
else
DispenserReady[i] = true;
}
+#ifndef LIGHT_COLORS
pressure = GetDispenserPressure(CLEANER_DISPENSER);
if (pressure > 0.02)
{
@@ -626,7 +640,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
CurrentDispenserSpeed[CLEANER_DISPENSER] = 0;
}
-
+#endif
if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0))
{
ReportWithPackageFilter(IDSFilter,"IDS_Prepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
@@ -634,7 +648,9 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
if (NumofReadyDispensers>=NumOfActiveDispensers)
{
pressureReady = true;
- ReportWithPackageFilter(IDSFilter,"pressureReady = true;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
+ usnprintf(IdMessage, 80,"setting pressureReady = true %d K %d,C %d,M %d,Y %d,TI %d",(int)TargetNumberOfStepsPreRun,DispenserTotalPrepareSteps[0],DispenserTotalPrepareSteps[1],
+ DispenserTotalPrepareSteps[2],DispenserTotalPrepareSteps[3],DispenserTotalPrepareSteps[4]);
+ ReportWithPackageFilter(IDSFilter,IdMessage,__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
}
if (pressureReady == true)
{
@@ -736,9 +752,10 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
}
}
}//for
- usnprintf(IdMessage, 80,"WFCF %d K %d,C %d,M %d,Y %d,TI %d",WFCF,CurrentDispenserSpeed[0],
- CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
- ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, __LINE__, DispenserBuildTimeCounter, RpWarning, WFCF, 0);
+ //usnprintf(IdMessage, 80,"WFCF %d K %d,C %d,M %d,Y %d,TI %d",WFCF,CurrentDispenserSpeed[0],
+ // CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
+ if (BuildIdsJobPrintString(IdMessage,"WFCF ",WFCF))
+ ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, __LINE__, DispenserBuildTimeCounter, RpWarning, WFCF, 0);
}//if n_dis
}
@@ -760,6 +777,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
//start new stage
if (endOfPrepareWCF == true)
{
+#ifndef LIGHT_COLORS
if (CurrentDispenserSpeed[CLEANER_DISPENSER])
{
HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER];
@@ -767,6 +785,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
CurrentDispenserSpeed[CLEANER_DISPENSER] = 0;
ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
}
+#endif
SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback );
DispenserPrepareControlId = 0xFF;
ReportWithPackageFilter(IDSFilter,"IDS_Prepare_Callback SafeRemoveControlCallback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
@@ -884,6 +903,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
}
else
{
+ DispenserTotalPrepareSteps[i] = 0;
if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off)
{
if ((HomingActive[i] == false)&&(PrimingActive[i] == false))
@@ -940,11 +960,12 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
}*/
}
}
+#ifndef LIGHT_COLORS
TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER];
MotorSetSpeed((TimerMotors_t)HW_Motor_Id,INITIAL_CLEANER_SPEED ); //set the dispenser to the
CurrentDispenserSpeed[CLEANER_DISPENSER] = INITIAL_CLEANER_SPEED;
ReportWithPackageFilter(IDSFilter,"IDS start cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
-
+#endif
}
DispenserBuildTimeCounter = 0;
@@ -1087,9 +1108,10 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
}
}
}//for
- usnprintf(IdMessage, 80,"Presegment Prepare K %d,C %d,M %d,Y %d,TI %d",CurrentDispenserSpeed[0],
- CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
- ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0);
+ //usnprintf(IdMessage, 80,"Presegment Prepare K %d,C %d,M %d,Y %d,TI %d",CurrentDispenserSpeed[0],
+ // CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
+ if (BuildIdsJobPrintString(IdMessage,"Presegment Prepare ",0))
+ ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0);
DispenserBuildTimeCounter = 0;
//DispenserPrepareControlId = AddControlCallback( IDS_PreSegmentPrepare_Callback, IDS_PRESEGMENT_TIME_STEP,TemplateDataReadCBFunction ,0, 0, 0 );
@@ -1175,8 +1197,10 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback);
ReportWithPackageFilter(IDSFilter,"End of Pre-segment Handling",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
//PreSegmentReady(Module_IDS,ModuleDone);
SafeRemoveControlCallback(DispenserPreSegmentControlId,IDSPreSegmentStateCallbackRunner);
+#ifndef LIGHT_COLORS
if (CurrentDispenserSpeed[CLEANER_DISPENSER]>0)
IDS_Cleaning_Stop_Cleaning_Solution (NULL);
+#endif
setRapidPressureRead(false);
//if (JobEndSequence == true)
// DistanceToSpoolReady(Module_IDS,ModuleDone);
@@ -1289,9 +1313,10 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback);
//SendJobProgress(0.0, 0, false, IdsMessage);*/
}
}//for
- usnprintf(IdMessage, 80,"Presegment WFCF %d K %d,C %d,M %d,Y %d,TI %d",WFCF,CurrentDispenserSpeed[0],
- CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
- ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, __LINE__, FileBrushStop->index, RpWarning, lInterSegmentLength, 0);
+ //usnprintf(IdMessage, 80,"Presegment WFCF %d K %d,C %d,M %d,Y %d,TI %d",WFCF,CurrentDispenserSpeed[0],
+ // CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
+ if (BuildIdsJobPrintString(IdMessage,"Presegment WFCF ",WFCF))
+ ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, __LINE__, FileBrushStop->index, RpWarning, lInterSegmentLength, 0);
}
}
//startDispensersAtSegmentSpeed*1=WFCFClenerSpray(speed);
@@ -1616,9 +1641,10 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers)
}
} //for
}
- usnprintf(IdMessage, 80,"IDS_StartBrushStop %d/%d K %d,C %d,M %d,Y %d,TI %d",FileBrushStop->index,SegmentNumOfBrushStops,CurrentDispenserSpeed[0],
- CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
- ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, SegmentNumOfBrushStops, FileBrushStop->index, RpWarning,(int)FileBrushStop->offsetmeters, 0);
+ //usnprintf(IdMessage, 80,"IDS_StartBrushStop %d/%d K %d,C %d,M %d,Y %d,TI %d",FileBrushStop->index,SegmentNumOfBrushStops,CurrentDispenserSpeed[0],
+ // CurrentDispenserSpeed[1],CurrentDispenserSpeed[2],CurrentDispenserSpeed[3],CurrentDispenserSpeed[4]);
+ if (BuildIdsJobPrintString(IdMessage,"IDS_StartBrushStop ",FileBrushStop->index))
+ ReportWithPackageFilter(IDSFilter,IdMessage, __FILE__, SegmentNumOfBrushStops, FileBrushStop->index, RpWarning,(int)FileBrushStop->offsetmeters, 0);
}
uint32_t IDSBrushStopRestartCallback(uint32_t IfIndex, uint32_t readValue)
@@ -1717,8 +1743,10 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
#else
Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head);
#endif
+#ifndef LIGHT_COLORS
if (CurrentDispenserSpeed[CLEANER_DISPENSER]>0)
IDS_Cleaning_Stop_Cleaning_Solution(NULL);
+#endif
SegmentNumOfBrushStops = Segment->n_brushstops;
BrushStopTime = Segment->length*1000/(double)SegmentNumOfBrushStops; //brushstop in meters //brushstop in millisecond
BrushStopTime = ((BrushStopTime*100)/dyeingspeed);//brushstop in seconds
@@ -1935,27 +1963,38 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
}
}
- IDS_StopLubrication();
+#ifndef LIGHT_COLORS
+ if (CurrentDispenserSpeed[CLEANER_DISPENSER]>0)
+ IDS_Cleaning_Stop_Cleaning_Solution(NULL);
+#endif
+ IDS_StopLubrication();
Init_CleaningStageCounter();//set the counter before relocating
+ IDS_Cleaning_stop_cleaner_motor();
HeadCard_Actuators_Relocate();
return OK;
}
uint32_t IDS_StartLubrication(void)
{
+#ifdef LIGHT_COLORS
+#else
IDS_Dispenser_Start_Motor_and_Open_Valve(LUBRICANT_DISPENSER,lubricant_speed,NULL);
CurrentDispenserSpeed[LUBRICANT_DISPENSER] = lubricant_speed;
- REPORT_MSG (lubricant_speed, "IDS_StartLubrication");
Lubricant_2Way_Valve (START);
+#endif
+ REPORT_MSG (lubricant_speed, "IDS_StartLubrication");
return OK;
}
uint32_t IDS_StopLubrication(void)
{
REPORT_MSG (lubricant_speed, "IDS_StopLubrication and home dispenser");
+#ifdef LIGHT_COLORS
+#else
Lubricant_2Way_Valve (STOP);
//IDS_Dispenser_Close_Valve_And_Stop_Motor(LUBRICANT_DISPENSER,IDS_Valve_EndValveReady);
TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[LUBRICANT_DISPENSER];
MotorStop(HW_Motor_Id,Hard_Hiz);
CurrentDispenserSpeed[LUBRICANT_DISPENSER] = 0;
//IDS_HomeDispenser (LUBRICANT_DISPENSER, 1000 , NULL); do not fill lubricant between jobs
+#endif
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
index 329357ed4..469e82aa8 100644
--- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
+++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
@@ -157,9 +157,20 @@ bool CartridgeInkFull()
int GetCartridgeFillPercent()
{
double MidTank_Pressure = 0;
-
+#ifdef IFS_DEBUG
+ static int percent = 0;
+ if (midTankState == MidTankStateFilling) {
+ if (percent < 100) {
+ percent += 1;
+ }
+ } else {
+ percent = 0;
+ }
+ return percent;
+#else
MidTank_Pressure = Read_MidTank_Pressure_Sensor(midTankCartColor);
return (((MidTank_Pressure - midTankCapacity)* 100) / CARTRIDGE_CAPATICY);
+#endif
}
bool midTankCart_door()
@@ -284,7 +295,6 @@ void midTankStateMachine(void)
break;
}
//check RFID - check cartridge OK
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Inserted, 0);
// send request for validation to ppc
inkAuthenticationPass = 2; //not defined
@@ -306,17 +316,18 @@ void midTankStateMachine(void)
Report("MidTank Cartridge authentication wait...", __FILE__, __LINE__, authenticationTimeOutCounter, RpMessage, 0, 0);
if (authenticationTimeOutCounter > 60) {
midTankState = MidTankStateIdle;
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, 0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Error, 0);
}
break;
}
if (inkAuthenticationPass == false) {
Report("MidTank Cartridge authentication fail", __FILE__, __LINE__, 0, RpMessage, 0, 0);
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, 0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Error, 0);
midTankState = MidTankStateIdle;
break;
}
// Cartridge status received from user - assume cartridge is full
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Inserted, 0);
midTankCapacity = Get_MidTank_Pressure_Sensor(midTankCartColor);
if ((midTankCapacity > MidTankEmptyLimit)&&(midTankCartColor!=MIDTANK_8))//enable lubricant filling in two stages
@@ -325,13 +336,13 @@ void midTankStateMachine(void)
cart1.color = fastBILNK;
Report("Mid-tank not empty", __FILE__, __LINE__, midTankCapacity, RpMessage, MidTankEmptyLimit, 0);
midTankState = MidTankStateIdle;
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, 0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Error, 0);
break;
}
Report("Mid-tank filling in process", __FILE__,__LINE__,(int)(MidTankEmptyLimit*1000), RpMessage, (int)(midTankCapacity*1000), 0);
Pannel_Leds(CART_1, MODE_ON);
cart1.color = BLINK;
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Filling, 0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Filling, 0);
if (midTankCartColor == MIDTANK_8)
{
@@ -356,7 +367,7 @@ void midTankStateMachine(void)
Report("Cartridge extracted during filling!!!", __FILE__, __LINE__, midTankState, RpMessage, 0, 0);
Report("Mid-tank # filling fail", __FILE__, __LINE__, midTankState, RpMessage, 0, 0);
midTankState = MidTankStateIdle;
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Absent, GetCartridgeFillPercent());
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Absent, GetCartridgeFillPercent());
}
// if time out or emptying done - idle
if (midTankTimeoutCounter++ > CartridgeInkTimeout) {
@@ -366,7 +377,7 @@ void midTankStateMachine(void)
MidTankValvesAction(Cartridge_MidTank_OFF);
Report("Mid-tank # filling fail", __FILE__, __LINE__, midTankState, RpMessage, 0, 0);
Report("Call customer support", __FILE__, __LINE__, midTankState, RpMessage, 0, 0);
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, GetCartridgeFillPercent());
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Error, GetCartridgeFillPercent());
midTankState = MidTankStateIdle;
} else if (CartridgeInkFull()) {
midTankTimeoutCounter = 0;
@@ -376,9 +387,10 @@ void midTankStateMachine(void)
Report("Mid-tank # filling done", __FILE__, __LINE__, midTankState, RpMessage, 0, 0);
midTankState = MidTankStateIdle;
// RFID change status - inkEmpty
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__FillingCompleted, 100.0);
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__FillingCompleted, 100.0);
}
- CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Filling, GetCartridgeFillPercent());
+ if (midTankState == MidTankStateFilling)
+ CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__Filling, GetCartridgeFillPercent());
break;
default:
Report("wrong state", __FILE__, __LINE__, midTankState, RpMessage, 0, 0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c
index e386df88c..d26b3d814 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Calculate.c
@@ -5,22 +5,32 @@
#include <PMR/Stubs/CalculateResponse.pb-c.h>
#include "include.h"
#include "driverlib/gpio.h"
+#include "modules/control/control.h"
#include "Drivers/USB_Communication/USBCDCD.h"
-
-void Stub_CalculateRequest(MessageContainer* requestContainer)
+char CalculateToken[36+1] = {0};
+//char init_string[100];
+int aaa = 0;
+uint32_t CalculateControlId = 0xFF;
+uint32_t CalculateRpeat(uint32_t IfIndex, uint32_t BusyFlag)
{
MessageContainer responseContainer;
-
- CalculateRequest* request = calculate_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
-
-
CalculateResponse response = CALCULATE_RESPONSE__INIT;
- response.sum = request->a + request->b;
+ bool last = false;
+ response.sum = aaa++;
response.has_sum = true;
+ if (aaa >=20)
+ {
+ RemoveControlCallback(CalculateControlId, CalculateRpeat);
+ last = true;
+ aaa=0;
+ }
+ Report("CalculateRpeat",__FILE__,__LINE__,(int)aaa,RpWarning,(int)0,0);
- responseContainer = createContainer(MESSAGE_TYPE__CalculateResponse, requestContainer->token, true, &response, &calculate_response__pack, &calculate_response__get_packed_size);
+ responseContainer = createContainer(MESSAGE_TYPE__CalculateResponse, CalculateToken, last, &response, &calculate_response__pack, &calculate_response__get_packed_size);
+ responseContainer.has_continuous = true;
+ responseContainer.continuous = true;
// free(request);
@@ -30,5 +40,21 @@ void Stub_CalculateRequest(MessageContainer* requestContainer)
SendChars((char*)container_buffer, container_size);
//free(container_buffer);
//free(requestContainer);
+
+ return OK;
+}
+
+
+void Stub_CalculateRequest(MessageContainer* requestContainer)
+{
+ MessageContainer responseContainer;
+
+ CalculateRequest* request = calculate_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+ ustrncpy (CalculateToken, requestContainer->token,36);
+
+
+ Report("Stub_CalculateRequest",__FILE__,__LINE__,(int)aaa,RpWarning,(int)0,0);
+ CalculateControlId = AddControlCallback("PowerUpLoad", CalculateRpeat, eOneSecond, TemplateDataReadCBFunction,0,0, 0 );
+
calculate_request__free_unpacked(request,NULL);
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index 0ce6474cc..284a43e41 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -1246,7 +1246,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
- if(request->amount == 0xB24) //Set loading arm cycles
+ if(request->amount == 0xB24) //AttemptThreadJoggingFunc
{
REPORT_MSG(request->delay,"AttemptThreadJoggingFunc");
AttemptThreadJoggingFunc(NULL);
@@ -1254,7 +1254,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
- if(request->amount == 0xB25) //Set loading arm cycles
+ if(request->amount == 0xB25) //Change jog speed
{
REPORT_MSG(request->delay,"Change jog speed");
if (request->delay<100)
@@ -1263,6 +1263,14 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
+ if(request->amount == 0xB26) //Change sublimation time
+ {
+ REPORT_MSG(request->delay,"Change sublimation time");
+ setSublimationBlowTime(request->delay);
+ response.progress = JogSpeed;
+ response.has_progress = true;
+ }
+ else
if(request->amount == 0xC3) //suspend I2C task
{
if (request->delay == 0)
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 63c7b6963..f4b1f7463 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Cartridge.c
@@ -9,21 +9,23 @@
#include "include.h"
#include "inc/hw_uart.h"
#include "driverlib/gpio.h"
-
-#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include "Drivers/I2C_Communication/RFID_NFC/NFC.h"
#include <Utilities/RfidTagHandling.h>
-#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+
#include <Drivers/I2C_Communication/I2C.h>
#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
+#include <Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h>
#include "Stub_Status.h"
void Stub_CartridgeReadRequest(MessageContainer* requestContainer)
{
- //uint32_t status = PASSED;
+ uint32_t status = PASSED;
MessageContainer responseContainer;
static bool first_time = true;
@@ -38,26 +40,69 @@ void Stub_CartridgeReadRequest(MessageContainer* requestContainer)
uint8_t readerID = request->cartridgeid >> 8;
- /*if(request->cartridgeid == 0x0100)
+ if(request->cartridgeid == 0x0100)
{
- Init_RFID_Reader(readerID);//0-2
+ Init_RFID_Reader(readerID);//0-2 - done in main.c. by Init_IFS no need to use it
}
else if(request->cartridgeid == 0x0101)
{
- Connect_to_RFID_Reder(readerID);//0-2 - conect the card and get tag id
+ Connect_to_RFID_Reder(readerID);//0-2 - conect the card and get tag id - while(1)
}
else if(request->cartridgeid == 0x0102)
{
+ /*
Active_RFID_Reader = readerID + 1;
- if(first_time == true)
- {
- TagStage = Tag_PrepareForDiscovery;
- first_time = false;
- }
+// if(first_time == true)
+// {
+// TagStage = Tag_PrepareForDiscovery;
+// first_time = false;
+// }
+ TagStage[readerID] = Tag_PrepareForDiscovery;
+
+ RFIDTagComm_StateMachine(readerID, Auto);
+ */
+ Trigger_RFID_TestTask(readerID);
- RFIDTagComm_StateMachine(Auto);
}
- */
+ else if(request->cartridgeid == 0x0103)//first time before 0x0102 - no need done in 102
+ {
+ Active_RFID_Reader = readerID + 1;
+ TagStage[readerID] = Tag_PrepareForDiscovery;
+
+ }
+ else if((request->cartridgeid & 0xFF)== 0xC1)
+ {
+ Trigger_RFID_UpdateInkFill(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xC2)
+ {
+ Trigger_RFID_UpdateInkUsed(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xC3)
+ {
+ Trigger_RFID_UpdateInkEmpty(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xC4)
+ {
+ Trigger_RFID_UpdateInkMachineID(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xE1)
+ {
+ Trigger_RFID_UpdateWasteFill(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xE2)
+ {
+ Trigger_RFID_UpdateWasteFull(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xE3)
+ {
+ Trigger_RFID_UpdateWasteEmpty(readerID);
+ }
+ else if((request->cartridgeid & 0xFF)== 0xE4)
+ {
+ Trigger_RFID_UpdateWasteMachineID(readerID);
+ }
+
response.cartridge = &CartridgeRead;
CartridgeRead.has_index = false;
CartridgeRead.has_slot = true;
@@ -82,7 +127,7 @@ void Stub_CartridgeReadRequest(MessageContainer* requestContainer)
void Stub_CartridgeWriteRequest(MessageContainer* requestContainer)
{
- //uint32_t status = NOT_SUPPORTED;
+ uint32_t status = NOT_SUPPORTED;
MessageContainer responseContainer;
StubCartridgeWriteRequest* request = stub_cartridge_write_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c
index 3d2db071e..27a7dfb31 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c
@@ -70,6 +70,7 @@ void Stub_DancerPositionRequest(MessageContainer* requestContainer)
response.has_general_status = true;
response.detailed_status = DANCER_ENC[request->dancer_id].Det_status;
response.has_general_status = true;
+ StoreDancerConfigMessage(Dancer_Id);
}
else if(Dancer_Id < NUM_OF_ROTENC*2)
{
@@ -86,8 +87,6 @@ void Stub_DancerPositionRequest(MessageContainer* requestContainer)
response.detailed_status = ERROR; // use the Reserved bits to send our errors
response.has_general_status = true;
}
- if (Dancer_Id == 2)
- StoreDancerConfigMessage();
responseContainer = createContainer(MESSAGE_TYPE__StubDancerPositionResponse, requestContainer->token, true, &response, &stub_dancer_position_response__pack, &stub_dancer_position_response__get_packed_size);
//free(request);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index cdb726b5e..c3f15aff8 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -258,7 +258,7 @@
{
CallbackCounter--;
}
- if ((angle>14000 )&&(BusyFlag == NOTBUSY)) // OK - take another round
+ if ((abs(angle)>14000 )&&(BusyFlag == NOTBUSY)) // OK - take another round
{
Report("Thread_Load_Set_Load_Arm_To_Stopper time",__FILE__,msec_millisecondCounter - UnloadingStart,msec_millisecondCounter,RpMessage,UnloadingStart,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
index 07ecf5d0b..11a92ab63 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
@@ -46,7 +46,7 @@ uint32_t ThreadEndState();
bool Set_Thread_Rockers_Bypass (int value);
-uint32_t StoreDancerConfigMessage(void);
+uint32_t StoreDancerConfigMessage(int DancerId);
uint32_t LoadDancerConfigMessage(void);
//uint32_t MotorPidRequestMessage(HardwarePidControl* request);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
index 1920db03a..869485b71 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
@@ -188,40 +188,36 @@ uint32_t MotorPidRequestMessage(HardwarePidControl* request)
}
char DancerConfigPath[50] = "0://SysInfo//DancCfg.cfg";
-uint32_t StoreDancerConfigMessage()
+uint32_t StoreDancerConfigMessage(int DancerId)
{
uint32_t status = OK;
// FRESULT Fresult = FR_OK;
//HardwareConfiguration DancerConfig;
HardwareDancer Dancers[MAX_SYSTEM_DANCERS];
- // uint8_t* response_buffer;
+#ifdef FOUR_WINDERS
+ uint8_t DancerAddress[MAX_SYSTEM_DANCERS] = {EEPROM_STORAGE_DANCER_0,EEPROM_STORAGE_DANCER_1,EEPROM_STORAGE_DANCER_2,EEPROM_STORAGE_DANCER_3,EEPROM_STORAGE_DANCER_4};
+#else
+ uint8_t DancerAddress[MAX_SYSTEM_DANCERS] = {EEPROM_STORAGE_DANCER_0,EEPROM_STORAGE_DANCER_1,EEPROM_STORAGE_DANCER_2};
+#endif
// size_t response_size = 0;
- int Dancer_i;
+ int Dancer_i = DancerId;
//hardware_configuration__init(&DancerConfig);
//DancerConfig.dancers = (HardwareDancer**)my_malloc(sizeof(HardwareDancer*)*MAX_SYSTEM_DANCERS);
- for (Dancer_i = 0; Dancer_i < MAX_SYSTEM_DANCERS; Dancer_i++)
- {
- hardware_dancer__init(&Dancers[Dancer_i]);
- //DancerConfig.dancers[Dancer_i] = &Dancers[Dancer_i];
- Dancers[Dancer_i].has_zeropoint = true;
- Dancers[Dancer_i].hardwaredancertype = Dancer_i;
- Dancers[Dancer_i].has_hardwaredancertype = true;
- Dancers[Dancer_i].zeropoint=Control_Read_Dancer_Position(Dancer_i,0);
- //DancerConfig.n_dancers++;
- DancersCfg[Dancer_i].zeropoint = Dancers[Dancer_i].zeropoint;
- DancersCfg[Dancer_i].zeropoint = Control_Read_Dancer_Position(Dancer_i,0);
- }
+ hardware_dancer__init(&Dancers[Dancer_i]);
+ //DancerConfig.dancers[Dancer_i] = &Dancers[Dancer_i];
+ Dancers[Dancer_i].has_zeropoint = true;
+ Dancers[Dancer_i].hardwaredancertype = Dancer_i;
+ Dancers[Dancer_i].has_hardwaredancertype = true;
+ Dancers[Dancer_i].zeropoint=Control_Read_Dancer_Position(Dancer_i,0);
+ //DancerConfig.n_dancers++;
+ DancersCfg[Dancer_i].zeropoint = Dancers[Dancer_i].zeropoint;
+ DancersCfg[Dancer_i].zeropoint = Control_Read_Dancer_Position(Dancer_i,0);
- status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_0,DancersCfg[0].zeropoint);
- status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_1,DancersCfg[1].zeropoint);
- status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_2,DancersCfg[2].zeropoint);
- Report("~~~~~~Store eeprom 0",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg[1].zeropoint,RpWarning,(int)DancersCfg[2].zeropoint,0);
-#ifdef FOUR_WINDERS
- status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_3,DancersCfg[HARDWARE_DANCER_3].zeropoint);
- status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_4,DancersCfg[HARDWARE_DANCER_4].zeropoint);
- Report("~~~~~~Store eeprom 1",__FILE__,__LINE__,(int)DancersCfg[HARDWARE_DANCER_3].zeropoint,RpWarning,(int)DancersCfg[HARDWARE_DANCER_4].zeropoint,0);
-#endif
+
+
+ status |= MCU_E2PromProgram(DancerAddress[Dancer_i],DancersCfg[Dancer_i].zeropoint);
+ Report("~~~~~~Store eeprom dancer",__FILE__,__LINE__,Dancer_i,RpWarning,(int)DancersCfg[Dancer_i].zeropoint,0);
/*
response_buffer = my_malloc(hardware_configuration__get_packed_size(&DancerConfig));
if (response_buffer)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 8d41f3b9a..5fee72dc7 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -1338,22 +1338,22 @@ uint32_t UpdatePidDuringRun(HardwarePidControl *request)
return ERROR;
- if (request->derivativetime == true)
+ if (request->has_derivativetime == true)
{
MotorControlConfig[Motor_i].m_params.Kd = request->derivativetime;
ReportWithPackageFilter(ThreadFilter,"UpdatePidDuringRun Kd",__FILE__,Motor_i,(int)(request->derivativetime),RpWarning,0,0);
}
- if (request->proportionalgain == true)
+ if (request->has_proportionalgain == true)
{
MotorControlConfig[Motor_i].m_params.Kp = request->proportionalgain;
ReportWithPackageFilter(ThreadFilter,"UpdatePidDuringRun Kp",__FILE__,Motor_i,(int)(request->proportionalgain),RpWarning,0,0);
}
- if (request->integraltime == true)
+ if (request->has_integraltime == true)
{
MotorControlConfig[Motor_i].m_params.Ki = request->integraltime;
ReportWithPackageFilter(ThreadFilter,"UpdatePidDuringRun Ki",__FILE__,Motor_i,(int)(request->integraltime),RpWarning,0,0);
}
- if (request->epsilon == true)
+ if (request->has_epsilon == true)
{
MotorControlConfig[Motor_i].m_params.epsilon = request->epsilon;
ReportWithPackageFilter(ThreadFilter,"UpdatePidDuringRun epsilon",__FILE__,Motor_i,(int)(request->epsilon*10000),RpWarning,0,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
index 9c5fe9822..490a0c0a5 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
@@ -8,8 +8,9 @@
#include "Modules/Waste/Waste_ex.h"
#include "modules/heaters/heaters_ex.h"
#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
-#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
#include <Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h>
+#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+
#include "Drivers/I2C_Communication/RFID_NFC/NFC.h"
#include <Utilities/RfidTagHandling.h>
#include "PMR/IFS/CartridgeState.pb-c.h"
@@ -27,6 +28,7 @@
#include <Drivers/I2C_Communication/I2C_Task.h>
#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+#include <Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h>
#include <Drivers/I2C_Communication/WHS_Card/D_AD5272_Rheostat/WHS_Rheostat.h>
uint8_t VocPpmAlarmLimit = 10;//PPM
@@ -42,6 +44,7 @@ uint32_t Cartridge_Cover_Control;
button *CartLed[MaxWasteCartridges] = {0, &cart2, &cart3};
WasteTankStateEnum WasteTankState = WasteTankStateIdle;
+extern char WasteEmptyingToken[36+1];
int init = 1;
bool setWasteValve (WasteCartridgeEnum WasteCartridge);
@@ -165,7 +168,7 @@ WasteCartridgeEnum cartGetActiveCart()
{
uint32_t CartId;
- for (CartId = 0; CartId < MaxWasteCartridges; CartId++) {
+ for (CartId = WasteCartridge_middle; CartId < MaxWasteCartridges; CartId++) {
if (CartState[CartId] == CartridgeStateACTIVE)
return CartId;
}
@@ -223,10 +226,13 @@ bool setWasteValve (WasteCartridgeEnum WasteCartridge)
bool RdWasteTankEmptySensor()
{
//double WasteLevel = 0.0;
-
+#ifndef WHS_DEBUG
if (WHS_Type == WHS_TYPE_UNKNOWN) {
return WHS_GPI_WCONTAINER_WARN();
- } else { //new WHS
+ }
+ else
+#endif
+ { //new WHS
//WasteLevel = GetWHSWasteTankLevelMiliLiter();
if (wasteLevel < wasteLevelEmpty)
return 1; //Empty
@@ -237,10 +243,13 @@ bool RdWasteTankEmptySensor()
bool RdWasteTankFullSensor()
{
//double WasteLevel = 0.0;
-
+#ifndef WHS_DEBUG
if (WHS_Type == WHS_TYPE_UNKNOWN) {
return WHS_GPI_WCONTAINER_FULL();
- } else { //new WHS
+ }
+ else
+#endif
+ { //new WHS
//WasteLevel = GetWHSWasteTankLevelMiliLiter();
if (wasteLevel >= wasteLevelFull)
return 1; //full
@@ -251,10 +260,13 @@ bool RdWasteTankFullSensor()
bool RdWasteTankOverFlowSensor()
{
//double WasteLevel = 0.0;
-
+#ifndef WHS_DEBUG
if (WHS_Type == WHS_TYPE_UNKNOWN) {
return WHS_GPI_WASTE_OVERFULL();
- } else {//new WHS
+ }
+ else
+#endif
+ {//new WHS
//WasteLevel = GetWHSWasteTankLevelMiliLiter();
if (wasteLevel > wasteLevelOverflow)
return 1; //overflow
@@ -348,13 +360,14 @@ uint32_t Waste_DoorOpenDuringEmptying(uint32_t IfIndex, uint32_t ReadValue)
void Waste_StateMachine_OneSecond_Call(void)
{
static WasteTankStateEnum prev_state = 0;
- static int prev_wasteLevel = 0;
+ static int cart, prev_wasteLevel = 0;
+ static int insertUpdate[3] = {0, 0, 0};
//call cartridge state
if ((Is_Cartridge_Present(CART_2) != cartGetPresence(WasteCartridge_middle)) || (init)) {
if (Is_Cartridge_Present(CART_2)) {
cartCART_INSERTED(WasteCartridge_middle);
- CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle, CARTRIDGE_STATE__Inserted, 0);
+ insertUpdate[CARTRIDGE_SLOT__WasteMiddle-1] = 1;
} else {
cartCART_EXTRACTED(WasteCartridge_middle);
}
@@ -362,12 +375,20 @@ void Waste_StateMachine_OneSecond_Call(void)
if ((Is_Cartridge_Present(CART_3) != cartGetPresence(WasteCartridge_lower)) || (init)) {
if (Is_Cartridge_Present(CART_3)) {
cartCART_INSERTED(WasteCartridge_lower);
- CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower, CARTRIDGE_STATE__Inserted, 0);
+ insertUpdate[CARTRIDGE_SLOT__WasteLower-1] = 1;
} else {
cartCART_EXTRACTED(WasteCartridge_lower);
}
}
+ //update ppc
+ for (cart = WasteCartridge_middle; cart <= WasteCartridge_lower; cart++) {
+ if ((insertUpdate[cart]) && (WasteEmptyingToken[0])) {
+ CartridgeStateUpdate(cart, cart-1, CARTRIDGE_STATE__Inserted, 0);
+ insertUpdate[cart] = 0;
+ }
+ }
+
//call door state
cartCart_door();
@@ -467,7 +488,7 @@ void Waste_StateMachine(void)
//start emptying
// RFID change status - set wasteFilling
WasteTankState = WasteTankStateEmptying;
- CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Emptying, 0);
+ CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__Emptying, 0);
break;
case WasteTankStateEmptying:
// if time out or emptying done - idle
@@ -478,7 +499,7 @@ void Waste_StateMachine(void)
WasteTankState = WasteTankStateIdle;
usnprintf(str, 100, "WasteTankStateEmptying Timeout. time:%d:%d volume:%d", timeout_counter/60, timeout_counter%60, WHS_GetCartridgeFill());
Report(str, __FILE__, __LINE__, 0, RpMessage, 0, 0);
- CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
+ CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true);
RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
timeout_counter = 0;
@@ -493,10 +514,11 @@ void Waste_StateMachine(void)
AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
usnprintf(str, 100, "WasteTankStateEmptying done. time:%d:%d volume:%d", timeout_counter/60, timeout_counter%60, WHS_GetCartridgeFill());
Report(str, __FILE__, __LINE__, 0, RpMessage, 0, 0);
- CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__EmptyingCompleted, WHS_GetCartridgeFillPercent());
+ CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__EmptyingCompleted, WHS_GetCartridgeFillPercent());
timeout_counter = 0;
}
- CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Emptying, WHS_GetCartridgeFillPercent());
+ if (WasteTankState == WasteTankStateEmptying)
+ CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__Emptying, WHS_GetCartridgeFillPercent());
#ifdef WHS_DEBUG
wasteLevel -= 100;
timeout_counter += 10;
@@ -517,7 +539,7 @@ void Waste_StateMachine(void)
AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
Report("WasteTankStatePaused done", __FILE__, __LINE__, 0, RpMessage, 0, 0);
timeout_counter = 0;
- CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
+ CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
}
break;
default:
diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt
index 4e1f7104f..9b3b4a919 100644
--- a/Software/Embedded_SW/Embedded/Software Release Notes.txt
+++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt
@@ -1,3 +1,30 @@
+Embedded SW Release note - Version 1.5.2(3) - Pack 3
+=============================================================
+tweaks to the loading arm reset function (thread load, PPC request)
+main card EEPROM read fixed
+Fans - support for new component (arc head and whs)
+light colors preparation - suppressed
+fix cleaning stop on job abort
+Dancer middle point EEPROM support writing single dancer
+Change spikes handling (fix taking the different temperature after 2 seconds
+change and fix some arc head blowers alarm and logs
+
+
+Embedded SW Release note - Version 1.5.2(1) - Pack 3
+=============================================================
+Rebuild Flash file system on Initialization failure.
+Protobuf - Procedure request, Read all hardware request, AttemptThreadJoggingRequest.
+Align pressure reading setup with electric scripts.
+fix alarm handling bugs (#4085, #4097), fix job failures report.
+add diagnostic temperature meters to diagnostic data (zone 4,9,10).
+add stub to control jog speed.
+fix Change Pid During Job stub handling.
+IFS and waste cartridge requests.
+Blowers V0 initialization and handling fixed and improved.
+Dancer resetting - enable for single dancer
+support initial BTSR tests
+Store cleaning parameters from the last job for cleaning jobs (#4112)
+
Embedded SW Release note - Version 1.5.1(4) - Pack 3
=============================================================
fix tunnel pressure calculation
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
index 98326a1da..4e6a4b112 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
@@ -112,12 +112,12 @@ uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag)
MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,InitFailures+1);
- if (InitFailures > 6)
+ if (InitFailures >= REPEATED_INIT_FAILURE_LIMIT+3)
{
InitFailures = 0;
MCU_E2PromProgram(EEPROM_INIT_FAILURE_COUNTER,0);
}
- if (InitFailures > 3)
+ if (InitFailures > REPEATED_INIT_FAILURE_LIMIT)
{
Report("HWConfigurationInit repeated failure",__FILE__,__LINE__,(int)InitFailures,RpWarning,(int)EEPROM_INIT_FAILURE_COUNTER,0);
SetMachineState(MACHINE_STATE_HW_CONFIG_FAILED);
@@ -917,6 +917,7 @@ uint32_t PowerUpUpdate(MACHINE_STATE_STAGES_ENUM stage)
{
RemoveControlCallback(PowerUpLoadControlId, PowerUpUpdateCallBackFunction);
PowerUpLoadControlId = 0xFF;
+ PowerUpStopReporting();
}
}
return status;
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c
index 3a0c94e27..b5ebdee17 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c
@@ -275,9 +275,8 @@ uint32_t PowerOffHeatersOff(void)
if (HandleProcessParameters(&ProcessParametersClear,false)!= OK)
{
LOG_ERROR (PowerOffMachineState, "Turn Off Heaters failed");
- //return ERROR;
}
-
+ HeadBlowersOff(1);
PowerOffMachineState++;
return OK;
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h
index 10dd4c71e..d7352492a 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.h
@@ -39,6 +39,7 @@ void setPowerOffDisableCleaning (bool value);
uint32_t PowerDownUpdateFunc(MessageContainer* requestContainer);
uint32_t AbortPowerDownFunc(MessageContainer* requestContainer);
+void PowerDownStopReporting(void);
#endif /* STATEMACHINES_INITIALIZATION_POWEROFFSEQUENCE_H_ */
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index 82601a162..a2a0d6f67 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -105,7 +105,7 @@ JobSegment *TSegment;
JobBrushStop *TbrushStop;
JobDispenser *Tdispenser;
JobSpool *Tspool;
-HeadCleaningParameters *CleaningParameters;
+HeadCleaningParameters *CleaningParameters = NULL;
bool CopyConfigured[MAX_SYSTEM_MODULES];
bool CleaningJobActive = false, JoggingJobActive = false;
char ErrorMsg[100];
@@ -596,10 +596,9 @@ uint32_t ThreadCleaningJob(int speed)
TSegment = my_malloc(sizeof(JobSegment));
Tspool = my_malloc(sizeof(JobSpool));
TbrushStop = my_malloc(sizeof(JobBrushStop));
- CleaningParameters = my_malloc(sizeof(CleaningParameters));
- CleaningParameters->has_cleanerflow = true;
- CleaningParameters->cleanerflow = 800;
Ticket.headcleaningparameters = CleaningParameters;
+ if (Ticket.headcleaningparameters)
+ Report("Clean job cleaning parameters", __FILE__, __LINE__, Ticket.headcleaningparameters->cleanerflow, RpWarning, Ticket.headcleaningparameters->archeadcleaningmotorspeed, 0);
TSegment->length = 10.0;
Ticket.length += (TSegment->length*n_segments);
TSegment->n_brushstops = 1;
@@ -649,8 +648,8 @@ void FreeCleaningJobData(void *JobDetails)
{
JobTicket* JobTicket = JobDetails;
- if (JobTicket->headcleaningparameters)
- free (JobTicket->headcleaningparameters);
+ //if (JobTicket->headcleaningparameters)
+ // free (JobTicket->headcleaningparameters);
if (JobTicket->spool)
{
free (JobTicket->spool);
@@ -962,6 +961,18 @@ void JobRequestFunc(MessageContainer* requestContainer)
usnprintf(ErrorMsg, 100, "spool parameters error");
}
}
+ if (Ticket->headcleaningparameters)
+ {
+ ///store last updated cleaning parameters
+ if (CleaningParameters == NULL)
+ CleaningParameters = my_malloc(sizeof(CleaningParameters));
+ CleaningParameters->has_cleanerflow = Ticket->headcleaningparameters->has_cleanerflow;
+ CleaningParameters->cleanerflow = Ticket->headcleaningparameters->cleanerflow;
+ CleaningParameters->has_archeadcleaningmotorspeed = Ticket->headcleaningparameters->has_archeadcleaningmotorspeed;
+ CleaningParameters->archeadcleaningmotorspeed = Ticket->headcleaningparameters->archeadcleaningmotorspeed;
+ Report("Save job cleaning parameters", __FILE__, __LINE__, CleaningParameters->cleanerflow, RpWarning, CleaningParameters->archeadcleaningmotorspeed, 0);
+
+ }
}
else