/* * MachineStatus.c * * Created on: Aug 15, 2019 * Author: shlomo */ #include #include #include /* puts(), etc. */ #include "Common/report/report.h" #include "include.h" #include "PMR/common/MessageContainer.pb-c.h" #include "PMR/MachineStatus/StartMachineStatusUpdateRequest.pb-c.h" #include "PMR/MachineStatus/StopMachineStatusUpdateRequest.pb-c.h" #include "PMR/MachineStatus/StartMachineStatusUpdateResponse.pb-c.h" #include "PMR/MachineStatus/StopMachineStatusUpdateResponse.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 "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/Motors/Motor.h" #include "Modules/General/MachineStatus.h" #include "modules/ids/ids_ex.h" MachineState StoredMachineStatus = MACHINE_STATE__Ready; void SetMachineStatus (MachineState State) { ReportWithPackageFilter(GeneralFilter,"SetMachineStatus",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); StoredMachineStatus = State; } 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}; int MachineUpdateResponseFunc(void) { int i; MessageContainer responseContainer; if (MachineUpdateToken[0] == 0) return OK; StartMachineStatusUpdateResponse response = START_MACHINE_STATUS_UPDATE_RESPONSE__INIT; MachineStatus MachineStatus; response.status = &MachineStatus; machine_status__init(&MachineStatus); MachineStatus.has_state = true; MachineStatus.state = StoredMachineStatus; MachineStatus.n_idspackslevels = 0; MachineStatus.idspackslevels = (IDSPackLevel**)my_malloc(sizeof(IDSPackLevel *)*8); if (MachineStatus.idspackslevels) { for (i = 0; idata.len, requestContainer->data.data); ustrncpy (MachineUpdateToken, requestContainer->token,36); start_machine_status_update_request__free_unpacked(request,NULL); MachineUpdateResponseFunc(); return status; } void MachineUpdateStopReporting(void) { MachineUpdateToken[0] = 0; } uint32_t StopMachineUpdateFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; StopMachineStatusUpdateRequest* request = stop_machine_status_update_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); StopMachineStatusUpdateResponse response = STOP_MACHINE_STATUS_UPDATE_RESPONSE__INIT; //TODO Handle the request!!!! MachineUpdateStopReporting(); responseContainer = createContainer(MESSAGE_TYPE__StopMachineStatusUpdateResponse, MachineUpdateToken, false, &response, &stop_machine_status_update_response__pack, &stop_machine_status_update_response__get_packed_size); 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(container_buffer, container_size); //free (container_buffer); return OK; }