/************************************************************************************************************************ * control.c * Control module * ************************************************************************************************************************/ #include #include #include "include.h" #include "GeneralHardware.h" #include "thread/thread.h" #include "ids/ids.h" #include "control/control.h" #include "heaters/heaters_ex.h" #include "PMR/common/MessageContainer.pb-c.h" #include "PMR/Hardware/UploadHardWareConfigurationRequest.pb-c.h" #include "PMR/Hardware/UploadHardWareConfigurationResponse.pb-c.h" #include "PMR/Hardware/SystemResetRequest.pb-c.h" #include "PMR/Hardware/SystemResetResponse.pb-c.h" PortInfoStruct PortInfoTable[MAX_PORT_ENUM] = { {ANALOG_MIXCHIP_TEMP,"ANALOG_MIXCHIP_TEMP"}, {AN_DYEINGH_CURSEN_1,"AN_DYEINGH_CURSEN_1"}, {AN_DYEINGH_CURSEN_2,"AN_DYEINGH_CURSEN_2"}, {AN_DYEINGH_CURSEN_3,"AN_DYEINGH_CURSEN_3"}, {AN_DYEINGH_CURSEN_4,"AN_DYEINGH_CURSEN_4"}, {AN_DYEINGH_CURSEN_5,"AN_DYEINGH_CURSEN_5"}, {ANALOG_DYEINGH_TEMP1,"ANALOG_DYEINGH_TEMP1"}, {ANALOG_DYEINGH_TEMP2,"ANALOG_DYEINGH_TEMP2"}, {ANALOG_DYEINGH_TEMP3,"ANALOG_DYEINGH_TEMP3"}, {ANALOG_DYEINGH_TEMP4,"ANALOG_DYEINGH_TEMP4"}, {ANALOG_DYEINGH_TEMP5,"ANALOG_DYEINGH_TEMP5"}, {AN_DRYER_CURSEN1,"AN_DRYER_CURSEN1"}, {AN_DRYER_CURSEN2,"AN_DRYER_CURSEN2"}, {AN_DRYER_CURSEN3,"AN_DRYER_CURSEN3"}, {ANALOG_DRYER_TEMP1,"ANALOG_DRYER_TEMP1"}, {ANALOG_DRYER_TEMP2,"ANALOG_DRYER_TEMP2"}, {ANALOG_DRYER_TEMP3,"ANALOG_DRYER_TEMP3"}, {AN_ENCLOSURETEMP1,"AN_ENCLOSURETEMP1"}, {AN_ENCLOSURETEMP2,"AN_ENCLOSURETEMP2"}, {AN_ENCLOSURETEMP3,"AN_ENCLOSURETEMP3"}, {AN_IDS_PRESSENS_1,"AN_IDS_PRESSENS_1"}, {AN_IDS_PRESSENS_2,"AN_IDS_PRESSENS_2"}, {AN_IDS_PRESSENS_3,"AN_IDS_PRESSENS_3"}, {AN_IDS_PRESSENS_4,"AN_IDS_PRESSENS_4"}, {AN_IDS_PRESSENS_5,"AN_IDS_PRESSENS_5"}, {AN_IDS_PRESSENS_6,"AN_IDS_PRESSENS_6"}, {AN_IDS_PRESSENS_7,"AN_IDS_PRESSENS_7"}, {AN_IDS_PRESSENS_8,"AN_IDS_PRESSENS_8"}, {AN_MIDTANK_PRESSENS1,"AN_MIDTANK_PRESSENS1"}, {AN_MIDTANK_PRESSENS2,"AN_MIDTANK_PRESSENS2"}, {AN_MIDTANK_PRESSENS3,"AN_MIDTANK_PRESSENS3"}, {AN_MIDTANK_PRESSENS4,"AN_MIDTANK_PRESSENS4"}, {AN_MIDTANK_PRESSENS5,"AN_MIDTANK_PRESSENS5"}, {AN_MIDTANK_PRESSENS6,"AN_MIDTANK_PRESSENS6"}, {AN_MIDTANK_PRESSENS7,"AN_MIDTANK_PRESSENS7"}, {AN_MIXCHIP_CURSENn,"AN_MIXCHIP_CURSENn"}, {AN5V_LDANCER1,"AN5V_LDANCER1"}, {AN5V_LDANCER2,"AN5V_LDANCER2"}, {AN5V_RDANCER,"AN5V_RDANCER"}, {AN10V_SPARE1,"AN10V_SPARE1"}, {AN10V_SPARE2,"AN10V_SPARE2"}, {AN_AIRPRESS_1,"AN_AIRPRESS_1"}, {AN_AIRPRESS_2,"AN_AIRPRESS_2"}, {AN_VOCSENS,"AN_VOCSENS"}, {AN_BLOWERCTRL,"AN_BLOWERCTRL"}, {LS_DH_LID_CLEANING,"LS_DH_LID_CLEANING"}, {LS_DH_LID_CLOSED,"LS_DH_LID_CLOSED"}, {LS_DH_CLEAN_UP,"LS_DH_CLEAN_UP"}, {LS_DH_CLEAN_RIGHT,"LS_DH_CLEAN_RIGHT"}, {LS_DH_SPARE1,"LS_DH_SPARE1"}, {LS_DH_LID_OPEN,"LS_DH_LID_OPEN"}, {LS_DH_CLEAN_DOWN,"LS_DH_CLEAN_DOWN"}, {LS_DH_CLEAN_LEFT,"LS_DH_CLEAN_LEFT"}, {LS_DRYER_LID_OPEN,"LS_DRYER_LID_OPEN"}, {LS_DRYER_SPARE3,"LS_DRYER_SPARE3"}, {LS_DRYER_LID_CLOSED,"LS_DRYER_LID_CLOSED"}, {LS_DRYER_SPARE4,"LS_DRYER_SPARE4"}, {LS_DRYER_SPARE1,"LS_DRYER_SPARE1"}, {LS_LOADARM_RIGHT,"LS_LOADARM_RIGHT"}, {LS_DRYER_SPARE2,"LS_DRYER_SPARE2"}, {LS_LOADARM_LEFT,"LS_LOADARM_LEFT"}, {GPI_PS1_DC_OK,"GPI_PS1_DC_OK"}, {GPI_PANSW2,"GPI_PANSW2"}, {GPI_PANSW4,"GPI_PANSW4"}, {GPI_PANSW1,"GPI_PANSW1"}, {GPI_PANSW3,"GPI_PANSW3"}, {GPI_PANSW5,"GPI_PANSW5"}, {GPI_PANSW6,"GPI_PANSW6"}, {GPI_TACTSW1,"GPI_TACTSW1"}, {GPI_TACTSW3,"GPI_TACTSW3"}, {GPI_PWRBUTTON,"GPI_PWRBUTTON"}, {GPI_TACTSW2,"GPI_TACTSW2"}, {GPI_TACTSW4,"GPI_TACTSW4"}, {GPI_EXTWINDER_1,"GPI_EXTWINDER_1"}, {GPI_EXTWINDER_2,"GPI_EXTWINDER_2"}, {GPI_EXTWINDER_3,"GPI_EXTWINDER_3"}, {GPI_EXTWINDER_1_rtn,"GPI_EXTWINDER_1_rtn"}, {GPI_EXTWINDER_2_rtn,"GPI_EXTWINDER_2_rtn"}, {GPI_EXTWINDER_3_rtn,"GPI_EXTWINDER_3_rtn"}, {LS_DISPENSER_UP_1,"LS_DISPENSER_UP_1"}, {LS_DISPENSER_25_1,"LS_DISPENSER_25_1"}, {LS_DISPENSER_75_1,"LS_DISPENSER_75_1"}, {LS_DISPENSER_UP_3,"LS_DISPENSER_UP_3"}, {LS_DISPENSER_25_3,"LS_DISPENSER_25_3"}, {LS_DISPENSER_75_3,"LS_DISPENSER_75_3"}, {LS_DISPENSER_UP_5,"LS_DISPENSER_UP_5"}, {LS_DISPENSER_25_5,"LS_DISPENSER_25_5"}, {LS_DISPENSER_75_5,"LS_DISPENSER_75_5"}, {LS_DISPENSER_UP_7,"LS_DISPENSER_UP_7"}, {LS_DISPENSER_25_7,"LS_DISPENSER_25_7"}, {LS_DISPENSER_75_7,"LS_DISPENSER_75_7"}, {LS_DISPENSER_DOWN_1,"LS_DISPENSER_DOWN_1"}, {LS_DISPENSER_50_1,"LS_DISPENSER_50_1"}, {LS_DISPENSER_SPARE_1,"LS_DISPENSER_SPARE_1"}, {LS_DISPENSER_DOWN_3,"LS_DISPENSER_DOWN_3"}, {LS_DISPENSER_50_3,"LS_DISPENSER_50_3"}, {LS_DISPENSER_SPARE_3,"LS_DISPENSER_SPARE_3"}, {LS_DISPENSER_DOWN_5,"LS_DISPENSER_DOWN_5"}, {LS_DISPENSER_50_5,"LS_DISPENSER_50_5"}, {LS_DISPENSER_SPARE_5,"LS_DISPENSER_SPARE_5"}, {LS_DISPENSER_DOWN_7,"LS_DISPENSER_DOWN_7"}, {LS_DISPENSER_50_7,"LS_DISPENSER_50_7"}, {LS_DISPENSER_SPARE_7,"LS_DISPENSER_SPARE_7"}, {LS_DISPENSER_UP_2,"LS_DISPENSER_UP_2"}, {LS_DISPENSER_25_2,"LS_DISPENSER_25_2"}, {LS_DISPENSER_75_2,"LS_DISPENSER_75_2"}, {LS_DISPENSER_UP_4,"LS_DISPENSER_UP_4"}, {LS_DISPENSER_25_4,"LS_DISPENSER_25_4"}, {LS_DISPENSER_75_4,"LS_DISPENSER_75_4"}, {LS_DISPENSER_UP_6,"LS_DISPENSER_UP_6"}, {LS_DISPENSER_25_6,"LS_DISPENSER_25_6"}, {LS_DISPENSER_75_6,"LS_DISPENSER_75_6"}, {LS_DISPENSER_UP_8,"LS_DISPENSER_UP_8"}, {LS_DISPENSER_25_8,"LS_DISPENSER_25_8"}, {LS_DISPENSER_75_8,"LS_DISPENSER_75_8"}, {LS_RLOADMOTOR_UP,"LS_RLOADMOTOR_UP"}, {LS_DISPENSER_DOWN_2,"LS_DISPENSER_DOWN_2"}, {LS_DISPENSER_50_2,"LS_DISPENSER_50_2"}, {LS_DISPENSER_SPARE_2,"LS_DISPENSER_SPARE_2"}, {LS_DISPENSER_DOWN_4,"LS_DISPENSER_DOWN_4"}, {LS_DISPENSER_50_4,"LS_DISPENSER_50_4"}, {LS_DISPENSER_SPARE_4,"LS_DISPENSER_SPARE_4"}, {LS_DISPENSER_DOWN_6,"LS_DISPENSER_DOWN_6"}, {LS_DISPENSER_50_6,"LS_DISPENSER_50_6"}, {LS_DISPENSER_SPARE_6,"LS_DISPENSER_SPARE_6"}, {LS_DISPENSER_DOWN_8,"LS_DISPENSER_DOWN_8"}, {LS_DISPENSER_50_8,"LS_DISPENSER_50_8"}, {LS_DISPENSER_SPARE_8,"LS_DISPENSER_SPARE_8"}, {LS_SCREW_LEFT,"LS_SCREW_LEFT"}, {SW_SPOOL_EXISTS,"SW_SPOOL_EXISTS"}, {LS_SCREW_RIGHT,"LS_SCREW_RIGHT"}, {SW_SPARE,"SW_SPARE"}, {LS_LDANCER1_DOWN,"LS_LDANCER1_DOWN"}, {LS_LDANCER2_DOWN,"LS_LDANCER2_DOWN"}, {LS_LPIVOT_DOWN,"LS_LPIVOT_DOWN"}, {LS_PIVOT_SPARE1,"LS_PIVOT_SPARE1"}, {LS_LDANCER1_UP,"LS_LDANCER1_UP"}, {LS_LDANCER2_UP,"LS_LDANCER2_UP"}, {LS_LPIVOT_UP,"LS_LPIVOT_UP"}, {LS_PIVOT_SPARE2,"LS_PIVOT_SPARE2"}, {LS_LLOADMOTOR_DOWN,"LS_LLOADMOTOR_DOWN"}, {LS_LSPARE1,"LS_LSPARE1"}, {LS_LLOADMOTOR_UP,"LS_LLOADMOTOR_UP"}, {LS_LSPARE2,"LS_LSPARE2"}, {LS_RDANCER_DOWN,"LS_RDANCER_DOWN"}, {LS_RLOADRAM_DOWN,"LS_RLOADRAM_DOWN"}, {LS_RDANCER_UP,"LS_RDANCER_UP"}, {LS_RLOADRAM_UP,"LS_RLOADRAM_UP"}, {LS_RLOADMOTOR_DOWN,"LS_RLOADMOTOR_DOWN"}, {GPI_TFEED_BREAK_1,"GPI_TFEED_BREAK_1"}, {GPI_TFEED_BREAK_2,"GPI_TFEED_BREAK_2"}, {LS_RSPARE1,"LS_RSPARE1"}, {LS_SPARE2_1,"LS_SPARE2_1"}, {LS_SPARE2_3,"LS_SPARE2_3"}, {LS_SPARE1_1,"LS_SPARE1_1"}, {LS_SPARE1_3,"LS_SPARE1_3"}, {LS_RSPARE2,"LS_RSPARE2"}, {LS_SPARE2_2,"LS_SPARE2_2"}, {LS_SPARE2_4,"LS_SPARE2_4"}, {LS_SPARE1_2,"LS_SPARE1_2"}, {LS_SPARE1_4,"LS_SPARE1_4"}, {GPI_WCONTAINER_WARN,"GPI_WCONTAINER_WARN"}, {GPI_SW_WCONTAINER_PRES,"GPI_SW_WCONTAINER_PRES"}, {GPI_CHILLER_FAULT,"GPI_CHILLER_FAULT"}, {GPI_CHILLER_STAT1,"GPI_CHILLER_STAT1"}, {GPI_BLOWER_TACH,"GPI_BLOWER_TACH"}, {GPI_WCONTAINER_FULL,"GPI_WCONTAINER_FULL"}, {GPI_AIRFLOW_FLAP,"GPI_AIRFLOW_FLAP"}, {GPO_MIXCHIP_SSR4_CTRL,"GPO_MIXCHIP_SSR4_CTRL"}, {GPO_DYEINGH_SSR7_CTRL,"GPO_DYEINGH_SSR7_CTRL"}, {GPO_DYEINGH_SSR8_CTRL,"GPO_DYEINGH_SSR8_CTRL"}, {GPO_DYEINGH_SSR5_CTRL,"GPO_DYEINGH_SSR5_CTRL"}, {GPO_DYEINGH_SSR6_CTRL,"GPO_DYEINGH_SSR6_CTRL"}, {GPO_DRYER_SSR3_CTRL,"GPO_DRYER_SSR3_CTRL"}, {GPO_DRYER_SSR1_CTRL,"GPO_DRYER_SSR1_CTRL"}, {GPO_DRYER_SSR2_CTRL,"GPO_DRYER_SSR2_CTRL"}, {GPO_SPARE_SSR12_CTRL,"GPO_SPARE_SSR12_CTRL"}, {GPO_SPARE_SSR13_CTRL,"GPO_SPARE_SSR13_CTRL"}, {GPO_PDOWN_RL1_CTRL,"GPO_PDOWN_RL1_CTRL"}, {GPO_LED1,"GPO_LED1"}, {GPO_LED3,"GPO_LED3"}, {GPO_LED2,"GPO_LED2"}, {GPO_LED4,"GPO_LED4"}, {GPO_BUZZER,"GPO_BUZZER"}, {GPO_EXTWINDER_SSR11_CTRL,"GPO_EXTWINDER_SSR11_CTRL"}, {GPO_EXTWINDER_1,"GPO_EXTWINDER_1"}, {GPO_EXTWINDER_2,"GPO_EXTWINDER_2"}, {GPO_EXTWINDER_3,"GPO_EXTWINDER_3"}, {GPO_DILUTORPUMP_SSR10_CTRL,"GPO_DILUTORPUMP_SSR10_CTRL"}, {GPO_WASTECH_PUMP1,"GPO_WASTECH_PUMP1"}, {GPO_WASTECH_PUMP2,"GPO_WASTECH_PUMP2"}, {GPO_TFEED_BREAK_1,"GPO_TFEED_BREAK_1"}, {GPO_TFEED_BREAK_2,"GPO_TFEED_BREAK_2"}, {GPO_SPARE1_1,"GPO_SPARE1_1"}, {GPO_SPARE2_1,"GPO_SPARE2_1"}, {GPO_SPARE1_2,"GPO_SPARE1_2"}, {GPO_SPARE2_2,"GPO_SPARE2_2"}, {GPO_BLOWER_PWM,"GPO_BLOWER_PWM"}, {GPO_WHS_WTANKPUMP2,"GPO_WHS_WTANKPUMP2"}, {GPO_CHILLER_SSR9_CTRL,"GPO_CHILLER_SSR9_CTRL"}, {DH2,"DH2"}, {DH1,"DH1"}, {DRYER2,"DRYER2"}, {DRYER1,"DRYER1"}, {ELECTRICALENC,"ELECTRICALENC"}, {USERPANEL,"USERPANEL"}, {EXTWINDINGUNIT,"EXTWINDINGUNIT"}, {DISPENSER_1,"DISPENSER_1"}, {DISPENSER_3,"DISPENSER_3"}, {DISPENSER_5,"DISPENSER_5"}, {DISPENSER_7,"DISPENSER_7"}, {MIDTANK3_1,"MIDTANK3_1"}, {DISPENSER_2,"DISPENSER_2"}, {DISPENSER_4,"DISPENSER_4"}, {DISPENSER_6,"DISPENSER_6"}, {DISPENSER_8,"DISPENSER_8"}, {CART3,"CART3"}, {CART1,"CART1"}, {CART2,"CART2"}, {CART4,"CART4"}, {CART7,"CART7"}, {CART5,"CART5"}, {CART6,"CART6"}, {CART8,"CART8"}, {INTWINDINGUNIT,"INTWINDINGUNIT"}, {LTFEEDUNIT2,"LTFEEDUNIT2"}, {LTFEEDUNIT1,"LTFEEDUNIT1"}, {RTFEEDUNIT2,"RTFEEDUNIT2"}, {RTFEEDUNIT1,"RTFEEDUNIT1"}, {SPARE2,"SPARE2"}, {SPARE1,"SPARE1"}, {WHS,"WHS"}, {MIDTANK3_2,"MIDTANK3_2"}, {MOTO_DH_CLEANHEAD,"MOTO_DH_CLEANHEAD"}, {MOTO_DH_CLEANMECH,"MOTO_DH_CLEANMECH"}, {MOTO_DH_LID,"MOTO_DH_LID"}, {MOTO_DRYER_DRIVING,"MOTO_DRYER_DRIVING"}, {MOTO_DRYER_LID,"MOTO_DRYER_LID"}, {MOTO_DRYER_LOADARM,"MOTO_DRYER_LOADARM"}, {MOTO_DISPENSER_1,"MOTO_DISPENSER_1"}, {MOTO_DISPENSER_2,"MOTO_DISPENSER_2"}, {MOTO_DISPENSER_3,"MOTO_DISPENSER_3"}, {MOTO_DISPENSER_4,"MOTO_DISPENSER_4"}, {MOTO_DISPENSER_5,"MOTO_DISPENSER_5"}, {MOTO_DISPENSER_6,"MOTO_DISPENSER_6"}, {MOTO_DISPENSER_7,"MOTO_DISPENSER_7"}, {MOTO_DISPENSER_8,"MOTO_DISPENSER_8"}, {MOTO_SCREW,"MOTO_SCREW"}, {MOTO_WINDER,"MOTO_WINDER"}, {MOTO_LDANCER1,"MOTO_LDANCER1"}, {MOTO_LDANCER2,"MOTO_LDANCER2"}, {MOTO_LDRIVING,"MOTO_LDRIVING"}, {MOTO_LLOADING,"MOTO_LLOADING"}, {MOTO_LPIVOT1,"MOTO_LPIVOT1"}, {MOTO_RDANCER,"MOTO_RDANCER"}, {MOTO_RDRIVING,"MOTO_RDRIVING"}, {MOTO_RLOADARM,"MOTO_RLOADARM"}, {MOTO_RLOADING,"MOTO_RLOADING"}, {MOTO_SPARE1_1,"MOTO_SPARE1_1"}, {MOTO_SPARE1_2,"MOTO_SPARE1_2"}, {MOTO_SPARE2_1,"MOTO_SPARE2_1"}, {MOTO_SPARE2_2,"MOTO_SPARE2_2"}, {DRYER_LOADARM_ROTENC,"DRYER_LOADARM_ROTENC"}, {DISPENSER_ROTENC1,"DISPENSER_ROTENC1"}, {DISPENSER_ROTENC2,"DISPENSER_ROTENC2"}, {DISPENSER_ROTENC3,"DISPENSER_ROTENC3"}, {DISPENSER_ROTENC4,"DISPENSER_ROTENC4"}, {DISPENSER_ROTENC5,"DISPENSER_ROTENC5"}, {DISPENSER_ROTENC6,"DISPENSER_ROTENC6"}, {DISPENSER_ROTENC7,"DISPENSER_ROTENC7"}, {DISPENSER_ROTENC8,"DISPENSER_ROTENC8"}, {SCREW_ROTENC,"SCREW_ROTENC"}, {LDANCER1_ROTENC2,"LDANCER1_ROTENC2"}, {LDANCER2_ROTENC2,"LDANCER2_ROTENC2"}, {LSPARE_ROTENC,"LSPARE_ROTENC"}, {LSPARE_ROTENCn,"LSPARE_ROTENCn"}, {LSPARE1_ROTENC,"LSPARE1_ROTENC"}, {LSPARE2_ROTENC,"LSPARE2_ROTENC"}, {RDANCER_ROTENC2,"RDANCER_ROTENC2"}, {RSPARE_ROTENC,"RSPARE_ROTENC"}, {RSPEEDSENS_ROTENC,"RSPEEDSENS_ROTENC"}, {SPARE1_ROTENC,"SPARE1_ROTENC"}, {SPARE2_ROTENC,"SPARE2_ROTENC"}, {FAN_TACHO1,"FAN_TACHO1"}, {FAN_TACHO3,"FAN_TACHO3"}, {FAN_TACHO2,"FAN_TACHO2"}, {FAN1_TACH,"FAN1_TACH"}, {FAN2_TACH,"FAN2_TACH"}, {FAN5_TACH,"FAN5_TACH"}, {FAN3_TACH,"FAN3_TACH"}, {FAN4_TACH,"FAN4_TACH"}, }; uint32_t HWConfigurationFunc(MessageContainer* requestContainer) { uint32_t status = 0; int Motor_i, Dancer_i, Dispenser_i,PID_i; MessageContainer responseContainer; UploadHardwareConfigurationResponse response = UPLOAD_HARDWARE_CONFIGURATION_RESPONSE__INIT; UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); HardwareConfiguration *request = UploadRequest->hardwareconfiguration; if (request->n_winders == 1) status += InternalWinderConfigMessage(request->winders); status += MotorsInit(); for (Motor_i = 0; Motor_i < request->n_motors ; Motor_i++) status += MotorsConfigMessage(request->motors[Motor_i]); for (Dancer_i = 0; Dancer_i < request->n_dancers ; Dancer_i++) status += DancerConfigMessage(request->dancers[Dancer_i]); for (PID_i = 0; PID_i < request->n_pidcontrols ; PID_i++) { if (request->pidcontrols[PID_i]->hardwarepidcontroltype <= HARDWARE_PID_CONTROL_TYPE__MixerHeater) status += HeaterConfigRequestMessage(request->pidcontrols[PID_i]); else if ((request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__MotorDryer)&& (request->pidcontrols[PID_i]->hardwarepidcontroltype < HARDWARE_PID_CONTROL_TYPE__Dispenser1)) status += MotorPidRequestMessage(request->pidcontrols[PID_i]); else if (request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__Dispenser1) status += DispenserPidRequestMessage(request->pidcontrols[PID_i]); } for (Dispenser_i = 0; Dispenser_i < request->n_dispensers ; Dispenser_i++) status += DispenserConfigMessage(request->dispensers[Dispenser_i]); //status += HeaterConfigSetSharedHeatersParams (request->outputproportionalcycletime, request->outputproportionalsinglestep); ControlStart(); ThreadInitialTestStub(request); responseContainer = createContainer(MESSAGE_TYPE__UploadHardwareConfigurationResponse, requestContainer->token, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size); uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); free(responseContainer.data.data); upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); SendChars(container_buffer, container_size); //free(container_buffer); //free(requestContainer); return OK; } void HWSystemResetRequest(MessageContainer* requestContainer) { uint32_t status = FAILED; MessageContainer responseContainer; SystemResetRequest* request = system_reset_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); status = 0; SystemResetResponse response = SYSTEM_RESET_RESPONSE__INIT; responseContainer = createContainer(MESSAGE_TYPE__SystemResetResponse, requestContainer->token, true, &response, &system_reset_response__pack, &system_reset_response__get_packed_size); Write_status_response(status); //free(request); system_reset_request__free_unpacked(request,NULL); //------------------------------------------------------------------------------------------- uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); SendChars((char*)container_buffer, container_size); //free(container_buffer); //free(requestContainer); ROM_SysCtlDelay(SYS_CLK_FREQ); SysCtlReset(); HWREG(NVIC_APINT) = NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ; }