diff options
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c | 181 |
1 files changed, 177 insertions, 4 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c index 146c62bb6..801f48576 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c @@ -15,34 +15,61 @@ #include "PMR/MachineStatus/StopMachineStatusUpdateRequest.pb-c.h" #include "PMR/MachineStatus/StartMachineStatusUpdateResponse.pb-c.h" #include "PMR/MachineStatus/StopMachineStatusUpdateResponse.pb-c.h" +#include "PMR/Diagnostics/EventType.pb-c.h" #include "PMR/MachineStatus/MachineStatus.pb-c.h" #include "PMR/MachineStatus/MachineState.pb-c.h" #include "PMR/MachineStatus/IDSPackLevel.pb-c.h" +#include "PMR/IFS/CartridgeStatus.pb-c.h" +#include "PMR/IFS/InkFillingStatus.pb-c.h" +#include "PMR/IFS/StartInkFillingStatusRequest.pb-c.h" +#include "PMR/IFS/StartInkFillingStatusResponse.pb-c.h" + #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "Drivers/Heater/TemperatureSensor.h" #include "drivers/Motors/Motor.h" +#include "StateMachines/Initialization/InitSequence.h" + #include "Modules/General/MachineStatus.h" +#include "Modules/AlarmHandling/AlarmHandling.h" #include "Modules/Control/MillisecTask.h" +#include "modules/waste/waste_ex.h" #include "modules/ids/ids_ex.h" +#include "modules/ifs/ifs.h" MachineState StoredMachineStatus = MACHINE_STATE__PowerUp; - +bool SetMAchineStateProblem = false; void SetMachineStatus (MachineState State) { + if (StoredMachineStatus == MACHINE_STATE__PowerOff) + { + ReportWithPackageFilter(GeneralFilter,"not changing MachineStatus while on power down",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); + return; + } + if (State == MACHINE_STATE__Ready) + { + if ((GetMachineState()<MACHINE_STATE_MACHINE_READY_TO_DYE)&&(GetMachineState()!=MACHINE_STATE_NO_PROCESS_PARAMS)) + { + ReportWithPackageFilter(GeneralFilter,"SetMachineStatus problem",__FILE__,__LINE__,State,RpWarning,GetMachineState(), 0); + SetMAchineStateProblem = true; + } + } ReportWithPackageFilter(GeneralFilter,"SetMachineStatus",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); StoredMachineStatus = State; + MachineUpdateResponseFunc(); } char MachineUpdateToken[36+1] = {0}; IDSPackLevel IDS_Level[MAX_SYSTEM_DISPENSERS]; TimerMotors_t msDispenserIdToMotorId[MAX_SYSTEM_DISPENSERS] = {HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8}; +bool temp_measure_alarm = false; int MachineUpdateResponseFunc(void) { int i; - + int internaltemp1,internaltemp2,usetemp; + bool int1valid = true,int2valid = true; MessageContainer responseContainer; if (MachineUpdateToken[0] == 0) return OK; @@ -56,6 +83,52 @@ int MachineUpdateResponseFunc(void) MachineStatus.state = StoredMachineStatus; MachineStatus.n_idspackslevels = 0; MachineStatus.idspackslevels = (IDSPackLevel**)my_malloc(sizeof(IDSPackLevel *)*8); + MachineStatus.has_spoolstate = true; + + internaltemp1 = MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1); + internaltemp2 = MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2); + + if((internaltemp1<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=internaltemp1)) + int1valid = false; + if((internaltemp2<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=internaltemp2)) + int2valid = false; + MachineStatus.has_overalltemperature = true; + if ((int2valid == true)&&(int1valid == true)) + { + usetemp = (max(internaltemp1,internaltemp2))/100; + if (temp_measure_alarm == true) + { + AlarmHandlingSetAlarm(EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR, false); + temp_measure_alarm = false; + } + } + else + { + //AlarmHandlingSetAlarm(EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR, true); + temp_measure_alarm = true; + if ((int2valid == false)&&(int1valid == true)) + usetemp = internaltemp1/100; + else if ((int2valid == false)&&(int1valid == false)) + { + MachineStatus.has_overalltemperature = FALSE; + usetemp = 0; + } + else if ((int1valid == false)&&(int2valid == true)) + usetemp = internaltemp2/100; + } + MachineStatus.overalltemperature = usetemp; + + + + if (FPGA_Read_limit_Switches(GPI_SW_SPOOL_EXISTS)==LIMIT) + { + MachineStatus.spoolstate = SPOOL_STATE__Absent; + } + else + { + MachineStatus.spoolstate = SPOOL_STATE__Present; + + } if (MachineStatus.idspackslevels) { for (i = 0; i<MAX_SYSTEM_DISPENSERS;i++) @@ -74,14 +147,12 @@ int MachineUpdateResponseFunc(void) IDS_Level[i].midtanklevel = Get_MidTank_Pressure_Sensor(i); MachineStatus.idspackslevels[MachineStatus.n_idspackslevels] = &IDS_Level[i]; MachineStatus.n_idspackslevels++; - MachineStatus.overalltemperature = max(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1),MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)); } } else return ERROR; - responseContainer = /*MachineUpdate*/createContainer(MESSAGE_TYPE__StartMachineStatusUpdateResponse, MachineUpdateToken, false, &response, &start_machine_status_update_response__pack, &start_machine_status_update_response__get_packed_size); responseContainer.has_continuous = true; responseContainer.continuous = true; @@ -150,4 +221,106 @@ uint32_t StopMachineUpdateFunc(MessageContainer* requestContainer) return OK; } +/*struct _Cartridge +{ + ProtobufCMessage base; + protobuf_c_boolean has_slot; + CartridgeSlot slot; + CartridgeTagContent *tag; + protobuf_c_boolean has_index; + int32_t index; +}; + typedef enum _CartridgeSlot { + CARTRIDGE_SLOT__Ink = 0, + CARTRIDGE_SLOT__WasteMiddle = 1, + CARTRIDGE_SLOT__WasteLower = 2 + PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CARTRIDGE_SLOT) +} CartridgeSlot; + * */ + +char WasteEmptyingToken[36+1] = {0}; +uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State, double percentage) +{ + if (WasteEmptyingToken[0] == 0) + return ERROR; + uint32_t status = NOT_SUPPORTED; + MessageContainer responseContainer; + CartridgeStatus CartridgeStatus = CARTRIDGE_STATUS__INIT; + Cartridge CartData = CARTRIDGE__INIT; + StartInkFillingStatusResponse response = START_INK_FILLING_STATUS_RESPONSE__INIT; + response.status->n_cartridgesstatuses = 1; + response.status->cartridgesstatuses[0] = &CartridgeStatus; + CartridgeStatus.has_state = true; + CartridgeStatus.state = State; + CartridgeStatus.cartridge = &CartData; + if (percentage>1) + { + CartridgeStatus.has_progresspercentage = true; + CartridgeStatus.progresspercentage = percentage; + } + CartData.has_slot = true; + CartData.slot = Slot; + + /* + struct _CartridgeStatus + { + ProtobufCMessage base; + Cartridge *cartridge; + protobuf_c_boolean has_state; + CartridgeState state; + protobuf_c_boolean has_progresspercentage; + double progresspercentage; + char *message; + }; + size_t n_cartridgesstatuses; + CartridgeStatus **cartridgesstatuses; + typedef enum _CartridgeState { + CARTRIDGE_STATE__None = 0, + CARTRIDGE_STATE__Absent = 1, + CARTRIDGE_STATE__Exists = 2, + CARTRIDGE_STATE__Inserted = 3, + CARTRIDGE_STATE__Filling = 4, + CARTRIDGE_STATE__FillingCompleted = 5, + CARTRIDGE_STATE__Emptying = 6, + CARTRIDGE_STATE__EmptyingCompleted = 7, + CARTRIDGE_STATE__Empty = 8, + CARTRIDGE_STATE__Full = 9, + CARTRIDGE_STATE__Error = 10 + PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CARTRIDGE_STATE) + } CartridgeState; + */ + + responseContainer = createContainer(MESSAGE_TYPE__StartInkFillingStatusResponse, WasteEmptyingToken, false, &response, &start_ink_filling_status_response__pack, &start_ink_filling_status_response__get_packed_size); + responseContainer.has_continuous = true; + responseContainer.continuous = true; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + //USBCDCD_sendData(container_buffer, container_size,10); + + SendChars((char*)container_buffer, container_size); + //MessageContainer responseContainer; + + return status; +} + +uint32_t StartInkFillingStatusRequestFunc(MessageContainer* requestContainer) +{ + uint32_t status = NOT_SUPPORTED; + //MessageContainer responseContainer; + +// MachineUpdateInitParams InitParams; + + Report("StartInkFillingStatusRequestFunc",__FILE__,__LINE__,(int)0,RpWarning,(int)0,0); + 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); + start_ink_filling_status_request__free_unpacked(request,NULL); + return status; +// case MESSAGE_TYPE__StartWasteEmptyingRequest: + +} |
