/* * DiagnosticActions.c * * Created on: Aug 20, 2018 * Author: shlomo */ #include #include "include.h" #include "diagnostics.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/I2C_Communication/DAC/blower.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h" #include #include "drivers/Valves/Valve.h" #include "drivers/Heater/Heater.h" #include "modules/waste/waste_ex.h" #include "Drivers/I2C_Communication/I2C_Task.h" #include "Drivers/I2C_Communication/I2C.h" #include "modules/ids/ids_ex.h" /******************************************************************************** *Blower Diagnostic ********************************************************************************/ uint32_t SetComponentValueRequestRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; uint8_t* container_buffer; //uint32_t status = 0; uint32_t intvoltage; SetComponentValueRequest* request = set_component_value_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); SetComponentValueResponse response = SET_COMPONENT_VALUE_RESPONSE__INIT; responseContainer = createContainer(MESSAGE_TYPE__SetComponentValueResponse, requestContainer->token, true, &response, &set_component_value_response__pack, &set_component_value_response__get_packed_size); container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); switch (request->component) { case VALUE_COMPONENT__BlowerVoltage: blowervolatgedisplay = true; intvoltage = (int)request->value; if (intvoltage < 10.0) Turn_the_Blower_Off(); else { Turn_the_Blower_On(); Control_Voltage_To_Blower(intvoltage); } break; default: break; } size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); set_component_value_request__free_unpacked(request,NULL); return OK; } /******************************************************************************** *Set digital output Diagnostic ********************************************************************************/ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; uint8_t* container_buffer; //uint32_t status = 0; int portId; SetDigitalOutRequest* request = set_digital_out_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); SetDigitalOutResponse response = SET_DIGITAL_OUT_RESPONSE__INIT; responseContainer = createContainer(MESSAGE_TYPE__SetDigitalOutResponse, requestContainer->token, true, &response, &set_digital_out_response__pack, &set_digital_out_response__get_packed_size); container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); switch (request->interfaceio) { case INTERFACE_IOS__Midtank1Air: case INTERFACE_IOS__Midtank2Air: case INTERFACE_IOS__Midtank3Air: case INTERFACE_IOS__Midtank4Air: case INTERFACE_IOS__Midtank5Air: case INTERFACE_IOS__Midtank6Air: case INTERFACE_IOS__Midtank7Air: case INTERFACE_IOS__Midtank8Air: portId = (request->interfaceio - INTERFACE_IOS__Midtank1Air) ; //0-7 if (request->value == Atm_MidTank_OFF) Disable_MidTank_Pressure_Reading(portId); else Enable_MidTank_Pressure_Reading(portId); Valve_Set(IDS_Id_to_AirValve[portId], request->value ); //Atm_MidTank_OFF/ON break; case INTERFACE_IOS__Midtank1Cartridge: case INTERFACE_IOS__Midtank2Cartridge: case INTERFACE_IOS__Midtank3Cartridge: case INTERFACE_IOS__Midtank4Cartridge: case INTERFACE_IOS__Midtank5Cartridge: case INTERFACE_IOS__Midtank6Cartridge: case INTERFACE_IOS__Midtank7Cartridge: case INTERFACE_IOS__Midtank8Cartridge: portId = (request->interfaceio - INTERFACE_IOS__Midtank1Cartridge) ; //0-7 Valve_Set(IDS_Id_to_CartrideValve[portId], request->value ); //Atm_MidTank_OFF/ON break; case INTERFACE_IOS__GPO_DRYER_SSR3_CTRL: //CLEANER_PUMP_SSR3_CTRL if (request->value == true) ActivateCleanerPump(); else DeActivateCleanerPump(); break; case INTERFACE_IOS__GPO_DRYER_SSR1_CTRL: if (request->value == true) ActivateHeater(1); else DeActivateHeater(1); break; case INTERFACE_IOS__GPO_DRYER_SSR2_CTRL: if (request->value == true) ActivateHeater(2); else DeActivateHeater(2); break; case INTERFACE_IOS__GPO_DYEINGH_SSR8_CTRL: if (request->value == true) ActivateHeater(3); else DeActivateHeater(3); break; case INTERFACE_IOS__GPO_DYEINGH_SSR7_CTRL: if (request->value == true) ActivateHeater(4); else DeActivateHeater(4); break; case INTERFACE_IOS__GPO_DYEINGH_SSR6_CTRL: if (request->value == true) ActivateHeater(5); else DeActivateHeater(5); break; case INTERFACE_IOS__GPO_DYEINGH_SSR5_CTRL: if (request->value == true) ActivateHeater(6); else DeActivateHeater(6); break; case INTERFACE_IOS__GPO_DILUTORPUMP_SSR10_CTRL: if (request->value == true) ActivateHeater(7); else DeActivateHeater(7); break; case INTERFACE_IOS__GPO_EXTWINDER_SSR11_CTRL: if (request->value == true) ActivateHeater(8); else DeActivateHeater(8); break; case INTERFACE_IOS__GPO_MIXCHIP_SSR4_CTRL: if (request->value == true) ActivateHeater(9); else DeActivateHeater(9); break; case INTERFACE_IOS__GPO_SPARE_SSR13_CTRL: if (request->value == true) ActivateHeadMagnet(); else DeActivateHeadMagnet(); break; /* case INTERFACE_IOS__GPO_LED4: DataUpdated = request->value; break;*/ case INTERFACE_IOS__VALVE_WASTE_TANK: if (request->value == true) Valve_Set(VALVE_MIXCHIP_WASTECH,1); else Valve_Set(VALVE_MIXCHIP_WASTECH,0); break; case INTERFACE_IOS__GPO_BLOWER_PWM: if (request->value == true) Control_Dryer_Fan(START,75);//use START or STOP, 0 - 100%(); else Control_Dryer_Fan(STOP,0);//use START or STOP, 0 - 100%(); break; case INTERFACE_IOS__GPO_WASTECH_PUMP2://valve if (WHS_Type == WHS_TYPE_UNKNOWN) Valve_Set(VALVE_WASTE_TANK, request->value); else Trigger_SetWHSValveWatseCartridge(request->value); break; case INTERFACE_IOS__GPO_WHS_WTANKPUMP2: if ((IFS_Availability[1] == IFS_RECOGNIZED_INIT_PASSED)&&(IFS_Availability[2] == IFS_RECOGNIZED_INIT_PASSED)) //ifs installed -check cartridges { if (NoCartAvailable()) return ERROR; } SetWastePump( request->value); break; case INTERFACE_IOS__GPO_SPARE_SSR12_CTRL: if (request->value == true) Lubricant_2Way_Valve(START);//use START or STOP, 0 - 100%(); else Lubricant_2Way_Valve(STOP);//use START or STOP, 0 - 100%(); break; case INTERFACE_IOS__GPO_TFEED_BREAK_1: Pumps_Control(WASTECH_PUMP2, request->value); break; case INTERFACE_IOS__GPO_LED3: if (request->value == true) Trigger_Head_Actuators_Control(ACTIN, LOW,request->value); else HeadCard_Actuators_Relocate(); break; case INTERFACE_IOS__GPO_LED4: Trigger_Head_Actuators_Control(ACTOT, LOW,request->value); break; case INTERFACE_IOS__GPO_BUZZER: if (request->value == true) Buzzer(MODE_ON);//use START or STOP, 0 - 100%(); else Buzzer(MODE_OFF);//use START or STOP, 0 - 100%(); break; default: responseContainer.has_error = true; responseContainer.error = ERROR_CODE__GENERAL_ERROR; break; } size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); set_digital_out_request__free_unpacked(request,NULL); return OK; } /******************************************************************************** *Valve Setting ********************************************************************************/ uint32_t SetValveStateRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; uint8_t* container_buffer; uint32_t status = OK; uint32_t valve; SetValveStateRequest* request = set_valve_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); SetValveStateResponse response = SET_VALVE_STATE_RESPONSE__INIT; responseContainer = createContainer(MESSAGE_TYPE__SetValveStateResponse, requestContainer->token, true, &response, &set_valve_state_response__pack, &set_valve_state_response__get_packed_size); container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); if (request->valvetype <= VALVE_TYPE__DispenserValve8 ) //dispenser 3 way valves { valve = request->valvetype; if (request->state == VALVE_STATE_CODE__MidTank) { Control3WayValvesWithCallback(request->valvetype,MidTank_Dispenser,NULL); } else if (request->state == VALVE_STATE_CODE__VGroove) { Control3WayValvesWithCallback(request->valvetype,Dispenser_Mixer,NULL); } else status = ERROR; } else if (request->valvetype <= VALVE_TYPE__MidTankInkValve8 ) //midtank toward dispenser { valve = IDS_Id_to_CartrideValve[request->valvetype - VALVE_TYPE__MidTankInkValve1]; if (request->state == VALVE_STATE_CODE__Open) { Valve_Set(valve,Cartridge_MidTank_ON); } else if (request->state == VALVE_STATE_CODE__Close) { Valve_Set(valve,Cartridge_MidTank_OFF); } else status = ERROR; } else if (request->valvetype <= VALVE_TYPE__MidTankAirValve8 )//midtank toward air { valve = IDS_Id_to_AirValve[request->valvetype - VALVE_TYPE__MidTankAirValve1]; if (request->state == VALVE_STATE_CODE__Open) { Valve_Set(valve,Atm_MidTank_ON); } else if (request->state == VALVE_STATE_CODE__Close) { Valve_Set(valve,Atm_MidTank_OFF); } else status = ERROR; } else if (request->valvetype <= VALVE_TYPE__CartridgeWasteValve ) //not supported { status = FAILED; } else if (request->valvetype <= VALVE_TYPE__CartridgeInkValve8 ) //cartridge - not supported yet { status = FAILED; } else { status = FAILED; } if (status == FAILED) { status = ERROR; responseContainer.has_error = true; responseContainer.error = ERROR_CODE__GENERAL_ERROR; } size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); set_valve_state_request__free_unpacked(request,NULL); return status; } /******************************************************************************** *Blower Setting ********************************************************************************/ uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; uint8_t* container_buffer; uint32_t status = OK; SetBlowerStateRequest* request = set_blower_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); SetBlowerStateResponse response = SET_BLOWER_STATE_RESPONSE__INIT; responseContainer = createContainer(MESSAGE_TYPE__SetBlowerStateResponse, requestContainer->token, true, &response, &set_blower_state_response__pack, &set_blower_state_response__get_packed_size); container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); if (request->has_blowertype) { Report("SetBlowerStateRequest",__FILE__,request->blowertype,(int)request->voltage,RpWarning,(int)request->isactive,0); switch (request->blowertype) { case HARDWARE_BLOWER_TYPE__DefaultBlower: case HARDWARE_BLOWER_TYPE__WHSBlower2: if ((request->has_voltage)&&(request->isactive == true)) { Turn_the_Blower_On();//Turn on with the Default_Voltage Control_Voltage_To_Blower(request->voltage); } else Turn_the_Blower_Off(); break; case HARDWARE_BLOWER_TYPE__HeadBlower1: if (Head_Type == HEAD_TYPE_ARC) { if ((request->has_voltage)&&(request->isactive == true)) Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,request->voltage); else if (request->isactive == false) Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,0); } else status = NOT_SUPPORTED; break; case HARDWARE_BLOWER_TYPE__HeadBlower2: if (Head_Type == HEAD_TYPE_ARC) { if ((request->has_voltage)&&(request->isactive == true)) Trigger_Head_Fan_Control(HEAD_FAN_LEFT,request->voltage); else if (request->isactive == false) Trigger_Head_Fan_Control(HEAD_FAN_LEFT,0); } else status = NOT_SUPPORTED; break; case HARDWARE_BLOWER_TYPE__WHSSmallFans: Trigger_SetWHSFanSpeed(FAN1, request->voltage); Trigger_SetWHSFanSpeed(FAN2, request->voltage); Trigger_SetWHSFanSpeed(FAN3, request->voltage); Trigger_SetWHSFanSpeed(FAN4, request->voltage); break; case HARDWARE_BLOWER_TYPE__WHSLargeFans: Trigger_SetWHSFanSpeed(FAN5, request->voltage); Trigger_SetWHSFanSpeed(FAN6, request->voltage); break; default: status = NOT_SUPPORTED; break; } } else status = NOT_SUPPORTED; if (status != OK) { status = ERROR; responseContainer.has_error = true; responseContainer.error = ERROR_CODE__GENERAL_ERROR; } size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); set_blower_state_request__free_unpacked(request,NULL); return status; }