From cbd5e135024f32e282866b07951bbf1645019a01 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 16 Nov 2020 16:16:33 +0200 Subject: fix alarm handling (resolves bugs #4085, #4097). dancer setup - per dancer --- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 33 +++++++++++++------ .../Embedded/Modules/General/GeneralHardware.c | 4 ++- .../Embedded/Modules/Heaters/Heaters_Blowers.c | 17 +++++----- .../Embedded/Modules/Stubs_Handler/Stub_Dancer.c | 3 +- .../Embedded/Modules/Thread/Thread_ex.h | 2 +- .../Embedded/Modules/Thread/Thread_init.c | 37 +++++++++++----------- 6 files changed, 57 insertions(+), 39 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index e754b0df2..5c24b2338 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_i0) diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c index 021dd243f..5be5f1232 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -53,7 +53,7 @@ #define PRESSURE_SENSOR_CP 0.269 #define PRESSURE_SENSOR_B 0.45 #define V0_DEFAULT_VALUE 1050 -#define FAN_MIN_RPM_THRESHOLD 4000 +#define FAN_MIN_RPM_THRESHOLD 3200 extern uint16_t Head_Fan_Tach[2]; extern uint8_t Head_Fan_PWM_Command[2]; @@ -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; @@ -354,12 +354,13 @@ void HeadBlowersCfg() uint32_t PressureSensorInit(int blowerId) { - uint32_t rpm, V0 = 0; + uint32_t V0; - rpm = HeadBlowersGetRPM(blowerId); - if (rpm < FAN_MIN_RPM_THRESHOLD) { + if (HeadBlowersGetRPM(blowerId) < FAN_MIN_RPM_THRESHOLD) { V0 = MillisecGetTemperatures(BlowerIdToSensorId[blowerId]); V0 /= 10; + } else { + V0 = V0_DEFAULT_VALUE; } return V0; } 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/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..626bcde7c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -188,34 +188,35 @@ 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); + status |= MCU_E2PromProgram(DancerAddress[Dancer_i],DancersCfg[Dancer_i].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); -- cgit v1.3.1 From 618d8e5006d19aad8cf57c4a3ffb7c8293292b90 Mon Sep 17 00:00:00 2001 From: Ronen Sberlo Date: Tue, 17 Nov 2020 10:31:13 +0200 Subject: waste/ifs ppc status update --- .../Embedded/Modules/General/MachineStatus.c | 11 +++-- .../Embedded/Modules/General/MachineStatus.h | 2 +- .../Embedded/Modules/Heaters/Heaters_Blowers.c | 9 ++-- Software/Embedded_SW/Embedded/Modules/IFS/ifs.c | 18 ++++---- .../Embedded/Modules/Waste/Waste_maint.c | 49 +++++++++++++++------- 5 files changed, 55 insertions(+), 34 deletions(-) (limited to 'Software/Embedded_SW') 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 5be5f1232..aa2520057 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -53,7 +53,7 @@ #define PRESSURE_SENSOR_CP 0.269 #define PRESSURE_SENSOR_B 0.45 #define V0_DEFAULT_VALUE 1050 -#define FAN_MIN_RPM_THRESHOLD 3200 +#define FAN_MIN_RPM_THRESHOLD 4000 extern uint16_t Head_Fan_Tach[2]; extern uint8_t Head_Fan_PWM_Command[2]; @@ -354,13 +354,12 @@ void HeadBlowersCfg() uint32_t PressureSensorInit(int blowerId) { - uint32_t V0; + uint32_t rpm, V0 = 0; - if (HeadBlowersGetRPM(blowerId) < FAN_MIN_RPM_THRESHOLD) { + rpm = HeadBlowersGetRPM(blowerId); + if (rpm < FAN_MIN_RPM_THRESHOLD) { V0 = MillisecGetTemperatures(BlowerIdToSensorId[blowerId]); V0 /= 10; - } else { - V0 = V0_DEFAULT_VALUE; } return V0; } diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index 329357ed4..9f7a342ba 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -284,7 +284,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 +305,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 +325,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 +356,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 +366,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 +376,9 @@ 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()); + 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/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index 9c5fe9822..f0b148b83 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -42,6 +42,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 +166,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 +224,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 +241,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 +258,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 +358,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 +373,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 +486,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 +497,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 +512,10 @@ 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()); + CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__Emptying, WHS_GetCartridgeFillPercent()); #ifdef WHS_DEBUG wasteLevel -= 100; timeout_counter += 10; @@ -517,7 +536,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: -- cgit v1.3.1 From 914112a7e6d62c4561577ef959f7aff79bd686eb Mon Sep 17 00:00:00 2001 From: Ronen Sberlo Date: Tue, 17 Nov 2020 14:06:49 +0200 Subject: ppc status ifs/waste complete fix --- Software/Embedded_SW/Embedded/Modules/IFS/ifs.c | 16 ++++++++++++++-- .../Embedded_SW/Embedded/Modules/Waste/Waste_maint.c | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index 9f7a342ba..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() @@ -378,7 +389,8 @@ void midTankStateMachine(void) // RFID change status - inkEmpty CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, CARTRIDGE_STATE__FillingCompleted, 100.0); } - CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, midTankCartColor, 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/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index f0b148b83..c1b54b4d6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -515,7 +515,8 @@ void Waste_StateMachine(void) CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__EmptyingCompleted, WHS_GetCartridgeFillPercent()); timeout_counter = 0; } - CartridgeStateUpdate(activeCart, activeCart-1, 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; -- cgit v1.3.1 From 0d836ced3dbe4a31916064bdf89fe1c8283c011f Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 17 Nov 2020 14:39:41 +0200 Subject: Version 1.5.2(1): fix some bugs. improve / fix Update Pid during run, and cartridge state --- .../Embedded/Common/SWUpdate/FileSystem.c | 9 +++- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- Software/Embedded_SW/Embedded/Main.c | 36 +++++++++++++++- .../Embedded/Modules/General/MachineStatus.c | 11 +++-- .../Embedded/Modules/General/MachineStatus.h | 2 +- .../Embedded/Modules/Heaters/Heaters_Blowers.c | 9 ++-- Software/Embedded_SW/Embedded/Modules/IFS/ifs.c | 18 ++++---- .../Embedded/Modules/Thread/Thread_init.c | 7 +--- .../Embedded/Modules/Thread/Thread_print.c | 8 ++-- .../Embedded/Modules/Waste/Waste_maint.c | 49 +++++++++++++++------- .../StateMachines/Initialization/InitSequence.c | 1 + 11 files changed, 105 insertions(+), 47 deletions(-) (limited to 'Software/Embedded_SW') 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..d0193f970 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,2,1}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index c1d83abb3..ed1ecbefa 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -182,8 +182,8 @@ Void errHook(Error_Block *eb) System_printf("assertion violation: "); f_write(LogFileHandle,"\r\nassertion violation: ",22,&Bytes ); } + CloseLogFile(); } - CloseLogFile(); #ifdef WATCHDOG @@ -222,6 +222,7 @@ void Init_EVB() int main(void) { + FRESULT Fresult = FR_OK; // Enable interrupts to the processor. // ROM_IntMasterDisable(); @@ -255,6 +256,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); 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 5be5f1232..aa2520057 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -53,7 +53,7 @@ #define PRESSURE_SENSOR_CP 0.269 #define PRESSURE_SENSOR_B 0.45 #define V0_DEFAULT_VALUE 1050 -#define FAN_MIN_RPM_THRESHOLD 3200 +#define FAN_MIN_RPM_THRESHOLD 4000 extern uint16_t Head_Fan_Tach[2]; extern uint8_t Head_Fan_PWM_Command[2]; @@ -354,13 +354,12 @@ void HeadBlowersCfg() uint32_t PressureSensorInit(int blowerId) { - uint32_t V0; + uint32_t rpm, V0 = 0; - if (HeadBlowersGetRPM(blowerId) < FAN_MIN_RPM_THRESHOLD) { + rpm = HeadBlowersGetRPM(blowerId); + if (rpm < FAN_MIN_RPM_THRESHOLD) { V0 = MillisecGetTemperatures(BlowerIdToSensorId[blowerId]); V0 /= 10; - } else { - V0 = V0_DEFAULT_VALUE; } return V0; } diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index 329357ed4..9f7a342ba 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -284,7 +284,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 +305,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 +325,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 +356,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 +366,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 +376,9 @@ 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()); + 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/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 626bcde7c..8d798b402 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -217,12 +217,7 @@ uint32_t StoreDancerConfigMessage(int DancerId) status |= MCU_E2PromProgram(DancerAddress[Dancer_i],DancersCfg[Dancer_i].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 + Report("~~~~~~Store eeprom",__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..f0b148b83 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -42,6 +42,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 +166,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 +224,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 +241,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 +258,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 +358,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 +373,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 +486,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 +497,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 +512,10 @@ 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()); + CartridgeStateUpdate(activeCart, activeCart-1, CARTRIDGE_STATE__Emptying, WHS_GetCartridgeFillPercent()); #ifdef WHS_DEBUG wasteLevel -= 100; timeout_counter += 10; @@ -517,7 +536,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/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 98326a1da..5d97a0003 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -917,6 +917,7 @@ uint32_t PowerUpUpdate(MACHINE_STATE_STAGES_ENUM stage) { RemoveControlCallback(PowerUpLoadControlId, PowerUpUpdateCallBackFunction); PowerUpLoadControlId = 0xFF; + PowerUpStopReporting(); } } return status; -- cgit v1.3.1 From 4ce03910c28225146eb34c6d64c5c75ee161ac64 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 17 Nov 2020 15:09:36 +0200 Subject: Version 1.5.2(1) final --- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 12 ++++++++++++ .../Embedded/Modules/Diagnostics/Diagnostics.c | 10 ---------- .../Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c | 4 ++-- Software/Embedded_SW/Embedded/Software Release Notes.txt | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 12 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 5c24b2338..eceb92d63 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -1040,6 +1040,18 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) if (FoundReason == JOB_OK) { FoundReason = Winder_Check_Cone(); + if (FoundReason!=JOB_OK) + { + for (Alarm_i = 0;Alarm_iamount == 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) diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 4e1f7104f..8723978f1 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,18 @@ +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 + + Embedded SW Release note - Version 1.5.1(4) - Pack 3 ============================================================= fix tunnel pressure calculation -- cgit v1.3.1 From c70273e22beeee78b6ba7e60c365f1f860fc7848 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 17 Nov 2020 16:00:54 +0200 Subject: update --- .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task..h | 16 ++++++++ .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c | 45 ++++++++++++++++++++++ .../Embedded_SW/Embedded/Drivers/RFID/RFID_Task.c | 45 ---------------------- .../Embedded_SW/Embedded/Drivers/RFID/RFID_Task.h | 0 4 files changed, 61 insertions(+), 45 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task..h create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c delete mode 100644 Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.c delete mode 100644 Software/Embedded_SW/Embedded/Drivers/RFID/RFID_Task.h (limited to 'Software/Embedded_SW') 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..6d16701fc --- /dev/null +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task..h @@ -0,0 +1,16 @@ +/* + * RFID_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_Dispenser_ReadData(int dispenserId);; + + + +#endif /* DRIVERS_RFID_TASK_RFID_TASK_H_ */ 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..f5101d9e7 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c @@ -0,0 +1,45 @@ +/* + * RFID_Task.c + * + * Created on: Oct 23, 2019 + * Author: shlomo + */ + +#include +#include +#include "include.h" +#include "inc/hw_memmap.h" + +#include +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.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 -#include -#include "include.h" -#include "inc/hw_memmap.h" - -#include -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 -- cgit v1.3.1 From 4e4f12ffaf4f2398add9d26191b346fa242a55b6 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 17 Nov 2020 16:11:43 +0200 Subject: merge --- .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task..h | 16 ---------------- .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c | 2 +- .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h | 16 ++++++++++++++++ 3 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task..h create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h (limited to 'Software/Embedded_SW') 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 deleted file mode 100644 index 6d16701fc..000000000 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task..h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * RFID_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_Dispenser_ReadData(int dispenserId);; - - - -#endif /* DRIVERS_RFID_TASK_RFID_TASK_H_ */ 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 index f5101d9e7..fc4bad71d 100644 --- 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 @@ -10,7 +10,7 @@ #include "include.h" #include "inc/hw_memmap.h" -#include +#include Task_Handle RFID_Task_Handle; Mailbox_Handle RFID_ReadingMsgQ = NULL; typedef enum 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..6d16701fc --- /dev/null +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h @@ -0,0 +1,16 @@ +/* + * RFID_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_Dispenser_ReadData(int dispenserId);; + + + +#endif /* DRIVERS_RFID_TASK_RFID_TASK_H_ */ -- cgit v1.3.1 From c372838829041dfc7b928630d7bab9b56bf2e71d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 17 Nov 2020 16:20:03 +0200 Subject: Version 1.5.2(1) --- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 8 +++++--- .../Embedded/Software Release Notes.txt | 2 +- .../Embedded/StateMachines/Printing/JobSTM.c | 23 ++++++++++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index fcd1c05a2..51485e579 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -591,10 +591,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]=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) { diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 8723978f1..736f6e3be 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -11,7 +11,7 @@ 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 ============================================================= 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 -- cgit v1.3.1 From b3c69df489e1bce39037b18f2dbf059a55865ae2 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 18 Nov 2020 09:11:00 +0200 Subject: logs + change sublimation time stub --- Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c | 1 + Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c | 8 ++++++++ 2 files changed, 9 insertions(+) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c index aa2520057..5134e97aa 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -411,6 +411,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/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index a7b3c5d26..284a43e41 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -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) -- cgit v1.3.1 From 951715815b1bd6a8ebb415fc1ce85a97843351f4 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Wed, 18 Nov 2020 10:08:14 +0200 Subject: Add support for head fan cntroller with slave address 0x5E --- .../I2C_Communication/Head_Card/Fan/Head_Fan.h | 1 + .../I2C_Communication/Head_Card/Fan/fan_click.c | 31 +++++++++++++++++++++- .../WHS_Card/D_EMC2302_Fan/WHS_Fan.c | 2 +- Software/Embedded_SW/Embedded/Main.c | 1 + .../Embedded/Modules/Stubs_Handler/Progress.c | 8 ++++++ .../Initialization/PowerOffSequence.h | 1 + 6 files changed, 42 insertions(+), 2 deletions(-) (limited to 'Software/Embedded_SW') 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/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/Main.c b/Software/Embedded_SW/Embedded/Main.c index ed1ecbefa..36883df23 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -311,6 +311,7 @@ int main(void) I2C_BUSY_DELAY = 100; //temporary workaround!!! //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)) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index a7b3c5d26..284a43e41 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -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/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_ */ -- cgit v1.3.1 From 2d453e76dbc75ed10c7e953f735d9aedcbfd3529 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 18 Nov 2020 16:24:06 +0200 Subject: fixes --- Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c | 12 ++++++------ .../Embedded/Modules/Diagnostics/DiagnosticsHoming.c | 4 ++-- Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 6 ++++-- Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c | 2 +- Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c | 7 +------ 5 files changed, 14 insertions(+), 17 deletions(-) (limited to 'Software/Embedded_SW') 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/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index c7f8740d1..9a14cd1b8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -475,7 +475,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 +611,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/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index fcd1c05a2..3a2bbc347 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -591,10 +591,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]0) + IDS_Cleaning_Stop_Cleaning_Solution(NULL); IDS_StopLubrication(); Init_CleaningStageCounter();//set the counter before relocating HeadCard_Actuators_Relocate(); 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_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 626bcde7c..869485b71 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -217,12 +217,7 @@ uint32_t StoreDancerConfigMessage(int DancerId) status |= MCU_E2PromProgram(DancerAddress[Dancer_i],DancersCfg[Dancer_i].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 + 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) -- cgit v1.3.1 From 8906274180ae356fcf08893b313f852546181514 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 18 Nov 2020 16:43:49 +0200 Subject: preparation for light colors --- Software/Embedded_SW/Embedded/DataDef.h | 11 +++++- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 2 + .../Embedded/Modules/General/GeneralHardware.c | 5 ++- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 3 -- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 11 ++++-- .../Embedded/Modules/Stubs_Handler/Calculate.c | 44 +++++++++++++++++----- 6 files changed, 57 insertions(+), 19 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 755e5a962..0d93b3dbe 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -30,7 +30,7 @@ #define BTSR_NO_PULLER_TFU #endif //#define USE_POWERSTEP01 -NA - +//#define LIGHT_COLORS //#define EMC_FORCE_MOT_CLOCK_INTERNAL //#define VAC_TEST @@ -635,9 +635,16 @@ Supports diagnostic (--diag_suppress, - pds) #define HEAD6_PT100 TEMP_SENSE_AN_ENCLOSURETEMP3 #define MIXER_PT100 TEMP_SENSE_ANALOG_MIXCHIP_TEMP +//#define LUBRICANT_DISPENSER 7 +#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/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;idata.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;in_dancermiddlepoint = MAX_SYSTEM_DANCERS; response.machinecalibrationdata->dancermiddlepoint = DancersData; response.machinecalibrationdata->machineserialnumber = Serial; 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_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index b1b81b3f1..367b36e38 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 @@ -565,7 +564,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"); @@ -1946,20 +1945,26 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) } 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/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 #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; - - responseContainer = createContainer(MESSAGE_TYPE__CalculateResponse, requestContainer->token, true, &response, &calculate_response__pack, &calculate_response__get_packed_size); + 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, 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); } -- cgit v1.3.1 From 412f4e542d5c66399e958e7233d04574011af4b4 Mon Sep 17 00:00:00 2001 From: Ronen Sberlo Date: Thu, 19 Nov 2020 12:56:44 +0200 Subject: stop cleaner motor if job aborted --- Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c | 10 ++++++++++ Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 + Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 1 + 3 files changed, 12 insertions(+) (limited to 'Software/Embedded_SW') 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 367b36e38..4fd273977 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -1940,6 +1940,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) IDS_Cleaning_Stop_Cleaning_Solution(NULL); IDS_StopLubrication(); Init_CleaningStageCounter();//set the counter before relocating + IDS_Cleaning_stop_cleaner_motor(); HeadCard_Actuators_Relocate(); return OK; } -- cgit v1.3.1 From df8534fcfb8b9b07f5a71a57e0ff3a8fb0071158 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 19 Nov 2020 14:38:07 +0200 Subject: preparations for light colors and cosmetics --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Communication/Connection.c | 2 + Software/Embedded_SW/Embedded/DataDef.h | 1 - .../WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c | 2 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 2 +- .../Embedded/Modules/Diagnostics/Diagnostics.h | 1 + .../Modules/Diagnostics/DiagnosticsHoming.c | 10 +++ .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 63 +++++++++++---- .../Procedures/Read main card informatiom.txt | 91 ++++++++++++++++++++++ .../Procedures/Read main card information.pproj | 1 + 10 files changed, 154 insertions(+), 21 deletions(-) create mode 100644 Software/Stubs Collection/Procedures/Read main card informatiom.txt create mode 100644 Software/Stubs Collection/Procedures/Read main card information.pproj (limited to 'Software/Embedded_SW') 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 d0193f970..a6adc3b3e 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,1}; +TangoVersion_t _gTangoVersion = {1,5,2,2}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.c b/Software/Embedded_SW/Embedded/Communication/Connection.c index af60541aa..0eac579ae 100644 --- a/Software/Embedded_SW/Embedded/Communication/Connection.c +++ b/Software/Embedded_SW/Embedded/Communication/Connection.c @@ -53,6 +53,7 @@ void StopRecurringReports(void) PowerUpStopReporting(); MachineUpdateStopReporting(); PowerDownStopReporting(); + HomingStopReporting(); KeepAliveActive = false; } @@ -140,6 +141,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/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 0d93b3dbe..98fe87f32 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -635,7 +635,6 @@ Supports diagnostic (--diag_suppress, - pds) #define HEAD6_PT100 TEMP_SENSE_AN_ENCLOSURETEMP3 #define MIXER_PT100 TEMP_SENSE_ANALOG_MIXCHIP_TEMP -//#define LUBRICANT_DISPENSER 7 #ifdef LIGHT_COLORS #define LUBRICANT_DISPENSER 9 #define CLEANER_DISPENSER 9 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/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 4122955b3..11a48b587 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -545,7 +545,7 @@ 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.headzone9temperature = 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 9a14cd1b8..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 ********************************************************************************/ diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 4fd273977..a28d00a91 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -250,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; @@ -260,7 +261,7 @@ JobDescriptionFileBrushStop *FirstBrushStop = NULL; DispenserUsedInJob[CLEANER_DISPENSER] = false; EnableCleaning = false; } - +#endif if (JobTicket->enablelubrication == true) { //DispenserUsedInJob[LUBRICANT_DISPENSER] = true; @@ -521,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 0.02) { @@ -625,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); @@ -737,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 } @@ -761,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]; @@ -768,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); @@ -885,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)) @@ -941,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; @@ -1088,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 ); @@ -1176,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); @@ -1290,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); @@ -1617,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) @@ -1718,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 @@ -1936,9 +1963,11 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) } } +#ifndef LIGHT_COLORS if (CurrentDispenserSpeed[CLEANER_DISPENSER]>0) IDS_Cleaning_Stop_Cleaning_Solution(NULL); - IDS_StopLubrication(); +#endif + IDS_StopLubrication(); Init_CleaningStageCounter();//set the counter before relocating IDS_Cleaning_stop_cleaner_motor(); HeadCard_Actuators_Relocate(); diff --git a/Software/Stubs Collection/Procedures/Read main card informatiom.txt b/Software/Stubs Collection/Procedures/Read main card informatiom.txt new file mode 100644 index 000000000..1252779df --- /dev/null +++ b/Software/Stubs Collection/Procedures/Read main card informatiom.txt @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Drawing; +using Google.Protobuf; +using Tango.BL.Entities; +using Tango.BL.Enumerations; +using Tango.PMR.Stubs; +using Tango.PMR.Diagnostics; +using Tango.PMR.EmbeddedParameters; +using Tango.FSE.Common.Connection; +using Tango.FSE.Common.Diagnostics; +using Tango.FSE.Procedures; + + +private const string JSON_FILE_PATH = "C:/temp/maineeprom.json"; +private const string CSV_FILE_PATH = "C:/temp/maineeprom.csv"; +public class Program +{ + string[] Main_Card_EEpromAddress = { + "DATA_SIZE", + "DANCER_0", + "DANCER_1", + "DANCER_2", + "DRYER_CENTER", + "DRYER_CYCLES", + "MIDTANK_1_A", + "MIDTANK_1_B", + "MIDTANK_2_A", + "MIDTANK_2_B", + "MIDTANK_3_A", + "MIDTANK_3_B", + "MIDTANK_4_A", + "MIDTANK_4_B", + "MIDTANK_5_A", + "MIDTANK_5_B", + "MIDTANK_6_A", + "MIDTANK_6_B", + "MIDTANK_7_A", + "MIDTANK_7_B", + "MIDTANK_8_A", + "MIDTANK_8_B", + "WINDER_CALIBRATION", + "EMBEDDED_VERSION", + "EEPROM_ALARM_SUPPORT", + "EEPROM_ORIFICE1_ZERO_VALUE", + "EEPROM_ORIFICE3_ZERO_VALUE", + "EEPROM_WASTE_TANK_ZERO_VALUE", + "EEPROM_PULLER_TENSION_POSITION", + "EEPROM_WINDER_TENSION_POSITION", + "EEPROM_INIT_FAILURE_COUNTER", + "DANCER_3", + "DANCER_4", + "EEPROM_PRESSURE_SENSOR_V0_0", + "EEPROM_PRESSURE_SENSOR_V0_1", + "EEPROM_DRIER_LOADING_ARM_ANGLE"}; + public void OnExecute(IProcedureContext context) + { + string FileName; + StubReadEmbeddedVersionRequest stubReadEmbeddedVersionRequest = new StubReadEmbeddedVersionRequest(); + var response2 = context.Send(stubReadEmbeddedVersionRequest); + + if ((response2.VerMajor>=1)&&(response2.VerMinor>=5)&&(response2.VerPatch>=2)&&(response2.VerBuild>=2)) + { + MainCardStoredDataRequest mainCardStoredDataRequest = new MainCardStoredDataRequest(); + var response3 = context.Send(mainCardStoredDataRequest); + FileName - "C:/temp/mainEEProm"+context.ConnectedMachine.SerialNumber+".json"; + + context.AppendToFile(FileName, "MainCardStoredData: "+ response3); + } + else + { + context.AppendToFile(CSV_FILE_PATH, "Address,Name,Data"); + for (int i = 1; i < 36; i++) + { + StubMainCardEEpromReadRequest stubMainCardEEpromReadRequest = new StubMainCardEEpromReadRequest(); + stubMainCardEEpromReadRequest.Address = i; + stubMainCardEEpromReadRequest.Data = 0; + + var response = context.Send(stubMainCardEEpromReadRequest); + context.AppendToFile(CSV_FILE_PATH, response.Address + "," + Main_Card_EEpromAddress[i] +"," + response.Data); + } + } + context.AddResult(ResultType.Passed, "Successfuly read the Main card information", "Test passed."); + } +} \ No newline at end of file diff --git a/Software/Stubs Collection/Procedures/Read main card information.pproj b/Software/Stubs Collection/Procedures/Read main card information.pproj new file mode 100644 index 000000000..f658a0e8b --- /dev/null +++ b/Software/Stubs Collection/Procedures/Read main card information.pproj @@ -0,0 +1 @@ +{"$id":"1","Name":"Read main card information","Visibility":"Public","Description":"This procedure reads the stored main card information and put it in a file in C:/temp/maineeprom.* for future use","Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.PMR.EmbeddedParameters;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\n\r\npublic class Program\r\n{\r\n\tstring[] Main_Card_EEpromAddress = {\r\n\t\"DATA_SIZE\",\r\n\t\"DANCER_0\",\r\n\t\"DANCER_1\",\r\n\t\"DANCER_2\",\r\n\t\"DRYER_CENTER\",\r\n\t\"DRYER_CYCLES\",\r\n\t\"MIDTANK_1_A\",\r\n\t\"MIDTANK_1_B\",\r\n\t\"MIDTANK_2_A\",\r\n\t\"MIDTANK_2_B\",\r\n\t\"MIDTANK_3_A\",\r\n\t\"MIDTANK_3_B\",\r\n\t\"MIDTANK_4_A\",\r\n\t\"MIDTANK_4_B\",\r\n\t\"MIDTANK_5_A\",\r\n\t\"MIDTANK_5_B\",\r\n\t\"MIDTANK_6_A\",\r\n\t\"MIDTANK_6_B\",\r\n\t\"MIDTANK_7_A\",\r\n\t\"MIDTANK_7_B\",\r\n\t\"MIDTANK_8_A\",\r\n\t\"MIDTANK_8_B\",\r\n\t\"WINDER_CALIBRATION\",\r\n\t\"EMBEDDED_VERSION\",\r\n\t\"EEPROM_ALARM_SUPPORT\",\r\n\t\"EEPROM_ORIFICE1_ZERO_VALUE\",\r\n\t\"EEPROM_ORIFICE3_ZERO_VALUE\",\r\n\t\"EEPROM_WASTE_TANK_ZERO_VALUE\",\r\n\t\"EEPROM_PULLER_TENSION_POSITION\",\r\n\t\"EEPROM_WINDER_TENSION_POSITION\",\r\n\t\"EEPROM_INIT_FAILURE_COUNTER\",\r\n\t\"DANCER_3\",\r\n\t\"DANCER_4\",\r\n\t\"EEPROM_PRESSURE_SENSOR_V0_0\",\r\n\t\"EEPROM_PRESSURE_SENSOR_V0_1\",\r\n\t\"EEPROM_DRIER_LOADING_ARM_ANGLE\"};\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n \tstring FileName;\r\n\r\n\t\tStubReadEmbeddedVersionRequest stubReadEmbeddedVersionRequest = new StubReadEmbeddedVersionRequest();\r\n\t\tvar response2 = context.Send(stubReadEmbeddedVersionRequest);\r\n\t\r\n\t\tif ((response2.VerMajor>=1)&&(response2.VerMinor>=5)&&(response2.VerPatch>=2)&&(response2.VerBuild>=2))\r\n\t\t{\r\n\t\t\tMainCardStoredDataRequest mainCardStoredDataRequest = new MainCardStoredDataRequest();\r\n\t\t\tvar response3 = context.Send(mainCardStoredDataRequest);\r\n\t\t\t//context.AppendToFile(JSON_FILE_PATH, \"MainCardStoredData: \"+ response3);\r\n\t\t\tFileName = \"C:/temp/mainEEProm_\"+context.ConnectedMachine.SerialNumber+\".json\";\r\n\r\n\t\t\tcontext.AppendToFile(FileName, \"MainCardStoredData: \"+ response3);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tFileName = \"C:/temp/mainEEProm_\"+context.ConnectedMachine.SerialNumber+\".csv\";\r\n\r\n\t\t\tcontext.AppendToFile(FileName, \"Address,Name,Data\");\r\n\t\t for (int i = 1; i < 36; i++)\r\n\t\t {\r\n\t\t\t\tStubMainCardEEpromReadRequest stubMainCardEEpromReadRequest = new StubMainCardEEpromReadRequest();\r\n\t\t\t\tstubMainCardEEpromReadRequest.Address = i;\r\n\t\t\t\tstubMainCardEEpromReadRequest.Data = 0;\r\n\t\t\r\n\t\t\t\tvar response = context.Send(stubMainCardEEpromReadRequest);\r\n\t\t\t\tcontext.AppendToFile(FileName, \"\\r\\n\"+response.Address + \",\" + Main_Card_EEpromAddress[i] +\",\" + response.Data);\r\n\t\t\t}\t\t\r\n\t\t} \r\n context.AddResult(ResultType.Passed, \"Successfuly read the Main card information\", \"Test passed.\");\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Drawing;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Entities;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Connection;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"Variables":{"$id":"6","$values":[]},"ReferenceAssemblies":{"$id":"7","$values":[{"$id":"8","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"17","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"18","File":"C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"},{"$id":"19","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.DataStore.dll","HintType":"Tango.DataStore.IDataStoreItem, Tango.DataStore, Version=2.0.4.1608, Culture=neutral, PublicKeyToken=null"}]},"Resources":{"$id":"20","$values":[]},"Dialogs":{"$id":"21","$values":[]},"ID":"fa8293e8-0db3-4461-a0ed-6d9406d80df1","ApartmentState":"STA"} \ No newline at end of file -- cgit v1.3.1 From 1c5e8e3515f65a97a6385d34b2014d87be6dcc30 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sat, 21 Nov 2020 23:32:55 +0200 Subject: arc alarms fix. some spike handling --- .../Embedded/Modules/Control/MillisecTask.c | 3 +- .../Embedded/Modules/Heaters/Heaters_Blowers.c | 84 ++++++++++++++++------ .../Embedded/Modules/Heaters/Heaters_print.c | 46 ++++++------ .../Initialization/PowerOffSequence.c | 3 +- 4 files changed, 88 insertions(+), 48 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 1057ddbc3..97640ccdb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -540,7 +540,8 @@ int MillisecCalculateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId) TemperatureSum[SensorId]-=TemperatureMax[SensorId]; TemperatureSum[SensorId]-=TemperatureMin[SensorId]; calc = TemperatureSum[SensorId] / (TemperatureCount[SensorId]-2); - + 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; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c index 5134e97aa..946958a08 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -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); } } 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/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; -- cgit v1.3.1 From df519d9ad1e71b9a6504d438a335d80b103f1567 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 22 Nov 2020 09:38:05 +0200 Subject: Version 1.5.2(3) last before RFID - changes summary --- Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Software/Embedded_SW') 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 a6adc3b3e..d4720d3d2 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,2}; +TangoVersion_t _gTangoVersion = {1,5,2,3}; #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. -- cgit v1.3.1 From a5776d0c00f131ec71b5e0300a0282b224530b0d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 22 Nov 2020 09:52:47 +0200 Subject: Version 1.5.2(3) release notes ======================= 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 --- Software/Embedded_SW/Embedded/Software Release Notes.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 736f6e3be..9b3b4a919 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,15 @@ +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. -- cgit v1.3.1 From 58d96d90f9422d390658d328d4f6eb3b86d168fa Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Sun, 22 Nov 2020 11:28:09 +0200 Subject: Update RFID code + Use new task for RFID and dispensers --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Common/Utilities/RFIDTagHandling.c | 2 + .../Embedded/Communication/Connection.c | 19 + .../Embedded/Communication/Connection.h | 4 + Software/Embedded_SW/Embedded/DataDef.h | 34 +- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 11 + .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h | 1 + .../Embedded/Drivers/I2C_Communication/I2C.c | 4 +- .../Embedded/Drivers/I2C_Communication/I2C.h | 4 + .../Embedded/Drivers/I2C_Communication/I2C_Comm.c | 24 +- .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c | 418 ++++++- .../I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.h | 29 +- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 30 +- .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 2 +- .../I2C_Communication/RFID_NFC/I2C_IFS_Mux.c | 2 +- .../Drivers/I2C_Communication/RFID_NFC/NFC.c | 1233 +++++++++++++++++++- .../Drivers/I2C_Communication/RFID_NFC/NFC.h | 119 +- .../I2C_Communication/RFID_NFC/NFC_MainBaord.c | 10 +- .../I2C_Communication/RFID_NFC/NFC_MainBaord.h | 1 + .../I2C_Communication/RFID_NFC/RFIDTagInfo.h | 38 +- .../Drivers/I2C_Communication/RFID_NFC/RFID_IFS.c | 294 +++++ .../Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h | 19 + .../I2C_Communication/RFID_NFC/RFID_Settings.h | 40 + .../I2C_Communication/RFID_NFC/RFID_Waste.c | 219 ++++ .../I2C_Communication/RFID_NFC/RFID_Waste.h | 17 + .../I2C_Communication/RFID_NFC/logi-tag/LT_NFC.c | 1 + .../RFID_NFC/logi-tag/LT_NFC_Settings.h | 2 +- .../I2C_Communication/RFID_NFC/logi-tag/LT_RFID.c | 276 ++++- .../I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h | 39 +- Software/Embedded_SW/Embedded/Embedded.cfg | 6 +- Software/Embedded_SW/Embedded/Main.c | 17 +- .../Embedded/Modules/Control/MillisecTask.c | 11 +- .../Modules/Stubs_Handler/Stub_Cartridge.c | 75 +- .../Embedded/Modules/Waste/Waste_maint.c | 4 +- 34 files changed, 2850 insertions(+), 157 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.c create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_IFS.h create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Settings.h create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.c create mode 100644 Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/RFID_Waste.h (limited to 'Software/Embedded_SW') 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 d0193f970..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,1}; +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/RFIDTagHandling.c b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c index 6d15afc6a..6465903fa 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c @@ -5,6 +5,8 @@ * Author: shlomo */ #include "include.h" + +#include "Modules/Waste/Waste.h" #include "Modules/IFS/ifs.h" #include "Modules/AlarmHandling/AlarmHandling.h" #include "PMR/Diagnostics/CartridgeValidationRequest.pb-c.h" diff --git a/Software/Embedded_SW/Embedded/Communication/Connection.c b/Software/Embedded_SW/Embedded/Communication/Connection.c index af60541aa..72108eeea 100644 --- a/Software/Embedded_SW/Embedded/Communication/Connection.c +++ b/Software/Embedded_SW/Embedded/Communication/Connection.c @@ -56,6 +56,21 @@ void StopRecurringReports(void) 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 +98,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; 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 0d93b3dbe..3cd3969be 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -29,6 +29,10 @@ #define BTSR_NO_FEEDER_TFU #define BTSR_NO_PULLER_TFU #endif + +#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 @@ -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 @@ -74,11 +78,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 +309,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 +341,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, 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/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 index fc4bad71d..2053ac569 100644 --- 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 @@ -1,8 +1,10 @@ /* - * RFID_Task.c + * I2C_RFID_Disp_Task.c * * Created on: Oct 23, 2019 * Author: shlomo + * + * Task for I2C4_BASE */ #include @@ -10,36 +12,434 @@ #include "include.h" #include "inc/hw_memmap.h" -#include -Task_Handle RFID_Task_Handle; +#include +#include +#include +#include + +#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; - PANEL_BUTTON_OR_CRAT_ID CartId; + uint32_t TargetID; //readerID / dispenserId + uint32_t parameter1; }RFID_ReadingMessageStruc; -void RFID_Task(UArg arg0, UArg arg1) +void Trigger_RFID_Init(/*RFID_READER_ID readerID*/) { 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; + + 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: - break; + 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 = 11; + 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 index 6d16701fc..5be55ce11 100644 --- 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 @@ -1,5 +1,5 @@ /* - * RFID_Task.h + * I2C_RFID_Disp_Task.h * * Created on: 2 Nov 2020 * Author: avi @@ -9,7 +9,32 @@ #define DRIVERS_RFID_TASK_RFID_TASK_H_ void Trigger_RFID_Init(); -void Trigger_Dispenser_ReadData(int dispenserId);; +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); 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 #include //memset #include +#include #include "driverlib/sysctl.h" #include "driverlib/i2c.h" #include #include "drivers/FPGA/FPGA_Comm.h" #include -#include #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 //memset #include #include "datadef.h" +#include #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 +#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h" + +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" +#include #include -#include +#include +#include +#include +#include +#include + +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 #include "drivers/FPGA/FPGA_Comm.h" +#include +#include "Drivers/I2C_Communication/RFID_NFC/NFC_MainBaord.h" +#include #include #include #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 -#include //#include //#include //#include @@ -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 +#include +#include //memset +#include +#include "datadef.h" +#include +#include "drivers/I2C_Communication/I2C.h" +#include "drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h" +#include +#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h" + +#include +#include +#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 +#include +#include //memset +#include +#include "datadef.h" +#include +#include "drivers/I2C_Communication/I2C.h" +#include "drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h" +#include +#include "drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h" + +#include +#include +#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 +#include #include #include #include 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 #include #include +#include "Drivers/I2C_Communication/RFID_NFC/NFC.h" #include "../NFC_MainBaord.h" +#include +#include +#include +#include #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/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 7fdf21819..1fef48fd7 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -174,13 +174,13 @@ 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; Program.global.millisecLow = Task.create("&RFID_Task", RFID_TaskParams); - +*/ var ADCProcessTaskParams = new Task.Params(); ADCProcessTaskParams.instance.name = "adcProcess"; ADCProcessTaskParams.stackSize = 512; diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index 36883df23..6c40b7916 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -91,9 +91,11 @@ #include #include +#include #include #include +#include #include //***************************************************************************** // @@ -305,10 +307,10 @@ 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 @@ -319,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) { @@ -330,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/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 1057ddbc3..5f6cdf1c6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -703,14 +703,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 +821,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/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 +#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h" + +#include #include "Drivers/I2C_Communication/RFID_NFC/NFC.h" #include -#include + #include #include +#include #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/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index c1b54b4d6..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 -#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h" #include +#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h" + #include "Drivers/I2C_Communication/RFID_NFC/NFC.h" #include #include "PMR/IFS/CartridgeState.pb-c.h" @@ -27,6 +28,7 @@ #include #include #include +#include #include uint8_t VocPpmAlarmLimit = 10;//PPM -- cgit v1.3.1 From 1ed217ed1b6f967a037311df662f811d3d39f15f Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 22 Nov 2020 11:36:49 +0200 Subject: init failures limit 10 instead of 3 --- Software/Embedded_SW/Embedded/DataDef.h | 1 + Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c | 2 +- .../Embedded/StateMachines/Initialization/InitSequence.c | 4 ++-- .../Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs | 9 ++++++++- 4 files changed, 12 insertions(+), 4 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 98fe87f32..88834ac94 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -58,6 +58,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 diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 6abf05539..c90b4fee9 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -446,7 +446,7 @@ 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); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 5d97a0003..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); diff --git a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs index 9a4805843..9fa1676a6 100644 --- a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs +++ b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs @@ -18,9 +18,10 @@ using Tango.PMR.IO; public void OnExecute(StubManager stubManager) { - +string description = ""; ConfigurationParameters configurationParameters = new ConfigurationParameters(); +description += "Version 1.5.2.3"; configurationParameters.BreakSensorLimit = 10; //how many samples to collect in diagnostics before sending @@ -38,12 +39,14 @@ configurationParameters.OpenValveTimeout = 20; configurationParameters.InitialDispenserPressure = 3.85; //used for initial pre-run maximal pressure configurationParameters.InitialDispenserTimeout = 120000; ////used for initial pre-run target number of steps configurationParameters.InitialDispenserTimeLag = 100; +description = description+" "+configurationParameters.InitialDispenserPressure+"-"+configurationParameters.InitialDispenserTimeout; //job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed configurationParameters.DispenserBuildPressureSpeed = 950; //no more than 1000 configurationParameters.DispenserBuildPressureLimit = 0.85; configurationParameters.DispenserBuildPressureTimeout = 420000; // 7 minutes - long prepare for 5 cycles build configurationParameters.DispenserBuildPressureLag = 100; +description = description+" T "+configurationParameters.DispenserBuildPressureTimeout/1000; //temperature band 1000 = 100% - thresholds for job start around target temprature - AC configurationParameters.ACHeatersLowerOperationLimit = 995; @@ -58,6 +61,7 @@ configurationParameters.MidTankPressureCorrection = 0.0; //waste factor for intersegment pressure building configurationParameters.DispenserPresegmentWFCF = 40; +description = description+" WF"+configurationParameters.DispenserPresegmentWFCF; //how much time to start the WFCF process (pressure buildup) before segment start configurationParameters.IDSPreSegmentWFCFTimeBeforeSegment = 12000; @@ -75,6 +79,7 @@ configurationParameters.IDSPreSegmentBuildupTime = 5000; configurationParameters.IDSCleaningSpeed = 800; configurationParameters.IDSCleaningStopBeforeSegmentTime = 10000; //end of presegemnt configurationParameters.IDSCleaningStartSprayPreSegmentTime =2000; //beginning of presegment +description = description+" Cl"+configurationParameters.IDSCleaningStopBeforeSegmentTime+"-"+configurationParameters.IDSCleaningStartSprayPreSegmentTime; int Tup = 10,Tdelay1 = 98,Tdelay2 = 198; //350nsec up, 1 second delay, 2 seconds before up again // Tup = LeftRockerSpeed/100; @@ -85,6 +90,7 @@ int RightRockerSpeed = Tdelay2; configurationParameters.IDSLeftCleaningMotorSpeed = LeftRockerSpeed; configurationParameters.IDSRightCleaningMotorSpeed = RightRockerSpeed; +description = description+"-"+Tup+"."+Tdelay1+"."+Tdelay2; configurationParameters.SwitchToIdleTimeinSeconds = 3600; configurationParameters.IdleDrierTemperature = 80; @@ -156,6 +162,7 @@ double Voltage_Hysteresis = new Double(); Voltage_Hysteresis = 4; configurationParameters.GeneralParameters.Add(Voltage_Hysteresis); + File.WriteAllBytes("C:/temp/EmbParam.cfg",configurationParameters.ToBytes()); byte[] fileBytes = File.ReadAllBytes("C:/temp/EmbParam.cfg"); -- cgit v1.3.1 From 51b913dbffe9f0bb3b1a3a0ce00cef6720ba9a5e Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 22 Nov 2020 16:55:53 +0200 Subject: some changes in spikes --- .../Embedded/Common/Utilities/RFIDTagHandling.c | 2 - .../Embedded/Modules/Control/MillisecTask.c | 11 ++- .../Embedded/Modules/General/GeneralHardware.c | 7 ++ .../stubs/read and store main card data.cs | 11 +-- .../stubs/reload main card EEPROM.cs | 99 ++++++++++++++++++++++ 5 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 Software/Stubs Collection/stubs/reload main card EEPROM.cs (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c index 6465903fa..6d15afc6a 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c @@ -5,8 +5,6 @@ * Author: shlomo */ #include "include.h" - -#include "Modules/Waste/Waste.h" #include "Modules/IFS/ifs.h" #include "Modules/AlarmHandling/AlarmHandling.h" #include "PMR/Diagnostics/CartridgeValidationRequest.pb-c.h" diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 8beab771d..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) TemperatureMin[SensorId]=temperature; @@ -540,8 +542,11 @@ int MillisecCalculateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId) TemperatureSum[SensorId]-=TemperatureMax[SensorId]; TemperatureSum[SensorId]-=TemperatureMin[SensorId]; calc = TemperatureSum[SensorId] / (TemperatureCount[SensorId]-2); - if (abs(TemperatureMax[SensorId]-TemperatureMin[SensorId])>2000) - Report("Millisec Temp spike",__FILE__,SensorId,(int)TemperatureMax[SensorId],RpWarning,(int) TemperatureMin[SensorId],0); + 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; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index c90b4fee9..6c4293f6f 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -452,6 +452,13 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) 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; diff --git a/Software/Stubs Collection/stubs/read and store main card data.cs b/Software/Stubs Collection/stubs/read and store main card data.cs index 6655bcb5f..cf0cb7278 100644 --- a/Software/Stubs Collection/stubs/read and store main card data.cs +++ b/Software/Stubs Collection/stubs/read and store main card data.cs @@ -53,10 +53,9 @@ string[] Main_Card_EEpromAddress = { "EEPROM_DRIER_LOADING_ARM_ANGLE"}; -private const string JSON_FILE_PATH = "C:/temp/maineeprom.json"; -private const string CSV_FILE_PATH = "C:/temp/maineeprom.csv"; public void OnExecute(StubManager stubManager) { + string FileName; StubReadEmbeddedVersionRequest stubReadEmbeddedVersionRequest = new StubReadEmbeddedVersionRequest(); var response2 = stubManager.Run(stubReadEmbeddedVersionRequest); @@ -64,11 +63,13 @@ public void OnExecute(StubManager stubManager) { MainCardStoredDataRequest mainCardStoredDataRequest = new MainCardStoredDataRequest(); var response3 = stubManager.Run(mainCardStoredDataRequest); - stubManager.AppendToFile(JSON_FILE_PATH, "MainCardStoredData: "+ response3); + FileName = "C:/temp/mainEEProm"/*+stubManager.ConnectedMachine.SerialNumber*/+".json"; + stubManager.AppendToFile(FileName, "MainCardStoredData: "+ response3); } else { - stubManager.AppendToFile(CSV_FILE_PATH, "Address,Name,Data"); + FileName = "C:/temp/mainEEProm"/*+stubManager.ConnectedMachine.SerialNumber*/+".csv"; + stubManager.AppendToFile(FileName, "Address,Name,Data"); for (int i = 1; i < 36; i++) { StubMainCardEEpromReadRequest stubMainCardEEpromReadRequest = new StubMainCardEEpromReadRequest(); @@ -76,7 +77,7 @@ public void OnExecute(StubManager stubManager) stubMainCardEEpromReadRequest.Data = 0; var response = stubManager.Run(stubMainCardEEpromReadRequest); - stubManager.AppendToFile(CSV_FILE_PATH, response.Address + "," + Main_Card_EEpromAddress[i] +"," + response.Data); + stubManager.AppendToFile(FileName, "\r\n"+response.Address + "," + Main_Card_EEpromAddress[i] +"," + response.Data); } } diff --git a/Software/Stubs Collection/stubs/reload main card EEPROM.cs b/Software/Stubs Collection/stubs/reload main card EEPROM.cs new file mode 100644 index 000000000..d74874d98 --- /dev/null +++ b/Software/Stubs Collection/stubs/reload main card EEPROM.cs @@ -0,0 +1,99 @@ +using System; +using System.Text; +using System.Linq; +using System.Drawing; +using System.Diagnostics; +using System.Windows.Forms; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using Tango.PMR.Stubs; +using Tango.PMR.EmbeddedParameters; +using Tango.Stubs; +using System.IO; +using Tango.PMR.IO; +using Google.Protobuf; + +int[] Main_Card_Data = +{9535, +11923, +8416, +13851, +0, +1077829655, +1064165718, +1077627722, +1063229233, +1077936561, +1063439315, +1077366397, +1063821827, +1077794020, +1063821827, +-1, +-1, +1077758385, +1062585679, +1077516698, +1066192077, +-1, +772146177, +13, +1067, +1088, +-1, +5600, +4000} + +string[] Main_Card_EEpromAddress = { +"DATA_SIZE", +"DANCER_0", +"DANCER_1", +"DANCER_2", +"DRYER_CENTER", +"DRYER_CYCLES", +"MIDTANK_1_A", +"MIDTANK_1_B", +"MIDTANK_2_A", +"MIDTANK_2_B", +"MIDTANK_3_A", +"MIDTANK_3_B", +"MIDTANK_4_A", +"MIDTANK_4_B", +"MIDTANK_5_A", +"MIDTANK_5_B", +"MIDTANK_6_A", +"MIDTANK_6_B", +"MIDTANK_7_A", +"MIDTANK_7_B", +"MIDTANK_8_A", +"MIDTANK_8_B", +"WINDER_CALIBRATION", +"EMBEDDED_VERSION", +"EEPROM_ALARM_SUPPORT", +"EEPROM_ORIFICE1_ZERO_VALUE", +"EEPROM_ORIFICE3_ZERO_VALUE", +"EEPROM_WASTE_TANK_ZERO_VALUE", +"EEPROM_PULLER_TENSION_POSITION", +"EEPROM_WINDER_TENSION_POSITION", +"EEPROM_INIT_FAILURE_COUNTER", +"DANCER_3", +"DANCER_4", +"EEPROM_PRESSURE_SENSOR_V0_0", +"EEPROM_PRESSURE_SENSOR_V0_1", +"EEPROM_DRIER_LOADING_ARM_ANGLE"}; + + +public void OnExecute(StubManager stubManager) +{ + for (int i = 1; i < 30; i++) + { + StubMainCardEEpromWriteRequest stubMainCardEEpromWriteRequest = new StubMainCardEEpromWriteRequest(); + stubMainCardEEpromWriteRequest.Address = i; + stubMainCardEEpromWriteRequest.Data = Main_Card_Data[i]; + + var response = stubManager.Run(stubMainCardEEpromWriteRequest); + stubManager.Write("\r\nMain_Card_Data write \t"+ (i+1) + " address \t "+ Main_Card_EEpromAddress[i]+" data: \t" + Main_Card_Data[i]); + + } +} \ No newline at end of file -- cgit v1.3.1 From 7c02160e97932c8707d82f90c39c3994d22c6ef1 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 22 Nov 2020 23:45:26 +0200 Subject: fix task priorities --- .../I2C_Communication/I2C_RFID_Dispenser_Task/I2C_RFID_Disp_Task.c | 2 +- Software/Embedded_SW/Embedded/Embedded.cfg | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'Software/Embedded_SW') 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 index 2053ac569..79d31393b 100644 --- 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 @@ -438,7 +438,7 @@ void I2C_DispRFIDTask_Init(void) RFID_ReadingMsgQ = Mailbox_create(sizeof(RFID_ReadingMessageStruc), 10, NULL,NULL); Task_Params_init(&DispRFID_TaskParams); DispRFID_TaskParams.instance->name = "RFID"; - DispRFID_TaskParams.priority = 11; + 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/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg index 1fef48fd7..d636d53d1 100644 --- a/Software/Embedded_SW/Embedded/Embedded.cfg +++ b/Software/Embedded_SW/Embedded/Embedded.cfg @@ -178,13 +178,13 @@ Program.global.millisecLow = Task.create("&MillisecLowTask", MillisecLowTaskPara 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(); -- cgit v1.3.1