From 55a1bcd28e6e4f5d6051618cb218354548649253 Mon Sep 17 00:00:00 2001 From: Stephen Scott Date: Thu, 16 Jul 2020 19:04:38 -0400 Subject: [PATCH] Added SiL results for new FCC --- .../FCC_Sys_New_harness.c | 569 ++ .../FCC_Sys_New_harness.h | 218 + .../FCC_Sys_New_harness_ert_rtw/buildInfo.mat | Bin 0 -> 21621 bytes .../FCC_Sys_New_harness_ert_rtw/codeInfo.mat | Bin 0 -> 3417 bytes .../codedescriptor.dmr | Bin 0 -> 360448 bytes .../coderassumptions/FCC_Sys_New_harness_ca.c | 63 + .../coderassumptions/FCC_Sys_New_harness_ca.h | 25 + .../FCC_Sys_New_harness_ca_preproc.h | 55 + .../coderassumptions/coder_assumptions.h | 21 + .../pwslib/FCC_Sys_New_harness_ca.bat | 15 + .../pwslib/FCC_Sys_New_harness_ca.lib | Bin 0 -> 7078 bytes .../pwslib/FCC_Sys_New_harness_ca.mk | 417 ++ .../pwslib/FCC_Sys_New_harness_ca.obj | Bin 0 -> 1600 bytes .../pwslib/FCC_Sys_New_harness_ca.rsp | 3 + .../pwslib/FCC_Sys_New_harness_ca_comp.rsp | 13 + .../pwslib/FCC_Sys_New_harness_ca_ref.rsp | 0 .../coderassumptions/pwslib/buildInfo.mat | Bin 0 -> 6834 bytes .../pwslib/coder_assumptions_flt.obj | Bin 0 -> 541 bytes .../pwslib/coder_assumptions_hwimpl.obj | Bin 0 -> 4247 bytes .../coderassumptions/pwslib/compileInfo.mat | Bin 0 -> 2020 bytes .../coderassumptions/pwslib/defines.txt | 5 + .../coderassumptions/pwslib/mlEnv.txt | 4 + .../FCC_Sys_New_harness_ert_rtw/defines.txt | 15 + .../FCC_Sys_New_harness_ert_rtw/ert_main.c | 162 + .../html/CodeInstrTgtAppSvc_CInterface_h.html | 62 + .../html/CodeInstrTgtAppSvc_h.html | 62 + .../CoderAssumpTgtAppSvc_CInterface_h.html | 86 + .../ExecutionProfiling_422a9dcd7331f0d8.html | 391 ++ .../ExecutionProfiling_a4de9061c63ba255.html | 391 ++ .../html/FCC_Sys_New_harness_c.html | 1156 ++++ .../html/FCC_Sys_New_harness_codegen_rpt.html | 33 + .../FCC_Sys_New_harness_coderassumptions.html | 377 ++ .../html/FCC_Sys_New_harness_contents.html | 688 +++ .../html/FCC_Sys_New_harness_h.html | 454 ++ .../html/FCC_Sys_New_harness_interface.html | 354 ++ .../html/FCC_Sys_New_harness_metrics.html | 7 + .../FCC_Sys_New_harness_replacements.html | 18 + .../html/FCC_Sys_New_harness_sbs_c.html | 5472 +++++++++++++++++ .../html/FCC_Sys_New_harness_subsystems.html | 87 + .../html/FCC_Sys_New_harness_survey.html | 186 + .../html/FCC_Sys_New_harness_trace.html | 21 + .../html/FCC_Sys_New_harness_traceInfo.js | 363 ++ .../html/XILTgtAppSvc_CInterface_h.html | 70 + .../html/XILTgtAppSvc_h.html | 68 + .../html/codeinstr_data_stream_c.html | 254 + .../html/codeinstr_data_stream_h.html | 54 + .../html/codeinstr_rtiostream_c.html | 114 + .../html/coder_assumptions_app_c.html | 784 +++ .../html/coder_assumptions_app_h.html | 38 + .../html/coder_assumptions_data_stream_c.html | 188 + .../html/coder_assumptions_data_stream_h.html | 48 + .../html/coder_assumptions_rtiostream_c.html | 114 + .../coder_assumptions_shared_enums_h.html | 160 + .../html/coder_profile_code_icon.png | Bin 0 -> 786 bytes .../html/comms_interface_h.html | 48 + .../html/css/coder_app.css | 184 + .../html/define.js | 408 ++ .../html/ert_main_c.html | 342 ++ .../html/hilite_warning.png | Bin 0 -> 3014 bytes .../html/histogram_16.png | Bin 0 -> 268 bytes .../html/host_timer_x86_c.html | 186 + .../html/host_timer_x86_h.html | 86 + .../html/inspect.html | 33 + .../html/js/coder_app.js | 525 ++ .../html/membrane_16.png | Bin 0 -> 3546 bytes .../FCC_Sys_New_harness_ert_rtw/html/nav.html | 14 + .../html/navToolbar.html | 69 + .../html/rtiostream_h.html | 126 + .../html/rtiostream_tcpip_c.html | 4038 ++++++++++++ .../html/rtiostream_utils_c.html | 224 + .../html/rtiostream_utils_h.html | 88 + .../html/rtwhilite.js | 2081 +++++++ .../html/rtwmsg.html | 7 + .../html/rtwreport.css | 257 + .../html/rtwreport_utils.js | 92 + .../html/rtwshrink.js | 210 + .../html/rx_tx_buffer_sizes_h.html | 180 + .../html/search.js | 559 ++ .../html/sil_main_c.html | 102 + .../html/spinner.gif | Bin 0 -> 4178 bytes .../html/target_io_c.html | 460 ++ .../html/target_io_h.html | 90 + .../html/traceInfo.mat | Bin 0 -> 16425 bytes .../html/traceInfo_flag.js | 222 + .../html/xil_common_h.html | 94 + .../html/xil_data_stream_c.html | 418 ++ .../html/xil_data_stream_h.html | 86 + .../html/xil_instrumentation_c.html | 268 + .../html/xil_instrumentation_h.html | 126 + .../html/xil_interface_c.html | 738 +++ .../html/xil_interface_common_h.html | 172 + .../html/xil_interface_h.html | 158 + .../html/xil_interface_lib_c.html | 1458 +++++ .../html/xil_interface_lib_h.html | 100 + .../html/xil_interface_lib_private_h.html | 106 + .../html/xil_rtiostream_c.html | 114 + .../html/xil_services_c.html | 332 + .../html/xilcomms_rtiostream_c.html | 334 + .../instrumented/FCC_Sys_New_harness.bat | 15 + .../instrumented/FCC_Sys_New_harness.c | 569 ++ .../instrumented/FCC_Sys_New_harness.h | 223 + .../instrumented/FCC_Sys_New_harness.mk | 427 ++ .../instrumented/FCC_Sys_New_harness.rsp | 3 + .../instrumented/FCC_Sys_New_harness_comp.rsp | 11 + .../instrumented/FCC_Sys_New_harness_ref.rsp | 3 + .../instrumented/buildInfo.mat | Bin 0 -> 18973 bytes .../instrumented/coder_profile_timer.c | 63 + .../instrumented/coder_profile_timer.h | 24 + .../instrumented/compileInfo.mat | Bin 0 -> 2440 bytes .../instrumented/defines.txt | 15 + .../instrumented/ert_main.c | 162 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 785 bytes .../instrumented/profiling_info.mat | Bin 0 -> 3057 bytes .../instrumented/rtw_proj.tmw | 4 + .../modelsources.txt | 2 + .../profilingTraceability.mat | Bin 0 -> 2242 bytes .../FCC_Sys_New_harness_ert_rtw/rtw_proj.tmw | 4 + .../sil/FCC_Sys_New_harness.bat | 15 + .../sil/FCC_Sys_New_harness.exe | Bin 0 -> 128987 bytes .../sil/FCC_Sys_New_harness.mk | 483 ++ .../sil/FCC_Sys_New_harness.rsp | 17 + .../sil/FCC_Sys_New_harness_comp.rsp | 20 + .../sil/FCC_Sys_New_harness_ref.rsp | 4 + .../sil/FCC_Sys_New_harness_sbs.c | 2727 ++++++++ .../sil/buildInfo.mat | Bin 0 -> 22184 bytes .../sil/builderInfo.mat | Bin 0 -> 27697 bytes .../sil/codeinstr_data_stream.obj | Bin 0 -> 2567 bytes .../sil/codeinstr_rtiostream.obj | Bin 0 -> 1540 bytes .../sil/coder_assumptions_app.obj | Bin 0 -> 6025 bytes .../sil/coder_assumptions_data_stream.obj | Bin 0 -> 2253 bytes .../sil/coder_assumptions_rtiostream.obj | Bin 0 -> 1564 bytes .../sil/host_timer_x86.obj | Bin 0 -> 738 bytes .../instrumented/FCC_Sys_New_harness.bat | 15 + .../instrumented/FCC_Sys_New_harness.c | 569 ++ .../instrumented/FCC_Sys_New_harness.h | 223 + .../instrumented/FCC_Sys_New_harness.mk | 419 ++ .../instrumented/FCC_Sys_New_harness.obj | Bin 0 -> 11137 bytes .../instrumented/FCC_Sys_New_harness.rsp | 1 + .../instrumented/FCC_Sys_New_harness_comp.rsp | 11 + .../instrumented/FCC_Sys_New_harness_ref.rsp | 3 + .../sil/hostobj/instrumented/buildInfo.mat | Bin 0 -> 18722 bytes .../sil/hostobj/instrumented/compileInfo.mat | Bin 0 -> 2398 bytes .../sil/hostobj/instrumented/defines.txt | 15 + .../sil/hostobj/instrumented/ert_main.c | 162 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 785 bytes .../sil/hostobj/instrumented/mlEnv.txt | 4 + .../hostobj/instrumented/profiling_info.mat | Bin 0 -> 2944 bytes .../sil/hostobj/instrumented/rtw_proj.tmw | 4 + .../FCC_Sys_New_harness_ert_rtw/sil/mlEnv.txt | 4 + .../sil/profiling_info.mat | Bin 0 -> 6540 bytes .../sil/rtiostream_tcpip.obj | Bin 0 -> 19715 bytes .../sil/rtiostream_utils.obj | Bin 0 -> 1168 bytes .../sil/rtw_proj.tmw | 1 + .../sil/sil_main.obj | Bin 0 -> 966 bytes .../sil/target_io.obj | Bin 0 -> 2003 bytes .../sil/wrapperInfo.mat | Bin 0 -> 7661 bytes .../sil/xil_data_stream.obj | Bin 0 -> 3134 bytes .../sil/xil_instrumentation.c | 125 + .../sil/xil_instrumentation.h | 54 + .../sil/xil_instrumentation.obj | Bin 0 -> 2637 bytes .../sil/xil_interface.c | 360 ++ .../sil/xil_interface.obj | Bin 0 -> 4663 bytes .../sil/xil_interface_lib.obj | Bin 0 -> 9222 bytes .../sil/xil_rtiostream.obj | Bin 0 -> 1469 bytes .../sil/xil_services.obj | Bin 0 -> 1969 bytes .../sil/xilcomms_rtiostream.obj | Bin 0 -> 2008 bytes .../tmwinternal/simulink_cache.xml | 6 + src/validation/FCC_Sys_New_harness_sbs.mexw64 | Bin 0 -> 50688 bytes .../slprj/ert/AHRSControl/AHRSControl.c | 887 +++ .../slprj/ert/AHRSControl/AHRSControl.h | 210 + .../slprj/ert/AHRSControl/AHRSControl_data.c | 46 + .../AHRSControl/AHRSControl_mr_codeInfo.mat | Bin 0 -> 18124 bytes .../slprj/ert/AHRSControl/buildInfo.mat | Bin 0 -> 14126 bytes .../slprj/ert/AHRSControl/codedescriptor.dmr | Bin 0 -> 427008 bytes .../slprj/ert/AHRSControl/defines.txt | 15 + .../ert/AHRSControl/html/AHRSControl_c.html | 1792 ++++++ .../html/AHRSControl_codegen_rpt.html | 33 + .../html/AHRSControl_coderassumptions.html | 377 ++ .../html/AHRSControl_contents.html | 259 + .../AHRSControl/html/AHRSControl_data_c.html | 110 + .../ert/AHRSControl/html/AHRSControl_h.html | 438 ++ .../AHRSControl/html/AHRSControl_metrics.html | 18 + .../html/AHRSControl_replacements.html | 18 + .../html/AHRSControl_subsystems.html | 339 + .../AHRSControl/html/AHRSControl_survey.html | 177 + .../AHRSControl/html/AHRSControl_trace.html | 21 + .../AHRSControl/html/AHRSControl_traceInfo.js | 423 ++ .../ert/AHRSControl/html/css/coder_app.css | 184 + .../slprj/ert/AHRSControl/html/define.js | 110 + .../ert/AHRSControl/html/hilite_warning.png | Bin 0 -> 3014 bytes .../slprj/ert/AHRSControl/html/inspect.html | 33 + .../ert/AHRSControl/html/js/coder_app.js | 525 ++ .../slprj/ert/AHRSControl/html/nav.html | 14 + .../ert/AHRSControl/html/navToolbar.html | 69 + .../slprj/ert/AHRSControl/html/rtwhilite.js | 2081 +++++++ .../slprj/ert/AHRSControl/html/rtwmsg.html | 7 + .../slprj/ert/AHRSControl/html/rtwreport.css | 257 + .../ert/AHRSControl/html/rtwreport_utils.js | 92 + .../slprj/ert/AHRSControl/html/rtwshrink.js | 210 + .../slprj/ert/AHRSControl/html/search.js | 559 ++ .../slprj/ert/AHRSControl/html/spinner.gif | Bin 0 -> 4178 bytes .../slprj/ert/AHRSControl/html/traceInfo.mat | Bin 0 -> 27212 bytes .../ert/AHRSControl/html/traceInfo_flag.js | 269 + .../AHRSControl/instrumented/AHRSControl.bat | 15 + .../AHRSControl/instrumented/AHRSControl.mk | 414 ++ .../AHRSControl/instrumented/AHRSControl.rsp | 2 + .../instrumented/AHRSControl_comp.rsp | 8 + .../instrumented/AHRSControl_ref.rsp | 0 .../AHRSControl/instrumented/buildInfo.mat | Bin 0 -> 14214 bytes .../AHRSControl/instrumented/compileInfo.mat | Bin 0 -> 2146 bytes .../ert/AHRSControl/instrumented/defines.txt | 15 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 773 bytes .../instrumented/profiling_info.mat | Bin 0 -> 368 bytes .../ert/AHRSControl/instrumented/rtw_proj.tmw | 4 + .../slprj/ert/AHRSControl/modelsources.txt | 2 + .../slprj/ert/AHRSControl/rtw_proj.tmw | 4 + .../sil/hostobj/instrumented/AHRSControl.bat | 15 + .../sil/hostobj/instrumented/AHRSControl.mk | 414 ++ .../sil/hostobj/instrumented/AHRSControl.obj | Bin 0 -> 9586 bytes .../sil/hostobj/instrumented/AHRSControl.rsp | 2 + .../hostobj/instrumented/AHRSControl_comp.rsp | 8 + .../hostobj/instrumented/AHRSControl_data.obj | Bin 0 -> 691 bytes .../hostobj/instrumented/AHRSControl_ref.rsp | 0 .../instrumented/AHRSControl_rtwlib.lib | Bin 0 -> 11296 bytes .../sil/hostobj/instrumented/buildInfo.mat | Bin 0 -> 14274 bytes .../sil/hostobj/instrumented/compileInfo.mat | Bin 0 -> 2195 bytes .../sil/hostobj/instrumented/defines.txt | 15 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 773 bytes .../sil/hostobj/instrumented/mlEnv.txt | 4 + .../hostobj/instrumented/profiling_info.mat | Bin 0 -> 368 bytes .../sil/hostobj/instrumented/rtw_proj.tmw | 4 + .../tmwinternal/ModelRefCompileInfo.xml | 1919 ++++++ .../AHRSControl/tmwinternal/binfo_mdlref.mat | Bin 0 -> 28470 bytes .../AHRSControl/tmwinternal/minfo_mdlref.mat | Bin 0 -> 2398 bytes .../tmwinternal/simulink_cache.xml | 6 + .../slprj/ert/AHRSControl/tmwinternal/tr | Bin 0 -> 65816 bytes .../ert/ActuatorControl/ActuatorControl.c | 404 ++ .../ert/ActuatorControl/ActuatorControl.h | 140 + .../ActuatorControl_mr_codeInfo.mat | Bin 0 -> 5277 bytes .../slprj/ert/ActuatorControl/buildInfo.mat | Bin 0 -> 12763 bytes .../ert/ActuatorControl/codedescriptor.dmr | Bin 0 -> 317440 bytes .../slprj/ert/ActuatorControl/defines.txt | 15 + .../html/ActuatorControl_c.html | 826 +++ .../html/ActuatorControl_codegen_rpt.html | 33 + .../ActuatorControl_coderassumptions.html | 377 ++ .../html/ActuatorControl_contents.html | 220 + .../html/ActuatorControl_h.html | 298 + .../html/ActuatorControl_metrics.html | 18 + .../html/ActuatorControl_replacements.html | 18 + .../html/ActuatorControl_subsystems.html | 174 + .../html/ActuatorControl_survey.html | 177 + .../html/ActuatorControl_trace.html | 7 + .../html/ActuatorControl_traceInfo.js | 189 + .../ActuatorControl/html/css/coder_app.css | 184 + .../slprj/ert/ActuatorControl/html/define.js | 93 + .../ActuatorControl/html/hilite_warning.png | Bin 0 -> 3014 bytes .../ert/ActuatorControl/html/inspect.html | 33 + .../ert/ActuatorControl/html/js/coder_app.js | 525 ++ .../slprj/ert/ActuatorControl/html/nav.html | 14 + .../ert/ActuatorControl/html/navToolbar.html | 69 + .../ert/ActuatorControl/html/rtwhilite.js | 2081 +++++++ .../ert/ActuatorControl/html/rtwmsg.html | 7 + .../ert/ActuatorControl/html/rtwreport.css | 257 + .../ActuatorControl/html/rtwreport_utils.js | 92 + .../ert/ActuatorControl/html/rtwshrink.js | 210 + .../slprj/ert/ActuatorControl/html/search.js | 559 ++ .../ert/ActuatorControl/html/spinner.gif | Bin 0 -> 4178 bytes .../ert/ActuatorControl/html/traceInfo.mat | Bin 0 -> 11804 bytes .../ActuatorControl/html/traceInfo_flag.js | 140 + .../instrumented/ActuatorControl.bat | 15 + .../instrumented/ActuatorControl.mk | 410 ++ .../instrumented/ActuatorControl.rsp | 1 + .../instrumented/ActuatorControl_comp.rsp | 8 + .../instrumented/ActuatorControl_ref.rsp | 0 .../instrumented/buildInfo.mat | Bin 0 -> 12897 bytes .../instrumented/compileInfo.mat | Bin 0 -> 2079 bytes .../ActuatorControl/instrumented/defines.txt | 15 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 728 bytes .../instrumented/profiling_info.mat | Bin 0 -> 368 bytes .../ActuatorControl/instrumented/rtw_proj.tmw | 4 + .../ert/ActuatorControl/modelsources.txt | 2 + .../slprj/ert/ActuatorControl/rtw_proj.tmw | 4 + .../hostobj/instrumented/ActuatorControl.bat | 15 + .../hostobj/instrumented/ActuatorControl.mk | 410 ++ .../hostobj/instrumented/ActuatorControl.obj | Bin 0 -> 4495 bytes .../hostobj/instrumented/ActuatorControl.rsp | 1 + .../instrumented/ActuatorControl_comp.rsp | 8 + .../instrumented/ActuatorControl_ref.rsp | 0 .../instrumented/ActuatorControl_rtwlib.lib | Bin 0 -> 5056 bytes .../sil/hostobj/instrumented/buildInfo.mat | Bin 0 -> 12968 bytes .../sil/hostobj/instrumented/compileInfo.mat | Bin 0 -> 2101 bytes .../sil/hostobj/instrumented/defines.txt | 15 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 728 bytes .../sil/hostobj/instrumented/mlEnv.txt | 4 + .../hostobj/instrumented/profiling_info.mat | Bin 0 -> 368 bytes .../sil/hostobj/instrumented/rtw_proj.tmw | 4 + .../tmwinternal/ModelRefCompileInfo.xml | 664 ++ .../tmwinternal/binfo_mdlref.mat | Bin 0 -> 23135 bytes .../tmwinternal/minfo_mdlref.mat | Bin 0 -> 2408 bytes .../tmwinternal/simulink_cache.xml | 6 + .../slprj/ert/ActuatorControl/tmwinternal/tr | Bin 0 -> 32354 bytes src/validation/slprj/ert/FCC_New/FCC_New.c | 178 + src/validation/slprj/ert/FCC_New/FCC_New.h | 150 + .../slprj/ert/FCC_New/FCC_New_mr_codeInfo.mat | Bin 0 -> 11243 bytes .../slprj/ert/FCC_New/buildInfo.mat | Bin 0 -> 15273 bytes .../slprj/ert/FCC_New/codedescriptor.dmr | Bin 0 -> 324608 bytes src/validation/slprj/ert/FCC_New/defines.txt | 15 + .../slprj/ert/FCC_New/html/FCC_New_c.html | 374 ++ .../ert/FCC_New/html/FCC_New_codegen_rpt.html | 33 + .../html/FCC_New_coderassumptions.html | 377 ++ .../ert/FCC_New/html/FCC_New_contents.html | 262 + .../slprj/ert/FCC_New/html/FCC_New_h.html | 318 + .../ert/FCC_New/html/FCC_New_metrics.html | 18 + .../FCC_New/html/FCC_New_replacements.html | 18 + .../ert/FCC_New/html/FCC_New_subsystems.html | 87 + .../ert/FCC_New/html/FCC_New_survey.html | 186 + .../slprj/ert/FCC_New/html/FCC_New_trace.html | 21 + .../ert/FCC_New/html/FCC_New_traceInfo.js | 55 + .../slprj/ert/FCC_New/html/css/coder_app.css | 184 + .../slprj/ert/FCC_New/html/define.js | 96 + .../slprj/ert/FCC_New/html/hilite_warning.png | Bin 0 -> 3014 bytes .../slprj/ert/FCC_New/html/inspect.html | 33 + .../slprj/ert/FCC_New/html/js/coder_app.js | 525 ++ .../slprj/ert/FCC_New/html/nav.html | 14 + .../slprj/ert/FCC_New/html/navToolbar.html | 69 + .../slprj/ert/FCC_New/html/rtwhilite.js | 2081 +++++++ .../slprj/ert/FCC_New/html/rtwmsg.html | 7 + .../slprj/ert/FCC_New/html/rtwreport.css | 257 + .../slprj/ert/FCC_New/html/rtwreport_utils.js | 92 + .../slprj/ert/FCC_New/html/rtwshrink.js | 210 + .../slprj/ert/FCC_New/html/search.js | 559 ++ .../slprj/ert/FCC_New/html/spinner.gif | Bin 0 -> 4178 bytes .../slprj/ert/FCC_New/html/traceInfo.mat | Bin 0 -> 3597 bytes .../slprj/ert/FCC_New/html/traceInfo_flag.js | 34 + .../ert/FCC_New/instrumented/FCC_New.bat | 15 + .../slprj/ert/FCC_New/instrumented/FCC_New.mk | 414 ++ .../ert/FCC_New/instrumented/FCC_New.rsp | 1 + .../ert/FCC_New/instrumented/FCC_New_comp.rsp | 10 + .../ert/FCC_New/instrumented/FCC_New_ref.rsp | 2 + .../ert/FCC_New/instrumented/buildInfo.mat | Bin 0 -> 15486 bytes .../ert/FCC_New/instrumented/compileInfo.mat | Bin 0 -> 2199 bytes .../ert/FCC_New/instrumented/defines.txt | 15 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 717 bytes .../FCC_New/instrumented/profiling_info.mat | Bin 0 -> 368 bytes .../ert/FCC_New/instrumented/rtw_proj.tmw | 4 + .../slprj/ert/FCC_New/modelsources.txt | 2 + src/validation/slprj/ert/FCC_New/rtw_proj.tmw | 4 + .../sil/hostobj/instrumented/FCC_New.bat | 15 + .../sil/hostobj/instrumented/FCC_New.mk | 414 ++ .../sil/hostobj/instrumented/FCC_New.obj | Bin 0 -> 2420 bytes .../sil/hostobj/instrumented/FCC_New.rsp | 1 + .../sil/hostobj/instrumented/FCC_New_comp.rsp | 10 + .../sil/hostobj/instrumented/FCC_New_ref.rsp | 2 + .../hostobj/instrumented/FCC_New_rtwlib.lib | Bin 0 -> 2708 bytes .../sil/hostobj/instrumented/buildInfo.mat | Bin 0 -> 15688 bytes .../sil/hostobj/instrumented/compileInfo.mat | Bin 0 -> 2290 bytes .../sil/hostobj/instrumented/defines.txt | 15 + .../instrumented/instrumentationInfo.mat | Bin 0 -> 717 bytes .../sil/hostobj/instrumented/mlEnv.txt | 4 + .../hostobj/instrumented/profiling_info.mat | Bin 0 -> 368 bytes .../sil/hostobj/instrumented/rtw_proj.tmw | 4 + .../tmwinternal/ModelRefCompileInfo.xml | 2608 ++++++++ .../ert/FCC_New/tmwinternal/binfo_mdlref.mat | Bin 0 -> 31045 bytes .../ert/FCC_New/tmwinternal/minfo_mdlref.mat | Bin 0 -> 2479 bytes .../FCC_New/tmwinternal/simulink_cache.xml | 6 + .../slprj/ert/FCC_New/tmwinternal/tr | Bin 0 -> 11424 bytes .../tmwinternal/CompileInfo.xml | 2469 ++++++++ .../FCC_Sys_New_harness/tmwinternal/binfo.mat | Bin 0 -> 23424 bytes .../FCC_Sys_New_harness/tmwinternal/minfo.mat | Bin 0 -> 2490 bytes .../ert/FCC_Sys_New_harness/tmwinternal/scv | Bin 0 -> 315074 bytes .../ert/FCC_Sys_New_harness/tmwinternal/tr | Bin 0 -> 118700 bytes .../_sharedutils/AHRSControl_AHRS_Control.h | 33 + .../slprj/ert/_sharedutils/AHRS_Bus.h | 46 + .../slprj/ert/_sharedutils/Actuator_Control.h | 32 + .../slprj/ert/_sharedutils/checksummap.mat | Bin 0 -> 2272 bytes .../html/AHRSControl_AHRS_Control_h.html | 84 + .../ert/_sharedutils/html/AHRS_Bus_h.html | 110 + .../_sharedutils/html/Actuator_Control_h.html | 82 + .../ert/_sharedutils/html/css/coder_app.css | 184 + .../slprj/ert/_sharedutils/html/inspect.html | 33 + .../ert/_sharedutils/html/js/coder_app.js | 525 ++ .../html/model_reference_types_h.html | 130 + .../slprj/ert/_sharedutils/html/nav.html | 14 + .../ert/_sharedutils/html/navToolbar.html | 69 + .../slprj/ert/_sharedutils/html/rtwreport.css | 257 + .../ert/_sharedutils/html/rtwreport_utils.js | 92 + .../ert/_sharedutils/html/rtwtypes_h.html | 306 + .../slprj/ert/_sharedutils/html/spinner.gif | Bin 0 -> 4178 bytes .../ert/_sharedutils/model_reference_types.h | 56 + .../slprj/ert/_sharedutils/rtwtypes.h | 144 + .../slprj/ert/_sharedutils/rtwtypeschksum.mat | Bin 0 -> 1515 bytes .../slprj/ert/_sharedutils/shared_file.dmr | Bin 0 -> 150528 bytes .../varcache/AHRSControl/checksumOfCache.mat | Bin 0 -> 392 bytes .../tmwinternal/simulink_cache.xml | 6 + .../sim/varcache/AHRSControl/varInfo.mat | Bin 0 -> 1024 bytes .../ActuatorControl/checksumOfCache.mat | Bin 0 -> 392 bytes .../tmwinternal/simulink_cache.xml | 6 + .../sim/varcache/ActuatorControl/varInfo.mat | Bin 0 -> 664 bytes .../sim/varcache/FCC_New/checksumOfCache.mat | Bin 0 -> 392 bytes .../FCC_New/tmwinternal/simulink_cache.xml | 6 + .../slprj/sim/varcache/FCC_New/varInfo.mat | Bin 0 -> 680 bytes .../varcache/FCC_Sys_New/checksumOfCache.mat | Bin 0 -> 392 bytes .../tmwinternal/simulink_cache.xml | 6 + .../sim/varcache/FCC_Sys_New/varInfo.mat | Bin 0 -> 680 bytes .../FCC_Sys_New_harness/checksumOfCache.mat | Bin 0 -> 392 bytes .../tmwinternal/simulink_cache.xml | 6 + .../varcache/FCC_Sys_New_harness/varInfo.mat | Bin 0 -> 680 bytes src/validation/slprj/sl_proj.tmw | 2 + .../FCC_Sys_New/FCC_Sys_New_harness.slx | Bin 0 -> 80702 bytes 409 files changed, 71254 insertions(+) create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/buildInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/codeInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/codedescriptor.dmr create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca_preproc.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/coder_assumptions.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.bat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.lib create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.mk create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca_comp.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca_ref.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/buildInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/coder_assumptions_flt.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/coder_assumptions_hwimpl.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/compileInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/defines.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/mlEnv.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/defines.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/ert_main.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_CInterface_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/CoderAssumpTgtAppSvc_CInterface_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_422a9dcd7331f0d8.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_a4de9061c63ba255.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_codegen_rpt.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_coderassumptions.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_contents.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_interface.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_metrics.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_replacements.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_sbs_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_subsystems.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_survey.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_trace.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_traceInfo.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_CInterface_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_rtiostream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_rtiostream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_shared_enums_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_profile_code_icon.png create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/comms_interface_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/css/coder_app.css create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/define.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/ert_main_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/hilite_warning.png create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/histogram_16.png create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/inspect.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/js/coder_app.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/membrane_16.png create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/nav.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/navToolbar.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_tcpip_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwhilite.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwmsg.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport.css create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport_utils.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwshrink.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/rx_tx_buffer_sizes_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/search.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/sil_main_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/spinner.gif create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/target_io_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/target_io_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo_flag.js create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_common_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_common_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_private_h.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_rtiostream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_services_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/html/xilcomms_rtiostream_c.html create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.bat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.mk create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_comp.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_ref.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/buildInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/compileInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/defines.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/ert_main.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/instrumentationInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/profiling_info.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/rtw_proj.tmw create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/modelsources.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/profilingTraceability.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/rtw_proj.tmw create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.bat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.exe create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.mk create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_comp.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_ref.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_sbs.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/buildInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/builderInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/codeinstr_data_stream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/codeinstr_rtiostream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/coder_assumptions_app.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/coder_assumptions_data_stream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/coder_assumptions_rtiostream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/host_timer_x86.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.bat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.mk create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness_comp.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness_ref.rsp create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/buildInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/compileInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/defines.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/ert_main.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/instrumentationInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/mlEnv.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/profiling_info.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/rtw_proj.tmw create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/mlEnv.txt create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/profiling_info.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtiostream_tcpip.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtiostream_utils.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtw_proj.tmw create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/sil_main.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/target_io.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/wrapperInfo.mat create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_data_stream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.h create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_interface.c create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_interface.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_interface_lib.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_rtiostream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_services.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/sil/xilcomms_rtiostream.obj create mode 100644 src/validation/FCC_Sys_New_harness_ert_rtw/tmwinternal/simulink_cache.xml create mode 100644 src/validation/FCC_Sys_New_harness_sbs.mexw64 create mode 100644 src/validation/slprj/ert/AHRSControl/AHRSControl.c create mode 100644 src/validation/slprj/ert/AHRSControl/AHRSControl.h create mode 100644 src/validation/slprj/ert/AHRSControl/AHRSControl_data.c create mode 100644 src/validation/slprj/ert/AHRSControl/AHRSControl_mr_codeInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/buildInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/codedescriptor.dmr create mode 100644 src/validation/slprj/ert/AHRSControl/defines.txt create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_c.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_codegen_rpt.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_coderassumptions.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_contents.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_data_c.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_h.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_metrics.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_replacements.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_subsystems.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_survey.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_trace.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/AHRSControl_traceInfo.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/css/coder_app.css create mode 100644 src/validation/slprj/ert/AHRSControl/html/define.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/hilite_warning.png create mode 100644 src/validation/slprj/ert/AHRSControl/html/inspect.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/js/coder_app.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/nav.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/navToolbar.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/rtwhilite.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/rtwmsg.html create mode 100644 src/validation/slprj/ert/AHRSControl/html/rtwreport.css create mode 100644 src/validation/slprj/ert/AHRSControl/html/rtwreport_utils.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/rtwshrink.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/search.js create mode 100644 src/validation/slprj/ert/AHRSControl/html/spinner.gif create mode 100644 src/validation/slprj/ert/AHRSControl/html/traceInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/html/traceInfo_flag.js create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.bat create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.mk create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.rsp create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_comp.rsp create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_ref.rsp create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/buildInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/compileInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/defines.txt create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/instrumentationInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/profiling_info.mat create mode 100644 src/validation/slprj/ert/AHRSControl/instrumented/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/AHRSControl/modelsources.txt create mode 100644 src/validation/slprj/ert/AHRSControl/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.bat create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.mk create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.obj create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.rsp create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_comp.rsp create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_data.obj create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_ref.rsp create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/buildInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/compileInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/defines.txt create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/instrumentationInfo.mat create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/mlEnv.txt create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/profiling_info.mat create mode 100644 src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/AHRSControl/tmwinternal/ModelRefCompileInfo.xml create mode 100644 src/validation/slprj/ert/AHRSControl/tmwinternal/binfo_mdlref.mat create mode 100644 src/validation/slprj/ert/AHRSControl/tmwinternal/minfo_mdlref.mat create mode 100644 src/validation/slprj/ert/AHRSControl/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/ert/AHRSControl/tmwinternal/tr create mode 100644 src/validation/slprj/ert/ActuatorControl/ActuatorControl.c create mode 100644 src/validation/slprj/ert/ActuatorControl/ActuatorControl.h create mode 100644 src/validation/slprj/ert/ActuatorControl/ActuatorControl_mr_codeInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/buildInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/codedescriptor.dmr create mode 100644 src/validation/slprj/ert/ActuatorControl/defines.txt create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_c.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_codegen_rpt.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_coderassumptions.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_contents.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_h.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_metrics.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_replacements.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_subsystems.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_survey.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_trace.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_traceInfo.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/css/coder_app.css create mode 100644 src/validation/slprj/ert/ActuatorControl/html/define.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/hilite_warning.png create mode 100644 src/validation/slprj/ert/ActuatorControl/html/inspect.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/js/coder_app.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/nav.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/navToolbar.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/rtwhilite.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/rtwmsg.html create mode 100644 src/validation/slprj/ert/ActuatorControl/html/rtwreport.css create mode 100644 src/validation/slprj/ert/ActuatorControl/html/rtwreport_utils.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/rtwshrink.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/search.js create mode 100644 src/validation/slprj/ert/ActuatorControl/html/spinner.gif create mode 100644 src/validation/slprj/ert/ActuatorControl/html/traceInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/html/traceInfo_flag.js create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.bat create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.mk create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.rsp create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_comp.rsp create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_ref.rsp create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/buildInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/compileInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/defines.txt create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/instrumentationInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/profiling_info.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/instrumented/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/ActuatorControl/modelsources.txt create mode 100644 src/validation/slprj/ert/ActuatorControl/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.bat create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.mk create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.obj create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.rsp create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_comp.rsp create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_ref.rsp create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/buildInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/compileInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/defines.txt create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/instrumentationInfo.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/mlEnv.txt create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/profiling_info.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/ActuatorControl/tmwinternal/ModelRefCompileInfo.xml create mode 100644 src/validation/slprj/ert/ActuatorControl/tmwinternal/binfo_mdlref.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/tmwinternal/minfo_mdlref.mat create mode 100644 src/validation/slprj/ert/ActuatorControl/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/ert/ActuatorControl/tmwinternal/tr create mode 100644 src/validation/slprj/ert/FCC_New/FCC_New.c create mode 100644 src/validation/slprj/ert/FCC_New/FCC_New.h create mode 100644 src/validation/slprj/ert/FCC_New/FCC_New_mr_codeInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/buildInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/codedescriptor.dmr create mode 100644 src/validation/slprj/ert/FCC_New/defines.txt create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_c.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_codegen_rpt.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_coderassumptions.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_contents.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_h.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_metrics.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_replacements.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_subsystems.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_survey.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_trace.html create mode 100644 src/validation/slprj/ert/FCC_New/html/FCC_New_traceInfo.js create mode 100644 src/validation/slprj/ert/FCC_New/html/css/coder_app.css create mode 100644 src/validation/slprj/ert/FCC_New/html/define.js create mode 100644 src/validation/slprj/ert/FCC_New/html/hilite_warning.png create mode 100644 src/validation/slprj/ert/FCC_New/html/inspect.html create mode 100644 src/validation/slprj/ert/FCC_New/html/js/coder_app.js create mode 100644 src/validation/slprj/ert/FCC_New/html/nav.html create mode 100644 src/validation/slprj/ert/FCC_New/html/navToolbar.html create mode 100644 src/validation/slprj/ert/FCC_New/html/rtwhilite.js create mode 100644 src/validation/slprj/ert/FCC_New/html/rtwmsg.html create mode 100644 src/validation/slprj/ert/FCC_New/html/rtwreport.css create mode 100644 src/validation/slprj/ert/FCC_New/html/rtwreport_utils.js create mode 100644 src/validation/slprj/ert/FCC_New/html/rtwshrink.js create mode 100644 src/validation/slprj/ert/FCC_New/html/search.js create mode 100644 src/validation/slprj/ert/FCC_New/html/spinner.gif create mode 100644 src/validation/slprj/ert/FCC_New/html/traceInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/html/traceInfo_flag.js create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/FCC_New.bat create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/FCC_New.mk create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/FCC_New.rsp create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/FCC_New_comp.rsp create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/FCC_New_ref.rsp create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/buildInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/compileInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/defines.txt create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/instrumentationInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/profiling_info.mat create mode 100644 src/validation/slprj/ert/FCC_New/instrumented/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/FCC_New/modelsources.txt create mode 100644 src/validation/slprj/ert/FCC_New/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.bat create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.mk create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.obj create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.rsp create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New_comp.rsp create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New_ref.rsp create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New_rtwlib.lib create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/buildInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/compileInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/defines.txt create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/instrumentationInfo.mat create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/mlEnv.txt create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/profiling_info.mat create mode 100644 src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/rtw_proj.tmw create mode 100644 src/validation/slprj/ert/FCC_New/tmwinternal/ModelRefCompileInfo.xml create mode 100644 src/validation/slprj/ert/FCC_New/tmwinternal/binfo_mdlref.mat create mode 100644 src/validation/slprj/ert/FCC_New/tmwinternal/minfo_mdlref.mat create mode 100644 src/validation/slprj/ert/FCC_New/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/ert/FCC_New/tmwinternal/tr create mode 100644 src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/CompileInfo.xml create mode 100644 src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/binfo.mat create mode 100644 src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/minfo.mat create mode 100644 src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/scv create mode 100644 src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/tr create mode 100644 src/validation/slprj/ert/_sharedutils/AHRSControl_AHRS_Control.h create mode 100644 src/validation/slprj/ert/_sharedutils/AHRS_Bus.h create mode 100644 src/validation/slprj/ert/_sharedutils/Actuator_Control.h create mode 100644 src/validation/slprj/ert/_sharedutils/checksummap.mat create mode 100644 src/validation/slprj/ert/_sharedutils/html/AHRSControl_AHRS_Control_h.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/AHRS_Bus_h.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/Actuator_Control_h.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/css/coder_app.css create mode 100644 src/validation/slprj/ert/_sharedutils/html/inspect.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/js/coder_app.js create mode 100644 src/validation/slprj/ert/_sharedutils/html/model_reference_types_h.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/nav.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/navToolbar.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/rtwreport.css create mode 100644 src/validation/slprj/ert/_sharedutils/html/rtwreport_utils.js create mode 100644 src/validation/slprj/ert/_sharedutils/html/rtwtypes_h.html create mode 100644 src/validation/slprj/ert/_sharedutils/html/spinner.gif create mode 100644 src/validation/slprj/ert/_sharedutils/model_reference_types.h create mode 100644 src/validation/slprj/ert/_sharedutils/rtwtypes.h create mode 100644 src/validation/slprj/ert/_sharedutils/rtwtypeschksum.mat create mode 100644 src/validation/slprj/ert/_sharedutils/shared_file.dmr create mode 100644 src/validation/slprj/sim/varcache/AHRSControl/checksumOfCache.mat create mode 100644 src/validation/slprj/sim/varcache/AHRSControl/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/sim/varcache/AHRSControl/varInfo.mat create mode 100644 src/validation/slprj/sim/varcache/ActuatorControl/checksumOfCache.mat create mode 100644 src/validation/slprj/sim/varcache/ActuatorControl/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/sim/varcache/ActuatorControl/varInfo.mat create mode 100644 src/validation/slprj/sim/varcache/FCC_New/checksumOfCache.mat create mode 100644 src/validation/slprj/sim/varcache/FCC_New/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/sim/varcache/FCC_New/varInfo.mat create mode 100644 src/validation/slprj/sim/varcache/FCC_Sys_New/checksumOfCache.mat create mode 100644 src/validation/slprj/sim/varcache/FCC_Sys_New/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/sim/varcache/FCC_Sys_New/varInfo.mat create mode 100644 src/validation/slprj/sim/varcache/FCC_Sys_New_harness/checksumOfCache.mat create mode 100644 src/validation/slprj/sim/varcache/FCC_Sys_New_harness/tmwinternal/simulink_cache.xml create mode 100644 src/validation/slprj/sim/varcache/FCC_Sys_New_harness/varInfo.mat create mode 100644 src/validation/slprj/sl_proj.tmw create mode 100644 src/validation/test_generation/FCC_Sys_New/FCC_Sys_New_harness.slx diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.c b/src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.c new file mode 100644 index 0000000..cc498ae --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.c @@ -0,0 +1,569 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_Sys_New_harness.c + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "FCC_Sys_New_harness.h" + +/* Private macros used by the generated code to access rtModel */ +#ifndef rtmIsMajorTimeStep +# define rtmIsMajorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MAJOR_TIME_STEP) +#endif + +#ifndef rtmIsMinorTimeStep +# define rtmIsMinorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MINOR_TIME_STEP) +#endif + +#ifndef rtmSetTPtr +# define rtmSetTPtr(rtm, val) ((rtm)->Timing.t = (val)) +#endif + +/* Used by FromWorkspace Block: '/FromWs' */ +#ifndef rtInterpolate +# define rtInterpolate(v1,v2,f1,f2) (((v1)==(v2))?((double)(v1)): (((f1)*((double)(v1)))+((f2)*((double)(v2))))) +#endif + +#ifndef rtRound +# define rtRound(v) ( ((v) >= 0) ? floor((v) + 0.5) : ceil((v) - 0.5) ) +#endif + +rtTimingBridge FCC_Sys_New_harness_TimingBrdg; + +/* Block signals and states (default storage) */ +DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW; + +/* External outputs (root outports fed by signals with default storage) */ +ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y; + +/* Real-time model */ +RT_MODEL_FCC_Sys_New_harness_T FCC_Sys_New_harness_M_; +RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M = + &FCC_Sys_New_harness_M_; + +/* Model step function for TID0 */ +void FCC_Sys_New_harness_step0(void) /* Sample time: [0.0s, 0.0s] */ +{ + real_T v; + + /* Update the flag to indicate when data transfers from + * Sample time: [0.001s, 0.0s] to Sample time: [0.01s, 0.0s] */ + FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2 = + (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 0); + (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2)++; + if ((FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2) > 9) { + FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 = 0; + } + + /* FromWorkspace: '/FromWs' */ + { + real_T *pDataValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr; + real_T *pTimeValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr; + int_T currTimeIndex = FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex; + real_T t = FCC_Sys_New_harness_M->Timing.t[0]; + + /* Get index */ + if (t <= pTimeValues[0]) { + currTimeIndex = 0; + } else if (t >= pTimeValues[11]) { + currTimeIndex = 10; + } else { + if (t < pTimeValues[currTimeIndex]) { + while (t < pTimeValues[currTimeIndex]) { + currTimeIndex--; + } + } else { + while (t >= pTimeValues[currTimeIndex + 1]) { + currTimeIndex++; + } + } + } + + FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = currTimeIndex; + + /* Post output */ + { + real_T t1 = pTimeValues[currTimeIndex]; + real_T t2 = pTimeValues[currTimeIndex + 1]; + if (t1 == t2) { + if (t < t1) { + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = + pDataValues[currTimeIndex]; + pDataValues += 12; + } + } + } else { + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = + pDataValues[currTimeIndex + 1]; + pDataValues += 12; + } + } + } + } else { + real_T f1 = (t2 - t) / (t2 - t1); + real_T f2 = 1.0 - f1; + real_T d1; + real_T d2; + int_T TimeIndex= currTimeIndex; + + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + d1 = pDataValues[TimeIndex]; + d2 = pDataValues[TimeIndex + 1]; + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = (real_T) rtInterpolate + (d1, d2, f1, f2); + pDataValues += 12; + } + } + } + } + } + + /* DataTypeConversion: '/Cast1' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[0]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[0] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[0]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast1 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast1 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast1 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast1' */ + + /* DataTypeConversion: '/Cast2' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[1]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[1] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[1]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast2 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast2 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast2 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast2' */ + + /* DataTypeConversion: '/Cast3' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[2]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[2] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[2]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast3 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast3 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast3 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast3' */ + + /* ModelReference: '/FCC_New' incorporates: + * Outport: '/Actuator1' + * Outport: '/Actuator2' + * Outport: '/Actuator3' + */ + FCC_NewTID0(&FCC_Sys_New_harness_DW.Cast1, &FCC_Sys_New_harness_DW.Cast2, + &FCC_Sys_New_harness_DW.Cast3, &FCC_Sys_New_harness_Y.Actuator1, + &FCC_Sys_New_harness_Y.Actuator2, &FCC_Sys_New_harness_Y.Actuator3); + + /* RateTransition: '/Sync4' incorporates: + * RateTransition: '/Sync10' + * RateTransition: '/Sync14' + * RateTransition: '/Sync21' + * RateTransition: '/Sync5' + * RateTransition: '/Sync6' + */ + if (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 1) { + /* DataTypeConversion: '/Cast4' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[3]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[3] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[3]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync4_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync4_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync4_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast4' */ + + /* DataTypeConversion: '/Cast5' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[4]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[4] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[4]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync5_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync5_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync5_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast5' */ + + /* DataTypeConversion: '/Cast6' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[5]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[5] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[5]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync6_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync6_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync6_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast6' */ + FCC_Sys_New_harness_DW.Sync10_Buffer = FCC_Sys_New_harness_DW.FromWs[9]; + + /* RateTransition: '/Sync11' */ + FCC_Sys_New_harness_DW.Sync11_Buffer = FCC_Sys_New_harness_DW.FromWs[10]; + + /* RateTransition: '/Sync12' */ + FCC_Sys_New_harness_DW.Sync12_Buffer = FCC_Sys_New_harness_DW.FromWs[11]; + + /* RateTransition: '/Sync13' incorporates: + * DataTypeConversion: '/Cast13' + */ + FCC_Sys_New_harness_DW.Sync13_Buffer = (FCC_Sys_New_harness_DW.FromWs[12] != + 0.0); + + /* RateTransition: '/Sync7' */ + FCC_Sys_New_harness_DW.Sync7_Buffer = FCC_Sys_New_harness_DW.FromWs[6]; + + /* RateTransition: '/Sync8' */ + FCC_Sys_New_harness_DW.Sync8_Buffer = FCC_Sys_New_harness_DW.FromWs[7]; + + /* RateTransition: '/Sync9' */ + FCC_Sys_New_harness_DW.Sync9_Buffer = FCC_Sys_New_harness_DW.FromWs[8]; + FCC_Sys_New_harness_DW.Sync14_Buffer = FCC_Sys_New_harness_DW.FromWs[13]; + + /* RateTransition: '/Sync15' */ + FCC_Sys_New_harness_DW.Sync15_Buffer = FCC_Sys_New_harness_DW.FromWs[14]; + + /* RateTransition: '/Sync16' */ + FCC_Sys_New_harness_DW.Sync16_Buffer = FCC_Sys_New_harness_DW.FromWs[15]; + + /* RateTransition: '/Sync17' */ + FCC_Sys_New_harness_DW.Sync17_Buffer = FCC_Sys_New_harness_DW.FromWs[16]; + + /* RateTransition: '/Sync18' */ + FCC_Sys_New_harness_DW.Sync18_Buffer = FCC_Sys_New_harness_DW.FromWs[17]; + + /* RateTransition: '/Sync19' */ + FCC_Sys_New_harness_DW.Sync19_Buffer = FCC_Sys_New_harness_DW.FromWs[18]; + + /* RateTransition: '/Sync20' incorporates: + * DataTypeConversion: '/Cast20' + */ + FCC_Sys_New_harness_DW.Sync20_Buffer = (FCC_Sys_New_harness_DW.FromWs[19] != + 0.0); + FCC_Sys_New_harness_DW.Sync21_Buffer = FCC_Sys_New_harness_DW.FromWs[20]; + + /* RateTransition: '/Sync22' */ + FCC_Sys_New_harness_DW.Sync22_Buffer = FCC_Sys_New_harness_DW.FromWs[21]; + + /* RateTransition: '/Sync23' */ + FCC_Sys_New_harness_DW.Sync23_Buffer = FCC_Sys_New_harness_DW.FromWs[22]; + + /* RateTransition: '/Sync24' */ + FCC_Sys_New_harness_DW.Sync24_Buffer = FCC_Sys_New_harness_DW.FromWs[23]; + + /* RateTransition: '/Sync25' */ + FCC_Sys_New_harness_DW.Sync25_Buffer = FCC_Sys_New_harness_DW.FromWs[24]; + + /* RateTransition: '/Sync26' */ + FCC_Sys_New_harness_DW.Sync26_Buffer = FCC_Sys_New_harness_DW.FromWs[25]; + + /* RateTransition: '/Sync27' incorporates: + * DataTypeConversion: '/Cast27' + */ + FCC_Sys_New_harness_DW.Sync27_Buffer = (FCC_Sys_New_harness_DW.FromWs[26] != + 0.0); + } + + /* End of RateTransition: '/Sync4' */ + + /* Update absolute time */ + /* The "clockTick0" counts the number of times the code of this task has + * been executed. The absolute time is the multiplication of "clockTick0" + * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not + * overflow during the application lifespan selected. + */ + FCC_Sys_New_harness_M->Timing.t[0] = + ((time_T)(++FCC_Sys_New_harness_M->Timing.clockTick0)) * + FCC_Sys_New_harness_M->Timing.stepSize0; + + /* Update absolute time */ + /* The "clockTick1" counts the number of times the code of this task has + * been executed. The resolution of this integer timer is 0.001, which is the step size + * of the task. Size of "clockTick1" ensures timer will not overflow during the + * application lifespan selected. + */ + FCC_Sys_New_harness_M->Timing.clockTick1++; +} + +/* Model step function for TID2 */ +void FCC_Sys_New_harness_step2(void) /* Sample time: [0.01s, 0.0s] */ +{ + /* local block i/o variables */ + AHRS_Bus rtb_AHRS11; + AHRS_Bus rtb_AHRS21; + AHRS_Bus rtb_AHRS31; + int16_T rtb_Sync4; + int16_T rtb_Sync5; + int16_T rtb_Sync6; + + /* RateTransition: '/Sync4' */ + rtb_Sync4 = FCC_Sys_New_harness_DW.Sync4_Buffer; + + /* RateTransition: '/Sync5' */ + rtb_Sync5 = FCC_Sys_New_harness_DW.Sync5_Buffer; + + /* RateTransition: '/Sync6' */ + rtb_Sync6 = FCC_Sys_New_harness_DW.Sync6_Buffer; + + /* BusCreator: '/AHRS1(1)' incorporates: + * RateTransition: '/Sync10' + * RateTransition: '/Sync11' + * RateTransition: '/Sync12' + * RateTransition: '/Sync13' + * RateTransition: '/Sync7' + * RateTransition: '/Sync8' + * RateTransition: '/Sync9' + */ + rtb_AHRS11.theta = FCC_Sys_New_harness_DW.Sync7_Buffer; + rtb_AHRS11.phi = FCC_Sys_New_harness_DW.Sync8_Buffer; + rtb_AHRS11.psi = FCC_Sys_New_harness_DW.Sync9_Buffer; + rtb_AHRS11.q = FCC_Sys_New_harness_DW.Sync10_Buffer; + rtb_AHRS11.p = FCC_Sys_New_harness_DW.Sync11_Buffer; + rtb_AHRS11.r = FCC_Sys_New_harness_DW.Sync12_Buffer; + rtb_AHRS11.valid = FCC_Sys_New_harness_DW.Sync13_Buffer; + + /* BusCreator: '/AHRS2(1)' incorporates: + * RateTransition: '/Sync14' + * RateTransition: '/Sync15' + * RateTransition: '/Sync16' + * RateTransition: '/Sync17' + * RateTransition: '/Sync18' + * RateTransition: '/Sync19' + * RateTransition: '/Sync20' + */ + rtb_AHRS21.theta = FCC_Sys_New_harness_DW.Sync14_Buffer; + rtb_AHRS21.phi = FCC_Sys_New_harness_DW.Sync15_Buffer; + rtb_AHRS21.psi = FCC_Sys_New_harness_DW.Sync16_Buffer; + rtb_AHRS21.q = FCC_Sys_New_harness_DW.Sync17_Buffer; + rtb_AHRS21.p = FCC_Sys_New_harness_DW.Sync18_Buffer; + rtb_AHRS21.r = FCC_Sys_New_harness_DW.Sync19_Buffer; + rtb_AHRS21.valid = FCC_Sys_New_harness_DW.Sync20_Buffer; + + /* BusCreator: '/AHRS3(1)' incorporates: + * RateTransition: '/Sync21' + * RateTransition: '/Sync22' + * RateTransition: '/Sync23' + * RateTransition: '/Sync24' + * RateTransition: '/Sync25' + * RateTransition: '/Sync26' + * RateTransition: '/Sync27' + */ + rtb_AHRS31.theta = FCC_Sys_New_harness_DW.Sync21_Buffer; + rtb_AHRS31.phi = FCC_Sys_New_harness_DW.Sync22_Buffer; + rtb_AHRS31.psi = FCC_Sys_New_harness_DW.Sync23_Buffer; + rtb_AHRS31.q = FCC_Sys_New_harness_DW.Sync24_Buffer; + rtb_AHRS31.p = FCC_Sys_New_harness_DW.Sync25_Buffer; + rtb_AHRS31.r = FCC_Sys_New_harness_DW.Sync26_Buffer; + rtb_AHRS31.valid = FCC_Sys_New_harness_DW.Sync27_Buffer; + + /* ModelReference: '/FCC_New' incorporates: + * Outport: '/Actuator1' + * Outport: '/Actuator2' + * Outport: '/Actuator3' + */ + FCC_NewTID1(&rtb_Sync4, &rtb_Sync5, &rtb_Sync6, &rtb_AHRS11, &rtb_AHRS21, + &rtb_AHRS31); +} + +/* Model initialize function */ +void FCC_Sys_New_harness_initialize(void) +{ + /* Registration code */ + { + /* Setup solver object */ + rtsiSetSimTimeStepPtr(&FCC_Sys_New_harness_M->solverInfo, + &FCC_Sys_New_harness_M->Timing.simTimeStep); + rtsiSetTPtr(&FCC_Sys_New_harness_M->solverInfo, &rtmGetTPtr + (FCC_Sys_New_harness_M)); + rtsiSetStepSizePtr(&FCC_Sys_New_harness_M->solverInfo, + &FCC_Sys_New_harness_M->Timing.stepSize0); + rtsiSetErrorStatusPtr(&FCC_Sys_New_harness_M->solverInfo, + (&rtmGetErrorStatus(FCC_Sys_New_harness_M))); + rtsiSetRTModelPtr(&FCC_Sys_New_harness_M->solverInfo, FCC_Sys_New_harness_M); + } + + rtsiSetSimTimeStep(&FCC_Sys_New_harness_M->solverInfo, MAJOR_TIME_STEP); + rtsiSetSolverName(&FCC_Sys_New_harness_M->solverInfo,"FixedStepDiscrete"); + rtmSetTPtr(FCC_Sys_New_harness_M, &FCC_Sys_New_harness_M->Timing.tArray[0]); + FCC_Sys_New_harness_M->Timing.stepSize0 = 0.001; + + { + static uint32_T *clockTickPtrs[3]; + static real_T *taskTimePtrs[3]; + static boolean_T *rateTransitionPtrs[(3 * 3)]; + FCC_Sys_New_harness_TimingBrdg.nTasks = 3; + clockTickPtrs[0] = &(FCC_Sys_New_harness_M->Timing.clockTick0); + clockTickPtrs[1] = &(FCC_Sys_New_harness_M->Timing.clockTick1); + clockTickPtrs[2] = (NULL); + FCC_Sys_New_harness_TimingBrdg.clockTick = clockTickPtrs; + FCC_Sys_New_harness_TimingBrdg.clockTickH = (NULL); + rateTransitionPtrs[1*3 + 2] = + &(FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2); + FCC_Sys_New_harness_TimingBrdg.rateTransition = rateTransitionPtrs; + taskTimePtrs[0] = &(FCC_Sys_New_harness_M->Timing.t[0]); + taskTimePtrs[1] = (NULL); + taskTimePtrs[2] = (NULL); + FCC_Sys_New_harness_TimingBrdg.taskTime = taskTimePtrs; + } + + /* Model Initialize function for ModelReference Block: '/FCC_New' */ + FCC_New_initialize(rtmGetErrorStatusPointer(FCC_Sys_New_harness_M), + &FCC_Sys_New_harness_TimingBrdg, 1, 2); + + /* Start for FromWorkspace: '/FromWs' */ + { + static real_T pTimeValues0[] = { 0.0, 0.15, 0.15, 0.18, 0.18, 0.192, 0.192, + 0.26, 0.26, 0.27, 0.27, 0.271 } ; + + static real_T pDataValues0[] = { -32722.0, -32722.0, 0.0, 0.0, 0.0, 0.0, + -32728.0, -32728.0, 0.0, 0.0, 0.0, 0.0, -32671.0, -32671.0, 0.0, 0.0, 0.0, + 0.0, -32721.0, -32721.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, 0.0, 0.0, + 0.0, 0.0, -32720.0, -32720.0, 0.0, 0.0, 0.0, 0.0, -32722.0, -32722.0, 0.0, + 0.0, 0.0, 0.0, -32684.0, -32684.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, + 0.0, 0.0, 0.0, 0.0, -32710.0, -32710.0, 0.0, 0.0, 0.0, 0.0, -32686.0, + -32686.0, 0.0, 0.0, 0.0, 0.0, -32768.0, -32768.0, 0.0, 0.0, 0.0, 0.0, + -118.15138, -118.15138, -180.0, -180.0, -180.0, -180.0, 17.01541, 17.01541, + -180.0, -180.0, -180.0, -180.0, 25.9801, 25.9801, -180.0, -180.0, -180.0, + -180.0, 26.06345, 26.06345, -180.0, -180.0, -180.0, -180.0, 67.51613, + 67.51613, 0.0, 0.0, 0.0, 0.0, 305.78971, 305.78971, 0.0, 0.0, 0.0, 0.0, + 107.78888, 107.78888, -180.0, -180.0, -180.0, -180.0, -169.80836, + -169.80836, -180.0, -180.0, -180.0, -180.0, 171.2196, 171.2196, -180.0, + -180.0, -180.0, -180.0, -32.26304, -32.26304, -180.0, -180.0, 180.0, 180.0, + -3.5854, -3.5854, -180.0, -180.0, -180.0, -180.0, -55.81231, -55.81231, + -180.0, -180.0, -180.0, -180.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.0, 1.0, 1.0, 1.0, 179.94728, 179.94728, -180.0, -180.0, -180.0, -180.0, + 42.21022, 42.21022, -180.0, -180.0, -180.0, -180.0, -12.15585, -12.15585, + -180.0, -180.0, -180.0, -180.0, 65.16104, 65.16104, -180.0, -180.0, -180.0, + -180.0, 331.47544, 331.47544, 0.0, 0.0, 0.0, 0.0, 63.30298, 63.30298, 0.0, + 0.0, 0.0, 0.0, 158.38363, 158.38363, -180.0, -180.0, -180.0, -180.0, + -139.48832, -139.48832, -180.0, -180.0, -180.0, -180.0, -170.3775, + -170.3775, -180.0, -180.0, -180.0, -180.0, -150.40707, -150.40707, -180.0, + -180.0, 180.0, 180.0, -61.13408, -61.13408, -180.0, -180.0, -180.0, -180.0, + 141.8528, 141.8528, -180.0, -180.0, -180.0, -180.0, 1.0, 1.0, 1.0, 1.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 60.68156, 60.68156, -180.0, -180.0, + -180.0, -180.0, -93.63384, -93.63384, -180.0, -180.0, -180.0, -180.0, + 165.74818, 165.74818, -180.0, -180.0, -180.0, -180.0, 73.13588, 73.13588, + -180.0, -180.0, -180.0, -180.0, 42.57845, 42.57845, 0.0, 0.0, 0.0, 0.0, + 339.30663, 339.30663, 0.0, 0.0, 0.0, 0.0, 73.76652, 73.76652, -180.0, + -180.0, -180.0, -180.0, -75.80978, -75.80978, -180.0, -180.0, -180.0, + -180.0, -81.62332, -81.62332, -180.0, -180.0, -180.0, -180.0, 48.62002, + 48.62002, -180.0, -180.0, -180.0, -180.0, -31.30247, -31.30247, -180.0, + -180.0, -180.0, -180.0, 99.35286, 99.35286, -180.0, -180.0, -180.0, -180.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; + + FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr = (void *) pTimeValues0; + FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr = (void *) pDataValues0; + FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = 0; + } +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.h b/src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.h new file mode 100644 index 0000000..fe05ad2 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/FCC_Sys_New_harness.h @@ -0,0 +1,218 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_Sys_New_harness.h + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#ifndef RTW_HEADER_FCC_Sys_New_harness_h_ +#define RTW_HEADER_FCC_Sys_New_harness_h_ +#include +#include +#include "AHRS_Bus.h" +#ifndef FCC_Sys_New_harness_COMMON_INCLUDES_ +# define FCC_Sys_New_harness_COMMON_INCLUDES_ +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" +#endif /* FCC_Sys_New_harness_COMMON_INCLUDES_ */ + +/* Shared type includes */ +#include "model_reference_types.h" + +/* Child system includes */ +#define FCC_New_MDLREF_HIDE_CHILD_ +#include "FCC_New.h" + +/* Model Code Variants */ + +/* Macros for accessing real-time model data structure */ +#ifndef rtmGetErrorStatus +# define rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef rtmSetErrorStatus +# define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef rtmGetErrorStatusPointer +# define rtmGetErrorStatusPointer(rtm) ((const char_T **)(&((rtm)->errorStatus))) +#endif + +#ifndef rtmGetT +# define rtmGetT(rtm) (rtmGetTPtr((rtm))[0]) +#endif + +#ifndef rtmGetTPtr +# define rtmGetTPtr(rtm) ((rtm)->Timing.t) +#endif + +/* Forward declaration for rtModel */ +typedef struct tag_RTM_FCC_Sys_New_harness_T RT_MODEL_FCC_Sys_New_harness_T; + +/* Block signals and states (default storage) for system '' */ +typedef struct { + real_T FromWs[27]; /* '/FromWs' */ + real_T Sync10_Buffer; /* '/Sync10' */ + real_T Sync11_Buffer; /* '/Sync11' */ + real_T Sync12_Buffer; /* '/Sync12' */ + real_T Sync7_Buffer; /* '/Sync7' */ + real_T Sync8_Buffer; /* '/Sync8' */ + real_T Sync9_Buffer; /* '/Sync9' */ + real_T Sync14_Buffer; /* '/Sync14' */ + real_T Sync15_Buffer; /* '/Sync15' */ + real_T Sync16_Buffer; /* '/Sync16' */ + real_T Sync17_Buffer; /* '/Sync17' */ + real_T Sync18_Buffer; /* '/Sync18' */ + real_T Sync19_Buffer; /* '/Sync19' */ + real_T Sync21_Buffer; /* '/Sync21' */ + real_T Sync22_Buffer; /* '/Sync22' */ + real_T Sync23_Buffer; /* '/Sync23' */ + real_T Sync24_Buffer; /* '/Sync24' */ + real_T Sync25_Buffer; /* '/Sync25' */ + real_T Sync26_Buffer; /* '/Sync26' */ + struct { + int_T PrevIndex; + } FromWs_IWORK; /* '/FromWs' */ + + struct { + void *TimePtr; + void *DataPtr; + void *RSimInfoPtr; + } FromWs_PWORK; /* '/FromWs' */ + + int16_T Cast1; /* '/Cast1' */ + int16_T Cast2; /* '/Cast2' */ + int16_T Cast3; /* '/Cast3' */ + int16_T Sync4_Buffer; /* '/Sync4' */ + int16_T Sync5_Buffer; /* '/Sync5' */ + int16_T Sync6_Buffer; /* '/Sync6' */ + boolean_T Sync13_Buffer; /* '/Sync13' */ + boolean_T Sync20_Buffer; /* '/Sync20' */ + boolean_T Sync27_Buffer; /* '/Sync27' */ +} DW_FCC_Sys_New_harness_T; + +/* External outputs (root outports fed by signals with default storage) */ +typedef struct { + int16_T Actuator1; /* '/Actuator1' */ + int16_T Actuator2; /* '/Actuator2' */ + int16_T Actuator3; /* '/Actuator3' */ +} ExtY_FCC_Sys_New_harness_T; + +/* Code_Instrumentation_Declarations_Placeholder */ + +/* Real-time Model Data Structure */ +struct tag_RTM_FCC_Sys_New_harness_T { + const char_T *errorStatus; + RTWSolverInfo solverInfo; + + /* + * Timing: + * The following substructure contains information regarding + * the timing information for the model. + */ + struct { + uint32_T clockTick0; + time_T stepSize0; + uint32_T clockTick1; + struct { + uint32_T TID1_2; + boolean_T b_TID1_2; + } RateInteraction; + + SimTimeStep simTimeStep; + time_T *t; + time_T tArray[3]; + } Timing; +}; + +extern rtTimingBridge FCC_Sys_New_harness_TimingBrdg; + +/* Block signals and states (default storage) */ +extern DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW; + +/* External outputs (root outports fed by signals with default storage) */ +extern ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y; + +/* Model entry point functions */ +extern void FCC_Sys_New_harness_initialize(void); +extern void FCC_Sys_New_harness_step0(void); +extern void FCC_Sys_New_harness_step2(void); + +/* Real-time Model object */ +extern RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M; + +/*- + * These blocks were eliminated from the model due to optimizations: + * + * Block '/Cast10' : Eliminate redundant data type conversion + * Block '/Cast11' : Eliminate redundant data type conversion + * Block '/Cast12' : Eliminate redundant data type conversion + * Block '/Cast14' : Eliminate redundant data type conversion + * Block '/Cast15' : Eliminate redundant data type conversion + * Block '/Cast16' : Eliminate redundant data type conversion + * Block '/Cast17' : Eliminate redundant data type conversion + * Block '/Cast18' : Eliminate redundant data type conversion + * Block '/Cast19' : Eliminate redundant data type conversion + * Block '/Cast21' : Eliminate redundant data type conversion + * Block '/Cast22' : Eliminate redundant data type conversion + * Block '/Cast23' : Eliminate redundant data type conversion + * Block '/Cast24' : Eliminate redundant data type conversion + * Block '/Cast25' : Eliminate redundant data type conversion + * Block '/Cast26' : Eliminate redundant data type conversion + * Block '/Cast7' : Eliminate redundant data type conversion + * Block '/Cast8' : Eliminate redundant data type conversion + * Block '/Cast9' : Eliminate redundant data type conversion + * Block '/Sync1' : Eliminated since input and output rates are identical + * Block '/Sync2' : Eliminated since input and output rates are identical + * Block '/Sync3' : Eliminated since input and output rates are identical + */ + +/*- + * The generated code includes comments that allow you to trace directly + * back to the appropriate location in the model. The basic format + * is /block_name, where system is the system number (uniquely + * assigned by Simulink) and block_name is the name of the block. + * + * Use the MATLAB hilite_system command to trace the generated code back + * to the model. For example, + * + * hilite_system('') - opens system 3 + * hilite_system('/Kp') - opens and selects block Kp which resides in S3 + * + * Here is the system hierarchy for this model + * + * '' : 'FCC_Sys_New_harness' + * '' : 'FCC_Sys_New_harness/Inputs' + * '' : 'FCC_Sys_New_harness/Size-Type' + * '' : 'FCC_Sys_New_harness/Test Case Explanation' + * '' : 'FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus7' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus8' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus9' + */ + +/*- + * Requirements for '': FCC_Sys_New_harness + */ +#endif /* RTW_HEADER_FCC_Sys_New_harness_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/buildInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..6c4fc6301c78bd547b28aaa7951173443b66f8af GIT binary patch literal 21621 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 Ue8-G+Kj~lj#Xeg80EruhZP+I>rT_o{ literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/codeInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/codeInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..394393c38674ed19c781fc8b8d55f70b8c2dca0b GIT binary patch literal 3417 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/codedescriptor.dmr b/src/validation/FCC_Sys_New_harness_ert_rtw/codedescriptor.dmr new file mode 100644 index 0000000000000000000000000000000000000000..474af30345f13bff0c3096ac76ff668c0a9c71d3 GIT binary patch literal 360448 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
  • %o(^c46!9()tbtQ3bbJ6an)*TB~PWIg46y_3)-!UqDxYq$y3vgb)uu# zvN)B9{F+@NkJ&p$4cz6r=tD-=nkSHt%i>Yu4a{w(c)#A}b3Nnbf%GbqSDa?8lfkkW z(J!!dQr~2-Z;TLiYvI}t6_(@(e1Xri?jyOEd~?{8j8nts%$xh_AqDdT?!zPU1>@Te zcAL`2cWFw*48^<`r-xA}k99-%3+z2D&`)f+2E@y zC`a6SEG_lU1}6u+H)7W_w!~8&N~389k?XPP4HF0Mx6cb%HolI`deMaJ%QP8_J17yl z9-HoPEqraGgHb)RogV7uSM73wJr+wa?I3nNDwrjOke!J)FyamX=-70Q+sv>%(;?yq zP(ArxdJo;db)(Hr!)D7 z{1tvTzYgXS*>n;e#h;+bv2tF7*hdjYwKn7=pejzVmet{^UCwOBf>PLHukyxwXDXXsY;JUFWgw`*bV1(gXh6n%@ zr=eJvyw=F+P;-qOPYuPmE35*SfEfq{!wlIc>Smc6Vg^lwG*Qezzs8YGVkR3iSH*gQ z*GgP7k%1m8R8>*5veAwr2f<>- zhU`-JU>rv#t5~R^8fGBA3_DjpNh71{B8s5}l6FyNVrgeFgAPhGM4gEx+rP#$+5HsjuMZ;jc*gWMU}` zvxH0lasoxM1BPS+g@dwT6mS$W>*+zvzypO=$I)f#-ibA!OEq#lT`ZQu?xBms%nBS; zA_yz%I2}4qWWhLyrE|m#Jo;FgBW9Z6t){9ov6Mll3YCbZ6Etqi(KJyGKkYPC%;0C5 zia?(1n@m$g4t_)_9Qe%|h+j-PT+NB4!w5j0G9G?1Xg@K7uRraJuUuJ(T;X5ww*iM2 zV*qCH;~{RhE8h}M0;vUa0dt76d=2LTo`JZYRj?y40nP;RfinU1pxFQY{crC9r&NZ! z;;0I+Q2TzXuL|r^8U9M~2MpV#A{L7#bcn_wmrkh&uVV6j^-igXr1CF9rl|;wqT$|d znu_2jMFvW}6r~)gT9L!GkSaYI?!k?+M_dmX zabl%QI~2{|tNV6;dms0C=Z3b3EpzQDox?s!!KyFsc-lC?;}VoBbrvNy2CH% z&E6r)?yp~)V;hIWkC&gD+%SsRJ$GdMfK4X(+iNjmkAbVa?E|@~K{FTTt>G_wGGc>_ z*hH7G;S-0xO>O@?=W|U)wCHk7_gmnssXiG;hJG2C=Ye(7Iy!PUQr|xs6TkFKu%WWj z`eP$$tG<+-wWbxNYRhCB$8MXrH@M-(vZa&_3vPC!TNqVxBqrIzDD}mN!s&rp7r5HoQ zeU3zaZOyy+0k=@7R6%&$LG5?)gAlqD^HzIIrUib~euQe4bq=&-XdZ zvs8Q5voCfDkah4NvV@$gAFl_syI~zn#tz{>a~lEw?)C>R3~y?D`m+a$YyNoS)>r=L zrPF5Ir13K*?>O_bmnKcDUG)9^Ui|Ke(LeZw#smE`Hlb9L)Vk~AJECuXuzLJ=umAg5 zy)*uJm!AaOEob1klkW!Z>eEj=Z{}~mwq1Lc-}?Rc&K~#rO5>i$2{&x{`-O+^N4I9A zeb|RzP0toFnO{xMF)@X%rk||MUZktH)xN&CW=`eP*YCggm}Ab{<8pQ%6D#dZcLNOrQ2=){uU*HhZ3Kb#}@No*!nN=R$-Z{Kc z;Rh$Sj9X7tNI%<}{fJ*pJJFgw#;>NGW6d6=tLfR8wGnhR{WL!I23<{e>S||F#qNEw z?2RX0uIc>7epB@LKi^(9kzedx_(gDW)s@!<{?K~&zQe{(qUSRARmazWd>O zzx(|44}M#H&!rcxeDr|!%NDV#=ndaHFFZ8ycHr)-u72n6$f%|}+0}IQJ72r`#k-zs z_~q%R&Aa5EV@`id(zm*4ja1#c{(kv)9yxc_wcos@__V)Waq=7c(rfSf z>yKy7UQ)5{kv;!)VJ!aIDU2VGb=O~qO?mIHs~^30;TxA7eN$I2yN&M6*e2IN`hOBT zisJvCLUxZck=vueGtVWT|HKIakHF49 z2@hxao7iV&#qoE9{&m^|RinP+4V>}J)c=`8sYiAnHK~uX;*kF-gHum`e)#wH z>|p#2*Z|l!mETaL4G;W#zkh6~U3C5vrytXG?Nxj78-ST+N8RKu7@Pngx?U47UZz7&2um7^SPro^%qv7A*J7AB)RvbF%mz5LyC@Bv7PFlvC zhTLR$w@8YkX&H<`Ui&hvmzY^`{x@y@R5__{FaB;#8+zZ~WyfDu`_`GC?snHvKfmlU z?)IL7XDKTV)$7ke0!uuU5QplOAw|h!hk8-+dK#5or~H2E zzpq{X-sU^8}>IWT8);d^wcIG zOPTA5Z1<>t-Td>S+P~gV@^H(tZ`}1?8u#A$~>=m9`IZZAO9v#H8T2?=zl>TpF8z4ko)5heJ`8|^1AjM z&i_3HIsX=FBiTpTU3xwH8XnC0H@R=*ZdkS~FRcuj>$2$!r)7PmbW4TpmdthGvQtma zyea+6jIvX^({IXL?<_ktnt4d~1ur5_SfcIx4oH)U3QUFJ>c zhjx^m+L(S5g&3u-=8oz;k#3rT#x(c%%wwZ^x29j5%gTC>&3s)3&EDqBn=;y=cXj$r zna9kO^&XIZQ)XyES?}KIH)S3eQ`Wmj=1u8w1ZBJ#QpZ&Ks`}`S^qzguRQANByxh({D)+ z@R{7lC5T-zrAu(m|JqFE*;ikMf4=(5)dHvP)i(v+po*Es0_^--Vr{Km$oC9bDc`3d zknRA)Rjh<>hc-TnvQw`Rsn9tx%S;vDFF^63lpx#f>_H-L%wp^V7<^q93s2H*aC1&@ z;O4ZV^ac_KOb0K18Gb++1-!nGGQH<>PFpd+1Bn2hhw<@ce3}*iJ6_vYfp711L;&83b-#puxL&T8AwT#>+RKRbxlr4JS-^5U^q=xKu5YEBV5K`94;|M> z33_N+mVUPKA>;aLB`V!9ho>kj4?UHhF7uFyebqqGJn@YSr(OElHLD)Idf2S9XN@>z z0mZJ|T|Tj|O5*pu{LvYoZ>Sn}*2b4Aww^!rA3U~Y*|g+#?L;v{nO`4>+uw&*&$T=dLC#|h8;qs=Ns8)Tp#7uAyoU7 z-?=DyO3mn7)|Wr?`hvqx0E)8e5bE=^g-f6)pAMnYb7=rYDXa;Ve!e~8Tq%1sp;+Gy z7ya(!y6I;P`*7*F&ht+$n~11W;owQneL@bNA~<+N=4ws5;HlHEKJ%i+-`;rd%l^>w z2alp8N#rA=)Yar5I{E!3--Vy8e)NX5?@ah}21 z+6_2c^epXUWDN~zhii3+2%Lv(;^Q^!p+|u2@7aH|pRp&9J@i&o2^$jv6t`5&o?{<` zeJcspkd63*&Qk9Rfj}Ybs}+c6fhh6T2m}gYU$sCy1BBOGB@ifteU$?7G!Vt!3V}c& z>{~7nPXSTnJyal22>T8Zh$n&A-CHgYD1?2>1mX!GhIp3>1PWo_!203 zdnfbDaae z7%m>cug;;X!}(Q!Vec>kwOP38EiUDk0f)VGpf}RB%(*;EXSUK*R-GE)nkC8v7G4k%lFfYJr(4?vCc_G$u!5>QN_J^^Y^@7Dzeg|P2rf%q7RvEHu<1PWo_ zNdoZ^5M#V23Iqya-w6WoArO0bw+RFaVc%APcpr#S-s1%Vg|KgnK>Qwv5#AnwKq2f) z3dDOr4EH7k0)?^+9yA`CrTKU!P|9QGYWu*QCc>*Kvg z3IqyaU#md80>ob4BLo74u}wE+7l0VytrrLs!oE6zcpix1-qiwu zLfE%TAfQ#zO<=c`aONZa?=Oe|q%5G%VIA-Xhyb8$pl2WsI1UMLlxL}@7Hj^qJ;OcY z_5a2Gptm3gUeJH7->*Lb{eK6fz@^wZaEiV`@5G5A%{VvkAjAmoiCDpZYoBTFY5&b7 z!Ts9p$RhepoHKBu7Sr0a^@toK8(@FPg5jD6u?8Qq*V%ueLJzU;vKxdfVC;GH2Yp8! z=XQ-71OW@~TqR+$2Ub{c=Sm5aIZ$K4owX8v2G^@BxU*WqWDHbTaA&22pThM+Ex2>J zgvk^rx8Tl0B>V)fFSX##WfFcI*Oypu=fM&tJ7AFocP^IjgSfuHf;$&V_&!|cNB^LG z0C&oxX~-f7&yn{4?wl)OG6D{=;Lh0+z5>^0T5#tq37?DW2U>9F3<+HA=ehLilD?l;^{0a698|Q)^ z?y2Lacun){?HK|7|EvCy{y+LF`m@LrOm@KKI4k@VoE5NH&HxtcGY}0l8aoI7p?!+n zLBG}_I4Ph-Td6I@{=qVBj8-J~4&BK9j@>|SU_arH?KXgR2exYzp^D7hHbM1e7s~Am z^c{@vp}=i&-v_q>m^>$n+Xw6%aXXm=VRoif=wxTf0$BlUyDUJtcQU#C0!N$!BX?X- zp_82|$2O_+uggaOcd}C?;$tAbX2G2&OZX#PKhc6aPm(an9$+?xxHBSQG7=06?(CE>*$5pL+__o8 zWFmwtxO0<)$wFwe;LdgllYtPl;LeQ_hOrRdV8NZoN|+3Uqb<1e7zvYoaHIuy9wlKi z500?l&Q=MNb+F!oI}evI83$`ExO1I^$u?-V;La8alWB061$Q<{m@I=v3+|K~tJn*; zF1M2r+}S|-{}3o$Z5=rCU~LBX1N;`J0YB|X0=$kWfv4dExLv#Z`VvN>BvVdV?v@WFSo386aBEQleV7J*y_p@7VrTf?| zw$i=qJMtwMQ%0*i6_Bh>qjkQ-VDuQR^JtEvYuFO`WV?3WT#3Q}GFs=z0!EF|I$IVn zRE*YxWC7#DXqB7!;6g!Rro><*7_Bp80bOpi9w-ZtJw_|veur;|F=(_NATcnbjMizg z0NcrE-Cq`9Fd41;$pWk-qjg_dfN5m3`egz3kkL9-7GMM!t!1+CI2ESI0?Zwwb+Rlx zNCkcp9;yRl#%P@+TLc!2!TvT;-Ul1TXx&>DuAssMSvVJk+2dtlJ7M;cg0+@I!3^8f=3G&fl%#>_Yg1)4x@FHfMI4Bts@0|1i>Q&43ol` zJzT)`bbXkBVKW%5r2?)1+)yH5Y$9&2^a*$lt}pTmcoyAXEZ~_07YTRhe^-B1e_nr7|30FD zFGbYQ33>!Gfy3YlT&N$Q@2wBlHfcw|);~m>txYA}k6hz8SrmN#WA*^NeODsJm@(}^ zUDv)pboLDGD0Ujn|IOlh)@LuSWvAMU?! z%oL5#BT?96*{+?Ql&Dh(m5?axxNK)v#wF@RLLDbj*mBvfjqR2wK6GLdg-w?2T2)k{ zj-#i#BnlgN+qIb7W=j@@(ON6+b6wcs)qHa?cnLb%Xgx&IfnqjV%Vhx?*l1mbhA+Ww zP{9V@ri<;s2ElxHF$&mf+}_kFzb8Z(Lw*nT2DfXan;(Vna%RQAA5kW#r%Ie_WZ{@ZJza55j+$z!TWnAVD|6Pzd)X#-yu8bQ<(eThBHEB z&H#J90KF6^hJ2>ItG$X{f{$r;BXaO^`2D}8bz{!IP77$u%sGI~_WvQflYN_glliz0 zU+RC;iT^Rx*2kUrQvaJ?e6Ig}+>0;uzv;&3`rpUh_!@%+ix)^gK4%FZ_v34fvxMo$ z=Pcplj(o`yrYHYR{sQjF*Dzb5w@Ft%w;O!im9ODk6v9YfKDQfu+?TI0uK!JE{;T{p z?#$<|Ca@m&=Ic`b`?x<}!=#8_Cms4f=LPQ2*BICTrbnOaf8R_n z2a3WA`~}jf&-K5LJN2dhH@*5?|NFRCUxQ&rHP}zQfa`zXzM}9n$M{9zDPEW=3S9sD z%0%G_j+r6~kMqK0QQ-RDw~r`1$T5>df$RU0iB!+y4ANrQ8!QRk}wTU&@{FvaD-Im2h`F z(kF0pVSR~k$jjndpYX^dv>ffwP$FFNx^@Ff>~kOY$!prR)JD=N4=)H6xKm!EjKA%h zOSo5F*N`WnT^nD*-SWDI5b<{H@)GWt*EJ;ZXxA?AanHP_olWm3;jVdIJBw(2QNn%m zI_0rx*S42%?>zE55bke2?w;3#Ia0#?^EzeofjQ#i4th=F=12+m(Cd`*0p^I0yXZA! zbs%EgN3T;F9GD|M?xfemNG^%e(APC#j`+GbBWT;cCUm}!`|34qBd-N_*6Va)5p=$fd+VjnFX8Tbol@&U=a+DQy-oq|(D^0Y zW3Nk{@8d3esq;&?&t8{0-^ac7h-Br&xZ7UWgwFSI$GxU4A(ZsoYjb&ld+s&PMvJ8D zUg&%ux$bdRI#=`3ch3s}ANSoO441z^IPW#C^Gmq%UZ(?xq4TBtUgJ97$KCf*=S%;+ z#&v!P_uuo=%c1j2xCfuRw9xq_+=Z{xdK`v{bmD_0sZ;Ak_XwR|QpZbD=a;M&C86_6 zxF=tiI=>_!a6;#s>*asq-?D;G8sj?OTrlVMr{Mp)X#MXUSo%Lj7Vz(TZuDH{ISbzZ zZfO6to|W+Z&-6^j>fca!{eo=O+~2vox0kn4F_rLCtw4dPY4MNSB*nzy zAXP0Y0Tu@-Zj%%fzXMY#FkoX~R7q9CBW~{fD8zsfW`alVzgqR)6f4$r) zDW(!o%fwS)cDSB!XFd+jU zi$cBJGAX7KP$JBLxE)UFUT&J;&}fe0rU~bEENS*~)1;VqA5RI>ge-il683W2q?k%T z%@Q?)6^|9UUT&NelTD9y;>Jl4@i*Fu8z;q70EQbU#l-8taN~p*fSE?GDIzSl{gB z=1DP?fD+~j2?#jnd%1m5OeMUJn&nkr3cV&SFDZ9%mgxQ_4Kx35MVHLvcc3Ge?%5Jj? zVRox5&=_U6ScR}~0^)mUjIx_0hK4A+Nfu~`vKy^JnB5=?7?qvudaDp-*U176QTA=C z5N6lP0*z2+rlq0*%C3#R$05x5@-`Z*>;hSUG7KX;N#y!Mp_82_Fez(3TraQ} zPs#!*1@?qh2(!m!fs}$uEJr$lJti@v6WF6xA;yDP>028nhI24h>f6(8C|L;W}4S1)1Jz|2+(R;BL5QZ#StFMA( zFdtsPN%|gG4g9C}C(I6BgG6~odk7JMH)&UD=VR@08zjjhZH6{Q8>{&c74$j#0RF*O z5byUWB+4zQ=F1u_2O4X=#-eQ5@ z5s$rt$I1oxHo#>9d<)=G0lo?FU;(}XaESn42e?>(kRV*NUIEU1^5cC&Jp0x0nQfS%K#4&AUPLi36NY1GX?k}z!?I30pNiGd>-I*0X_%t z00ELiVVVG+1-QQe$(gX90G|f9uK=F{=ojFV0H+G@34mn+d>r5u0g?k@vH%|hxQ_tI zc`!+U_W+zI!0Q3-Ex;=PP7vU^0LKe(JHWjJ*b8u6F?y4G3-;s?`3lBz2n=S7;ZPjV zXbzE=U=I$Fk6;vsjs!H4Lq`A_!6EVv4ChcipkW*$&p;`MDgc#mh`a(m4$Z+eFNdH9 zjA9PW1XRSK8Gv@@5cvXj;}AIlhH_{WpdlP0CxC}T#5j5pzKt&cc=ZrF7*lYp`+a~M z0Izs{f*HU)hyc6>r+RM3+W&Fb5pX0<^{m0Uo(CZpKqF@QOY~WY?HLCzpRRp@T>)=s zzrPycToQ+zMx7T4$(vTy4esy9x|>e&^5OC)?Y?8Jo9JdG{^(kwb6 zK$=1${*uHKIn6r-7{XOUfHZmDEWnMp+95!iH*XRk3=|_IK$qycrL0AWdx^N6ZW^Wq~c@NfZ6!42yL zI04`~0n&VUtpH&?7%c)E4X{~&FbNDgRPH&l5Pf(*@4)HoY8!l&4Zc#rGuY)e_%a)O zsSV~y>a}t?EH1WTzG;ImvcVVH;0tW<`8N1G8+@(}K1X~MIq?q@;4ZI`(4%}+yn@#k zA@&~_%LVuzz(Z;NKTZ2K^Ze2CCZhkJ0Po)beSexK30u7dk-zgje$Qyc`}`R?{ulbw z@cG|@Sf4ZWZP4yVBSY|V%=)M5W3W5ue=$>d4eR`mYTv~Rzxs2f1xon5S@=2UYmb$P znKK{m^R)*{#N3$|=V_0WVD=21#Z3^8_CN{d&t_5A?)PB^4XG~z81D073JtfkDBUaO z&~S>uomzf~Pt2i3X;KNFL}Q8v+)~}|(X+cm`4lbk`g|V7PtEK*R(hM=F+_C)3m!w`D9x7cc**U-%9y>T9$PX z)Xpj86Kz=@p`BUE=i0J7T-#pCr`xhTOgp`lPq<~dlwDcMW7}o9L>pVe!`o$beG^K1 z$wHTCuU1vcW87uASc{eLFn4)-QB!Gev32|I$o|P=-R14OX~7a6?k;a1y10Y~yvyQ{ z&0fz!>_5DKA?L>gPbswUAHnCp(x1~G((i}jX{IY)FvT5_n-Q;+7YniFVtSw z7ipg$SGW&*e%kf5S_k|ETu{*GY^h5S75aEBNs;yLV__TriBB71Q=yU<=don2rnBF5r;TTvU!&a>5V0z21^tYYWbi!pY#?cOGK zmK|Bj&a@YU>YOM`VpZn^`5319M(Z|-!t5UI`mGqT*We{$Rp)q#BeQc? z2r{u+9}0urX)iv=?y!nb80>bM|IgN*Nwxp)_S}rDKXdi{^i_Nx;Hi8k&@spgT#H%2 zEKeDHcV7Kp$PxA~b^*SK9RT+s65w0_!`WgAKl3!G3m~4gR(bzE;80*tZlsgI!^R z9U1ht`wMQ)+i0C_gU_#@7W%0`Fu2lDPYt07=-LBtVjMCkl|n+zAM}8{biOhrOwv z)8EVq`l$xuTlkAri{+~I+{LQa$#@SnQ`TC~byVw$j*fV!Bbanrbxze!)#$J4=<#J{ z%jN1v|hM{<&li}^OwJ{PzYty(a1c7oF6@^1YW&Dz zL+9NFSs2%1z(j$mMw#9d;3ax`6H0URqXWPUq?&U^w#LxM-H?l>(G8Nv||rivIXrWdLegPE^^qGgL}7jqoE|fU3~f&A??oMc6eMf6cso zX{^REMq5y#BPT^$H)H&sfKi%G(R{YQvEGc{3Sn#;7~=;1rIByo?NPji#^B-julam4 zaB)ys9r%fZGtF-|DIY-GzlTkSE9uj0bVNh#(NH2`%Ak$0 zSY+^`evx|fni#YO$9Ta%ggo)cE=J+r;C4b^P1E8&NnNyG8BZ$&oIit|6^?Y zuf|+eEYi~ztq*p_z^P(1Aw-1w{>ldMU1v;1D%(^bVIeKw6+S^Xx2cwF_&sVLu58aJQR#9L?;(+1gWW4Z5$S9bubw;8^XN- zp(aWd@i@&d8ly_K<|mSChOtn+xdB2TZnWhPp&0uP)Q*@Bq6r+#9VJaa)xs5tx;_?f zuM0&xtikAD29}d6$>hhRu5r_*M2IF+&@$y^4qlq8(dR0mV@kpttqxwZxB9^6b|wu! zk#(h&3$C{UjV<}D2XRxv9W|ijx&y-e7FU!dIwY@jTM-X-Z#Lj$2}IjNTg@I6BXAH> zE!VhQq*|epY}xDvs52juk|<6@0a5f*1^OGIIV-K)FV(RgxT{>QHuV3VgLC)63d`HM zRhvU?;Y3fD`Pl{O*11rk!cbQJG36Y}I>&%S-a)Zr`r;%lKUJf@&dn))ZKjv%=bhwV z+NqL2abCTl?DZZu4JoB^>Vry%xJp3TglnTl((GwhDX3vwExpw+dJ95GS#)sdg8#>5 z_|VZ?gJq7x19i=?vw{)h1ina6+Y@c0#e$lx-ElY*0Qu*;H4Qi4U2uJ!lU1^PF@Gqh z8ch-V@SF$R!oiLZe`J{~@YN5EFpOJE-;_Cq2xS?@vOYZyC)II&ql(wMy*j9h$ssXD6d=4#`HhBAQ zvjHpsDVlz&#|}z(BSEvdSi(rc%oY>hyh>Cmn1o3@%NMD7D&^;7PDu8D{}XT;zv=qB zXV41VsTNdnyb1n_#%N@l`PKR7flf&%&R7?VfDf!y%KRj9jnX-4HEUhWXwNY~!2@>b znx#9X%yBTwByxVDzJp^^$e6DPxQly&)-$1fROlYMS6A(U6;h zU4}J$2W~0Q+g00a3B^fwnw4_&wv@qY>wskk)rXS7E?PuA1mQp0-qsv5+avt5g?i%p zL2+sN;O)P+)Mr%DYW#|LtfxEB)h!lqg(ez^a#EeoeFZdL+jD3rMZ3Nyk~9L*L^2p{ z3*~q~>Aq%!EJQ+?Poy*wwTw+wEmXp#CfaTUY5j!srP*%-Q@)i(hj>el+N#g1Gm^Fo@jeZZ1A5~8;QZW?7+5I3(vqN1Itl4 zZdUEk3dXkX%k@EvlwDP~wxyBJ#G1jtZArd34ucimXCt{T80iTm2GoJ7F67FrgoifV zO>16>782%G-Dv3aZ%om1{ASz3Ii6D^7JUjQo@&utA3tAyJotZNd0A6S4Y8&afK5G? zPINS4)dvTn5%iN)gN#p9Rc-7^rrw&fvP!k0qU$$@qAjtiU?ej5dYYZLl;gw!C1PtDH<}PmJKZx&8q_qE36u1Z`VM5wr6tIT8Ra$G7PHH zs$(mfk7%e`+0@w3xVAY*g;g_EH8!*a8rJ5%dyaZN-QLt#S65M4SCixQN(=`YR@O8H zT576u+^nV-frda!prS6&n(Ni7sTvz zs$fL|-qCJykU&OcbylK3>@$XetdZCV_=#*@qc%r?r>b>*s4EuVR*`H@2II+|Zu6~T za%lGzWJCi}S2>9}R6SB1ipJty!ANbSC$YID#sS2*}LUW+ne3P60Y{dZ7Pla-Ds&NmCJ`~>+Y=Z@8 zEiJqGIjX}|n336N8DpM$B{9po&)s1!?3=8_1zI(SJ3Ob<>AE01R*2D;@%i?9 zT={fm-836rJ+QgMDQ7)y=G?j$Qrr43_MQ_`^reH zExZze+`)L;=56&sXtJz27!M6r`ecytQx$el`V7XCtk&9_wcq z2cQ%42mC)pdK&XGEVnz=hh-luMQQ?Mc}K|fwuE+eCWacaGjYbaPkT>_ z)0p3E-yf8Pyq_xQN{2ThC=~9|Xa^5qHeZ^j(yr(Xiz%^&1Oud{CrZ96vJuT{6u|m! zj2j(BG#DA6NtJW3D8r*_vk_@;2~@YlFoI!h0xX!o@1K@`ky|#W`F^u6F!4eR=%9KY z{9l&7kx%u$YN-Jb%GDe5l^m`j&Fh3?cR&uO((n^;SJ-k5d=W7$@QIhn0Ng<}em@PL zR|pT#fOXk+TA+LYRq$&%>A*CRI}qPR3JE`v-ogIM-?%jQFv(;HTB2@l9d)v{Ubwir z6_MD+V1!Q88CXtL`Yrn@mF_oo4 zDa|XsI-^4NdvaDNmo8bT+^_cU%WnE%8f-WH1}cZ*qLKYXb_Y9C^qlm+S-v;(z3v%S zN{`pYq8;?3k4_^4{`X7v2d@v>Ukd>sKdUDmifkjr(1AVpne<$srA)e&>#IXsjJA}m zcy2l|EMI9n)E$qtA+)s8NG8_8+%j7cV7?9TPGzXFjn<@4LlnY5sO4grc`3?U#9`!+ zfs{93hggOOdiaT|D;y)@MlyE^SMZ*DQ#L+u5lrkJED z7E89kaLGam{J*cslY?h}#VM&_Jw(^+{0uF?#dd$OK(6$s;-+RE(gCSNm9a+*xaLBk z&b6GZCOI>1s9+@3f^l;wvT5ghrLv?_NEZA{tp#lLnN6Wh$X|g#u7WkM6>^aBu{(jV z5=H83%`I*P_*n4&elXrKgy$#$mGZ#_q%G+xQDtpWF2ILMVoFj~BvkX7BFa^XVELSd zQ?WpsM&>BVBNpYGk&X$`1TvDVFkhx5PYTJx&{85tv?4`sCPn(Gg3z0*W)(!QxeZhJ z!q8Esm>7kmoT@{c3P{kBD%+yT&7lNbxnzBS|My4!EW}rCEzE~1slrt~W>LwYVeRF2 zmF28`$AJXNF!O_4oKY$9VSb3I{F+5DZJSyiDFAV0)1+_9NH|EZ=GYMKU!V+zWX`#W zlKR|{5QRscCXGA@A;+AA!d3@AC&A8}6hi)as6`U2S6-GQ%-=~wl-;^^wKvRpwOSW- zIYI;cKTT!u1Fz_WCpmiZ@ z^46EDNaR$^;eg(0qXAMYZ+*FdX+ru$s@0c2fFa79RT)d71*KW((}aU7_ifNzT`k1|X$fadKLd|B46#D)?4PGrBXYelu^d%x!n-qPzlJ z645@oSlpzw(<|ddO9ha~gD0v8nbpibqRcz2MjJ$6h2trh6GbJ|s#&i=*BtzRpt~6d z=Q`0=YrESaJa@SEF4x?NvT6y%u|sYbto%F&$_x9Ou#=qjS@4j;?4zcieHn$D$yt7z zW+e3NZt8)C?Fu!8L;`?>IZAf65V2CIR7FC;=q^+-CzG@0o{fn-QQmY5_cq}SY{BsvwhJA|7;MS;h#fY&YB!q?eWr-fdl*o9RY6P2Zfnm2r zDa)+vU{-cOZ36zEnSatx`&IHz<7#+}xLJznl_4>0QxR8WyE3u|xZ%+0S3$6euTqQm_AmigLtkL# z3Q|(~IZiPE{-5niV=4ia&M;zJWOQccm>=8*#`HaO%1j;LMmbj+L2+Qgl0+*nds8sl zk)2fp)|GF9WhjPLMSDAz`f+qz#$gfpHlOAaTJuz!Rc`|wqpc~_0sRi5*-m&w6AW5t z*-7|`v@23;MJUO$31k`S=A6XL>y503uJnv0zXneq{6EK)jX$&+YP6Yq`pkySVEYyb z_;%UFt~7#@e5n;sbCdpSfa8rKB2w0!u29mCw#e`NMo>bJXQJKt^c4@U3?`6-5_1?t zU4`1Iv(1r^KL|6Il(6D*Yu8i-8Vj~_-+a5D2=1V4$UD~(p>*gn>|s;mwcvB<)L9_- ze=fGHpqtW9F_W=#ym~e-{GjWXt9$1uwbqZU%&rNbng**0GU@oK5{4RAp+LvrDv2FP@Hr&13(IEA zFR7eP04%YbsEx%d+Q8-+{#*B`DIpw42vU{X)NZA$-v<7lH|XUh#kB$YzUCx+n>@VV zIvF|t*X0xos*_B1wY+-;l?sZCe;%sfict8H_$XD{_b=%y+9)#vHhL)~l)>X^9)-d= zDV5w2mCAF%XKJ2h6~*I(bIh_S`em@j zRVop`TO!nM3b^V$Q-+nQc)>_1`DXJuy8123aH2tL>aOe*!2b&n@o(oU8Nrfs7l0a1 zrcZ;rY=olBPHYf_EIDBy)pQW~feS!Hi39uQDpx;4F+2{9tZj=@1fB@sq%<%}B#XI~ zy)OoBnklcH$l)ed$O|>*tPT3{51l@jzv7T3&AZ5UQF8C*ukbFiFU`@8ifkLaq`maz4eGg0ToAkB=B~N9^kxp7 z!)I0w_Hw7*S4a!M+F;RPp0nwvzNO%?|+e^b-ZdK`yVFe==(8n}V3 zMj~fL2TZ{48w{uB;*5o==TnaR$<7w|+QG7gor0eTga4Pf!WVRgP+ch6k=&fU9qsqH zGRsvh2Zz0NB&Ese8Nw{(E`D&OE46^05Ry%u`I)r_>JIm)D-LVkY-~z486BG`lTHQB zB-?COW5-ru7Af~gT`U&v>ErrE?i`KedlZkbH9y5w?V`pgmW<6KPKgls|6t00l+iH`&O~*EdHBShpSYUc3t=@> zcG+UxlQyIZw^pT`pu$69_FG0%rdG(6R#R@#0-Tw#KuHujC%PT8wj9d@xYy3#14*lG zzTHm*UEy9%ecd3A%Et89QJ#Cny3Mf&Hd33_&ggN8cBQKo=ThEa>##XT(jk}GL3=}^ zLGb_5F7Q8Zx*YvX6Xrp8G`8hL{6x={UhbmT6>Nbft)x&TPhCA zV~?Y{iEYug!+JtJp+TGEPOGd$EyV^#H^t0$$zXajb};uG*(q5k&Py6EB8_`?y=dLj z@4N;4zig>HHC7Y+K%%CpMeNxz8!NvB>a<UP2q7v6sean)jEy)WbQ>vUC23`}Z2@DX z9IdMKQ_Wh#b|%!|tC`DqTx1Pqvc{wm9<&!A)e#52pnMEu;vq4wpAQQA!He8h)Lr3tdy}|2$5B?6>6ko)ZP6|qu@a6VyoI>BI%(f^`+kBj>!lARg@bPIK|EEWH--lwI*@(26itC z5#=fYC0E?sTn_$UUKZQfsm=hfjsX&>u$AOBzsWtux29)xNM0K$Bqb$d1{<%OOCeH@ zAThQYyMxE|AaiA&9qcq#2CEM3B>Y6#6=f*4z!Be>FLYuhIQ7}6k!vLlD-paI;U8vc(d(I84S$5LAeft$d#8NoxyBR_Rl7Ou?ap2t56@|r@{%9KqZ zu|itV`sI?)YV3(v`>cKnQhtLK%=BtM2)QDUmBm)Dxr3C+;Qz|!G?&)WNQmaG zw6HT%voZBxcpx2<RK4*TnsURVsE0ej@COcBz8TUY-zYKWQ~%xPyB7tvOrGsnk?mw0?6a z+7hGPkooG7cBd=VP+AF*HTA)^xLVqGPp&FOgw<*u;;}Yq6kuf+YA7!|)@%*6^-$_m zF2J?~BRC1op!ol4b5wyZDDn7Ca8!$J?=W7sAoY<+K4bW$+{J6X3C_XX^Q2siOUDd} zdAdxVm(>p30W*-l+E1ihVO5(m$yJL?v7pTz=7>P923}xEMy#6VSPuYO3|b=M&3+=} zO7mic#(a|){jLZW)wnoK&xonSLT-8kmF$Xb+Jv;{=0`Xok~)hMtWYdg0B zO24UNk=&u5GDg$Kr*gN_S)MKNU^Kx~t>+6uNE134J)~wP=2CplAcTHs`)Q-5D+9R( zITYjENk(d~1A95PnQwN_HsK=|{9j9978b>7>@B7vu8c&N`!v;nrRK}&4pKMdl*qZp z$pSTTP77wrZmHvm!Ai4K8h#?~%242I?AYraPg2~L`BEoxe!$kaBo*r}6eZRBoKmf^ z6`r7EsGD-87UILe@D2hwXrLub@)<&bu!S^VD2a^SLLnw zu5xU>ll84#FtM1E6|P-2sga`vuw5~!(H!Nk5@#)g|5xoI=Pipog?WUu<>)d~_h#4L z<{iprDda?sf*JFQ4B?$R)Y+=+7BB@b+;Z3TJTd{;b{mNqfut@utkmKOZK+CIH< zlKj_EnnL9e-ql9Cik;ilPIY&p5XF+H>?GT%EE#hFapO*re2&r+lG`D>yrX&K;13zk zHD6v}>AP)R8)Ffptr~7rtQgQbIPHNgh!3kjQhut6D-&kBGiyg@%;5hzd-%UZ1BhcyPU{KOr5I}7AZ$o%8s}~G`)?0pUAq>;Hj&``A)mTtklt*R5kUQltt)# zug}%c3sjh0sx!DCEp78j`-!mIO)X=^a*nzIx3y{)v%XHKrG6I>m$gL=YnSSOHJqy&HMnOo%)7gx^tP%*r zMMxmfp*4Hq)3DER&nE9|MVX;&7bG9yP^s8YTq(Z;ZkJpUk;MUyZ;(qG8=2 zsN|=hh8B{CMSBVmd88C1y`JaDKr)oJ!X;c)%2LrQm^I_XnMAeV`@7T#F%7B$#(O)_ zrBpFK*Hje~7E1xEr9415wvu9y3bd!n+6Y;@wYxb29;j&VtPQr|2no*1QMgYUB7U*hHzDefp<3IBH4)fm)?4 z*@>$ysDu!RSh>p0&T{i}lr*BoqcMoso>)}O|IlaUWo{Bvq6oxj=VhopiY@1b_$+0+ zW4lYr(Zo*GQGP{Xog+cv4m7|6D!|^&MpHtq5QqIw|;ZZ5ZYl>iAO>cL`2M5mlj3qHWRSX2mE<%b0SefI4oTlbKLzJ*^S1Dk|iZyVV5$H>c$PnwKWQ zM4E=RYppdZv%Opyp!1dKAq1vHE|>_=-lr5X?bf)lGImieHPyiGewh+s*4Cg@qu5qDewv#HJj=?tnxZs0 z2^$bZhH>;FwVSUC$GpclMK7PDr?!myxH?61I3^#L~{$eeyYt5Hnm_0`WW+7 z8AF07$oM^1tU_fvRUy!1r&3met$G{2+i0r~b;aV_vVOR{OLnp=->zhxJ=1H}3Z&eW zlYalA0{p*Dr2Vigaf>r7IgutKFz?DaXsOQ}?lLv0`KbalkZ|S$MI@w5fKB-{8HiY$ z!KF^+w(^vji_*4*-Px(eCMw=|JPrskYn>1t@0^|Bcw%d6B04Y~ZbW%NWMPP@5y!j2 zN-yZ<2PxHB9cqgNH(@64rr|>YrHzqgcj|Y_E!FG-fKotQ-TuV&@p1 z0l{*_WL;_X`ihpiib`4cLA8!kIb!RBc5$piG+9uBN`KbWudAvt+sjFZJN=||X$7|# zCOamj{BxXK18bqGzP0?Du$#+iYH&vqx!WlCiLNUntI|j!n6(P22F(}dnYolQ#&q^F z)5G}B|AoK4v3(0CF|D|#yi}_%ub)^xbHTn7XC6>mx@6|e(m6#%3rhECW(MnEQ5Iwo z*36PD&U#oI{@uX307U>9EC750P!RvNu@LU-{~6uSnwXz8;9>hM36xuKy}n>hkC0sJ>YnKcj!5Kk}W2b_l|0ir>!MY(`DA+NnBEgQa z3ld8p*zd5e?zlJ*V~`}Eo5Elro68okh5Ua@xKQXD(zl2@qi0EJvFeNk=nP93=+-x; zc1A8)(El@*B(U(iVsG>(0qi}pqx_%Q4_+`#ncm1epLyQ(yy|)0^O)yu&rO~yJm+{$ z@gzJQo>ou2XSrv-XPRe%XShe#|DwOIzo!38e?q@czg53lKVLsp@6k8wN8u%3{r#u6 zK*>@BNM%HFjKCF}~T;A8JtZ}!fz z5XJ0mt5C$=v|>L>~-t;p}Sj%A?$Y+!n4&v==l01(|F427pgw~);)(lbH+e#z}0_$Tf301 zzWwJPO{=}K?!a6A@#nw1{NRsnWFPRWZ>@jlYoFFWcF*+Y_NKb?*K6P7S5G~+`JLNV zUbFqzUq9!OgZ8+Ky-!!){KN9qd(CNlh0PJe)avQ7QcG>^2TfbGW1qs zpNbE(mHcYg%m*$xKk(CsXWzNov9~| zj9(LehvBydKiK#htr^tgSBKwf{9qAi0sL0tw*tRf{A%#4#;*#$O8hGDTaMqM_#J{@ zIeyFVTZ-So_$|S2F@B5Wk6^k+IJ$@KrDy0_dI!CW-bwE!8bpg|5^bsj)rIOrb)z~` zU8&AgclrkU7WyXoHu^^TR`dJU0&c-7WHUl%A~;x&(i7s?k%P>Iy_^nYwa!(8HIE?e zv!M-crZbk{kXZamS>BY_BmDdYwT@Y7bcnZDw8=@Ha}1zf2$Y%=~^fg09vxNuY_vuUgmbXLL7 zSPiNHICqKu3jCT-UW5Mz;MlFezek|F8rP3tGXPbgZq5BZMc6fHuST>hwIH>q@Mo?; z%ZqkSr({0U44-s2?+Ii2L`# zprXHlC9M%F4b7VoVrY);JWCCNiZe259Y&A|Sc}pw5>YEjf=FG=3YBw_ijoKxl>$*x z>)wJ=Z6p>fMBi8&cKBjbb*u-gVg(ojDv(ut4iCt)0w7%MAr&Vl2+>BrmI8c_wQ4Ot zD2dH(n>G!ER4&ysU#S8IXAP?ez_09oh`_J@zG{L0&=%nKzy2}9|G)bCss;XUx4>zq z__W=%BF`D8l$2_WEjx5;S7h>*P@J-XmY2<$h4`*e6v54y_?4HfZK<8Pxa`nFyxwK? zp=7WNk;swBn__WnKUilz0+rik;?%{axwGdi-nd~4&Er&@JxnButzSG_%=?zf<5&5F zPi=uyb3*%Zd}=zF8n%}5YBM~RNZ|gIQQ^>XqM=EY>%dtFKNA>rRI{TpQ>RE2xnDaq{eG~5FyW7(}uZyEaL4BYTkmzbXILa z&`&k!uhvc{v5KWAftjSvxgtx`@>@*z4-pyk79$9ZygOGib8yI=o9^!XEu*u4$NoR4 C)RjB{ literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.c b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.c new file mode 100644 index 0000000..98066a9 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.c @@ -0,0 +1,63 @@ +/* + * File: FCC_Sys_New_harness_ca.c + * + * Abstract: Tests assumptions in the generated code. + */ + +#include "FCC_Sys_New_harness_ca.h" + +CA_HWImpl_TestResults CA_FCC_Sys_New_harness_HWRes; +CA_PWS_TestResults CA_FCC_Sys_New_harness_PWSRes; +const CA_HWImpl CA_FCC_Sys_New_harness_ExpHW = { + +#ifdef PORTABLE_WORDSIZES + + 8, /* BitPerChar */ + 16, /* BitPerShort */ + 32, /* BitPerInt */ + 32, /* BitPerLong */ + 64, /* BitPerLongLong */ + 32, /* BitPerFloat */ + 64, /* BitPerDouble */ + 64, /* BitPerPointer */ + 64, /* BitPerSizeT */ + 64, /* BitPerPtrDiffT */ + CA_LITTLE_ENDIAN, /* Endianess */ + CA_ZERO, /* IntDivRoundTo */ + 1, /* ShiftRightIntArith */ + +#else + + 8, /* BitPerChar */ + 16, /* BitPerShort */ + 32, /* BitPerInt */ + 32, /* BitPerLong */ + 64, /* BitPerLongLong */ + 32, /* BitPerFloat */ + 64, /* BitPerDouble */ + 32, /* BitPerPointer */ + 32, /* BitPerSizeT */ + 32, /* BitPerPtrDiffT */ + CA_LITTLE_ENDIAN, /* Endianess */ + CA_ZERO, /* IntDivRoundTo */ + 1, /* ShiftRightIntArith */ + +#endif + + 1, /* LongLongMode */ + 1, /* PortableWordSizes */ + "Intel->x86-32 (Windows32)", /* HWDeviceType */ + 0, /* MemoryAtStartup */ + 0, /* DenormalFlushToZero */ + 0 /* DenormalAsZero */ +}; + +CA_HWImpl CA_FCC_Sys_New_harness_ActHW; +void FCC_Sys_New_harness_caRunTests(void) +{ + /* verify hardware implementation */ + caVerifyPortableWordSizes(&CA_FCC_Sys_New_harness_ActHW, + &CA_FCC_Sys_New_harness_ExpHW, &CA_FCC_Sys_New_harness_PWSRes); + caVerifyHWImpl(&CA_FCC_Sys_New_harness_ActHW, &CA_FCC_Sys_New_harness_ExpHW, + &CA_FCC_Sys_New_harness_HWRes); +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.h b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.h new file mode 100644 index 0000000..4de5e10 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.h @@ -0,0 +1,25 @@ +/* + * File: FCC_Sys_New_harness_ca.h + * + * Abstract: Tests assumptions in the generated code. + */ + +#ifndef FCC_SYS_NEW_HARNESS_CA_H +#define FCC_SYS_NEW_HARNESS_CA_H + +/* preprocessor validation checks */ +#include "FCC_Sys_New_harness_ca_preproc.h" +#include "coder_assumptions_hwimpl.h" + +/* variables holding test results */ +extern CA_HWImpl_TestResults CA_FCC_Sys_New_harness_HWRes; +extern CA_PWS_TestResults CA_FCC_Sys_New_harness_PWSRes; + +/* variables holding "expected" and "actual" hardware implementation */ +extern const CA_HWImpl CA_FCC_Sys_New_harness_ExpHW; +extern CA_HWImpl CA_FCC_Sys_New_harness_ActHW; + +/* entry point function to run tests */ +void FCC_Sys_New_harness_caRunTests(void); + +#endif /* FCC_SYS_NEW_HARNESS_CA_H */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca_preproc.h b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca_preproc.h new file mode 100644 index 0000000..3e511ac --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca_preproc.h @@ -0,0 +1,55 @@ +/* + * File: FCC_Sys_New_harness_ca_preproc.h + * + * Abstract: Preprocessor checks for hardware implementation settings. + * + * Hardware Implementation Specification: + * + * HWDeviceType: Intel->x86-32 (Windows32) + * PortableWordSizes: on + * PreprocMaxBitsUint: 32 + * PreprocMaxBitsSint: 32 + * BitPerChar: 8 + * BitPerShort: 16 + * BitPerInt: 32 + * BitPerLong: 32 + * LongLongMode: on + * BitPerLongLong: 64 + */ + +#ifndef FCC_SYS_NEW_HARNESS_CA_PREPROC_H +#define FCC_SYS_NEW_HARNESS_CA_PREPROC_H +#ifndef PORTABLE_WORDSIZES + +/* make sure limits are available */ +#ifndef UCHAR_MAX +#include +#endif + +#if (UCHAR_MAX != (0xFFU)) || (SCHAR_MAX != (0x7F)) +#error Code was generated for compiler with different sized uchar/char. \ +Consider adjusting Hardware Implementation data type sizes to \ +match your compiler (defined in limits.h). +#endif + +#if (USHRT_MAX != (0xFFFFU)) || (SHRT_MAX != (0x7FFF)) +#error Code was generated for compiler with different sized ushort/short. \ +Consider adjusting Hardware Implementation data type sizes to \ +match your compiler (defined in limits.h). +#endif + +#if (UINT_MAX != (0xFFFFFFFFU)) || (INT_MAX != (0x7FFFFFFF)) +#error Code was generated for compiler with different sized uint/int. \ +Consider adjusting Hardware Implementation data type sizes to \ +match your compiler (defined in limits.h). +#endif + +#if (ULONG_MAX != (0xFFFFFFFFU)) || (LONG_MAX != (0x7FFFFFFF)) +#error Code was generated for compiler with different sized ulong/long. \ +Consider adjusting Hardware Implementation data type sizes to \ +match your compiler (defined in limits.h). +#endif + +/* Skipping ulong_long/long_long check: insufficient preprocessor integer range. */ +#endif /* !PORTABLE_WORDSIZES */ +#endif /* FCC_SYS_NEW_HARNESS_CA_PREPROC_H */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/coder_assumptions.h b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/coder_assumptions.h new file mode 100644 index 0000000..bb4abda --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/coder_assumptions.h @@ -0,0 +1,21 @@ +/* + * File: coder_assumptions.h + * + * Abstract: Coder assumptions header file + */ + +#ifndef CODER_ASSUMPTIONS_H +#define CODER_ASSUMPTIONS_H + +/* include model specific checks */ +#include "FCC_Sys_New_harness_ca.h" + +/* global results variable mapping for static code */ +#define CA_Expected_HWImpl CA_FCC_Sys_New_harness_ExpHW +#define CA_Actual_HWImpl CA_FCC_Sys_New_harness_ActHW +#define CA_HWImpl_Results CA_FCC_Sys_New_harness_HWRes +#define CA_PortableWordSizes_Results CA_FCC_Sys_New_harness_PWSRes + +/* entry point function mapping for static code */ +#define CA_Run_Tests FCC_Sys_New_harness_caRunTests +#endif /* CODER_ASSUMPTIONS_H */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.bat b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.bat new file mode 100644 index 0000000..fb9ed95 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.bat @@ -0,0 +1,15 @@ +@if not "%MINGW_ROOT%" == "" (@set "PATH=%PATH%;%MINGW_ROOT%") + + +call "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a\bin\win64\checkMATLABRootForDriveMap.exe" "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a" > mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness_ca.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness_ca.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.lib b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.lib new file mode 100644 index 0000000000000000000000000000000000000000..a6e2efe699708463d32c21875efd8416ad107ceb GIT binary patch literal 7078 zcmbtZeP~F9%3d;$In>CDT6s_hFz91Z{&~sQAP$S2$V6m&6vA-)_&*S z_oXj8As63wkACOebM8I&oOkcLK5#UY2v5G;(k+*lp1vdABVJEWpGTJQhhl%qa_0ylc7XROD0Fdp`mo_l$J~-*}$>U zS`y00kXDzejtpE#dgMmKY5slj*7HR3sitj!r~V^;nY^A{edUwseanHO$EM*1X5# z>F>vAdip(jk6_FAcbl>7j9qpx_AI9wnLDM;q&O`eDw zAAY7Ty2p~q`VxXOOLF50Eu1>98M0SE{1kTW#m_v8?nJraSqOACV2t|ssEeNk{qC7^ zx$VHOLe5^G&+neDmb(VIH*|f}kX*Od-jguKZdK`1{il`OM@sgAtjsr2hZDI)Wqz*= zN(YqOjRG;Y;x8!KTk_fW7v!!`G;%H$j!#X!cyP0k^+ zDYR(U%QL?IuEV`@$4DeL9>0)0+>Tgl1h2ew=szVUvj(BGOu(M6#CAyJ8M0#) zd#+N*I%?^$Gy2R?d@WXW&=H6*jv01{`+Y6s~8#Q*tE%(drUZ1(|5V6(X)93Bc;XYZ-`Zm-to7m$lxz5QwW)aTot_}%j;?||z3 zt{518R_8Z)q`cVo;d=Q^J-(`U6Zu`8PsSOG#3%z=SU&&@3Y^1-G%@j7$ z`?8t)QhIkbb5Ba|$Yws2(%Y_ahc{irDB#4qP*UPbN?b{aD=Bd$C9b5jwURs8%w3j( zl{+lGgS@)r?;XhkQFpn@iBVH*j8aVLjpqJ_T;h`ibHE!~XIW@ZIu z?!wGHM8H*rmU(cc(28t>ft9?!GrQK1mOR`jX~(8^)GY@uFCCVjNm)$8b3f7DY*f)sN3z( z)s)-)i6LdP`zsye9aIk*s7G`59zGZM3$sDar0`wI<3-6?5@$I?w?@$o4d;C%bT$hn zHPDHMGnWOEwB60CND^YA;mltMW*cYvy;$|5Le4AX&~Uk|ked`tF)}|I&YTcTx!6vC zSh!ZRgMqBmg69V0eBkQ*o;g|!6? z+p=qNswunXx3AYeA>t`gB868Ll4?ulL<`^4#@7Yswo zx9v}yZ`_!0{_BGYr~AgGod%WO_8uisvFSa_`6q=*YGCqYxygTHJA=s?yU9Q3n36Xv zGDH97mQ-Ph8dy?c=^1NnKIU4pvoyTD7CdCZ^tSQgZL^>knu55O5LDTvhjra|uoDMZ ze#5X!+%QzpzpjJVldp#l>3Uil=UN?4z0%;3R7ucdMAIm{#87!lU#|3ZMD3sO4x+mV zYX6Da4w_mgUbi05)b^m#tpv5hs0wIm)2OFFQ~Mj#AZTiz#eNb6P3;w&iRoKiFMfk~ z(i;{-kI|mNQR)DGG_oIq+Rdq-fqITpyD^G`oWg_cL>2cZf&!D@vpBd{1V(33LDBup zKHh`;BrrO03rYqhxa2v3b(j<#Y6O>jDY#yf@|j%nuHgDj>Q$4gnAk~^qD2*&X$3^z zGbZ(IlN&U#ag&-fxwJ~6@3cv!OfIdP;9fSVS(6KbeHm3^wZAxxh$A^>-l7wY@Phwi z>8V#DxYVa2F}dd55bIZCz+OkC*cC_${~Azn$xRV#A+LoZQHo;=8NvS(D4H!~ z_&bqlifMt6W(}1hTObMXe+M4lmJE4{qMQ(#31e@gQmk9ZI~-?>z8M`-GoJMJ6NUOz ze}7Y+K!vSTe}9vn^71I(-}bLXvfz-!t-M{6{Y#PFtq$oeJDbz?yEAdWMlzIhRfNv11kdn@@bjPbUgTAQ+}9Cm8rY|J+HMGRvd%wUs_zf<|A2(q zIW0wzscMNqZR&I^k|Jb4J$)iJ5oZ)`L)!U>cES8d&z4tOn~%gcWNY)lL~8!8sPazZ E|H}KxrT_o{ literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.mk b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.mk new file mode 100644 index 0000000..3697f05 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.mk @@ -0,0 +1,417 @@ +########################################################################### +## Makefile generated for Simulink model 'FCC_Sys_New_harness_ca'. +## +## Makefile : FCC_Sys_New_harness_ca.mk +## Generated on : Thu Jul 16 18:55:49 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./FCC_Sys_New_harness_ca.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = FCC_Sys_New_harness_ca +MAKEFILE = FCC_Sys_New_harness_ca.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../.. +COMPILER_COMMAND_FILE = FCC_Sys_New_harness_ca_comp.rsp +CMD_FILE = FCC_Sys_New_harness_ca.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = FCC_Sys_New_harness_ca.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./FCC_Sys_New_harness_ca.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DINTEGER_CODE=0 +DEFINES_CUSTOM = +DEFINES_OPTS = -DCA_CHECK_FLOATING_POINT_ENABLED=1 -DPORTABLE_WORDSIZES -DCA_CHECK_LONG_LONG_ENABLED=1 -DCA_CHECK_DAZ_ENABLED=1 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_hwimpl.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_flt.c $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = coder_assumptions_hwimpl.obj coder_assumptions_flt.obj FCC_Sys_New_harness_ca.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : %.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : %.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +coder_assumptions_hwimpl.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_hwimpl.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +coder_assumptions_flt.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_flt.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +FCC_Sys_New_harness_ca.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/FCC_Sys_New_harness_ca.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.obj new file mode 100644 index 0000000000000000000000000000000000000000..424889610de787fa03315edf46b41950bb264f10 GIT binary patch literal 1600 zcma)5&2G~`5FXblL;?W^Dt^RaRrSz{*i=b~P=&xHK-~inwFPr2iIZ$wqco0ew@o4r zl`2qsh}4JRgm?gsMO5NBI3RK0z!Ly7yAEBe3GGNb{&wcu*&okWf0qWbH#)#|fl^>b zyd4QFT?s!+8bAs;WVC`osbbdM$Q6;{&Vtf`Sq;PC44K&`UOnKoXp{H3y9nOnzN%R; zeP9O3jkl4I8NoBg=c6SSR4lWdoc9TNui|?2A>OULx{_i5hsWxb ztmpRLcYEh2vwNeoV1Dnw?u{`-alqdD{DTrF<@fEKL$>^7pBZk$TW!|-_4S$Y;%xbG zu~=U0gypAvtGwn0O&*42+gae@c;@zLxFu&%kaMRY&(lU&8%?5a=JNgJLI{mexnp*_5tPL!v#CADAl^XV@ej zt6az%EkE?yM#$HUfNy3q?7@cDh*-75o_NhU$8ZXH)(ZUB*l1I%VCKwefOA-93`a_M z>XH=PKz~J`3G`P5x{3a>K=c}tcNdZ5Jw$X(WGm}Rh^qc+n zAAnV{;3DRdHW^PfU@#(!CJ3rtDXnYtGPKW;samC$)d$s4bV@xxkfUf++(&zRv`LIq zeUbunt&Kjpp{mU@fpF{Nw7iAAYU=VDAZ*0uXe<_Inz+>NJFvOdoGZzLl< zj4&K@W*PZ_=p_y^8Tl$F=<#0&{4Ejrg)@2oiEg(GgQQw>&DxN}!bWq6hf%1O_@Cfm vNKz_%SoTr7Wjn)?Lhn#>U+}6H8+a;pvQ_(6Tq>+tPn!B7`Hg*? zg5CWBUn}t&Yg*_U$~_k6*9>%X3U+hl_w!ZaH+>bt|2)Kp|B)R3BLyW{S*6E{{L)g= zQvCm)?JpV0|7)bW1`O9Tv+EvKwB_RHm`B?0qdrF3A4|*FbF05dy~wm6KWj5TH-~}U z!|5dCoPlB(MHXPJ11n*E&!xtHt}YE>uZFOWc*GTq-(saay~{t=p|2B|YK$f+wV~Pl z&v_8(f6k9y7#RIfXDnvo56sBO3p?LWUI#F8B@0JWJr*u0XerL2TY7!uYepyrjDviZ zzC69F?Pn;xGPV?s9Df64AVKm(`?i;SS%?)>s+Md1`vsS6ysP%~g(>hg%=ohKpUm*N zyl_Rl-rW0_Il}5yKU`Vb9z*y4K4scAHhipkYywD5E*D57Aup6-Q<4pM@@C)UEwkX% zxQJus?`Mklm*J5wbDSlqg9}YVppt~|nr*`=C_?E6PHP3T0 zferrHDTCinn6W=C%qu2Dlc;4<(vyBV|8rla5&KrUD=~|iHHU$WfGzHijM0l+HZn6M zllN*)55D&t!>8MP_Fd7lkB`vyzxAS8pu)Qk;*T;k{L24?+=+0@j@Y?W+ELj{Q*4ZQ z9^a1@g-4JM5e$kei0UXrc-Q=QIO)Z*HW~sylbPl8hO^NYuN9(7F;JDQ#LkyjhT$G} zk=9!uE=zGhk^~PWBpTt>?e>eIUe-HIeABhkn4M~8mm+uopXWeQ)=Qm!~ z?uMewro1G{O%zxE8NU2KL!JLMBynb=xaF8|#u;Nt`uzF;=z>6of!faQB@WKMq8XAT zA28!%K@9RTCRHXnlLljkW>Zo!(*`5rCbuTX^oAuR=WmewYh(2N&viHZf5+i(UScTs z9OuB=Ptp27WRBbD%I`p=nK`s&RqMUm%i`(dEZJAhO(pp)J5vHwJha09-cK>>NOeJl z8Of-Gv*TAI{dA+_d+v;>q$Ql6miJ# zA~MZsq^`AOSSRxG%_ehC;uh{oTOyRVggE+(2wY~!-Mv8R9DW8Ns(|mk{(c4`Nd(+; zuxQ73RwACh^U7adwJNzT-Y(qcoffu3=pg;uJ=TO}1S>i!R=sR;#JFn9ea*|Wj&khW zewSH6Lv^5PEAGjneZzSdB@|s|1s{kLo(7ldN;Z( z=Y!MA-A3b=eDzdW_dg^*4N5o843T&S6?+jeDEnrZx6RE4xY$A`+w00uXz)kD+D#9p zc2L{A?`~d~Y~6C4<52T$Zba@VfGc%=s&>M2K0EycGOL`JZjDP7+VrAdjW8XS6RPX? z$9+|=dEs&(+WNz=wMOK!m_le}1L{1tgx3ZtQB^J|=kct>g*X_j{&t$n(#k4k34q%D z@We>Ml~jvgpxHE!%?I*U1#E(s{`dy-Irvw6kyi~VKVT9z2q|cM{aQP>Aa(1Y;_Jg| z!v!}tTkzoNd>>wb%dN1T><{&et@Fj%I)MvKaQR|lQv}tak^2>AEg%=Y*F-2=o!M_e zy8)4E7~ZGAypm@Hga6b_M_nS+!ov+o=V10avi0mHX@|hCgJ_WHRs^^@KvhA~mhYNo zDC0uByQX_hw=Ni~1Aq_aU}~vewtR-N^^lKTh-WX-4nJ27qNlHAj%!)`T28-~jb!VM zu4TPzDf!x=$TgkpWm~E*Tc3L!=jAp1_1fa`A`bYtI4`PV@}o8Bj7K%l@F_vu8Kzdq zQIC8^i`ZlAL$~#xgy+&NW7X`<;a}Tku8~d zYSp{jRfxs3BU%%Pov1|%DkA4z3s?ldmyRHOxK(Pva80bYJo6-|?zSMj2*8~dc`riO zL5sZShBEvKYOTdyS(}+^71z5==652Ws0|mY;)xQwxptF_NAJ@uxL69m7}lneq>)CT zu;KoM2Z^-rye??dJ+X>mrCZM5WkDCYiexjbSfV?-g1426u^t6 zN|hu937&lEF(Ly=Z;eKmlHpC)D@g&xr!vu{RCw`q4|2XvKQa*gNl=U=CCI)XSHQ4L zw$4TdeGqFyyUetnLk1O(wV_|8UNK64qLme5m2bc_W0vTb83Yx0VCL)Zd%g%NP}$z`SC00ESXz+7`l1g>CgMYmT(>G> zpwW{ga2aP?N(FY9xPOP^@=7X_48(8(xIyq=hdAOhd-!hRr+cnb@I4hkkKKwP-aY|P z5bmb}NU_W@04i)&3?SjOk_^msQb`V`IEmy0-#hUj1n~rB{BlUT$d?0p)v&e zb>t1g!*wJDfp>6?1`q66W5AR55OY-AW{H;AHD>!r7~7dpa|Yj6+)y!t%N6Nh1jpco zP%8RX(PVTa3k*Pt@z{-|je^7>CC4xpC#s~~_w$h=C#rPa@JDNFy%<_-iCgzx4@L!R z@7T@Wi($gryLVgkU_`O@F5QS;3FYVH-6G`y^tz*=>Ocn4Uo(@I4iF42(zy-Dd8K-okL~1XGXWK;fGk5}C z1tx#d)0NqlPS;T&FZ z8{G^g>@&?L;oqsHEy$twHp3rrb-MH@o70rCZzc5|`l|RdM~h7d0-1X)sJnHok5%r) zHPA-AbmV<0G#{c=dq``ESjd3#ZI3%0DlvOC37+j~fE2eSqwxtD-;;JG;}-Er_<;=g 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/coder_assumptions_flt.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/coder_assumptions_flt.obj new file mode 100644 index 0000000000000000000000000000000000000000..5a29b9c952761538e6e42a6fb8c53e9856495c59 GIT binary patch literal 541 zcmYdkV_^UR7DfgJ9x#iQL9ZmWq6EywO(-w~Bjq+Q)Vc4uk~ zE(FGi>k^2d4}uShPht^NP%DB-tR$l13Vq0fNFFLIY{jS*qsFY?xp)3{)7F96^UZg@ zd(OS*o|&B)d+}OEN9Q)ix;ScP5nY?mITk;&t&BbIW9-fA#dR}Gh^fPovA7=h=z_po zuk#Rq5>w|QBl&ziyZLI0bYnSfR6niR-cEqdP4S|0k%{`mFF+UDtdk%)wiZ=`04%Cy4seil`Kib|C77 zTCE2E{902{UIUm>{nK*+WdXzk@><~4xxhzd3RG01i}E+LwTp83FFvST8u;e*KmS4k zP=D7`YoPwAr!HaqIw*LyAWTVi#;=09rk=V8s->Q)fNDs50aQcc6;KU{e=rN{8^*n6 zVQs_MYZfkT7M{K_@@S3}C;j=ZkD)0SUs}&dcRtC@3Kvmvw z8MPTytyU>|s8&Ip_E1}u(m=5Cip_KsgJOEUJo(~0k0IM`^h|IT-8t-bC-3A{S`4+6 zd>-$$IDBjf-wC<}bMEhJV3w84qVni_y+#v8iAa@wSvrw{1AJ(T7<<)ANxK^xd zYZXzf^9XL(urhO|YYGE!o6X@iTRL2n=^mO}lw!P4fF&u0O}q>2l7Ksv(($qg``rem z@mIHViWXY=QBYLP@Do;=m?upcX_k>@1s!lkp=};0SK4s5Awjt$b(?EVMhJLWV7(oo zS41|GhweXCJ?8oi;it(~rfq+W$5Oj3*?kL^3L;jy*;egvBi~_hVnCSYAmY;gS9*k3 z<#{nj`2F69U!jeZV!v9o@`kN2^?Bd6Ri3=>TO1#tMqv;h=J-l+zS1eu4s$29Z@GjA zC3pF_%P)pCi(xR__mha(Dx72x6NWpNgp;BzmsH#&hQcZIWqJEdOi`hKD76*?HM zGllMyaEh5pFx)vVoS|wL5n|)ooB=koP8(kA50&IIGwsu~FO;IFwsYc3m!Qd%ODcAQ zI-wZslnnJnN(!D(cPP0c~o62-7TkthtgM#JSb7U*j3n0ZjI1oL#_V19;pyT`4u)qKQP-cUA|c^WUhcZB*PcSmSq4aYIOO6>;M%-#ap z$q2s*3Oi9n|i4sZPR6Z`=Zf94}Q)aA610OO1$3 zQx;x&ITk49c&WOAlN|K0<5e8)u!B^`OFJOO9&^x>j(6DM#vF9Y@zO4du~`S{j+gdL zc%OIBl;Z_px8d}$$ao^D(It)zyilE_Tixk6!i?p#crukpbBy*v{nJM3KtdNEJU$j; zem;r|>V9bT)U{m0J&)s;dRQ>JmeZIGOu%_uW(!tPhSt9M_}HSz>-RmlSpa4Mr(F?I=Wi_?RaGz-EQU-I`yIbx23?brlQxXxwDGK- zi;QXMOfD5qK9ql4%VpSTW=zYSK;Iatte(iE^CwO{n@DAokx_P1)2TC6EjOU0j;0ej zG5zY%L+SAhqjnqAPA9Zy*=YPREteR7PR-=>_()P4%H+n5Bqp`I<57kVA>{we#4~00 N&jVvFJMD&5{0D_g+jRf{ literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/compileInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..26077d8b7baa54985014e400bc89017aa97b8dce GIT binary patch literal 2020 zcma)-doLl$8Gb>MGMW=EHpk1;6=aI}yrcXC@QBD4tetTF?;t4ey16i9>+tF0*LbhwLlyOiGp%p z+Q=eJgBD>o)3QX2teB*j{Mb0r_97y1;dt7yLbDdv!lhuh^TRCH{$Mxv!ca~E1OPdG zXptUiYVa%491=i~;ixTrPz@Md5A)wdHpUh@~%94 zS8}6eKQjOJfdovMC36P5EcKBZ@Q5au&-pc;C=^}Sr*m%Fy^!DC-JnF^D|C|X1)G@) zC4!czV@HwFcB0B%WCC{uj<>Hg+`K4!s;Y825_9Qd^Zb5IRFvp56OUn_&yVA{cM)4W z7!SLJ&3{$xP`Sh5=4+x`BV0?{v|5&ES!7ocTQTvJ$tTfQv0AfL{S5=?U|6OCST5he2hz_r6{hQ20;-q)m|q=R#hWZp}} zb6IWsA!)9Cyv<**%|ljJIGar@?py);d#KpQ>6rT4EibrtQS&)BQb)%v8%n?6{JrYU znr>(o4V?H62x))re1tB#<9i?)O6;Z7$%ms9D_%c6TMe&RayZ8esy&-zdbIRks*)pH zPmJT9T0MBUu)C)gJS}i8cKtE09T`!oGY%NS*y|TKGk@yy}vo1-g z=CDw83RG&aM(nP1`%`Y>0;QvJ`IpC3&jwbG zwY5Y)jLJis{&4Z+n_zEw*V+oZB=9YT_em&{wnVj^n1cKStC?O;?#zo6)f02**TT@f zw<$fRrb8}?_EpEHJS2E#om14uBdWesRL;kXH(e8tbQ=65k2lfR`{_GfZ|f8&ZoLOh z6LJh(N{3PE!LUjb#i_;MGbMli!6R)S?`fnelkw7zZdz;{Jm{S3G-ap(kaC@CGgxSV=Og8~zU8cp9CTM4^dWEGzEoS-&o}zm2GYGZ7E0tj99mavycnRxbr>v>r z7$gZ~M;=rhzx`J?vNpf2f>8Lksze%|zNh3_=Zlw~v$Y!Nl=th)B@xJI))9oUf|ez3Tgj2`&tqZg!6caI?w^_TpS!f_5f z4+p$h4&duEW^ZJ?KFHEhP_=1>0wbH0A{TZpmKbgh_9&pqk`b-_Mi}X&J~4?JCNM2-riwMOa5O zTQiGvcJM)K1|=4roF&Z;L*1`mPFVxXpkb#8s9b`E4{o7TLV;wvk;5&|TNn#NZ{1tI zLV{^9RQa~kfEaVnejAKvN=0n<`n#yMyY%a+HsB?6I>x1{)2tMV*TH`n( zN&3B3Ov0J3I0_oC^0oDO1dP!IEty0z;M2uGRy7i(w`FbEvOd^4zF&zvsf9u(o%ALX z$vdgt1Pbw=0nR4%g}E}5?L?S*NT)>TBux^$si=b1)SdDMxN2w8rROm>c)zaL-*^() zq_XX6hk%I>xa)<8>(&m#hH5>;)RdP`YiNQ_0%V+Vs2)ZCA1I}C65kF|iFhhex%ukv zaU=jD8AZ@@2pgQ%_bIM7%ROKlcZf!yP;ba(GUM%Nz-tXQ@}F)||8*qF{}5zi@cu{$ zIL*SCgISSD;i-ZwyTA^BTh(xR_g$IH!Vtj58h@_m%x}0I*|-dSA1=chlrsXV;4>6b z=Ifm06Li~ex86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include +#include /* This ert_main.c example uses printf/fflush */ +#include "FCC_Sys_New_harness.h" /* Model's header file */ +#include "rtwtypes.h" +#include "model_reference_types.h" + +/* + * Associating rt_OneStep with a real-time clock or interrupt service routine + * is what makes the generated code "real-time". The function rt_OneStep is + * always associated with the base rate of the model. Subrates are managed + * by the base rate from inside the generated code. Enabling/disabling + * interrupts and floating point context switches are target specific. This + * example code indicates where these should take place relative to executing + * the generated code step function. Overrun behavior should be tailored to + * your application needs. This example simply sets an error status in the + * real-time model and returns from rt_OneStep. + */ +void rt_OneStep(void); +void rt_OneStep(void) +{ + static boolean_T OverrunFlags[3] = { 0, 0, 0 }; + + static boolean_T eventFlags[3] = { 0, 0, 0 };/* Model has 3 rates */ + + static int_T taskCounter[3] = { 0, 0, 0 }; + + /* Disable interrupts here */ + + /* Check base rate for overrun */ + if (OverrunFlags[0]) { + rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun"); + return; + } + + OverrunFlags[0] = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + + /* + * For a bare-board target (i.e., no operating system), the + * following code checks whether any subrate overruns, + * and also sets the rates that need to run this time step. + */ + if (taskCounter[2] == 0) { + if (eventFlags[2]) { + OverrunFlags[0] = false; + OverrunFlags[2] = true; + + /* Sampling too fast */ + rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun"); + return; + } + + eventFlags[2] = true; + } + + taskCounter[1]++; + if (taskCounter[1] == 1) { + taskCounter[1]= 0; + } + + taskCounter[2]++; + if (taskCounter[2] == 10) { + taskCounter[2]= 0; + } + + /* Set model inputs associated with base rate here */ + + /* Step the model for base rate */ + FCC_Sys_New_harness_step0(); + + /* Get model outputs here */ + + /* Indicate task for base rate complete */ + OverrunFlags[0] = false; + + /* If task 1 is running, don't run any lower priority task */ + if (OverrunFlags[1]) { + return; + } + + /* Step the model for subrate */ + if (eventFlags[2]) { + OverrunFlags[2] = true; + + /* Set model inputs associated with subrates here */ + + /* Step the model for subrate 2 */ + FCC_Sys_New_harness_step2(); + + /* Get model outputs here */ + + /* Indicate task complete for subrate */ + OverrunFlags[2] = false; + eventFlags[2] = false; + } + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ +} + +/* + * The example "main" function illustrates what is required by your + * application code to initialize, execute, and terminate the generated code. + * Attaching rt_OneStep to a real-time clock is target specific. This example + * illustrates how you do this relative to initializing the model. + */ +int_T main(int_T argc, const char *argv[]) +{ + /* Unused arguments */ + (void)(argc); + (void)(argv); + + /* Initialize model */ + FCC_Sys_New_harness_initialize(); + + /* Attach rt_OneStep to a timer or interrupt service routine with + * period 0.001 seconds (the model's base sample time) here. The + * call syntax for rt_OneStep is + * + * rt_OneStep(); + */ + printf("Warning: The simulation will run forever. " + "Generated ERT main won't simulate model step behavior. " + "To change this behavior select the 'MAT-file logging' option.\n"); + fflush((NULL)); + while (rtmGetErrorStatus(FCC_Sys_New_harness_M) == (NULL)) { + /* Perform other application tasks here */ + } + + /* Disable rt_OneStep() here */ + return 0; +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_CInterface_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_CInterface_h.html new file mode 100644 index 0000000..919c423 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_CInterface_h.html @@ -0,0 +1,62 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#ifndef CodeInstrTgtAppSvc_CInterface_h
    4#define CodeInstrTgtAppSvc_CInterface_h
    5
    6#include "CodeInstrTgtAppSvc.h"
    7
    8CODEINSTRTGTAPPSVC_API_EXTERN_C uint8_T codeInstrTgtAppSvcCreate(void);
    9
    10CODEINSTRTGTAPPSVC_API_EXTERN_C void codeInstrTgtAppSvcDestroy(void);
    11
    12CODEINSTRTGTAPPSVC_API_EXTERN_C uint8_T codeInstrTgtAppSvcAllocBuffer(void** ppBuf,
    13 const uint16_T size);
    14
    15CODEINSTRTGTAPPSVC_API_EXTERN_C IOUnit_T* codeInstrTgtAppSvcGetBufferDataPtr(void* pBufVoid);
    16
    17CODEINSTRTGTAPPSVC_API_EXTERN_C uint8_T codeInstrTgtAppSvcSend(void* pBufVoid,
    18 const uint16_T payloadSize);
    19
    20CODEINSTRTGTAPPSVC_API_EXTERN_C uint16_T codeInstrTgtAppSvcGetMaxPayloadCapacity(void);
    21
    22#endif
    23
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_h.html new file mode 100644 index 0000000..ca40391 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/CodeInstrTgtAppSvc_h.html @@ -0,0 +1,62 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#ifndef CodeInstrTgtAppSvc_h
    4#define CodeInstrTgtAppSvc_h
    5
    6#include "CodeInstrTgtAppSvc_spec.h"
    7#include "rtwtypes.h"
    8
    9#if defined (USING_CS_API) || defined(BUILDING_LIBMWCODER_CODEINSTRTGTAPPSVC)
    10
    11 typedef uint8_T IOUnit_T;
    12#else
    13
    14 #include "xilcomms_rtiostream.h"
    15#endif
    16
    17static const boolean_T CODEINSTRTGTAPPSVC_ERROR = 0;
    18static const boolean_T CODEINSTRTGTAPPSVC_SUCCESS = 1;
    19
    20#define CODEINSTR_RTIOSTREAM_BASED_SERVICE_ID 2
    21
    22#endif
    23
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/CoderAssumpTgtAppSvc_CInterface_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/CoderAssumpTgtAppSvc_CInterface_h.html new file mode 100644 index 0000000..7f48873 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/CoderAssumpTgtAppSvc_CInterface_h.html @@ -0,0 +1,86 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#ifndef CoderAssumpTgtAppSvc_CInterface_h
    4#define CoderAssumpTgtAppSvc_CInterface_h
    5
    6#include "CoderAssumpTgtAppSvc_spec.h"
    7#include "rtwtypes.h"
    8
    9#if defined (USING_CS_API) || defined(BUILDING_LIBMWCODER_CODERASSUMPTGTAPPSVC)
    10 typedef uint8_T IOUnit_T;
    11#else
    12 #include "xilcomms_rtiostream.h"
    13#endif
    14
    15#define CODERASSUMP_RTIOSTREAM_BASED_SERVICE_ID 3
    16
    17static const uint8_T CODERASSUMPTGTAPPSVC_ERROR = 0;
    18static const uint8_T CODERASSUMPTGTAPPSVC_SUCCESS = 1;
    19
    20CODERASSUMPTGTAPPSVC_API_EXTERN_C uint8_T coderAssumpTgtAppSvcCreate(void);
    21
    22CODERASSUMPTGTAPPSVC_API_EXTERN_C void coderAssumpTgtAppSvcDestroy(void);
    23
    24CODERASSUMPTGTAPPSVC_API_EXTERN_C uint8_T coderAssumpTgtAppSvcAllocBuffer(void** ppBuf,
    25 const uint16_T size);
    26
    27CODERASSUMPTGTAPPSVC_API_EXTERN_C IOUnit_T* coderAssumpTgtAppSvcGetBufferDataPtr(void* pBufVoid);
    28
    29CODERASSUMPTGTAPPSVC_API_EXTERN_C uint8_T coderAssumpTgtAppSvcSend(void* pBufVoid,
    30 const uint16_T payloadSize);
    31
    32CODERASSUMPTGTAPPSVC_API_EXTERN_C uint16_T coderAssumpTgtAppSvcGetMaxPayloadCapacity(void);
    33
    34#endif
    35
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_422a9dcd7331f0d8.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_422a9dcd7331f0d8.html new file mode 100644 index 0000000..c8c9f48 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_422a9dcd7331f0d8.html @@ -0,0 +1,391 @@ + + + + + +Code Execution Profiling Report for FCC_Sys_New_harness + + + + +

    +Code Execution Profiling Report for FCC_Sys_New_harness +

    +

    The code execution profiling report provides metrics based on data collected from a SIL or PIL execution. Execution times are calculated from data recorded by instrumentation probes added to the SIL or PIL test harness or inside the code generated for each component. See Code Execution Profiling for more information.

    +

    +1. Summary +

    + + + + + + +
    + + + + + + + + + + + + + + + + +
    Total time270.064
    Unit of timeµs
    Commandreport(executionProfile, 'Units', 'seconds', 'ScaleFactor', '1e-06', 'NumericFormat', '%0.3f');
    Timer frequency (ticks per second)3.501e+09
    Profiling data created16-Jul-2020 18:56:21
    + +
    +

    +2. Profiled Sections of Code +

    + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + +
    + +Section + + + + +Maximum Execution Time in µs + + + + +Average Execution Time in µs + + + + +Maximum Self Time in µs + + + + +Average Self Time in µs + + + + +Calls + + + + + + + +
    + +
    + + + + + + +
    + + + + + + + + + + + + +
    +     FCC_Sys_New_harness_initialize + +18.402 + +18.402 + +18.402 + +18.402 + +1 + + +
    + +
    + +
    + + + + + + + + + + +
    + + + + + + + + + + + + +
    +[+] FCC_Sys_New_harness_step0 [0.001 0] + +10.800 + +0.783 + +10.567 + +0.488 + +272 + + +
    + +
    + + + + + + + + +
    + +
    + + + + + + + + + + +
    + + + + + + + + + + + + +
    +[+] FCC_Sys_New_harness_step2 [0.01 0] + +1.998 + +1.386 + +0.290 + +0.121 + +28 + + +
    + +
    + + + + + + + + +
    + +
    + + +
    +

    +3. CPU Utilization +

    + + + + + + +
    + + + + + + + + + + + + + + + + +
    Task +Average CPU Utilization +Maximum CPU Utilization +
    FCC_Sys_New_harness_step0 [0.001 0]0.07826%1.08%
    FCC_Sys_New_harness_step2 [0.01 0]0.01386%0.01998%
    Overall CPU Utilization0.09212%1.1%
    + +
    +

    +4. Definitions +

    + + + + + + +
    +

    CPU Utilization: Percentage of CPU time assigned to a task. Computed by dividing task execution time by sample time.

    Execution Time: Time between start and end of code section.

    Self Time: Execution time, excluding time in child sections.

    +
    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_a4de9061c63ba255.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_a4de9061c63ba255.html new file mode 100644 index 0000000..ba6ce22 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/ExecutionProfiling_a4de9061c63ba255.html @@ -0,0 +1,391 @@ + + + + + +Code Execution Profiling Report for FCC_Sys_New_harness + + + + +

    +Code Execution Profiling Report for FCC_Sys_New_harness +

    +

    The code execution profiling report provides metrics based on data collected from a SIL or PIL execution. Execution times are calculated from data recorded by instrumentation probes added to the SIL or PIL test harness or inside the code generated for each component. See Code Execution Profiling for more information.

    +

    +1. Summary +

    + + + + + + +
    + + + + + + + + + + + + + + + + +
    Total time270064
    Unit of timens
    Commandreport(executionProfile, 'Units', 'seconds', 'ScaleFactor', '1e-09', 'NumericFormat', '%0.0f');
    Timer frequency (ticks per second)3.501e+09
    Profiling data created16-Jul-2020 18:56:21
    + +
    +

    +2. Profiled Sections of Code +

    + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + +
    + +Section + + + + +Maximum Execution Time in ns + + + + +Average Execution Time in ns + + + + +Maximum Self Time in ns + + + + +Average Self Time in ns + + + + +Calls + + + + + + + +
    + +
    + + + + + + +
    + + + + + + + + + + + + +
    +     FCC_Sys_New_harness_initialize + +18402 + +18402 + +18402 + +18402 + +1 + + +
    + +
    + +
    + + + + + + + + + + +
    + + + + + + + + + + + + +
    +[+] FCC_Sys_New_harness_step0 [0.001 0] + +10800 + +783 + +10567 + +488 + +272 + + +
    + +
    + + + + + + + + +
    + +
    + + + + + + + + + + +
    + + + + + + + + + + + + +
    +[+] FCC_Sys_New_harness_step2 [0.01 0] + +1998 + +1386 + +290 + +121 + +28 + + +
    + +
    + + + + + + + + +
    + +
    + + +
    +

    +3. CPU Utilization +

    + + + + + + +
    + + + + + + + + + + + + + + + + +
    Task +Average CPU Utilization +Maximum CPU Utilization +
    FCC_Sys_New_harness_step0 [0.001 0]0.07826%1.08%
    FCC_Sys_New_harness_step2 [0.01 0]0.01386%0.01998%
    Overall CPU Utilization0.09212%1.1%
    + +
    +

    +4. Definitions +

    + + + + + + +
    +

    CPU Utilization: Percentage of CPU time assigned to a task. Computed by dividing task execution time by sample time.

    Execution Time: Time between start and end of code section.

    Self Time: Execution time, excluding time in child sections.

    +
    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_c.html new file mode 100644 index 0000000..8b5723f --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_c.html @@ -0,0 +1,1156 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: FCC_Sys_New_harness.c
    7 *
    8 * Code generated for Simulink model 'FCC_Sys_New_harness'.
    9 *
    10 * Model version : 1.91
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:26 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#include "FCC_Sys_New_harness.h"
    23
    24/* Private macros used by the generated code to access rtModel */
    25#ifndef rtmIsMajorTimeStep
    26# define rtmIsMajorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MAJOR_TIME_STEP)
    27#endif
    28
    29#ifndef rtmIsMinorTimeStep
    30# define rtmIsMinorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MINOR_TIME_STEP)
    31#endif
    32
    33#ifndef rtmSetTPtr
    34# define rtmSetTPtr(rtm, val) ((rtm)->Timing.t = (val))
    35#endif
    36
    37/* Used by FromWorkspace Block: '<S1>/FromWs' */
    38#ifndef rtInterpolate
    39# define rtInterpolate(v1,v2,f1,f2) (((v1)==(v2))?((double)(v1)): (((f1)*((double)(v1)))+((f2)*((double)(v2)))))
    40#endif
    41
    42#ifndef rtRound
    43# define rtRound(v) ( ((v) >= 0) ? floor((v) + 0.5) : ceil((v) - 0.5) )
    44#endif
    45
    46rtTimingBridge FCC_Sys_New_harness_TimingBrdg;
    47
    48/* Block signals and states (default storage) */
    49DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW;
    50
    51/* External outputs (root outports fed by signals with default storage) */
    52ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y;
    53
    54/* Real-time model */
    55RT_MODEL_FCC_Sys_New_harness_T FCC_Sys_New_harness_M_;
    56RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M =
    57 &FCC_Sys_New_harness_M_;
    58
    59/* Model step function for TID0 */
    60void FCC_Sys_New_harness_step0(void) /* Sample time: [0.0s, 0.0s] */
    61{
    62 real_T v;
    63
    64 /* Update the flag to indicate when data transfers from
    65 * Sample time: [0.001s, 0.0s] to Sample time: [0.01s, 0.0s] */
    66 FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2 =
    67 (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 0);
    68 (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2)++;
    69 if ((FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2) > 9) {
    70 FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 = 0;
    71 }
    72
    73 /* FromWorkspace: '<S1>/FromWs' */
    74 {
    75 real_T *pDataValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr;
    76 real_T *pTimeValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr;
    77 int_T currTimeIndex = FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex;
    78 real_T t = FCC_Sys_New_harness_M->Timing.t[0];
    79
    80 /* Get index */
    81 if (t <= pTimeValues[0]) {
    82 currTimeIndex = 0;
    83 } else if (t >= pTimeValues[11]) {
    84 currTimeIndex = 10;
    85 } else {
    86 if (t < pTimeValues[currTimeIndex]) {
    87 while (t < pTimeValues[currTimeIndex]) {
    88 currTimeIndex--;
    89 }
    90 } else {
    91 while (t >= pTimeValues[currTimeIndex + 1]) {
    92 currTimeIndex++;
    93 }
    94 }
    95 }
    96
    97 FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = currTimeIndex;
    98
    99 /* Post output */
    100 {
    101 real_T t1 = pTimeValues[currTimeIndex];
    102 real_T t2 = pTimeValues[currTimeIndex + 1];
    103 if (t1 == t2) {
    104 if (t < t1) {
    105 {
    106 int_T elIdx;
    107 for (elIdx = 0; elIdx < 27; ++elIdx) {
    108 (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] =
    109 pDataValues[currTimeIndex];
    110 pDataValues += 12;
    111 }
    112 }
    113 } else {
    114 {
    115 int_T elIdx;
    116 for (elIdx = 0; elIdx < 27; ++elIdx) {
    117 (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] =
    118 pDataValues[currTimeIndex + 1];
    119 pDataValues += 12;
    120 }
    121 }
    122 }
    123 } else {
    124 real_T f1 = (t2 - t) / (t2 - t1);
    125 real_T f2 = 1.0 - f1;
    126 real_T d1;
    127 real_T d2;
    128 int_T TimeIndex= currTimeIndex;
    129
    130 {
    131 int_T elIdx;
    132 for (elIdx = 0; elIdx < 27; ++elIdx) {
    133 d1 = pDataValues[TimeIndex];
    134 d2 = pDataValues[TimeIndex + 1];
    135 (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = (real_T) rtInterpolate
    136 (d1, d2, f1, f2);
    137 pDataValues += 12;
    138 }
    139 }
    140 }
    141 }
    142 }
    143
    144 /* DataTypeConversion: '<S2>/Cast1' */
    145 v = fabs(FCC_Sys_New_harness_DW.FromWs[0]);
    146 if (v < 4.503599627370496E+15) {
    147 if (v >= 0.5) {
    148 v = floor(FCC_Sys_New_harness_DW.FromWs[0] + 0.5);
    149 } else {
    150 v = 0.0;
    151 }
    152 } else {
    153 v = FCC_Sys_New_harness_DW.FromWs[0];
    154 }
    155
    156 if (v < 32768.0) {
    157 if (v >= -32768.0) {
    158 FCC_Sys_New_harness_DW.Cast1 = (int16_T)v;
    159 } else {
    160 FCC_Sys_New_harness_DW.Cast1 = MIN_int16_T;
    161 }
    162 } else {
    163 FCC_Sys_New_harness_DW.Cast1 = MAX_int16_T;
    164 }
    165
    166 /* End of DataTypeConversion: '<S2>/Cast1' */
    167
    168 /* DataTypeConversion: '<S2>/Cast2' */
    169 v = fabs(FCC_Sys_New_harness_DW.FromWs[1]);
    170 if (v < 4.503599627370496E+15) {
    171 if (v >= 0.5) {
    172 v = floor(FCC_Sys_New_harness_DW.FromWs[1] + 0.5);
    173 } else {
    174 v = 0.0;
    175 }
    176 } else {
    177 v = FCC_Sys_New_harness_DW.FromWs[1];
    178 }
    179
    180 if (v < 32768.0) {
    181 if (v >= -32768.0) {
    182 FCC_Sys_New_harness_DW.Cast2 = (int16_T)v;
    183 } else {
    184 FCC_Sys_New_harness_DW.Cast2 = MIN_int16_T;
    185 }
    186 } else {
    187 FCC_Sys_New_harness_DW.Cast2 = MAX_int16_T;
    188 }
    189
    190 /* End of DataTypeConversion: '<S2>/Cast2' */
    191
    192 /* DataTypeConversion: '<S2>/Cast3' */
    193 v = fabs(FCC_Sys_New_harness_DW.FromWs[2]);
    194 if (v < 4.503599627370496E+15) {
    195 if (v >= 0.5) {
    196 v = floor(FCC_Sys_New_harness_DW.FromWs[2] + 0.5);
    197 } else {
    198 v = 0.0;
    199 }
    200 } else {
    201 v = FCC_Sys_New_harness_DW.FromWs[2];
    202 }
    203
    204 if (v < 32768.0) {
    205 if (v >= -32768.0) {
    206 FCC_Sys_New_harness_DW.Cast3 = (int16_T)v;
    207 } else {
    208 FCC_Sys_New_harness_DW.Cast3 = MIN_int16_T;
    209 }
    210 } else {
    211 FCC_Sys_New_harness_DW.Cast3 = MAX_int16_T;
    212 }
    213
    214 /* End of DataTypeConversion: '<S2>/Cast3' */
    215
    216 /* ModelReference: '<S4>/FCC_New' incorporates:
    217 * Outport: '<Root>/Actuator1'
    218 * Outport: '<Root>/Actuator2'
    219 * Outport: '<Root>/Actuator3'
    220 */
    221 FCC_NewTID0(&FCC_Sys_New_harness_DW.Cast1, &FCC_Sys_New_harness_DW.Cast2,
    222 &FCC_Sys_New_harness_DW.Cast3, &FCC_Sys_New_harness_Y.Actuator1,
    223 &FCC_Sys_New_harness_Y.Actuator2, &FCC_Sys_New_harness_Y.Actuator3);
    224
    225 /* RateTransition: '<S2>/Sync4' incorporates:
    226 * RateTransition: '<S2>/Sync10'
    227 * RateTransition: '<S2>/Sync14'
    228 * RateTransition: '<S2>/Sync21'
    229 * RateTransition: '<S2>/Sync5'
    230 * RateTransition: '<S2>/Sync6'
    231 */
    232 if (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 1) {
    233 /* DataTypeConversion: '<S2>/Cast4' */
    234 v = fabs(FCC_Sys_New_harness_DW.FromWs[3]);
    235 if (v < 4.503599627370496E+15) {
    236 if (v >= 0.5) {
    237 v = floor(FCC_Sys_New_harness_DW.FromWs[3] + 0.5);
    238 } else {
    239 v = 0.0;
    240 }
    241 } else {
    242 v = FCC_Sys_New_harness_DW.FromWs[3];
    243 }
    244
    245 if (v < 32768.0) {
    246 if (v >= -32768.0) {
    247 FCC_Sys_New_harness_DW.Sync4_Buffer = (int16_T)v;
    248 } else {
    249 FCC_Sys_New_harness_DW.Sync4_Buffer = MIN_int16_T;
    250 }
    251 } else {
    252 FCC_Sys_New_harness_DW.Sync4_Buffer = MAX_int16_T;
    253 }
    254
    255 /* End of DataTypeConversion: '<S2>/Cast4' */
    256
    257 /* DataTypeConversion: '<S2>/Cast5' */
    258 v = fabs(FCC_Sys_New_harness_DW.FromWs[4]);
    259 if (v < 4.503599627370496E+15) {
    260 if (v >= 0.5) {
    261 v = floor(FCC_Sys_New_harness_DW.FromWs[4] + 0.5);
    262 } else {
    263 v = 0.0;
    264 }
    265 } else {
    266 v = FCC_Sys_New_harness_DW.FromWs[4];
    267 }
    268
    269 if (v < 32768.0) {
    270 if (v >= -32768.0) {
    271 FCC_Sys_New_harness_DW.Sync5_Buffer = (int16_T)v;
    272 } else {
    273 FCC_Sys_New_harness_DW.Sync5_Buffer = MIN_int16_T;
    274 }
    275 } else {
    276 FCC_Sys_New_harness_DW.Sync5_Buffer = MAX_int16_T;
    277 }
    278
    279 /* End of DataTypeConversion: '<S2>/Cast5' */
    280
    281 /* DataTypeConversion: '<S2>/Cast6' */
    282 v = fabs(FCC_Sys_New_harness_DW.FromWs[5]);
    283 if (v < 4.503599627370496E+15) {
    284 if (v >= 0.5) {
    285 v = floor(FCC_Sys_New_harness_DW.FromWs[5] + 0.5);
    286 } else {
    287 v = 0.0;
    288 }
    289 } else {
    290 v = FCC_Sys_New_harness_DW.FromWs[5];
    291 }
    292
    293 if (v < 32768.0) {
    294 if (v >= -32768.0) {
    295 FCC_Sys_New_harness_DW.Sync6_Buffer = (int16_T)v;
    296 } else {
    297 FCC_Sys_New_harness_DW.Sync6_Buffer = MIN_int16_T;
    298 }
    299 } else {
    300 FCC_Sys_New_harness_DW.Sync6_Buffer = MAX_int16_T;
    301 }
    302
    303 /* End of DataTypeConversion: '<S2>/Cast6' */
    304 FCC_Sys_New_harness_DW.Sync10_Buffer = FCC_Sys_New_harness_DW.FromWs[9];
    305
    306 /* RateTransition: '<S2>/Sync11' */
    307 FCC_Sys_New_harness_DW.Sync11_Buffer = FCC_Sys_New_harness_DW.FromWs[10];
    308
    309 /* RateTransition: '<S2>/Sync12' */
    310 FCC_Sys_New_harness_DW.Sync12_Buffer = FCC_Sys_New_harness_DW.FromWs[11];
    311
    312 /* RateTransition: '<S2>/Sync13' incorporates:
    313 * DataTypeConversion: '<S2>/Cast13'
    314 */
    315 FCC_Sys_New_harness_DW.Sync13_Buffer = (FCC_Sys_New_harness_DW.FromWs[12] !=
    316 0.0);
    317
    318 /* RateTransition: '<S2>/Sync7' */
    319 FCC_Sys_New_harness_DW.Sync7_Buffer = FCC_Sys_New_harness_DW.FromWs[6];
    320
    321 /* RateTransition: '<S2>/Sync8' */
    322 FCC_Sys_New_harness_DW.Sync8_Buffer = FCC_Sys_New_harness_DW.FromWs[7];
    323
    324 /* RateTransition: '<S2>/Sync9' */
    325 FCC_Sys_New_harness_DW.Sync9_Buffer = FCC_Sys_New_harness_DW.FromWs[8];
    326 FCC_Sys_New_harness_DW.Sync14_Buffer = FCC_Sys_New_harness_DW.FromWs[13];
    327
    328 /* RateTransition: '<S2>/Sync15' */
    329 FCC_Sys_New_harness_DW.Sync15_Buffer = FCC_Sys_New_harness_DW.FromWs[14];
    330
    331 /* RateTransition: '<S2>/Sync16' */
    332 FCC_Sys_New_harness_DW.Sync16_Buffer = FCC_Sys_New_harness_DW.FromWs[15];
    333
    334 /* RateTransition: '<S2>/Sync17' */
    335 FCC_Sys_New_harness_DW.Sync17_Buffer = FCC_Sys_New_harness_DW.FromWs[16];
    336
    337 /* RateTransition: '<S2>/Sync18' */
    338 FCC_Sys_New_harness_DW.Sync18_Buffer = FCC_Sys_New_harness_DW.FromWs[17];
    339
    340 /* RateTransition: '<S2>/Sync19' */
    341 FCC_Sys_New_harness_DW.Sync19_Buffer = FCC_Sys_New_harness_DW.FromWs[18];
    342
    343 /* RateTransition: '<S2>/Sync20' incorporates:
    344 * DataTypeConversion: '<S2>/Cast20'
    345 */
    346 FCC_Sys_New_harness_DW.Sync20_Buffer = (FCC_Sys_New_harness_DW.FromWs[19] !=
    347 0.0);
    348 FCC_Sys_New_harness_DW.Sync21_Buffer = FCC_Sys_New_harness_DW.FromWs[20];
    349
    350 /* RateTransition: '<S2>/Sync22' */
    351 FCC_Sys_New_harness_DW.Sync22_Buffer = FCC_Sys_New_harness_DW.FromWs[21];
    352
    353 /* RateTransition: '<S2>/Sync23' */
    354 FCC_Sys_New_harness_DW.Sync23_Buffer = FCC_Sys_New_harness_DW.FromWs[22];
    355
    356 /* RateTransition: '<S2>/Sync24' */
    357 FCC_Sys_New_harness_DW.Sync24_Buffer = FCC_Sys_New_harness_DW.FromWs[23];
    358
    359 /* RateTransition: '<S2>/Sync25' */
    360 FCC_Sys_New_harness_DW.Sync25_Buffer = FCC_Sys_New_harness_DW.FromWs[24];
    361
    362 /* RateTransition: '<S2>/Sync26' */
    363 FCC_Sys_New_harness_DW.Sync26_Buffer = FCC_Sys_New_harness_DW.FromWs[25];
    364
    365 /* RateTransition: '<S2>/Sync27' incorporates:
    366 * DataTypeConversion: '<S2>/Cast27'
    367 */
    368 FCC_Sys_New_harness_DW.Sync27_Buffer = (FCC_Sys_New_harness_DW.FromWs[26] !=
    369 0.0);
    370 }
    371
    372 /* End of RateTransition: '<S2>/Sync4' */
    373
    374 /* Update absolute time */
    375 /* The "clockTick0" counts the number of times the code of this task has
    376 * been executed. The absolute time is the multiplication of "clockTick0"
    377 * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not
    378 * overflow during the application lifespan selected.
    379 */
    380 FCC_Sys_New_harness_M->Timing.t[0] =
    381 ((time_T)(++FCC_Sys_New_harness_M->Timing.clockTick0)) *
    382 FCC_Sys_New_harness_M->Timing.stepSize0;
    383
    384 /* Update absolute time */
    385 /* The "clockTick1" counts the number of times the code of this task has
    386 * been executed. The resolution of this integer timer is 0.001, which is the step size
    387 * of the task. Size of "clockTick1" ensures timer will not overflow during the
    388 * application lifespan selected.
    389 */
    390 FCC_Sys_New_harness_M->Timing.clockTick1++;
    391}
    392
    393/* Model step function for TID2 */
    394void FCC_Sys_New_harness_step2(void) /* Sample time: [0.01s, 0.0s] */
    395{
    396 /* local block i/o variables */
    397 AHRS_Bus rtb_AHRS11;
    398 AHRS_Bus rtb_AHRS21;
    399 AHRS_Bus rtb_AHRS31;
    400 int16_T rtb_Sync4;
    401 int16_T rtb_Sync5;
    402 int16_T rtb_Sync6;
    403
    404 /* RateTransition: '<S2>/Sync4' */
    405 rtb_Sync4 = FCC_Sys_New_harness_DW.Sync4_Buffer;
    406
    407 /* RateTransition: '<S2>/Sync5' */
    408 rtb_Sync5 = FCC_Sys_New_harness_DW.Sync5_Buffer;
    409
    410 /* RateTransition: '<S2>/Sync6' */
    411 rtb_Sync6 = FCC_Sys_New_harness_DW.Sync6_Buffer;
    412
    413 /* BusCreator: '<S5>/AHRS1(1)' incorporates:
    414 * RateTransition: '<S2>/Sync10'
    415 * RateTransition: '<S2>/Sync11'
    416 * RateTransition: '<S2>/Sync12'
    417 * RateTransition: '<S2>/Sync13'
    418 * RateTransition: '<S2>/Sync7'
    419 * RateTransition: '<S2>/Sync8'
    420 * RateTransition: '<S2>/Sync9'
    421 */
    422 rtb_AHRS11.theta = FCC_Sys_New_harness_DW.Sync7_Buffer;
    423 rtb_AHRS11.phi = FCC_Sys_New_harness_DW.Sync8_Buffer;
    424 rtb_AHRS11.psi = FCC_Sys_New_harness_DW.Sync9_Buffer;
    425 rtb_AHRS11.q = FCC_Sys_New_harness_DW.Sync10_Buffer;
    426 rtb_AHRS11.p = FCC_Sys_New_harness_DW.Sync11_Buffer;
    427 rtb_AHRS11.r = FCC_Sys_New_harness_DW.Sync12_Buffer;
    428 rtb_AHRS11.valid = FCC_Sys_New_harness_DW.Sync13_Buffer;
    429
    430 /* BusCreator: '<S6>/AHRS2(1)' incorporates:
    431 * RateTransition: '<S2>/Sync14'
    432 * RateTransition: '<S2>/Sync15'
    433 * RateTransition: '<S2>/Sync16'
    434 * RateTransition: '<S2>/Sync17'
    435 * RateTransition: '<S2>/Sync18'
    436 * RateTransition: '<S2>/Sync19'
    437 * RateTransition: '<S2>/Sync20'
    438 */
    439 rtb_AHRS21.theta = FCC_Sys_New_harness_DW.Sync14_Buffer;
    440 rtb_AHRS21.phi = FCC_Sys_New_harness_DW.Sync15_Buffer;
    441 rtb_AHRS21.psi = FCC_Sys_New_harness_DW.Sync16_Buffer;
    442 rtb_AHRS21.q = FCC_Sys_New_harness_DW.Sync17_Buffer;
    443 rtb_AHRS21.p = FCC_Sys_New_harness_DW.Sync18_Buffer;
    444 rtb_AHRS21.r = FCC_Sys_New_harness_DW.Sync19_Buffer;
    445 rtb_AHRS21.valid = FCC_Sys_New_harness_DW.Sync20_Buffer;
    446
    447 /* BusCreator: '<S7>/AHRS3(1)' incorporates:
    448 * RateTransition: '<S2>/Sync21'
    449 * RateTransition: '<S2>/Sync22'
    450 * RateTransition: '<S2>/Sync23'
    451 * RateTransition: '<S2>/Sync24'
    452 * RateTransition: '<S2>/Sync25'
    453 * RateTransition: '<S2>/Sync26'
    454 * RateTransition: '<S2>/Sync27'
    455 */
    456 rtb_AHRS31.theta = FCC_Sys_New_harness_DW.Sync21_Buffer;
    457 rtb_AHRS31.phi = FCC_Sys_New_harness_DW.Sync22_Buffer;
    458 rtb_AHRS31.psi = FCC_Sys_New_harness_DW.Sync23_Buffer;
    459 rtb_AHRS31.q = FCC_Sys_New_harness_DW.Sync24_Buffer;
    460 rtb_AHRS31.p = FCC_Sys_New_harness_DW.Sync25_Buffer;
    461 rtb_AHRS31.r = FCC_Sys_New_harness_DW.Sync26_Buffer;
    462 rtb_AHRS31.valid = FCC_Sys_New_harness_DW.Sync27_Buffer;
    463
    464 /* ModelReference: '<S4>/FCC_New' incorporates:
    465 * Outport: '<Root>/Actuator1'
    466 * Outport: '<Root>/Actuator2'
    467 * Outport: '<Root>/Actuator3'
    468 */
    469 FCC_NewTID1(&rtb_Sync4, &rtb_Sync5, &rtb_Sync6, &rtb_AHRS11, &rtb_AHRS21,
    470 &rtb_AHRS31);
    471}
    472
    473/* Model initialize function */
    474void FCC_Sys_New_harness_initialize(void)
    475{
    476 /* Registration code */
    477 {
    478 /* Setup solver object */
    479 rtsiSetSimTimeStepPtr(&FCC_Sys_New_harness_M->solverInfo,
    480 &FCC_Sys_New_harness_M->Timing.simTimeStep);
    481 rtsiSetTPtr(&FCC_Sys_New_harness_M->solverInfo, &rtmGetTPtr
    482 (FCC_Sys_New_harness_M));
    483 rtsiSetStepSizePtr(&FCC_Sys_New_harness_M->solverInfo,
    484 &FCC_Sys_New_harness_M->Timing.stepSize0);
    485 rtsiSetErrorStatusPtr(&FCC_Sys_New_harness_M->solverInfo,
    486 (&rtmGetErrorStatus(FCC_Sys_New_harness_M)));
    487 rtsiSetRTModelPtr(&FCC_Sys_New_harness_M->solverInfo, FCC_Sys_New_harness_M);
    488 }
    489
    490 rtsiSetSimTimeStep(&FCC_Sys_New_harness_M->solverInfo, MAJOR_TIME_STEP);
    491 rtsiSetSolverName(&FCC_Sys_New_harness_M->solverInfo,"FixedStepDiscrete");
    492 rtmSetTPtr(FCC_Sys_New_harness_M, &FCC_Sys_New_harness_M->Timing.tArray[0]);
    493 FCC_Sys_New_harness_M->Timing.stepSize0 = 0.001;
    494
    495 {
    496 static uint32_T *clockTickPtrs[3];
    497 static real_T *taskTimePtrs[3];
    498 static boolean_T *rateTransitionPtrs[(3 * 3)];
    499 FCC_Sys_New_harness_TimingBrdg.nTasks = 3;
    500 clockTickPtrs[0] = &(FCC_Sys_New_harness_M->Timing.clockTick0);
    501 clockTickPtrs[1] = &(FCC_Sys_New_harness_M->Timing.clockTick1);
    502 clockTickPtrs[2] = (NULL);
    503 FCC_Sys_New_harness_TimingBrdg.clockTick = clockTickPtrs;
    504 FCC_Sys_New_harness_TimingBrdg.clockTickH = (NULL);
    505 rateTransitionPtrs[1*3 + 2] =
    506 &(FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2);
    507 FCC_Sys_New_harness_TimingBrdg.rateTransition = rateTransitionPtrs;
    508 taskTimePtrs[0] = &(FCC_Sys_New_harness_M->Timing.t[0]);
    509 taskTimePtrs[1] = (NULL);
    510 taskTimePtrs[2] = (NULL);
    511 FCC_Sys_New_harness_TimingBrdg.taskTime = taskTimePtrs;
    512 }
    513
    514 /* Model Initialize function for ModelReference Block: '<S4>/FCC_New' */
    515 FCC_New_initialize(rtmGetErrorStatusPointer(FCC_Sys_New_harness_M),
    516 &FCC_Sys_New_harness_TimingBrdg, 1, 2);
    517
    518 /* Start for FromWorkspace: '<S1>/FromWs' */
    519 {
    520 static real_T pTimeValues0[] = { 0.0, 0.15, 0.15, 0.18, 0.18, 0.192, 0.192,
    521 0.26, 0.26, 0.27, 0.27, 0.271 } ;
    522
    523 static real_T pDataValues0[] = { -32722.0, -32722.0, 0.0, 0.0, 0.0, 0.0,
    524 -32728.0, -32728.0, 0.0, 0.0, 0.0, 0.0, -32671.0, -32671.0, 0.0, 0.0, 0.0,
    525 0.0, -32721.0, -32721.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, 0.0, 0.0,
    526 0.0, 0.0, -32720.0, -32720.0, 0.0, 0.0, 0.0, 0.0, -32722.0, -32722.0, 0.0,
    527 0.0, 0.0, 0.0, -32684.0, -32684.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0,
    528 0.0, 0.0, 0.0, 0.0, -32710.0, -32710.0, 0.0, 0.0, 0.0, 0.0, -32686.0,
    529 -32686.0, 0.0, 0.0, 0.0, 0.0, -32768.0, -32768.0, 0.0, 0.0, 0.0, 0.0,
    530 -118.15138, -118.15138, -180.0, -180.0, -180.0, -180.0, 17.01541, 17.01541,
    531 -180.0, -180.0, -180.0, -180.0, 25.9801, 25.9801, -180.0, -180.0, -180.0,
    532 -180.0, 26.06345, 26.06345, -180.0, -180.0, -180.0, -180.0, 67.51613,
    533 67.51613, 0.0, 0.0, 0.0, 0.0, 305.78971, 305.78971, 0.0, 0.0, 0.0, 0.0,
    534 107.78888, 107.78888, -180.0, -180.0, -180.0, -180.0, -169.80836,
    535 -169.80836, -180.0, -180.0, -180.0, -180.0, 171.2196, 171.2196, -180.0,
    536 -180.0, -180.0, -180.0, -32.26304, -32.26304, -180.0, -180.0, 180.0, 180.0,
    537 -3.5854, -3.5854, -180.0, -180.0, -180.0, -180.0, -55.81231, -55.81231,
    538 -180.0, -180.0, -180.0, -180.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
    539 1.0, 1.0, 1.0, 1.0, 179.94728, 179.94728, -180.0, -180.0, -180.0, -180.0,
    540 42.21022, 42.21022, -180.0, -180.0, -180.0, -180.0, -12.15585, -12.15585,
    541 -180.0, -180.0, -180.0, -180.0, 65.16104, 65.16104, -180.0, -180.0, -180.0,
    542 -180.0, 331.47544, 331.47544, 0.0, 0.0, 0.0, 0.0, 63.30298, 63.30298, 0.0,
    543 0.0, 0.0, 0.0, 158.38363, 158.38363, -180.0, -180.0, -180.0, -180.0,
    544 -139.48832, -139.48832, -180.0, -180.0, -180.0, -180.0, -170.3775,
    545 -170.3775, -180.0, -180.0, -180.0, -180.0, -150.40707, -150.40707, -180.0,
    546 -180.0, 180.0, 180.0, -61.13408, -61.13408, -180.0, -180.0, -180.0, -180.0,
    547 141.8528, 141.8528, -180.0, -180.0, -180.0, -180.0, 1.0, 1.0, 1.0, 1.0,
    548 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 60.68156, 60.68156, -180.0, -180.0,
    549 -180.0, -180.0, -93.63384, -93.63384, -180.0, -180.0, -180.0, -180.0,
    550 165.74818, 165.74818, -180.0, -180.0, -180.0, -180.0, 73.13588, 73.13588,
    551 -180.0, -180.0, -180.0, -180.0, 42.57845, 42.57845, 0.0, 0.0, 0.0, 0.0,
    552 339.30663, 339.30663, 0.0, 0.0, 0.0, 0.0, 73.76652, 73.76652, -180.0,
    553 -180.0, -180.0, -180.0, -75.80978, -75.80978, -180.0, -180.0, -180.0,
    554 -180.0, -81.62332, -81.62332, -180.0, -180.0, -180.0, -180.0, 48.62002,
    555 48.62002, -180.0, -180.0, -180.0, -180.0, -31.30247, -31.30247, -180.0,
    556 -180.0, -180.0, -180.0, 99.35286, 99.35286, -180.0, -180.0, -180.0, -180.0,
    557 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ;
    558
    559 FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr = (void *) pTimeValues0;
    560 FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr = (void *) pDataValues0;
    561 FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = 0;
    562 }
    563}
    564
    565/*
    566 * File trailer for generated code.
    567 *
    568 * [EOF]
    569 */
    570
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_codegen_rpt.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_codegen_rpt.html new file mode 100644 index 0000000..1da8d45 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_codegen_rpt.html @@ -0,0 +1,33 @@ + + + +FCC_Sys_New_harness Code Generation Report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_coderassumptions.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_coderassumptions.html new file mode 100644 index 0000000..3aa0c60 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_coderassumptions.html @@ -0,0 +1,377 @@ + + + +Coder Assumptions for 'FCC_Sys_New_harness' + + + + +

    +Coder Assumptions for 'FCC_Sys_New_harness' +

    +
    +

    +List of assumptions that you can check and expected results for selected target environment. For more information see, Verification of Code Generation Assumptions. +

    +
    +
    + +
    +

    +C Language Configuration for Intel->x86-32 (Windows32) Target Hardware +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +32 +
    +BitPerSizeT + +32 +
    +BitPerPtrDiffT + +32 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Configuration for Development Computer +

    + + + + + + +
    +

    +Expected values are used only if the code has been compiled with PORTABLE_WORDSIZES defined, i.e. when you run a SIL simulation with PortableWordSizes set to 'on'. +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +64 +
    +BitPerSizeT + +64 +
    +BitPerPtrDiffT + +64 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Standard +

    + + + + + + +
    +

    +Zero initialization code has been optimized for model 'FCC_Sys_New_harness'. +

    +

    + + + + + + + +
    +Initial value of a global integer variable is zero + +True +
    + +

    +

    +If the assumption is not correct, remove the optimization through the Configuration Parameters > Code Generation > Optimization settings. Alternatively, configure your target environment to make the assumption hold. +

    + +
    +

    +Floating-Point Numbers +

    + + + + + + +
    +

    +Code generation is configured to support floating-point numbers, therefore your target environment might perform subnormal number calculations. +

    +

    + + + + + + + + + + + + +
    +Flush-to-zero computed subnormal values (FTZ) + +False +
    +Flush-to-zero incoming subnormal values (DAZ) + +False +
    + +

    +

    +If the assumptions are not correct, subnormal numbers might cause mismatches between model and generated code simulation results. For more information see, Subnormal Number Performance. +

    + +
    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_contents.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_contents.html new file mode 100644 index 0000000..0858189 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_contents.html @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Contents + + +
    + + +
    + +Summary + + +
    + +Subsystem Report + + +
    + +Code Interface Report + + +
    + +Traceability Report + + +
    + +Static Code Metrics Report + + +
    + +Code Replacements Report + + +
    + +Coder Assumptions + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + +Generated Code + + +
    + + + + + + + + + + + + +
    +[-] + +Main file +
    + + + + + + + + +
    + +ert_main.c + + +
    + +
    + +
    + + + + + + + + + + + + +
    +[-] + +Model files +
    + + + + + + + + + + + + +
    + +FCC_Sys_New_harness.c + + +
    + +FCC_Sys_New_harness.h + + +
    + +
    + +
    + + + + + + + + + + + + +
    +[+] + +Shared files (3) +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + +
    +[+] + +SIL/PIL files (40) +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    + +Referenced Models + + +
    +AHRSControl +
    +ActuatorControl +
    +FCC_New +
    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_h.html new file mode 100644 index 0000000..c448461 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_h.html @@ -0,0 +1,454 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: FCC_Sys_New_harness.h
    7 *
    8 * Code generated for Simulink model 'FCC_Sys_New_harness'.
    9 *
    10 * Model version : 1.91
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:26 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#ifndef RTW_HEADER_FCC_Sys_New_harness_h_
    23#define RTW_HEADER_FCC_Sys_New_harness_h_
    24#include <math.h>
    25#include <stddef.h>
    26#include "AHRS_Bus.h"
    27#ifndef FCC_Sys_New_harness_COMMON_INCLUDES_
    28# define FCC_Sys_New_harness_COMMON_INCLUDES_
    29#include "rtwtypes.h"
    30#include "rtw_continuous.h"
    31#include "rtw_solver.h"
    32#endif /* FCC_Sys_New_harness_COMMON_INCLUDES_ */
    33
    34/* Shared type includes */
    35#include "model_reference_types.h"
    36
    37/* Child system includes */
    38#define FCC_New_MDLREF_HIDE_CHILD_
    39#include "FCC_New.h"
    40
    41/* Model Code Variants */
    42
    43/* Macros for accessing real-time model data structure */
    44#ifndef rtmGetErrorStatus
    45# define rtmGetErrorStatus(rtm) ((rtm)->errorStatus)
    46#endif
    47
    48#ifndef rtmSetErrorStatus
    49# define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val))
    50#endif
    51
    52#ifndef rtmGetErrorStatusPointer
    53# define rtmGetErrorStatusPointer(rtm) ((const char_T **)(&((rtm)->errorStatus)))
    54#endif
    55
    56#ifndef rtmGetT
    57# define rtmGetT(rtm) (rtmGetTPtr((rtm))[0])
    58#endif
    59
    60#ifndef rtmGetTPtr
    61# define rtmGetTPtr(rtm) ((rtm)->Timing.t)
    62#endif
    63
    64/* Forward declaration for rtModel */
    65typedef struct tag_RTM_FCC_Sys_New_harness_T RT_MODEL_FCC_Sys_New_harness_T;
    66
    67/* Block signals and states (default storage) for system '<Root>' */
    68typedef struct {
    69 real_T FromWs[27]; /* '<S1>/FromWs' */
    70 real_T Sync10_Buffer; /* '<S2>/Sync10' */
    71 real_T Sync11_Buffer; /* '<S2>/Sync11' */
    72 real_T Sync12_Buffer; /* '<S2>/Sync12' */
    73 real_T Sync7_Buffer; /* '<S2>/Sync7' */
    74 real_T Sync8_Buffer; /* '<S2>/Sync8' */
    75 real_T Sync9_Buffer; /* '<S2>/Sync9' */
    76 real_T Sync14_Buffer; /* '<S2>/Sync14' */
    77 real_T Sync15_Buffer; /* '<S2>/Sync15' */
    78 real_T Sync16_Buffer; /* '<S2>/Sync16' */
    79 real_T Sync17_Buffer; /* '<S2>/Sync17' */
    80 real_T Sync18_Buffer; /* '<S2>/Sync18' */
    81 real_T Sync19_Buffer; /* '<S2>/Sync19' */
    82 real_T Sync21_Buffer; /* '<S2>/Sync21' */
    83 real_T Sync22_Buffer; /* '<S2>/Sync22' */
    84 real_T Sync23_Buffer; /* '<S2>/Sync23' */
    85 real_T Sync24_Buffer; /* '<S2>/Sync24' */
    86 real_T Sync25_Buffer; /* '<S2>/Sync25' */
    87 real_T Sync26_Buffer; /* '<S2>/Sync26' */
    88 struct {
    89 int_T PrevIndex;
    90 } FromWs_IWORK; /* '<S1>/FromWs' */
    91
    92 struct {
    93 void *TimePtr;
    94 void *DataPtr;
    95 void *RSimInfoPtr;
    96 } FromWs_PWORK; /* '<S1>/FromWs' */
    97
    98 int16_T Cast1; /* '<S2>/Cast1' */
    99 int16_T Cast2; /* '<S2>/Cast2' */
    100 int16_T Cast3; /* '<S2>/Cast3' */
    101 int16_T Sync4_Buffer; /* '<S2>/Sync4' */
    102 int16_T Sync5_Buffer; /* '<S2>/Sync5' */
    103 int16_T Sync6_Buffer; /* '<S2>/Sync6' */
    104 boolean_T Sync13_Buffer; /* '<S2>/Sync13' */
    105 boolean_T Sync20_Buffer; /* '<S2>/Sync20' */
    106 boolean_T Sync27_Buffer; /* '<S2>/Sync27' */
    107} DW_FCC_Sys_New_harness_T;
    108
    109/* External outputs (root outports fed by signals with default storage) */
    110typedef struct {
    111 int16_T Actuator1; /* '<Root>/Actuator1' */
    112 int16_T Actuator2; /* '<Root>/Actuator2' */
    113 int16_T Actuator3; /* '<Root>/Actuator3' */
    114} ExtY_FCC_Sys_New_harness_T;
    115
    116/* Code_Instrumentation_Declarations_Placeholder */
    117
    118/* Real-time Model Data Structure */
    119struct tag_RTM_FCC_Sys_New_harness_T {
    120 const char_T *errorStatus;
    121 RTWSolverInfo solverInfo;
    122
    123 /*
    124 * Timing:
    125 * The following substructure contains information regarding
    126 * the timing information for the model.
    127 */
    128 struct {
    129 uint32_T clockTick0;
    130 time_T stepSize0;
    131 uint32_T clockTick1;
    132 struct {
    133 uint32_T TID1_2;
    134 boolean_T b_TID1_2;
    135 } RateInteraction;
    136
    137 SimTimeStep simTimeStep;
    138 time_T *t;
    139 time_T tArray[3];
    140 } Timing;
    141};
    142
    143extern rtTimingBridge FCC_Sys_New_harness_TimingBrdg;
    144
    145/* Block signals and states (default storage) */
    146extern DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW;
    147
    148/* External outputs (root outports fed by signals with default storage) */
    149extern ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y;
    150
    151/* Model entry point functions */
    152extern void FCC_Sys_New_harness_initialize(void);
    153extern void FCC_Sys_New_harness_step0(void);
    154extern void FCC_Sys_New_harness_step2(void);
    155
    156/* Real-time Model object */
    157extern RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M;
    158
    159/*-
    160 * These blocks were eliminated from the model due to optimizations:
    161 *
    162 * Block '<S2>/Cast10' : Eliminate redundant data type conversion
    163 * Block '<S2>/Cast11' : Eliminate redundant data type conversion
    164 * Block '<S2>/Cast12' : Eliminate redundant data type conversion
    165 * Block '<S2>/Cast14' : Eliminate redundant data type conversion
    166 * Block '<S2>/Cast15' : Eliminate redundant data type conversion
    167 * Block '<S2>/Cast16' : Eliminate redundant data type conversion
    168 * Block '<S2>/Cast17' : Eliminate redundant data type conversion
    169 * Block '<S2>/Cast18' : Eliminate redundant data type conversion
    170 * Block '<S2>/Cast19' : Eliminate redundant data type conversion
    171 * Block '<S2>/Cast21' : Eliminate redundant data type conversion
    172 * Block '<S2>/Cast22' : Eliminate redundant data type conversion
    173 * Block '<S2>/Cast23' : Eliminate redundant data type conversion
    174 * Block '<S2>/Cast24' : Eliminate redundant data type conversion
    175 * Block '<S2>/Cast25' : Eliminate redundant data type conversion
    176 * Block '<S2>/Cast26' : Eliminate redundant data type conversion
    177 * Block '<S2>/Cast7' : Eliminate redundant data type conversion
    178 * Block '<S2>/Cast8' : Eliminate redundant data type conversion
    179 * Block '<S2>/Cast9' : Eliminate redundant data type conversion
    180 * Block '<S2>/Sync1' : Eliminated since input and output rates are identical
    181 * Block '<S2>/Sync2' : Eliminated since input and output rates are identical
    182 * Block '<S2>/Sync3' : Eliminated since input and output rates are identical
    183 */
    184
    185/*-
    186 * The generated code includes comments that allow you to trace directly
    187 * back to the appropriate location in the model. The basic format
    188 * is <system>/block_name, where system is the system number (uniquely
    189 * assigned by Simulink) and block_name is the name of the block.
    190 *
    191 * Use the MATLAB hilite_system command to trace the generated code back
    192 * to the model. For example,
    193 *
    194 * hilite_system('<S3>') - opens system 3
    195 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
    196 *
    197 * Here is the system hierarchy for this model
    198 *
    199 * '<Root>' : 'FCC_Sys_New_harness'
    200 * '<S1>' : 'FCC_Sys_New_harness/Inputs'
    201 * '<S2>' : 'FCC_Sys_New_harness/Size-Type'
    202 * '<S3>' : 'FCC_Sys_New_harness/Test Case Explanation'
    203 * '<S4>' : 'FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)'
    204 * '<S5>' : 'FCC_Sys_New_harness/Size-Type/Bus7'
    205 * '<S6>' : 'FCC_Sys_New_harness/Size-Type/Bus8'
    206 * '<S7>' : 'FCC_Sys_New_harness/Size-Type/Bus9'
    207 */
    208
    209/*-
    210 * Requirements for '<Root>': FCC_Sys_New_harness
    211 */
    212#endif /* RTW_HEADER_FCC_Sys_New_harness_h_ */
    213
    214/*
    215 * File trailer for generated code.
    216 *
    217 * [EOF]
    218 */
    219
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_interface.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_interface.html new file mode 100644 index 0000000..2911421 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_interface.html @@ -0,0 +1,354 @@ + + + +Code Interface Report for FCC_Sys_New_harness + + + + +

    +Code Interface Report for FCC_Sys_New_harness +

    +

    +Table of Contents +

    + +

    + +Entry-Point Functions + + +

    +

    +Function: FCC_Sys_New_harness_initialize +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Prototype + + +void FCC_Sys_New_harness_initialize(void) + + +
    +Description + +Initialization entry point of generated code +
    +Timing + +Must be called exactly once +
    +Arguments + +None +
    +Return value + +None +
    +Header file + +FCC_Sys_New_harness.h +
    +

    +Function: FCC_Sys_New_harness_step0 +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Prototype + + +void FCC_Sys_New_harness_step0(void) + + +
    +Description + +Output entry point of generated code +
    +Timing + +Must be called periodically, every 0.001 seconds +
    +Arguments + +None +
    +Return value + +None +
    +Header file + +FCC_Sys_New_harness.h +
    +

    +Function: FCC_Sys_New_harness_step2 +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Prototype + + +void FCC_Sys_New_harness_step2(void) + + +
    +Description + +Output entry point of generated code +
    +Timing + +Must be called periodically, every 0.01 seconds +
    +Arguments + +None +
    +Return value + +None +
    +Header file + +FCC_Sys_New_harness.h +
    +

    + +Inports + + +

    +

    +No Inports in model. +

    +

    + +Outports + + +

    +[-] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Block Name + + + + +Code Identifier + + + + +Data Type + + + + +Dimension + + +
    +<Root>/Actuator1 + +FCC_Sys_New_harness_Y.Actuator1 + +int16_T + +1 +
    +<Root>/Actuator2 + +FCC_Sys_New_harness_Y.Actuator2 + +int16_T + +1 +
    +<Root>/Actuator3 + +FCC_Sys_New_harness_Y.Actuator3 + +int16_T + +1 +
    +

    + +Interface Parameters + + +

    +

    +No interface/tunable parameters in model. +

    +

    + +Data Stores + + +

    +

    +No data stores in the model; note that this report lists only data stores with non-auto storage class and global data stores +

    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_metrics.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_metrics.html new file mode 100644 index 0000000..6c07620 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_metrics.html @@ -0,0 +1,7 @@ +Static Code Metrics Report for FCC_Sys_New_harness + + + +

    Static Code Metrics Report for FCC_Sys_New_harness

    +

    Static Code Metrics report is not generated. On the Configuration Parameters > Code Generation > Report pane, select Generate static code metrics. On the model diagram window, select Code > C/C++ Code > Code Generation Report > Open Model Report or rebuild the model.

    + \ No newline at end of file diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_replacements.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_replacements.html new file mode 100644 index 0000000..308de81 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_replacements.html @@ -0,0 +1,18 @@ + + + +Code replacements in FCC_Sys_New_harness + + + + +

    +Code replacements in FCC_Sys_New_harness +

    +
    + +
    +Code replacements report not generated. Select 'Summarize which blocks triggered code replacements'. + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_sbs_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_sbs_c.html new file mode 100644 index 0000000..8477a58 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_sbs_c.html @@ -0,0 +1,5472 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * FCC_Sys_New_harness_sbs.c
    3 *
    4 * Automatically generated s-function with I/O interface for:
    5 * Component: FCC_Sys_New_harness
    6 * Component Simulink Path: FCC_Sys_New_harness
    7 * Simulation Mode: SIL
    8 *
    9 */
    10
    11#define S_FUNCTION_NAME FCC_Sys_New_harness_sbs
    12#define S_FUNCTION_LEVEL 2
    13#if !defined(RTW_GENERATED_S_FUNCTION)
    14#define RTW_GENERATED_S_FUNCTION
    15#endif
    16
    17#include <stdio.h>
    18#include <string.h>
    19#include "simstruc.h"
    20#include "simtarget/slMdlrefSimTargetCoreHeaders.h"
    21#include "simtarget/slMdlrefSimTargetInstrumentationHeaders.h"
    22#include "fixedpoint.h"
    23#include "coder/connectivity_core/xilutils/xilutils.h"
    24#include "coder/simulinkcoder/xilutils_sl/xilutils_sl.h"
    25#include "rtiostream_utils.h"
    26#include "coder/connectivity/xilcomms_rtiostream/xilcomms_rtiostream.h"
    27#include "coder/connectivity/XILHostAppSvc/XILHostAppSvc_CInterface.h"
    28#include "messages/slMessagesSfcnBridge.h"
    29#include "strings/slStringSfcnAPI.h"
    30#include "mwstringutil.h"
    31#include "coder/connectivity/CodeInstrHostAppSvc/CodeInstrHostAppSvc_CInterface.h"
    32#include "coder/connectivity/CoderAssumpHostAppSvc/CoderAssumpHostAppSvc_CInterface.h"
    33
    34/* Response case labels */
    35enum ResponseIDs {
    36 RESPONSE_ERROR = 0,
    37 RESPONSE_OUTPUT_PRE_DATA = 1,
    38 RESPONSE_OUTPUT_DATA = 2,
    39 RESPONSE_PRINTF = 3,
    40 RESPONSE_FOPEN = 4,
    41 RESPONSE_FPRINTF = 5,
    42 RESPONSE_SIGNAL_RAISED = 6
    43};
    44
    45typedef struct {
    46 FILE ** Fd;
    47 mwSize size;
    48 int32_T fidOffset;
    49} targetIOFd_T;
    50
    51typedef enum {
    52 XIL_INIT_COMMAND = 0,
    53 XIL_INITIALIZE_COMMAND,
    54 XIL_SYSTEM_INITIALIZE_COMMAND,
    55 XIL_OUTPUT_COMMAND,
    56 XIL_TERMINATE_COMMAND,
    57 XIL_ENABLE_COMMAND,
    58 XIL_DISABLE_COMMAND,
    59 XIL_CONST_OUTPUT_COMMAND,
    60 XIL_PROCESS_PARAMS_COMMAND,
    61 XIL_CLIENT_SERVER_COMMAND,
    62 XIL_SHUTDOWN_COMMAND,
    63 XIL_UPDATE_COMMAND,
    64 XIL_SYSTEM_RESET_COMMAND,
    65 XIL_PAUSE_COMMAND
    66}
    67 XIL_COMMAND_TYPE_ENUM;
    68
    69static void callStopHookAndFreeSFcnMemory(SimStruct *S);
    70static void mdlTerminate(SimStruct *S);
    71
    72/* grow the buffer for target I/O Fd array
    73 * targetIOFd->Fd is NULL on failure */
    74static void growTargetIOFd(SimStruct *S, targetIOFd_T * IOFd, mwSize
    75 requiredSize)
    76{
    77 if (IOFd->size < requiredSize) {
    78 IOFd->Fd = mxRealloc(IOFd->Fd, requiredSize * sizeof(FILE*));
    79 if (IOFd->Fd == NULL) {
    80 ssSetErrorStatus( S,"growTargetIOFd: mxRealloc failed.");
    81 } else {
    82 mexMakeMemoryPersistent(IOFd->Fd);
    83 IOFd->size = requiredSize;
    84 } /* if */
    85 } /* if */
    86}
    87
    88static void closeAndFreeTargetIOFd(SimStruct *S)
    89{
    90 int i;
    91 if (ssGetPWork(S) != NULL) {
    92 targetIOFd_T * targetIOFdPtr = (targetIOFd_T *) ssGetPWorkValue(S, 3);
    93 if (targetIOFdPtr != NULL) {
    94 if (targetIOFdPtr->Fd != NULL) {
    95 for (i=0; i<targetIOFdPtr->size; i++) {
    96 if (targetIOFdPtr->Fd[i] != NULL) {
    97 fclose(targetIOFdPtr->Fd[i]);
    98 } /* if */
    99 } /* for */
    100
    101 mxFree(targetIOFdPtr->Fd);
    102 } /* if */
    103
    104 mxFree(targetIOFdPtr);
    105 } /* if */
    106
    107 ssSetPWorkValue(S, 3, NULL);
    108 } /* if */
    109}
    110
    111/* receive one packet of data and dispatch to owning application */
    112static boolean_T recvData(SimStruct *S, void* pComms)
    113{
    114 int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4);
    115 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    116 if (pCommErrorOccurred == NULL) {
    117 ssSetErrorStatus( S,"pCommErrorOccurred is NULL.");
    118 return XILHOSTAPPSVC_ERROR;
    119 } /* if */
    120
    121 if (pXILUtils == NULL) {
    122 ssSetErrorStatus( S,"pXILUtils is NULL.");
    123 return XILHOSTAPPSVC_ERROR;
    124 } /* if */
    125
    126 *pCommErrorOccurred = (xilCommsRun(pComms, pXILUtils) !=
    127 XILCOMMS_RTIOSTREAM_SUCCESS);
    128 return (*pCommErrorOccurred?XILHOSTAPPSVC_ERROR:XILHOSTAPPSVC_SUCCESS);
    129}
    130
    131/* send data via xil comms */
    132static boolean_T sendData(SimStruct *S, void* pXILService, XIL_IOBuffer_T
    133 * IOBuffer, mwSize sendSize)
    134{
    135 int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4);
    136 if (pCommErrorOccurred == NULL) {
    137 ssSetErrorStatus( S,"pCommErrorOccurred is NULL.");
    138 return XILHOSTAPPSVC_ERROR;
    139 } /* if */
    140
    141 *pCommErrorOccurred = (xilHostAppSvcSend(pXILService, IOBuffer->data, sendSize)
    142 != XILHOSTAPPSVC_SUCCESS);
    143 return (*pCommErrorOccurred?XILHOSTAPPSVC_ERROR:XILHOSTAPPSVC_SUCCESS);
    144}
    145
    146/* implements command dispatch */
    147static boolean_T commandDispatch(SimStruct *S, XIL_IOBuffer_T* IOBuffer, mwSize
    148 dataOutSize)
    149{
    150 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    151 if (pXILService == NULL) {
    152 ssSetErrorStatus( S,"pXILService is NULL!");
    153 return XILHOSTAPPSVC_ERROR;
    154 } /* if */
    155
    156 /* send the data */
    157 if (sendData(S, pXILService, IOBuffer, dataOutSize) != XILHOSTAPPSVC_SUCCESS)
    158 {
    159 return XILHOSTAPPSVC_ERROR;
    160 } /* if */
    161
    162 return XILHOSTAPPSVC_SUCCESS;
    163}
    164
    165/* implements command response */
    166static boolean_T commandResponse(SimStruct *S, mwSize* dataInSize,
    167 XILCommandResponseType* commandType)
    168{
    169 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    170 if (pXILService == NULL) {
    171 ssSetErrorStatus( S,"pXILService is NULL!");
    172 return XILHOSTAPPSVC_ERROR;
    173 } /* if */
    174
    175 {
    176 /* receive the response data */
    177 uint8_T COMMAND_COMPLETE = 0;
    178 void * pComms = (void *) ssGetPWorkValue(S, 7);
    179 if (pComms == NULL) {
    180 ssSetErrorStatus( S,"pComms is NULL!");
    181 return XILHOSTAPPSVC_ERROR;
    182 } /* if */
    183
    184 while (!COMMAND_COMPLETE) {
    185 xilHostAppSvcSetIsResponseComplete(pXILService, 0);
    186 if (recvData(S, pComms) != XILHOSTAPPSVC_SUCCESS) {
    187 return XILHOSTAPPSVC_ERROR;
    188 } /* if */
    189
    190 COMMAND_COMPLETE = xilHostAppSvcGetIsResponseComplete(pXILService);
    191 } /* while */
    192
    193 /* determine command response type */
    194 *commandType = (XILCommandResponseType) COMMAND_COMPLETE;
    195 *dataInSize = xilHostAppSvcGetPayloadSizeForOneStep(pXILService);
    196 return XILHOSTAPPSVC_SUCCESS;
    197 }
    198}
    199
    200static void copyIOData(void * const dstPtr, void * const srcPtr, uint8_T **
    201 const tgtPtrPtr, size_t numElements, size_t cTypeSize)
    202{
    203 size_t maxBytesConsumed = numElements * cTypeSize;
    204 memcpy(dstPtr, srcPtr, maxBytesConsumed);
    205 (*tgtPtrPtr)+=(maxBytesConsumed/sizeof(**tgtPtrPtr));
    206}
    207
    208static void copyStringIOData(void * const dstPtr, void * const srcPtr, uint8_T **
    209 const tgtPtrPtr, size_t numElements, size_t cTypeSize, uint8_T isInput)
    210{
    211 size_t maxBytesConsumed = numElements * cTypeSize;
    212 if (isInput) {
    213 suWriteSILStringInput(dstPtr, (int32_T)numElements, srcPtr);
    214 } else {
    215 suWriteSILStringOutput(dstPtr, srcPtr, (int32_T)numElements);
    216 } /* if */
    217
    218 (*tgtPtrPtr)+=(maxBytesConsumed/sizeof(**tgtPtrPtr));
    219}
    220
    221/* returns data needed by code instrumentation service */
    222static CodeInstrServiceData_T* codeInstrServiceData(SimStruct *S, uint8_T
    223 memUnitSizeBytes)
    224{
    225 CodeInstrServiceData_T* pCodeInstrServiceData = (CodeInstrServiceData_T*)
    226 mxCalloc(1, sizeof(CodeInstrServiceData_T));
    227 const char * simulinkBlockPath = ssGetPath(S);
    228 if (pCodeInstrServiceData == NULL) {
    229 ssSetErrorStatus( S,
    230 "Error in allocating memory for code instrumentation data through mxCalloc.");
    231 return NULL;
    232 } /* if */
    233
    234 pCodeInstrServiceData->infoPath =
    235 "D:/Documents/SCHOOL/McSCert/do178/src/validation/FCC_Sys_New_harness_ert_rtw/sil";
    236 pCodeInstrServiceData->blockPath = simulinkBlockPath;
    237 pCodeInstrServiceData->rootModel = ssGetPath(ssGetRootSS(S));
    238 pCodeInstrServiceData->memUnitSize = memUnitSizeBytes;
    239 pCodeInstrServiceData->isProfilingEnabled = true;
    240 pCodeInstrServiceData->inTheLoopType = 0;
    241 pCodeInstrServiceData->silPilInterfaceFcn =
    242 "@coder.connectivity.SimulinkInterface.getSILPILInterface";
    243 return pCodeInstrServiceData;
    244}
    245
    246static void callStopHookAndFreeSFcnMemory(SimStruct *S)
    247{
    248 closeAndFreeTargetIOFd(S);
    249 if (ssGetPWork(S) != NULL) {
    250 int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4);
    251 int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5);
    252 if ((pIsXILApplicationStarted != NULL) && (*pIsXILApplicationStarted == 1))
    253 {
    254 {
    255 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    256 if (pXILUtils) {
    257 mxArray *rhs[3];
    258 const char * simulinkBlockPath = ssGetPath(S);
    259 rhs[ 0 ] = mxCreateString(
    260 "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    261 rhs[ 1 ] = mxCreateDoubleScalar( 0 );
    262 rhs[ 2 ] = mxCreateString(simulinkBlockPath);
    263 if (xilUtilsCallMATLAB(pXILUtils, 0, NULL, 3, rhs,
    264 "rtw.pil.SILPILInterface.sfunctionPILStopHook")
    265 != XIL_UTILS_SUCCESS) {
    266 } /* if */
    267 } /* if */
    268 }
    269 } /* if */
    270
    271 if (pIsXILApplicationStarted != NULL) {
    272 *pIsXILApplicationStarted = 0;
    273 } /* if */
    274 } /* if */
    275
    276 if (ssGetPWork(S) != NULL) {
    277 XIL_IOBuffer_T* IOBufferPtr;
    278 XIL_RtIOStreamData_T * rtIOStreamDataPtr = (XIL_RtIOStreamData_T *)
    279 ssGetPWorkValue(S, 0);
    280 SIL_DEBUGGING_DATA_T * silDebuggingDataPtr = (SIL_DEBUGGING_DATA_T *)
    281 ssGetPWorkValue(S, 2);
    282 if (rtIOStreamDataPtr != NULL) {
    283 {
    284 int errorStatus = rtIOStreamUnloadLib(&rtIOStreamDataPtr->libH);
    285 if (errorStatus) {
    286 ssSetErrorStatus( S,"rtIOStreamUnloadLib failed.");
    287 } /* if */
    288 }
    289
    290 mxFree(rtIOStreamDataPtr->lib);
    291 mxDestroyArray(rtIOStreamDataPtr->MATLABObject);
    292 mxFree(rtIOStreamDataPtr);
    293 ssSetPWorkValue(S, 0, NULL);
    294 } /* if */
    295
    296 if (silDebuggingDataPtr != NULL) {
    297 mxFree(silDebuggingDataPtr->componentBlockPath);
    298 mxFree(silDebuggingDataPtr->SILPILInterfaceFcnStr);
    299 mxFree(silDebuggingDataPtr);
    300 ssSetPWorkValue(S, 2, NULL);
    301 } /* if */
    302
    303 IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    304 if (IOBufferPtr != NULL) {
    305 mxFree(IOBufferPtr->data);
    306 mxFree(IOBufferPtr);
    307 ssSetPWorkValue(S, 1, NULL);
    308 } /* if */
    309
    310 closeAndFreeTargetIOFd(S);
    311 if (ssGetPWork(S) != NULL) {
    312 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    313 void * pComms = (void *) ssGetPWorkValue(S, 7);
    314 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    315 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    316 void * pCoderAssumptionsApp = (void *) ssGetPWorkValue(S, 12);
    317 if (pCodeInstrService != NULL) {
    318 uint8_T memUnitSizeBytes = 1;
    319 CodeInstrServiceData_T* pCodeInstrServiceData = codeInstrServiceData(S,
    320 memUnitSizeBytes);
    321 codeInstrHostAppSvcDestroy(pCodeInstrService, pCodeInstrServiceData);
    322 mxFree(pCodeInstrServiceData);
    323 } /* if */
    324
    325 ssSetPWorkValue(S, 10, NULL);
    326 if (pCoderAssumptionsApp != NULL) {
    327 coderAssumpHostAppSvcDestroy(pCoderAssumptionsApp);
    328 ssSetPWorkValue(S, 12, NULL);
    329 } /* if */
    330
    331 if (pXILService != NULL) {
    332 xilHostAppSvcDestroy(pXILService);
    333 ssSetPWorkValue(S, 9, NULL);
    334 } /* if */
    335
    336 if (pComms != NULL) {
    337 xilCommsDestroy(pComms);
    338 ssSetPWorkValue(S, 7, NULL);
    339 } /* if */
    340 } /* if */
    341 } /* if */
    342}
    343
    344static boolean_T processResponseError(SimStruct * S, uint8_T ** mxMemUnitPtrPtr)
    345{
    346 uint8_T errorId = **mxMemUnitPtrPtr;
    347 (*mxMemUnitPtrPtr)++;
    348 if (errorId) {
    349 {
    350 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    351 mxArray * rhs[ 2 ];
    352 rhs[0] = mxCreateString("PIL:pilverification:PILError");
    353 rhs[1] = mxCreateDoubleScalar(errorId);
    354 xilUtilsHandleError(pXILUtils, 2 , rhs );
    355 return XILHOSTAPPSVC_ERROR;
    356 }
    357 } /* if */
    358
    359 return XILHOSTAPPSVC_SUCCESS;
    360}
    361
    362static boolean_T processResponsePrintf(SimStruct * S, uint8_T ** mxMemUnitPtrPtr)
    363{
    364 const int TARGET_IO_SUCCESS = 0;
    365 uint8_T PRINTF_ERROR;
    366 uint16_T PRINTF_SIZE;
    367
    368 {
    369 {
    370 uint8_T * simDataMemUnitPtr;
    371 simDataMemUnitPtr = (uint8_T *) &PRINTF_ERROR;
    372
    373 {
    374 size_t num_elements = 1;
    375
    376 {
    377 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    378 num_elements, sizeof(uint8_T));
    379 }
    380 }
    381 }
    382 }
    383
    384 {
    385 {
    386 uint8_T * simDataMemUnitPtr;
    387 simDataMemUnitPtr = (uint8_T *) &PRINTF_SIZE;
    388
    389 {
    390 size_t num_elements = 1;
    391
    392 {
    393 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    394 num_elements, sizeof(uint16_T));
    395 }
    396 }
    397 }
    398 }
    399
    400 if (PRINTF_ERROR != TARGET_IO_SUCCESS) {
    401 {
    402 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    403 mxArray * rhs[ 2 ];
    404 rhs[0] = mxCreateString("PIL:pil:TargetIOError");
    405 rhs[1] = mxCreateDoubleScalar(PRINTF_ERROR);
    406 xilUtilsHandleError(pXILUtils, 2 , rhs );
    407 return XILHOSTAPPSVC_ERROR;
    408 }
    409 } else {
    410 uint8_T *pPrintBuff;
    411 pPrintBuff = *mxMemUnitPtrPtr;
    412 if (pPrintBuff[PRINTF_SIZE-1] == '\0') {
    413 mexPrintf("%s", pPrintBuff);
    414 } /* if */
    415 } /* if */
    416
    417 (*mxMemUnitPtrPtr) = (*mxMemUnitPtrPtr) + PRINTF_SIZE;
    418 return XILHOSTAPPSVC_SUCCESS;
    419}
    420
    421static boolean_T processResponseFopen(SimStruct * S, uint8_T ** mxMemUnitPtrPtr)
    422{
    423 uint16_T FOPEN_FID;
    424 uint16_T FOPEN_NAME_SIZE;
    425 targetIOFd_T *targetIOFdPtr;
    426
    427 {
    428 {
    429 uint8_T * simDataMemUnitPtr;
    430 simDataMemUnitPtr = (uint8_T *) &FOPEN_FID;
    431
    432 {
    433 size_t num_elements = 1;
    434
    435 {
    436 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    437 num_elements, sizeof(uint16_T));
    438 }
    439 }
    440 }
    441 }
    442
    443 {
    444 {
    445 uint8_T * simDataMemUnitPtr;
    446 simDataMemUnitPtr = (uint8_T *) &FOPEN_NAME_SIZE;
    447
    448 {
    449 size_t num_elements = 1;
    450
    451 {
    452 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    453 num_elements, sizeof(uint16_T));
    454 }
    455 }
    456 }
    457 }
    458
    459 targetIOFdPtr = (targetIOFd_T *) ssGetPWorkValue(S, 3);
    460 if (targetIOFdPtr != NULL) {
    461 /* check fid increments by 1 */
    462 if (targetIOFdPtr->fidOffset + 1 == FOPEN_FID) {
    463 targetIOFdPtr->fidOffset = FOPEN_FID;
    464 growTargetIOFd(S, targetIOFdPtr, targetIOFdPtr->fidOffset + 1);
    465 if (targetIOFdPtr->Fd != NULL) {
    466 uint8_T *pFopenBuff;
    467 targetIOFdPtr->Fd[targetIOFdPtr->fidOffset] = NULL;
    468 pFopenBuff = (*mxMemUnitPtrPtr);
    469 if (pFopenBuff[FOPEN_NAME_SIZE-1] == '\0') {
    470 FILE * tmpFd = NULL;
    471 tmpFd = fopen((char *) pFopenBuff,"w");
    472 if (tmpFd != NULL) {
    473 /* save the file descriptor */
    474 targetIOFdPtr->Fd[targetIOFdPtr->fidOffset] = tmpFd;
    475 } else {
    476 {
    477 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    478 mxArray * rhs[ 2 ];
    479 rhs[0] = mxCreateString("PIL:pil:TargetIOFopenError");
    480 rhs[1] = mxCreateString((char *) pFopenBuff);
    481 xilUtilsHandleError(pXILUtils, 2 , rhs );
    482 return XILHOSTAPPSVC_ERROR;
    483 }
    484 } /* if */
    485 } /* if */
    486 } /* if */
    487 } else {
    488 {
    489 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    490 mxArray * rhs[ 2 ];
    491 rhs[0] = mxCreateString("PIL:pil:TargetIOFopenFidError");
    492 rhs[1] = mxCreateDoubleScalar(FOPEN_FID);
    493 xilUtilsHandleError(pXILUtils, 2 , rhs );
    494 return XILHOSTAPPSVC_ERROR;
    495 }
    496 } /* if */
    497 } /* if */
    498
    499 (*mxMemUnitPtrPtr) = (*mxMemUnitPtrPtr) + FOPEN_NAME_SIZE;
    500 return XILHOSTAPPSVC_SUCCESS;
    501}
    502
    503static boolean_T processResponseFprintf(SimStruct * S, uint8_T
    504 ** mxMemUnitPtrPtr)
    505{
    506 const int TARGET_IO_SUCCESS = 0;
    507 uint8_T FPRINTF_ERROR;
    508 uint16_T FPRINTF_FID;
    509 uint16_T FPRINTF_SIZE;
    510
    511 {
    512 {
    513 uint8_T * simDataMemUnitPtr;
    514 simDataMemUnitPtr = (uint8_T *) &FPRINTF_ERROR;
    515
    516 {
    517 size_t num_elements = 1;
    518
    519 {
    520 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    521 num_elements, sizeof(uint8_T));
    522 }
    523 }
    524 }
    525 }
    526
    527 {
    528 {
    529 uint8_T * simDataMemUnitPtr;
    530 simDataMemUnitPtr = (uint8_T *) &FPRINTF_FID;
    531
    532 {
    533 size_t num_elements = 1;
    534
    535 {
    536 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    537 num_elements, sizeof(uint16_T));
    538 }
    539 }
    540 }
    541 }
    542
    543 {
    544 {
    545 uint8_T * simDataMemUnitPtr;
    546 simDataMemUnitPtr = (uint8_T *) &FPRINTF_SIZE;
    547
    548 {
    549 size_t num_elements = 1;
    550
    551 {
    552 copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr,
    553 num_elements, sizeof(uint16_T));
    554 }
    555 }
    556 }
    557 }
    558
    559 if (FPRINTF_ERROR != TARGET_IO_SUCCESS) {
    560 {
    561 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    562 mxArray * rhs[ 2 ];
    563 rhs[0] = mxCreateString("PIL:pil:TargetIOError");
    564 rhs[1] = mxCreateDoubleScalar(FPRINTF_ERROR);
    565 xilUtilsHandleError(pXILUtils, 2 , rhs );
    566 return XILHOSTAPPSVC_ERROR;
    567 }
    568 } else {
    569 targetIOFd_T * targetIOFdPtr = (targetIOFd_T *) ssGetPWorkValue(S, 3);
    570 if (targetIOFdPtr != NULL) {
    571 if (targetIOFdPtr->size > FPRINTF_FID) {
    572 if (targetIOFdPtr->Fd[FPRINTF_FID] != NULL) {
    573 uint8_T *pFprintfBuff;
    574 pFprintfBuff = (*mxMemUnitPtrPtr);
    575 if (pFprintfBuff[FPRINTF_SIZE-1] == '\0') {
    576 fprintf(targetIOFdPtr->Fd[FPRINTF_FID], "%s", pFprintfBuff);
    577 } /* if */
    578 } /* if */
    579 } /* if */
    580 } /* if */
    581 } /* if */
    582
    583 (*mxMemUnitPtrPtr) = (*mxMemUnitPtrPtr) + FPRINTF_SIZE ;
    584 return XILHOSTAPPSVC_SUCCESS;
    585}
    586
    587static boolean_T processResponseSignalRaised(SimStruct * S, uint8_T
    588 ** mxMemUnitPtrPtr)
    589{
    590 const char *signalStr[5] = { "SIGFPE", "SIGILL", "SIGABRT", "SIGSEGV",
    591 "Unknown Signal" };
    592
    593 uint8_T errorId = **mxMemUnitPtrPtr;
    594 (*mxMemUnitPtrPtr)++;
    595
    596 {
    597 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    598 mxArray * rhs[ 3 ];
    599 rhs[0] = mxCreateString("Connectivity:target:CaughtTargetSignalWithStderr");
    600 rhs[1] = mxCreateString(signalStr[errorId]);
    601 rhs[2] = mxCreateDoubleScalar(ssGetT(S));
    602 xilUtilsHandleError(pXILUtils, 3 , rhs );
    603 return XILHOSTAPPSVC_ERROR;
    604 }
    605}
    606
    607static boolean_T processErrorAndTargetIOResponseCases(SimStruct * S, const int
    608 responseId, uint8_T ** mxMemUnitPtrPtr)
    609{
    610 switch (responseId) {
    611 case RESPONSE_ERROR:
    612 {
    613 return processResponseError(S, mxMemUnitPtrPtr);
    614 }
    615
    616 case RESPONSE_PRINTF:
    617 {
    618 return processResponsePrintf(S, mxMemUnitPtrPtr);
    619 }
    620
    621 case RESPONSE_FOPEN:
    622 {
    623 return processResponseFopen(S, mxMemUnitPtrPtr);
    624 }
    625
    626 case RESPONSE_FPRINTF:
    627 {
    628 return processResponseFprintf(S, mxMemUnitPtrPtr);
    629 }
    630
    631 case RESPONSE_SIGNAL_RAISED:
    632 {
    633 return processResponseSignalRaised(S, mxMemUnitPtrPtr);
    634 }
    635
    636 default:
    637 {
    638 {
    639 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    640 mxArray * rhs[ 2 ];
    641 rhs[0] = mxCreateString("PIL:pilverification:UnknownResponseId");
    642 rhs[1] = mxCreateDoubleScalar(responseId);
    643 xilUtilsHandleError(pXILUtils, 2 , rhs );
    644 return XILHOSTAPPSVC_ERROR;
    645 }
    646 }
    647 } /* switch */
    648}
    649
    650static size_t getBusElementDimension(SimStruct * S, DTypeId dType, int_T
    651 offsetIdx, const int_T ** dimsOut, int_T * numDims)
    652{
    653 int_T numDimensions = ssGetBusElementNumDimensions(S, dType, offsetIdx);
    654 const int_T *dims = ssGetBusElementDimensions(S, dType, offsetIdx);
    655 size_t numElements = 1;
    656 int j = 0;
    657 for (j = 0; j< numDimensions; j++) {
    658 numElements *= dims[j];
    659 } /* for */
    660
    661 *dimsOut = dims;
    662 *numDims = numDimensions;
    663 return numElements;
    664}
    665
    666/* Process params function shared between mdlStart and mdlProcessParams */
    667static boolean_T processParams(SimStruct * S)
    668{
    669 if (ssGetPWork(S) != NULL) {
    670 int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5);
    671 if ((pIsXILApplicationStarted!=NULL) && (*pIsXILApplicationStarted==1)) {
    672 /* update run time params */
    673 ssUpdateAllTunableParamsAsRunTimeParams(S);
    674
    675 {
    676 uint8_T * mxMemUnitPtr;
    677 mwSize dataInSize = 0;
    678 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    679 if (IOBufferPtr != NULL) {
    680 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    681 if (pXILService != NULL) {
    682 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!=
    683 XILHOSTAPPSVC_SUCCESS) {
    684 return false;
    685 } /* if */
    686
    687 if (IOBufferPtr->data != NULL) {
    688 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    689
    690 /* write command id */
    691 *mxMemUnitPtr = (uint8_T) XIL_PROCESS_PARAMS_COMMAND;
    692 mxMemUnitPtr++;
    693
    694 {
    695 {
    696 uint8_T * simDataMemUnitPtr;
    697 uint32_T commandDataFcnid = 0;
    698 simDataMemUnitPtr = (uint8_T *) &commandDataFcnid;
    699
    700 {
    701 size_t num_elements = 1;
    702
    703 {
    704 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    705 num_elements, sizeof(uint32_T));
    706 }
    707 }
    708 }
    709 }
    710 } /* if */
    711 } /* if */
    712 } /* if */
    713 }
    714
    715 {
    716 {
    717 uint8_T * mxMemUnitPtr;
    718 mwSize dataInSize = 0;
    719 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    720
    721 /* provide the time information to the code instrumentation service */
    722 {
    723 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    724 time_T simTime = ssGetT(S);
    725 if (pCodeInstrService != NULL) {
    726 codeInstrHostAppSvcSetTime(pCodeInstrService, simTime);
    727 } /* if */
    728 }
    729
    730 /* dispatch command to the target */
    731 if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) {
    732 return false;
    733 } /* if */
    734
    735 {
    736 XILCommandResponseType commandResponseType =
    737 XIL_COMMAND_NOT_COMPLETE;
    738 while (commandResponseType != XIL_STEP_COMPLETE) {
    739 /* receive command from the target */
    740 mwSize dataInSize = 0;
    741 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    742 XILHOSTAPPSVC_SUCCESS) {
    743 return false;
    744 } /* if */
    745
    746 if (dataInSize>0) {
    747 size_t dataInMemUnitSize = dataInSize;
    748 uint8_T responseId = 0;
    749 uint8_T * mxMemUnitPtrEnd;
    750 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    751 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    752 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    753 /* read response id */
    754 responseId = *mxMemUnitPtr;
    755 mxMemUnitPtr++;
    756 switch (responseId) {
    757 case RESPONSE_ERROR:
    758 case RESPONSE_PRINTF:
    759 case RESPONSE_FOPEN:
    760 case RESPONSE_FPRINTF:
    761 case RESPONSE_SIGNAL_RAISED:
    762 {
    763 if (processErrorAndTargetIOResponseCases(S, responseId,
    764 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    765 return false;
    766 } /* if */
    767 break;
    768 }
    769
    770 default:
    771 {
    772 {
    773 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    774 mxArray * rhs[ 2 ];
    775 rhs[0] = mxCreateString(
    776 "PIL:pilverification:UnknownResponseId");
    777 rhs[1] = mxCreateDoubleScalar(responseId);
    778 xilUtilsHandleError(pXILUtils, 2 , rhs );
    779 return false;
    780 }
    781 break;
    782 }
    783 } /* switch */
    784 } /* while */
    785 } /* if */
    786 } /* while */
    787 }
    788 }
    789 }
    790 } /* if */
    791 } /* if */
    792
    793 return true;
    794}
    795
    796static boolean_T startAndSetupApplication(SimStruct *S)
    797{
    798 {
    799 {
    800 mxArray *rhs[4];
    801 const char * simulinkBlockPath = ssGetPath(S);
    802 rhs[ 0 ] = mxCreateString(
    803 "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    804 rhs[ 1 ] = mxCreateDoubleScalar( 0 );
    805 rhs[ 2 ] = mxCreateString(simulinkBlockPath);
    806 rhs[3] = mxCreateString("uint8");
    807
    808 {
    809 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    810 if (xilUtilsCallMATLAB(pXILUtils, 0, 0, 4, rhs,
    811 "rtw.pil.SILPILInterface.sfunctionPILStartHook")
    812 !=XIL_UTILS_SUCCESS) {
    813 return false;
    814 } /* if */
    815 }
    816 }
    817
    818 { /* record that the XIL application has started */
    819 int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5);
    820 *pIsXILApplicationStarted = 1;
    821 ssSetPWorkValue(S, 5, pIsXILApplicationStarted);
    822 }
    823 }
    824
    825 {
    826 mxArray *rhs[3];
    827 mxArray *lhs[5];
    828 const char * simulinkBlockPath = ssGetPath(S);
    829 rhs[ 0 ] = mxCreateString(
    830 "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    831 rhs[ 1 ] = mxCreateDoubleScalar( 0 );
    832 rhs[ 2 ] = mxCreateString(simulinkBlockPath);
    833
    834 {
    835 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    836 if (xilUtilsCallMATLAB(pXILUtils, 5, lhs, 3, rhs,
    837 "rtw.pil.SILPILInterface.sfunctionGetRtIOStreamInfoHook")
    838 !=XIL_UTILS_SUCCESS) {
    839 return false;
    840 } /* if */
    841 }
    842
    843 {
    844 XIL_RtIOStreamData_T* rtIOStreamDataPtr = (XIL_RtIOStreamData_T*) mxCalloc
    845 (1, sizeof(XIL_RtIOStreamData_T));
    846 if (rtIOStreamDataPtr == NULL) {
    847 ssSetErrorStatus( S,"Error in allocating memory through mxCalloc.");
    848 return false;
    849 } /* if */
    850
    851 rtIOStreamDataPtr->lib = mxArrayToString(lhs[0]);
    852 rtIOStreamDataPtr->MATLABObject = mxDuplicateArray(lhs[1]);
    853 mexMakeMemoryPersistent(rtIOStreamDataPtr);
    854 mexMakeMemoryPersistent(rtIOStreamDataPtr->lib);
    855 mexMakeArrayPersistent(rtIOStreamDataPtr->MATLABObject);
    856 rtIOStreamDataPtr->streamID = *mxGetPr(lhs[2]);
    857 rtIOStreamDataPtr->recvTimeout = *mxGetPr(lhs[3]);
    858 rtIOStreamDataPtr->sendTimeout = *mxGetPr(lhs[4]);
    859 rtIOStreamDataPtr->isRtIOStreamCCall = 1;
    860 rtIOStreamDataPtr->ioMxClassID = mxUINT8_CLASS;
    861 rtIOStreamDataPtr->ioDataSize = sizeof(uint8_T);
    862 rtIOStreamDataPtr->targetRecvBufferSizeBytes = 50000;
    863 rtIOStreamDataPtr->targetSendBufferSizeBytes = 50000;
    864
    865 {
    866 int errorStatus = rtIOStreamLoadLib(&rtIOStreamDataPtr->libH,
    867 rtIOStreamDataPtr->lib);
    868 if (errorStatus) {
    869 ssSetErrorStatus( S,"rtIOStreamLoadLib failed.");
    870 return false;
    871 } /* if */
    872 }
    873
    874 ssSetPWorkValue(S, 0, rtIOStreamDataPtr);
    875 }
    876
    877 {
    878 int i;
    879 for (i=0; i<5; i++) {
    880 mxDestroyArray(lhs[i]);
    881 } /* for */
    882 }
    883 }
    884
    885 {
    886 XIL_IOBuffer_T* IOBufferPtr = (XIL_IOBuffer_T *) mxCalloc(1, sizeof
    887 (XIL_IOBuffer_T));
    888 if (IOBufferPtr == NULL) {
    889 ssSetErrorStatus( S,"Error in allocating memory through mxCalloc.");
    890 return false;
    891 } /* if */
    892
    893 mexMakeMemoryPersistent(IOBufferPtr);
    894 ssSetPWorkValue(S, 1, IOBufferPtr);
    895 }
    896
    897 {
    898 SIL_DEBUGGING_DATA_T* silDebuggingDataPtr = (SIL_DEBUGGING_DATA_T*) mxCalloc
    899 (1, sizeof(SIL_DEBUGGING_DATA_T));
    900 const char * simulinkBlockPath = ssGetPath(S);
    901 if (silDebuggingDataPtr == NULL) {
    902 ssSetErrorStatus( S,
    903 "Error in allocating memory through mxCalloc for SIL_DEBUGGING_DATA_T.");
    904 return false;
    905 } /* if */
    906
    907 silDebuggingDataPtr->componentBlockPath = strcpy((char *) mxCalloc(strlen
    908 (simulinkBlockPath)+1, sizeof(char)), simulinkBlockPath);
    909 silDebuggingDataPtr->SILPILInterfaceFcnStr = strcpy((char*) mxCalloc(57,
    910 sizeof(char)), "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    911 silDebuggingDataPtr->inTheLoopType = 0;
    912 mexMakeMemoryPersistent(silDebuggingDataPtr);
    913 mexMakeMemoryPersistent(silDebuggingDataPtr->componentBlockPath);
    914 mexMakeMemoryPersistent(silDebuggingDataPtr->SILPILInterfaceFcnStr);
    915 ssSetPWorkValue(S, 2, silDebuggingDataPtr);
    916 }
    917
    918 {
    919 targetIOFd_T * targetIOFdPtr = (targetIOFd_T *) mxCalloc(1, sizeof
    920 (targetIOFd_T));
    921 if (targetIOFdPtr == NULL) {
    922 return false;
    923 } /* if */
    924
    925 mexMakeMemoryPersistent(targetIOFdPtr);
    926 targetIOFdPtr->size = 0;
    927 targetIOFdPtr->Fd = NULL;
    928 targetIOFdPtr->fidOffset = -1;
    929 ssSetPWorkValue(S, 3, targetIOFdPtr);
    930 }
    931
    932 {
    933 void* pConnectionOptions = NULL;
    934 void* pComms = NULL;
    935 void* pXILService = NULL;
    936 void* pMemUnitTransformer = NULL;
    937 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    938 uint8_T memUnitSizeBytes = 1;
    939 uint8_T ioDataTypeSizeBytes = sizeof(uint8_T);
    940 XIL_RtIOStreamData_T * rtIOStreamDataPtr = (XIL_RtIOStreamData_T *)
    941 ssGetPWorkValue(S, 0);
    942 SIL_DEBUGGING_DATA_T * silDebuggingDataPtr = (SIL_DEBUGGING_DATA_T *)
    943 ssGetPWorkValue(S, 2);
    944 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    945 void* pCodeInstrService = NULL;
    946 CodeInstrServiceData_T* pCodeInstrServiceData = codeInstrServiceData(S,
    947 memUnitSizeBytes);
    948 void * pCoderAssumptionsApp = NULL;
    949 if (xilCommsCreate(&pComms, rtIOStreamDataPtr, silDebuggingDataPtr,
    950 memUnitSizeBytes, pMemUnitTransformer, pXILUtils, 0) !=
    951 XILCOMMS_RTIOSTREAM_SUCCESS) {
    952 return false;
    953 } /* if */
    954
    955 if (xilHostAppSvcCreate(&pXILService, pComms, pXILUtils, IOBufferPtr,
    956 memUnitSizeBytes, ioDataTypeSizeBytes, 0) !=
    957 XILHOSTAPPSVC_SUCCESS) {
    958 return false;
    959 } /* if */
    960
    961 {
    962 void * pCodeInstrMultiRunData = NULL;
    963 pCodeInstrMultiRunData = (void *) ssGetPWorkValue(S, 11);
    964 if (codeInstrHostAppSvcCreate(&pCodeInstrService, pCodeInstrServiceData,
    965 pComms, pMemUnitTransformer, 32, pXILUtils, memUnitSizeBytes, 0,
    966 pCodeInstrMultiRunData) != CODEINSTRHOSTAPPSVC_SUCCESS) {
    967 mxFree(pCodeInstrServiceData);
    968 return false;
    969 } /* if */
    970
    971 mxFree(pCodeInstrServiceData);
    972 }
    973
    974 {
    975 mxArray * codeGenComponent = mxCreateString("FCC_Sys_New_harness");
    976 mxArray *rhs[3];
    977 const char * simulinkBlockPath = ssGetPath(S);
    978 rhs[ 0 ] = mxCreateString(
    979 "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    980 rhs[ 1 ] = mxCreateDoubleScalar( 0 );
    981 rhs[ 2 ] = mxCreateString(simulinkBlockPath);
    982 if (coderAssumpHostAppSvcCreate(&pCoderAssumptionsApp, pComms, pXILUtils,
    983 0, 1, codeGenComponent, rhs[0], rhs[1], rhs[2], 1, 0, 1) !=
    984 CODERASSUMPHOSTAPPSVC_SUCCESS) {
    985 return false;
    986 } /* if */
    987 }
    988
    989 xilCommsRegisterApplication(pComms, pXILService);
    990 xilCommsRegisterApplication(pComms, pCodeInstrService);
    991 xilCommsRegisterApplication(pComms, pCoderAssumptionsApp);
    992 ssSetPWorkValue(S, 9, pXILService);
    993 ssSetPWorkValue(S, 7, pComms);
    994 ssSetPWorkValue(S, 6, pXILUtils);
    995 ssSetPWorkValue(S, 10, pCodeInstrService);
    996 ssSetPWorkValue(S, 12, pCoderAssumptionsApp);
    997 }
    998
    999 {
    1000 uint8_T * mxMemUnitPtr;
    1001 mwSize dataInSize = 0;
    1002 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1003 if (IOBufferPtr != NULL) {
    1004 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    1005 if (pXILService != NULL) {
    1006 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!=
    1007 XILHOSTAPPSVC_SUCCESS) {
    1008 return false;
    1009 } /* if */
    1010
    1011 if (IOBufferPtr->data != NULL) {
    1012 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1013
    1014 /* write command id */
    1015 *mxMemUnitPtr = (uint8_T) XIL_INIT_COMMAND;
    1016 mxMemUnitPtr++;
    1017
    1018 {
    1019 {
    1020 uint8_T * simDataMemUnitPtr;
    1021 uint32_T commandDataFcnid = 0;
    1022 simDataMemUnitPtr = (uint8_T *) &commandDataFcnid;
    1023
    1024 {
    1025 size_t num_elements = 1;
    1026
    1027 {
    1028 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    1029 num_elements, sizeof(uint32_T));
    1030 }
    1031 }
    1032 }
    1033 }
    1034 } /* if */
    1035 } /* if */
    1036 } /* if */
    1037 }
    1038
    1039 {
    1040 {
    1041 uint8_T * mxMemUnitPtr;
    1042 mwSize dataInSize = 0;
    1043 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1044
    1045 /* provide the time information to the code instrumentation service */
    1046 {
    1047 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    1048 time_T simTime = ssGetT(S);
    1049 if (pCodeInstrService != NULL) {
    1050 codeInstrHostAppSvcSetTime(pCodeInstrService, simTime);
    1051 } /* if */
    1052 }
    1053
    1054 /* dispatch command to the target */
    1055 if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) {
    1056 return false;
    1057 } /* if */
    1058
    1059 {
    1060 XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE;
    1061 while (commandResponseType != XIL_STEP_COMPLETE) {
    1062 /* receive command from the target */
    1063 mwSize dataInSize = 0;
    1064 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    1065 XILHOSTAPPSVC_SUCCESS) {
    1066 return false;
    1067 } /* if */
    1068
    1069 if (dataInSize>0) {
    1070 size_t dataInMemUnitSize = dataInSize;
    1071 uint8_T responseId = 0;
    1072 uint8_T * mxMemUnitPtrEnd;
    1073
    1074#define RESPONSE_TYPE_SIZE 7
    1075
    1076 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1077 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    1078 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    1079 /* read response id */
    1080 responseId = *mxMemUnitPtr;
    1081 mxMemUnitPtr++;
    1082 switch (responseId) {
    1083 case RESPONSE_ERROR:
    1084 case RESPONSE_PRINTF:
    1085 case RESPONSE_FOPEN:
    1086 case RESPONSE_FPRINTF:
    1087 case RESPONSE_SIGNAL_RAISED:
    1088 {
    1089 if (processErrorAndTargetIOResponseCases(S, responseId,
    1090 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    1091 return false;
    1092 } /* if */
    1093 break;
    1094 }
    1095
    1096 case RESPONSE_TYPE_SIZE:
    1097 {
    1098 uint8_T typeBytes;
    1099 uint8_T typeId = *mxMemUnitPtr;
    1100 mxMemUnitPtr++;
    1101 typeBytes = *mxMemUnitPtr;
    1102 mxMemUnitPtr++;
    1103 switch (typeId) {
    1104 case SS_SINGLE:
    1105 {
    1106 if (typeBytes != 4) {
    1107 {
    1108 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1109 mxArray * rhs[ 3 ];
    1110 rhs[0] = mxCreateString(
    1111 "PIL:pilverification:SingleUnsupported");
    1112 rhs[1] = mxCreateDoubleScalar(4);
    1113 rhs[2] = mxCreateDoubleScalar(typeBytes);
    1114 xilUtilsHandleError(pXILUtils, 3 , rhs );
    1115 return false;
    1116 }
    1117 } /* if */
    1118 break;
    1119 }
    1120
    1121 case SS_DOUBLE:
    1122 {
    1123 if (typeBytes != 8) {
    1124 {
    1125 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1126 mxArray * rhs[ 3 ];
    1127 rhs[0] = mxCreateString(
    1128 "PIL:pilverification:DoubleUnsupported");
    1129 rhs[1] = mxCreateDoubleScalar(8);
    1130 rhs[2] = mxCreateDoubleScalar(typeBytes);
    1131 xilUtilsHandleError(pXILUtils, 3 , rhs );
    1132 return false;
    1133 }
    1134 } /* if */
    1135 break;
    1136 }
    1137
    1138 default:
    1139 {
    1140 {
    1141 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1142 mxArray * rhs[ 2 ];
    1143 rhs[0] = mxCreateString(
    1144 "PIL:pilverification:UnknownTypeId");
    1145 rhs[1] = mxCreateDoubleScalar(typeId);
    1146 xilUtilsHandleError(pXILUtils, 2 , rhs );
    1147 return false;
    1148 }
    1149 break;
    1150 }
    1151 } /* switch */
    1152 break;
    1153 }
    1154
    1155 default:
    1156 {
    1157 {
    1158 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1159 mxArray * rhs[ 2 ];
    1160 rhs[0] = mxCreateString(
    1161 "PIL:pilverification:UnknownResponseId");
    1162 rhs[1] = mxCreateDoubleScalar(responseId);
    1163 xilUtilsHandleError(pXILUtils, 2 , rhs );
    1164 return false;
    1165 }
    1166 break;
    1167 }
    1168 } /* switch */
    1169 } /* while */
    1170 } /* if */
    1171 } /* while */
    1172 }
    1173 }
    1174 }
    1175
    1176 /* initialize parameters */
    1177 if (!processParams(S)) {
    1178 return false;
    1179 } /* if */
    1180
    1181 {
    1182 /* DataInterface: output, 1 */
    1183 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, 0);
    1184 }
    1185
    1186 {
    1187 /* DataInterface: output, 2 */
    1188 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, 1);
    1189 }
    1190
    1191 {
    1192 /* DataInterface: output, 3 */
    1193 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, 2);
    1194 }
    1195
    1196 return true;
    1197}
    1198
    1199static void sendInitializeCommand(SimStruct *S)
    1200{
    1201 {
    1202 uint8_T * mxMemUnitPtr;
    1203 mwSize dataInSize = 0;
    1204 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1205 if (IOBufferPtr != NULL) {
    1206 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    1207 if (pXILService != NULL) {
    1208 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!=
    1209 XILHOSTAPPSVC_SUCCESS) {
    1210 return;
    1211 } /* if */
    1212
    1213 if (IOBufferPtr->data != NULL) {
    1214 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1215
    1216 /* write command id */
    1217 *mxMemUnitPtr = (uint8_T) XIL_INITIALIZE_COMMAND;
    1218 mxMemUnitPtr++;
    1219
    1220 {
    1221 {
    1222 uint8_T * simDataMemUnitPtr;
    1223 uint32_T commandDataFcnid = 0;
    1224 simDataMemUnitPtr = (uint8_T *) &commandDataFcnid;
    1225
    1226 {
    1227 size_t num_elements = 1;
    1228
    1229 {
    1230 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    1231 num_elements, sizeof(uint32_T));
    1232 }
    1233 }
    1234 }
    1235 }
    1236 } /* if */
    1237 } /* if */
    1238 } /* if */
    1239 }
    1240
    1241 {
    1242 {
    1243 uint8_T * mxMemUnitPtr;
    1244 mwSize dataInSize = 0;
    1245 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1246
    1247 /* provide the time information to the code instrumentation service */
    1248 {
    1249 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    1250 time_T simTime = ssGetT(S);
    1251 if (pCodeInstrService != NULL) {
    1252 codeInstrHostAppSvcSetTime(pCodeInstrService, simTime);
    1253 } /* if */
    1254 }
    1255
    1256 /* dispatch command to the target */
    1257 if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) {
    1258 return;
    1259 } /* if */
    1260
    1261 {
    1262 XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE;
    1263 while (commandResponseType != XIL_STEP_COMPLETE) {
    1264 /* receive command from the target */
    1265 mwSize dataInSize = 0;
    1266 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    1267 XILHOSTAPPSVC_SUCCESS) {
    1268 return;
    1269 } /* if */
    1270
    1271 if (dataInSize>0) {
    1272 size_t dataInMemUnitSize = dataInSize;
    1273 uint8_T responseId = 0;
    1274 uint8_T * mxMemUnitPtrEnd;
    1275 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1276 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    1277 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    1278 /* read response id */
    1279 responseId = *mxMemUnitPtr;
    1280 mxMemUnitPtr++;
    1281 switch (responseId) {
    1282 case RESPONSE_ERROR:
    1283 case RESPONSE_PRINTF:
    1284 case RESPONSE_FOPEN:
    1285 case RESPONSE_FPRINTF:
    1286 case RESPONSE_SIGNAL_RAISED:
    1287 {
    1288 if (processErrorAndTargetIOResponseCases(S, responseId,
    1289 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    1290 return;
    1291 } /* if */
    1292 break;
    1293 }
    1294
    1295 case RESPONSE_OUTPUT_PRE_DATA:
    1296 {
    1297 break;
    1298 }
    1299
    1300 case RESPONSE_OUTPUT_DATA:
    1301 {
    1302 {
    1303 /* DataInterface: output, 1 */
    1304 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S,
    1305 0);
    1306
    1307 {
    1308 uint8_T * simDataMemUnitPtr;
    1309
    1310 /* DataInterface: output, 1 */
    1311 simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr;
    1312
    1313 {
    1314 size_t num_elements = 1;
    1315
    1316 {
    1317 copyIOData(simDataMemUnitPtr, mxMemUnitPtr,
    1318 &mxMemUnitPtr, num_elements, sizeof(int16_T));
    1319 }
    1320 }
    1321 }
    1322 }
    1323
    1324 {
    1325 /* DataInterface: output, 2 */
    1326 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S,
    1327 1);
    1328
    1329 {
    1330 uint8_T * simDataMemUnitPtr;
    1331
    1332 /* DataInterface: output, 2 */
    1333 simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr;
    1334
    1335 {
    1336 size_t num_elements = 1;
    1337
    1338 {
    1339 copyIOData(simDataMemUnitPtr, mxMemUnitPtr,
    1340 &mxMemUnitPtr, num_elements, sizeof(int16_T));
    1341 }
    1342 }
    1343 }
    1344 }
    1345
    1346 {
    1347 /* DataInterface: output, 3 */
    1348 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S,
    1349 2);
    1350
    1351 {
    1352 uint8_T * simDataMemUnitPtr;
    1353
    1354 /* DataInterface: output, 3 */
    1355 simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr;
    1356
    1357 {
    1358 size_t num_elements = 1;
    1359
    1360 {
    1361 copyIOData(simDataMemUnitPtr, mxMemUnitPtr,
    1362 &mxMemUnitPtr, num_elements, sizeof(int16_T));
    1363 }
    1364 }
    1365 }
    1366 }
    1367 break;
    1368 }
    1369
    1370 default:
    1371 {
    1372 {
    1373 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1374 mxArray * rhs[ 2 ];
    1375 rhs[0] = mxCreateString(
    1376 "PIL:pilverification:UnknownResponseId");
    1377 rhs[1] = mxCreateDoubleScalar(responseId);
    1378 xilUtilsHandleError(pXILUtils, 2 , rhs );
    1379 return;
    1380 }
    1381 break;
    1382 }
    1383 } /* switch */
    1384 } /* while */
    1385 } /* if */
    1386 } /* while */
    1387 }
    1388 }
    1389 }
    1390}
    1391
    1392/* This function checks the attributes of tunable parameters. */
    1393#define MDL_CHECK_PARAMETERS
    1394#if defined(MDL_CHECK_PARAMETERS) && defined(MATLAB_MEX_FILE)
    1395
    1396static void mdlCheckParameters(SimStruct *S)
    1397{
    1398}
    1399
    1400#endif /* MDL_CHECK_PARAMETERS */
    1401
    1402static void mdlInitializeSizes(SimStruct *S)
    1403{
    1404 ssSetNumSFcnParams(S, 0); /* Number of expected parameters */
    1405 if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {
    1406
    1407#if defined(MDL_CHECK_PARAMETERS)
    1408
    1409 mdlCheckParameters(S);
    1410
    1411#endif
    1412
    1413 if (ssGetErrorStatus(S) != (NULL))
    1414 return;
    1415 } else {
    1416 /* Parameter mismatch will be reported by Simulink */
    1417 return;
    1418 }
    1419
    1420 ssSetNumContStates(S, 0);
    1421 ssSetNumDiscStates(S, 0);
    1422
    1423 /* no support for SimState */
    1424 ssSetSimStateCompliance(S, DISALLOW_SIM_STATE);
    1425
    1426 /* Allow signal dimensions greater than 2 */
    1427 ssAllowSignalsWithMoreThan2D(S);
    1428
    1429 /* Allow fixed-point data types with 33 or more bits */
    1430 ssFxpSetU32BitRegionCompliant(S,1);
    1431 ssSetRTWGeneratedSFcn(S, 4);
    1432 if (!ssSetNumInputPorts(S, 0))
    1433 return;
    1434 if (!ssSetNumOutputPorts(S, 3))
    1435 return;
    1436
    1437 /* Output Port 0 */
    1438 if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) {
    1439 DTypeId dataTypeId = INVALID_DTYPE_ID;
    1440
    1441 /* set datatype */
    1442 dataTypeId = 4;
    1443 ssSetOutputPortDataType(S, 0, dataTypeId);
    1444 }
    1445
    1446 /* dimensions */
    1447 {
    1448 DECL_AND_INIT_DIMSINFO(di);
    1449 int_T dims[ 1 ] = { 1 };
    1450
    1451 di.numDims = 1;
    1452 di.dims = dims;
    1453 di.width = 1;
    1454 ssSetOutputPortDimensionInfo(S, 0, &di);
    1455 }
    1456
    1457 ssSetOutputPortDimensionsMode(S, 0, FIXED_DIMS_MODE);
    1458
    1459 /* complexity */
    1460 ssSetOutputPortComplexSignal(S, 0, COMPLEX_NO);
    1461
    1462 /* using hybrid block and port based sample times */
    1463 ssSetOutputPortSampleTime(S, 0, 0.001);
    1464 ssSetOutputPortOffsetTime(S, 0, 0);
    1465
    1466 /* sampling mode */
    1467 ssSetOutputPortFrameData(S, 0, FRAME_NO);
    1468
    1469 /* units */
    1470 if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) {
    1471
    1472#if defined (MATLAB_MEX_FILE)
    1473
    1474 UnitId unitIdReg;
    1475 ssRegisterUnitFromExpr(
    1476 S,
    1477 "",
    1478 &unitIdReg);
    1479 if (unitIdReg == INVALID_UNIT_ID)
    1480 return;
    1481 ssSetOutputPortUnit(S, 0, unitIdReg);
    1482
    1483#endif
    1484
    1485 } /* Output Port 1 */
    1486
    1487 if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) {
    1488 DTypeId dataTypeId = INVALID_DTYPE_ID;
    1489
    1490 /* set datatype */
    1491 dataTypeId = 4;
    1492 ssSetOutputPortDataType(S, 1, dataTypeId);
    1493 }
    1494
    1495 /* dimensions */
    1496 {
    1497 DECL_AND_INIT_DIMSINFO(di);
    1498 int_T dims[ 1 ] = { 1 };
    1499
    1500 di.numDims = 1;
    1501 di.dims = dims;
    1502 di.width = 1;
    1503 ssSetOutputPortDimensionInfo(S, 1, &di);
    1504 }
    1505
    1506 ssSetOutputPortDimensionsMode(S, 1, FIXED_DIMS_MODE);
    1507
    1508 /* complexity */
    1509 ssSetOutputPortComplexSignal(S, 1, COMPLEX_NO);
    1510
    1511 /* using hybrid block and port based sample times */
    1512 ssSetOutputPortSampleTime(S, 1, 0.001);
    1513 ssSetOutputPortOffsetTime(S, 1, 0);
    1514
    1515 /* sampling mode */
    1516 ssSetOutputPortFrameData(S, 1, FRAME_NO);
    1517
    1518 /* units */
    1519 if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) {
    1520
    1521#if defined (MATLAB_MEX_FILE)
    1522
    1523 UnitId unitIdReg;
    1524 ssRegisterUnitFromExpr(
    1525 S,
    1526 "",
    1527 &unitIdReg);
    1528 if (unitIdReg == INVALID_UNIT_ID)
    1529 return;
    1530 ssSetOutputPortUnit(S, 1, unitIdReg);
    1531
    1532#endif
    1533
    1534 } /* Output Port 2 */
    1535
    1536 if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) {
    1537 DTypeId dataTypeId = INVALID_DTYPE_ID;
    1538
    1539 /* set datatype */
    1540 dataTypeId = 4;
    1541 ssSetOutputPortDataType(S, 2, dataTypeId);
    1542 }
    1543
    1544 /* dimensions */
    1545 {
    1546 DECL_AND_INIT_DIMSINFO(di);
    1547 int_T dims[ 1 ] = { 1 };
    1548
    1549 di.numDims = 1;
    1550 di.dims = dims;
    1551 di.width = 1;
    1552 ssSetOutputPortDimensionInfo(S, 2, &di);
    1553 }
    1554
    1555 ssSetOutputPortDimensionsMode(S, 2, FIXED_DIMS_MODE);
    1556
    1557 /* complexity */
    1558 ssSetOutputPortComplexSignal(S, 2, COMPLEX_NO);
    1559
    1560 /* using hybrid block and port based sample times */
    1561 ssSetOutputPortSampleTime(S, 2, 0.001);
    1562 ssSetOutputPortOffsetTime(S, 2, 0);
    1563
    1564 /* sampling mode */
    1565 ssSetOutputPortFrameData(S, 2, FRAME_NO);
    1566
    1567 /* units */
    1568 if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) {
    1569
    1570#if defined (MATLAB_MEX_FILE)
    1571
    1572 UnitId unitIdReg;
    1573 ssRegisterUnitFromExpr(
    1574 S,
    1575 "",
    1576 &unitIdReg);
    1577 if (unitIdReg == INVALID_UNIT_ID)
    1578 return;
    1579 ssSetOutputPortUnit(S, 2, unitIdReg);
    1580
    1581#endif
    1582
    1583 } /* using hybrid block and port based sample times */
    1584
    1585 ssSetNumSampleTimes(S, 2);
    1586
    1587 /* this s-function is sample time dependent: do not allow sub-models containing it to inherit sample times */
    1588 ssSetModelReferenceSampleTimeInheritanceRule(S,
    1589 DISALLOW_SAMPLE_TIME_INHERITANCE);
    1590 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S) ) {
    1591 ssSetNumPWork(S, 0);
    1592 } else {
    1593 ssSetNumPWork(S, 13);
    1594 } /* if */
    1595
    1596 ssSetNumRWork(S, 0);
    1597 ssSetNumIWork(S, 0);
    1598 ssSetNumModes(S, 0);
    1599 ssSetNumNonsampledZCs(S, 0);
    1600
    1601 {
    1602 uint_T options = 0;
    1603
    1604 /* using hybrid block and port based sample times */
    1605 options |= SS_OPTION_PORT_SAMPLE_TIMES_ASSIGNED;
    1606
    1607 /* do not allow (including inheritance of) constant block-based sample times*/
    1608 options |= SS_OPTION_DISALLOW_CONSTANT_SAMPLE_TIME;
    1609 options |= SS_OPTION_SUPPORTS_ALIAS_DATA_TYPES;
    1610 options |= SS_OPTION_CALL_TERMINATE_ON_EXIT;
    1611 ssSetOptions(S, options);
    1612 }
    1613
    1614 ssSetModelReferenceNormalModeSupport(S, MDL_START_AND_MDL_PROCESS_PARAMS_OK);
    1615}
    1616
    1617#define MDL_SET_INPUT_PORT_SAMPLE_TIME /* Change to #undef to remove function */
    1618#if defined(MDL_SET_INPUT_PORT_SAMPLE_TIME) && defined(MATLAB_MEX_FILE)
    1619
    1620static void mdlSetInputPortSampleTime(SimStruct *S, int_T portIdx, real_T
    1621 sampleTime, real_T offsetTime)
    1622{
    1623 /* sample times are fully specified */
    1624}
    1625
    1626#endif /* MDL_SET_INPUT_PORT_SAMPLE_TIME */
    1627
    1628#define MDL_SET_OUTPUT_PORT_SAMPLE_TIME /* Change to #undef to remove function */
    1629#if defined(MDL_SET_OUTPUT_PORT_SAMPLE_TIME) && defined(MATLAB_MEX_FILE)
    1630
    1631static void mdlSetOutputPortSampleTime(SimStruct *S, int_T portIdx, real_T
    1632 sampleTime, real_T offsetTime)
    1633{
    1634 /* sample times are fully specified */
    1635}
    1636
    1637#endif /* MDL_SET_OUTPUT_PORT_SAMPLE_TIME */
    1638
    1639static void mdlInitializeSampleTimes(SimStruct *S)
    1640{
    1641 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    1642 return;
    1643 } /* if */
    1644
    1645 /* using hybrid block and port based sample times */
    1646 ssSetSampleTime(S, 0, 0.001);
    1647 ssSetOffsetTime(S, 0, 0);
    1648 ssSetSampleTime(S, 1, 0.01);
    1649 ssSetOffsetTime(S, 1, 0);
    1650}
    1651
    1652#define MDL_SETUP_RUNTIME_RESOURCES /* Change to #undef to remove function */
    1653#if defined(MDL_SETUP_RUNTIME_RESOURCES)
    1654
    1655static void mdlSetupRuntimeResources(SimStruct *S)
    1656{
    1657 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    1658 return;
    1659 } /* if */
    1660
    1661 {
    1662 mxArray * error = NULL;
    1663 error = mexCallMATLABWithTrap( 0, NULL, 0, NULL,
    1664 "rtw.pil.checkEmbeddedCoderInstalled");
    1665 if (error != NULL) {
    1666 mexCallMATLAB( 0, NULL, 1, &error, "throw");
    1667 } /* if */
    1668 }
    1669
    1670 {
    1671 mxArray * lhs[1];
    1672 mxArray * error = NULL;
    1673 char * installVersion;
    1674 error = mexCallMATLABWithTrap(1, lhs, 0, NULL, "rtw.pil.getPILVersion");
    1675 if (error != NULL) {
    1676 mxDestroyArray(error);
    1677 ssSetErrorStatus( S,
    1678 "Failed to determine the installed In-the-Loop version for comparison against the In-the-Loop s-function version (release 9.8 (R2020a)_13). To avoid this error, remove the In-the-Loop s-function from your MATLAB path (e.g. delete it or move to a clean working directory).");
    1679 return;
    1680 } /* if */
    1681
    1682 if (mxIsEmpty(lhs[0])) {
    1683 ssSetErrorStatus( S,"rtw.pil.getPILVersion returned empty!");
    1684 return;
    1685 } /* if */
    1686
    1687 installVersion = mxArrayToString(lhs[0]);
    1688 mxDestroyArray(lhs[0]);
    1689 if (installVersion == NULL) {
    1690 ssSetErrorStatus( S,"Failed to determine installed In-the-Loop version.");
    1691 return;
    1692 } /* if */
    1693
    1694 if (strcmp(installVersion, "9.8 (R2020a)_13") != 0) {
    1695 ssSetErrorStatus( S,
    1696 "The In-the-Loop s-function is incompatible with the installed In-the-Loop version (see ver('matlab')); it was generated for release 9.8 (R2020a)_13. To avoid this error, remove the In-the-Loop s-function from your MATLAB path (e.g. delete it or move to a clean working directory)");
    1697 return;
    1698 } /* if */
    1699
    1700 mxFree(installVersion);
    1701 }
    1702
    1703 {
    1704 int retValXILUtils = XIL_UTILS_SUCCESS;
    1705 void* pXILUtils = NULL;
    1706 retValXILUtils = xilSimulinkUtilsCreate(&pXILUtils, S);
    1707 if (retValXILUtils!=XIL_UTILS_SUCCESS) {
    1708 ssSetErrorStatus( S,"Error instantiating XIL Utils!");
    1709 return;
    1710 } /* if */
    1711
    1712 ssSetPWorkValue(S, 6, pXILUtils);
    1713 }
    1714
    1715 {
    1716 int * pCommErrorOccurred = (int *) mxCalloc(1, sizeof(int));
    1717 if (pCommErrorOccurred == NULL) {
    1718 ssSetErrorStatus( S,
    1719 "Error in allocating memory for pCommErrorOccurred through mxCalloc.");
    1720 return;
    1721 } /* if */
    1722
    1723 *pCommErrorOccurred = 0;
    1724 mexMakeMemoryPersistent(pCommErrorOccurred);
    1725 ssSetPWorkValue(S, 4, pCommErrorOccurred);
    1726 }
    1727
    1728 {
    1729 int * pIsXILApplicationStarted = (int *) mxCalloc(1, sizeof(int));
    1730 if (pIsXILApplicationStarted == NULL) {
    1731 ssSetErrorStatus( S,
    1732 "Error in allocating memory for pIsXILApplicationStarted through mxCalloc.");
    1733 return;
    1734 } /* if */
    1735
    1736 *pIsXILApplicationStarted = 0;
    1737 mexMakeMemoryPersistent(pIsXILApplicationStarted);
    1738 ssSetPWorkValue(S, 5, pIsXILApplicationStarted);
    1739 }
    1740
    1741 {
    1742 mxArray *rhs[4];
    1743 mxArray *lhs[1];
    1744 char * rootLoggingPath;
    1745 const char * simulinkBlockPath = ssGetPath(S);
    1746 rhs[ 0 ] = mxCreateString(
    1747 "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    1748 rhs[ 1 ] = mxCreateDoubleScalar( 0 );
    1749 rhs[ 2 ] = mxCreateString(simulinkBlockPath);
    1750 rhs[3] = mxCreateString(ssGetPath(ssGetRootSS(S)));
    1751
    1752 {
    1753 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1754 if (xilUtilsCallMATLAB(pXILUtils, 1, lhs, 4, rhs,
    1755 "rtw.pil.SILPILInterface.sfunctionInitializeHook")
    1756 !=XIL_UTILS_SUCCESS) {
    1757 return;
    1758 } /* if */
    1759 }
    1760
    1761 rootLoggingPath = mxArrayToString(lhs[0]);
    1762 mxDestroyArray(lhs[0]);
    1763 mxFree(rootLoggingPath);
    1764 }
    1765
    1766 {
    1767 void * multiRunDataPtr = xilSimulinkUtilsStaticInitMultiRunInstrData();
    1768 ssSetPWorkValue(S, 11, multiRunDataPtr);
    1769 }
    1770}
    1771
    1772#endif /* MDL_SETUP_RUNTIME_RESOURCES */
    1773
    1774#define MDL_SIM_STATUS_CHANGE /* Change to #undef to remove function */
    1775#if defined(MDL_SIM_STATUS_CHANGE)
    1776
    1777static void mdlSimStatusChange(SimStruct *S, ssSimStatusChangeType simStatus)
    1778{
    1779 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    1780 return;
    1781 } /* if */
    1782
    1783 if (simStatus == SIM_PAUSE) {
    1784 {
    1785 uint8_T * mxMemUnitPtr;
    1786 mwSize dataInSize = 0;
    1787 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1788 if (IOBufferPtr != NULL) {
    1789 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    1790 if (pXILService != NULL) {
    1791 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!=
    1792 XILHOSTAPPSVC_SUCCESS) {
    1793 return ;
    1794 } /* if */
    1795
    1796 if (IOBufferPtr->data != NULL) {
    1797 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1798
    1799 /* write command id */
    1800 *mxMemUnitPtr = (uint8_T) XIL_PAUSE_COMMAND;
    1801 mxMemUnitPtr++;
    1802
    1803 {
    1804 {
    1805 uint8_T * simDataMemUnitPtr;
    1806 uint32_T commandDataFcnid = 0;
    1807 simDataMemUnitPtr = (uint8_T *) &commandDataFcnid;
    1808
    1809 {
    1810 size_t num_elements = 1;
    1811
    1812 {
    1813 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    1814 num_elements, sizeof(uint32_T));
    1815 }
    1816 }
    1817 }
    1818 }
    1819 } /* if */
    1820 } /* if */
    1821 } /* if */
    1822 }
    1823
    1824 {
    1825 {
    1826 uint8_T * mxMemUnitPtr;
    1827 mwSize dataInSize = 0;
    1828 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1829
    1830 /* provide the time information to the code instrumentation service */
    1831 {
    1832 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    1833 time_T simTime = ssGetT(S);
    1834 if (pCodeInstrService != NULL) {
    1835 codeInstrHostAppSvcSetTime(pCodeInstrService, simTime);
    1836 } /* if */
    1837 }
    1838
    1839 /* dispatch command to the target */
    1840 if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) {
    1841 return ;
    1842 } /* if */
    1843
    1844 {
    1845 XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE;
    1846 while (commandResponseType != XIL_STEP_COMPLETE) {
    1847 /* receive command from the target */
    1848 mwSize dataInSize = 0;
    1849 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    1850 XILHOSTAPPSVC_SUCCESS) {
    1851 return ;
    1852 } /* if */
    1853
    1854 if (dataInSize>0) {
    1855 size_t dataInMemUnitSize = dataInSize;
    1856 uint8_T responseId = 0;
    1857 uint8_T * mxMemUnitPtrEnd;
    1858 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1859 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    1860 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    1861 /* read response id */
    1862 responseId = *mxMemUnitPtr;
    1863 mxMemUnitPtr++;
    1864 switch (responseId) {
    1865 case RESPONSE_ERROR:
    1866 case RESPONSE_PRINTF:
    1867 case RESPONSE_FOPEN:
    1868 case RESPONSE_FPRINTF:
    1869 case RESPONSE_SIGNAL_RAISED:
    1870 {
    1871 if (processErrorAndTargetIOResponseCases(S, responseId,
    1872 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    1873 return ;
    1874 } /* if */
    1875 break;
    1876 }
    1877
    1878 default:
    1879 {
    1880 {
    1881 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1882 mxArray * rhs[ 2 ];
    1883 rhs[0] = mxCreateString(
    1884 "PIL:pilverification:UnknownResponseId");
    1885 rhs[1] = mxCreateDoubleScalar(responseId);
    1886 xilUtilsHandleError(pXILUtils, 2 , rhs );
    1887 return ;
    1888 }
    1889 break;
    1890 }
    1891 } /* switch */
    1892 } /* while */
    1893 } /* if */
    1894 } /* while */
    1895 }
    1896 }
    1897 }
    1898
    1899 {
    1900 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1901 if (pXILUtils) {
    1902 mxArray *rhs[3];
    1903 const char * simulinkBlockPath = ssGetPath(S);
    1904 rhs[ 0 ] = mxCreateString(
    1905 "@coder.connectivity.SimulinkInterface.getSILPILInterface");
    1906 rhs[ 1 ] = mxCreateDoubleScalar( 0 );
    1907 rhs[ 2 ] = mxCreateString(simulinkBlockPath);
    1908 if (xilUtilsCallMATLAB(pXILUtils, 0, NULL, 3, rhs,
    1909 "rtw.pil.SILPILInterface.sfunctionPILPauseHook")
    1910 != XIL_UTILS_SUCCESS) {
    1911 return ;
    1912 } /* if */
    1913 } /* if */
    1914 }
    1915 } /* if */
    1916}
    1917
    1918#endif /* MDL_SIM_STATUS_CHANGE */
    1919
    1920#define MDL_START /* Change to #undef to remove function */
    1921#if defined(MDL_START)
    1922
    1923static void mdlStart(SimStruct *S)
    1924{
    1925 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    1926 return;
    1927 } /* if */
    1928
    1929 /* no solver check required for multitasking scheduling */
    1930 /* Check current start time is consistent with the generated code */
    1931 if (ssGetTStart(S) != 0) {
    1932 {
    1933 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    1934 mxArray * rhs[ 2 ];
    1935 rhs[0] = mxCreateString("PIL:pil:XILBlockStartTimeError");
    1936 rhs[1] = mxCreateString("0");
    1937 xilUtilsHandleError(pXILUtils, 2 , rhs );
    1938 return;
    1939 }
    1940 } /* if */
    1941
    1942 {
    1943 int * pIsXILApplicationStartedLocal = (int *) ssGetPWorkValue(S, 5);
    1944 if (pIsXILApplicationStartedLocal != NULL && (*pIsXILApplicationStartedLocal)
    1945 != 0) {
    1946 ssSetErrorStatus( S,
    1947 "Failed to start the application: another instance is already running.");
    1948 return ;
    1949 } /* if */
    1950 }
    1951
    1952 {
    1953 boolean_T applicationStarted = startAndSetupApplication(S);
    1954 if (!applicationStarted) {
    1955 return;
    1956 } /* if */
    1957 }
    1958
    1959 sendInitializeCommand(S);
    1960}
    1961
    1962#endif /* MDL_START */
    1963
    1964static void XILoutputTID01(SimStruct *S, int tid)
    1965{
    1966 time_T taskTime = ssGetTaskTime(S, 0);
    1967
    1968 {
    1969 uint8_T * mxMemUnitPtr;
    1970 mwSize dataInSize = 0;
    1971 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    1972 if (IOBufferPtr != NULL) {
    1973 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    1974 if (pXILService != NULL) {
    1975 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 9, 0)!=
    1976 XILHOSTAPPSVC_SUCCESS) {
    1977 return;
    1978 } /* if */
    1979
    1980 if (IOBufferPtr->data != NULL) {
    1981 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    1982
    1983 /* write command id */
    1984 *mxMemUnitPtr = (uint8_T) XIL_OUTPUT_COMMAND;
    1985 mxMemUnitPtr++;
    1986
    1987 {
    1988 {
    1989 uint8_T * simDataMemUnitPtr;
    1990 uint32_T commandDataFcnidTID[2] = { 0, 1 };
    1991
    1992 simDataMemUnitPtr = (uint8_T *) &commandDataFcnidTID[0];
    1993
    1994 {
    1995 size_t num_elements = 2;
    1996
    1997 {
    1998 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    1999 num_elements, sizeof(uint32_T));
    2000 }
    2001 }
    2002 }
    2003 }
    2004 } /* if */
    2005 } /* if */
    2006 } /* if */
    2007 }
    2008
    2009 {
    2010 {
    2011 uint8_T * mxMemUnitPtr;
    2012 mwSize dataInSize = 0;
    2013 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2014
    2015 /* provide the time information to the code instrumentation service */
    2016 {
    2017 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    2018 if (pCodeInstrService != NULL) {
    2019 codeInstrHostAppSvcSetTime(pCodeInstrService, taskTime);
    2020 } /* if */
    2021 }
    2022
    2023 /* dispatch command to the target */
    2024 if (commandDispatch(S, IOBufferPtr, 9)!=XILHOSTAPPSVC_SUCCESS) {
    2025 return;
    2026 } /* if */
    2027
    2028 {
    2029 XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE;
    2030 while (commandResponseType != XIL_STEP_COMPLETE) {
    2031 /* receive command from the target */
    2032 mwSize dataInSize = 0;
    2033 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    2034 XILHOSTAPPSVC_SUCCESS) {
    2035 return;
    2036 } /* if */
    2037
    2038 if (dataInSize>0) {
    2039 size_t dataInMemUnitSize = dataInSize;
    2040 uint8_T responseId = 0;
    2041 uint8_T * mxMemUnitPtrEnd;
    2042 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2043 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    2044 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    2045 /* read response id */
    2046 responseId = *mxMemUnitPtr;
    2047 mxMemUnitPtr++;
    2048 switch (responseId) {
    2049 case RESPONSE_ERROR:
    2050 case RESPONSE_PRINTF:
    2051 case RESPONSE_FOPEN:
    2052 case RESPONSE_FPRINTF:
    2053 case RESPONSE_SIGNAL_RAISED:
    2054 {
    2055 if (processErrorAndTargetIOResponseCases(S, responseId,
    2056 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    2057 return;
    2058 } /* if */
    2059 break;
    2060 }
    2061
    2062 case RESPONSE_OUTPUT_PRE_DATA:
    2063 {
    2064 break;
    2065 }
    2066
    2067 case RESPONSE_OUTPUT_DATA:
    2068 {
    2069 {
    2070 /* DataInterface: output, 1 */
    2071 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S,
    2072 0);
    2073
    2074 {
    2075 uint8_T * simDataMemUnitPtr;
    2076
    2077 /* DataInterface: output, 1 */
    2078 simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr;
    2079
    2080 {
    2081 size_t num_elements = 1;
    2082
    2083 {
    2084 copyIOData(simDataMemUnitPtr, mxMemUnitPtr,
    2085 &mxMemUnitPtr, num_elements, sizeof(int16_T));
    2086 }
    2087 }
    2088 }
    2089 }
    2090
    2091 {
    2092 /* DataInterface: output, 2 */
    2093 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S,
    2094 1);
    2095
    2096 {
    2097 uint8_T * simDataMemUnitPtr;
    2098
    2099 /* DataInterface: output, 2 */
    2100 simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr;
    2101
    2102 {
    2103 size_t num_elements = 1;
    2104
    2105 {
    2106 copyIOData(simDataMemUnitPtr, mxMemUnitPtr,
    2107 &mxMemUnitPtr, num_elements, sizeof(int16_T));
    2108 }
    2109 }
    2110 }
    2111 }
    2112
    2113 {
    2114 /* DataInterface: output, 3 */
    2115 void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S,
    2116 2);
    2117
    2118 {
    2119 uint8_T * simDataMemUnitPtr;
    2120
    2121 /* DataInterface: output, 3 */
    2122 simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr;
    2123
    2124 {
    2125 size_t num_elements = 1;
    2126
    2127 {
    2128 copyIOData(simDataMemUnitPtr, mxMemUnitPtr,
    2129 &mxMemUnitPtr, num_elements, sizeof(int16_T));
    2130 }
    2131 }
    2132 }
    2133 }
    2134 break;
    2135 }
    2136
    2137 default:
    2138 {
    2139 {
    2140 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2141 mxArray * rhs[ 2 ];
    2142 rhs[0] = mxCreateString(
    2143 "PIL:pilverification:UnknownResponseId");
    2144 rhs[1] = mxCreateDoubleScalar(responseId);
    2145 xilUtilsHandleError(pXILUtils, 2 , rhs );
    2146 return;
    2147 }
    2148 break;
    2149 }
    2150 } /* switch */
    2151 } /* while */
    2152 } /* if */
    2153 } /* while */
    2154 }
    2155 }
    2156 }
    2157
    2158 {
    2159 uint8_T * mxMemUnitPtr;
    2160 mwSize dataInSize = 0;
    2161 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2162 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2163 if (dataInSize>0) {
    2164 size_t dataInMemUnitSize = dataInSize;
    2165 uint8_T responseId = 0;
    2166 uint8_T * mxMemUnitPtrEnd;
    2167 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2168 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    2169 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    2170 /* read response id */
    2171 responseId = *mxMemUnitPtr;
    2172 mxMemUnitPtr++;
    2173 switch (responseId) {
    2174 case RESPONSE_ERROR:
    2175 case RESPONSE_PRINTF:
    2176 case RESPONSE_FOPEN:
    2177 case RESPONSE_FPRINTF:
    2178 case RESPONSE_SIGNAL_RAISED:
    2179 {
    2180 if (processErrorAndTargetIOResponseCases(S, responseId,
    2181 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    2182 return;
    2183 } /* if */
    2184 break;
    2185 }
    2186
    2187 default:
    2188 {
    2189 {
    2190 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2191 mxArray * rhs[ 2 ];
    2192 rhs[0] = mxCreateString("PIL:pilverification:UnknownResponseId");
    2193 rhs[1] = mxCreateDoubleScalar(responseId);
    2194 xilUtilsHandleError(pXILUtils, 2 , rhs );
    2195 return;
    2196 }
    2197 break;
    2198 }
    2199 } /* switch */
    2200 } /* while */
    2201 } /* if */
    2202 }
    2203}
    2204
    2205static void XILoutputTID02(SimStruct *S, int tid)
    2206{
    2207 time_T taskTime = ssGetTaskTime(S, 1);
    2208
    2209 {
    2210 uint8_T * mxMemUnitPtr;
    2211 mwSize dataInSize = 0;
    2212 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2213 if (IOBufferPtr != NULL) {
    2214 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    2215 if (pXILService != NULL) {
    2216 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 9, 0)!=
    2217 XILHOSTAPPSVC_SUCCESS) {
    2218 return;
    2219 } /* if */
    2220
    2221 if (IOBufferPtr->data != NULL) {
    2222 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2223
    2224 /* write command id */
    2225 *mxMemUnitPtr = (uint8_T) XIL_OUTPUT_COMMAND;
    2226 mxMemUnitPtr++;
    2227
    2228 {
    2229 {
    2230 uint8_T * simDataMemUnitPtr;
    2231 uint32_T commandDataFcnidTID[2] = { 0, 2 };
    2232
    2233 simDataMemUnitPtr = (uint8_T *) &commandDataFcnidTID[0];
    2234
    2235 {
    2236 size_t num_elements = 2;
    2237
    2238 {
    2239 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    2240 num_elements, sizeof(uint32_T));
    2241 }
    2242 }
    2243 }
    2244 }
    2245 } /* if */
    2246 } /* if */
    2247 } /* if */
    2248 }
    2249
    2250 {
    2251 {
    2252 uint8_T * mxMemUnitPtr;
    2253 mwSize dataInSize = 0;
    2254 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2255
    2256 /* provide the time information to the code instrumentation service */
    2257 {
    2258 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    2259 if (pCodeInstrService != NULL) {
    2260 codeInstrHostAppSvcSetTime(pCodeInstrService, taskTime);
    2261 } /* if */
    2262 }
    2263
    2264 /* dispatch command to the target */
    2265 if (commandDispatch(S, IOBufferPtr, 9)!=XILHOSTAPPSVC_SUCCESS) {
    2266 return;
    2267 } /* if */
    2268
    2269 {
    2270 XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE;
    2271 while (commandResponseType != XIL_STEP_COMPLETE) {
    2272 /* receive command from the target */
    2273 mwSize dataInSize = 0;
    2274 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    2275 XILHOSTAPPSVC_SUCCESS) {
    2276 return;
    2277 } /* if */
    2278
    2279 if (dataInSize>0) {
    2280 size_t dataInMemUnitSize = dataInSize;
    2281 uint8_T responseId = 0;
    2282 uint8_T * mxMemUnitPtrEnd;
    2283 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2284 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    2285 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    2286 /* read response id */
    2287 responseId = *mxMemUnitPtr;
    2288 mxMemUnitPtr++;
    2289 switch (responseId) {
    2290 case RESPONSE_ERROR:
    2291 case RESPONSE_PRINTF:
    2292 case RESPONSE_FOPEN:
    2293 case RESPONSE_FPRINTF:
    2294 case RESPONSE_SIGNAL_RAISED:
    2295 {
    2296 if (processErrorAndTargetIOResponseCases(S, responseId,
    2297 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    2298 return;
    2299 } /* if */
    2300 break;
    2301 }
    2302
    2303 default:
    2304 {
    2305 {
    2306 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2307 mxArray * rhs[ 2 ];
    2308 rhs[0] = mxCreateString(
    2309 "PIL:pilverification:UnknownResponseId");
    2310 rhs[1] = mxCreateDoubleScalar(responseId);
    2311 xilUtilsHandleError(pXILUtils, 2 , rhs );
    2312 return;
    2313 }
    2314 break;
    2315 }
    2316 } /* switch */
    2317 } /* while */
    2318 } /* if */
    2319 } /* while */
    2320 }
    2321 }
    2322 }
    2323
    2324 {
    2325 uint8_T * mxMemUnitPtr;
    2326 mwSize dataInSize = 0;
    2327 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2328 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2329 if (dataInSize>0) {
    2330 size_t dataInMemUnitSize = dataInSize;
    2331 uint8_T responseId = 0;
    2332 uint8_T * mxMemUnitPtrEnd;
    2333 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2334 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    2335 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    2336 /* read response id */
    2337 responseId = *mxMemUnitPtr;
    2338 mxMemUnitPtr++;
    2339 switch (responseId) {
    2340 case RESPONSE_ERROR:
    2341 case RESPONSE_PRINTF:
    2342 case RESPONSE_FOPEN:
    2343 case RESPONSE_FPRINTF:
    2344 case RESPONSE_SIGNAL_RAISED:
    2345 {
    2346 if (processErrorAndTargetIOResponseCases(S, responseId,
    2347 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    2348 return;
    2349 } /* if */
    2350 break;
    2351 }
    2352
    2353 default:
    2354 {
    2355 {
    2356 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2357 mxArray * rhs[ 2 ];
    2358 rhs[0] = mxCreateString("PIL:pilverification:UnknownResponseId");
    2359 rhs[1] = mxCreateDoubleScalar(responseId);
    2360 xilUtilsHandleError(pXILUtils, 2 , rhs );
    2361 return;
    2362 }
    2363 break;
    2364 }
    2365 } /* switch */
    2366 } /* while */
    2367 } /* if */
    2368 }
    2369}
    2370
    2371#define MDL_PROCESS_PARAMETERS
    2372#if defined(MDL_PROCESS_PARAMETERS)
    2373
    2374static void mdlProcessParameters(SimStruct *S)
    2375{
    2376 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    2377 return;
    2378 } /* if */
    2379
    2380 processParams(S);
    2381}
    2382
    2383#endif /* MDL_PROCESS_PARAMETERS */
    2384
    2385#define MDL_INITIALIZE_CONDITIONS /* Change to #undef to remove function */
    2386#if defined(MDL_INITIALIZE_CONDITIONS)
    2387
    2388static void mdlInitializeConditions(SimStruct *S)
    2389{
    2390 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    2391 return;
    2392 } /* if */
    2393
    2394 if (!ssIsFirstInitCond(S)) {
    2395 {
    2396 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2397 mxArray * rhs[ 2 ];
    2398 rhs[0] = mxCreateString("PIL:pil:NoInitConditionsToInvoke");
    2399 rhs[1] = mxCreateString(ssGetPath(S));
    2400 xilUtilsHandleError(pXILUtils, 2 , rhs );
    2401 return;
    2402 }
    2403 } /* if */
    2404}
    2405
    2406#endif /* MDL_INITIALIZE_CONDITIONS */
    2407
    2408#define MDL_SET_WORK_WIDTHS /* Change to #undef to remove function */
    2409#if defined(MDL_SET_WORK_WIDTHS)
    2410
    2411static void mdlSetWorkWidths(SimStruct *S)
    2412{
    2413}
    2414
    2415#endif /* MDL_SET_WORK_WIDTHS */
    2416
    2417static void mdlOutputs(SimStruct *S, int_T tid)
    2418{
    2419 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    2420 return;
    2421 } /* if */
    2422
    2423 /* Multirate, multitasking scheduling */
    2424 /* check for sample time hit associated with task 1 */
    2425 if (ssIsSampleHit(S, 0, tid)) {
    2426 XILoutputTID01(S, tid);
    2427 } /* if */
    2428
    2429 /* Multirate, multitasking scheduling */
    2430 /* check for sample time hit associated with task 2 */
    2431 if (ssIsSampleHit(S, 1, tid)) {
    2432 XILoutputTID02(S, tid);
    2433 } /* if */
    2434}
    2435
    2436#define MDL_UPDATE
    2437#if defined(MDL_UPDATE)
    2438
    2439static void mdlUpdate(SimStruct *S, int_T tid)
    2440{
    2441}
    2442
    2443#endif
    2444
    2445static void mdlTerminate(SimStruct *S)
    2446{
    2447 int commErrorOccurred = 0;
    2448 int isXILApplicationStarted = 0;
    2449
    2450 {
    2451 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    2452 return;
    2453 } /* if */
    2454
    2455 if (ssGetPWork(S) != NULL) {
    2456 int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4);
    2457 int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5);
    2458 if (pCommErrorOccurred != NULL) {
    2459 commErrorOccurred = *pCommErrorOccurred;
    2460 } /* if */
    2461
    2462 if (pIsXILApplicationStarted != NULL) {
    2463 isXILApplicationStarted = *pIsXILApplicationStarted;
    2464 } /* if */
    2465 } /* if */
    2466 }
    2467
    2468 if (isXILApplicationStarted) {
    2469 if (!commErrorOccurred) {
    2470 {
    2471 uint8_T * mxMemUnitPtr;
    2472 mwSize dataInSize = 0;
    2473 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2474 if (IOBufferPtr != NULL) {
    2475 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    2476 if (pXILService != NULL) {
    2477 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!=
    2478 XILHOSTAPPSVC_SUCCESS) {
    2479 callStopHookAndFreeSFcnMemory(S);
    2480 return;
    2481 } /* if */
    2482
    2483 if (IOBufferPtr->data != NULL) {
    2484 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2485
    2486 /* write command id */
    2487 *mxMemUnitPtr = (uint8_T) XIL_TERMINATE_COMMAND;
    2488 mxMemUnitPtr++;
    2489
    2490 {
    2491 {
    2492 uint8_T * simDataMemUnitPtr;
    2493 uint32_T commandDataFcnid = 0;
    2494 simDataMemUnitPtr = (uint8_T *) &commandDataFcnid;
    2495
    2496 {
    2497 size_t num_elements = 1;
    2498
    2499 {
    2500 copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr,
    2501 num_elements, sizeof(uint32_T));
    2502 }
    2503 }
    2504 }
    2505 }
    2506 } /* if */
    2507 } /* if */
    2508 } /* if */
    2509 }
    2510
    2511 {
    2512 {
    2513 uint8_T * mxMemUnitPtr;
    2514 mwSize dataInSize = 0;
    2515 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2516
    2517 /* provide the time information to the code instrumentation service */
    2518 {
    2519 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    2520 time_T simTime = ssGetT(S);
    2521 if (pCodeInstrService != NULL) {
    2522 codeInstrHostAppSvcSetTime(pCodeInstrService, simTime);
    2523 } /* if */
    2524 }
    2525
    2526 /* dispatch command to the target */
    2527 if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) {
    2528 callStopHookAndFreeSFcnMemory(S);
    2529 return;
    2530 } /* if */
    2531
    2532 {
    2533 XILCommandResponseType commandResponseType =
    2534 XIL_COMMAND_NOT_COMPLETE;
    2535 while (commandResponseType != XIL_STEP_COMPLETE) {
    2536 /* receive command from the target */
    2537 mwSize dataInSize = 0;
    2538 if (commandResponse(S, &dataInSize, &commandResponseType) !=
    2539 XILHOSTAPPSVC_SUCCESS) {
    2540 callStopHookAndFreeSFcnMemory(S);
    2541 return;
    2542 } /* if */
    2543
    2544 if (dataInSize>0) {
    2545 size_t dataInMemUnitSize = dataInSize;
    2546 uint8_T responseId = 0;
    2547 uint8_T * mxMemUnitPtrEnd;
    2548 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2549 mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1;
    2550 while (mxMemUnitPtr <= mxMemUnitPtrEnd) {
    2551 /* read response id */
    2552 responseId = *mxMemUnitPtr;
    2553 mxMemUnitPtr++;
    2554 switch (responseId) {
    2555 case RESPONSE_ERROR:
    2556 case RESPONSE_PRINTF:
    2557 case RESPONSE_FOPEN:
    2558 case RESPONSE_FPRINTF:
    2559 case RESPONSE_SIGNAL_RAISED:
    2560 {
    2561 if (processErrorAndTargetIOResponseCases(S, responseId,
    2562 &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) {
    2563 callStopHookAndFreeSFcnMemory(S);
    2564 return;
    2565 } /* if */
    2566 break;
    2567 }
    2568
    2569 default:
    2570 {
    2571 {
    2572 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2573 mxArray * rhs[ 2 ];
    2574 rhs[0] = mxCreateString(
    2575 "PIL:pilverification:UnknownResponseId");
    2576 rhs[1] = mxCreateDoubleScalar(responseId);
    2577 xilUtilsHandleError(pXILUtils, 2 , rhs );
    2578 callStopHookAndFreeSFcnMemory(S);
    2579 return;
    2580 }
    2581 break;
    2582 }
    2583 } /* switch */
    2584 } /* while */
    2585 } /* if */
    2586 } /* while */
    2587 }
    2588 }
    2589 }
    2590
    2591 {
    2592 uint8_T * mxMemUnitPtr;
    2593 mwSize dataInSize = 0;
    2594 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2595 if (IOBufferPtr != NULL) {
    2596 void * pXILService = (void *) ssGetPWorkValue(S, 9);
    2597 if (pXILService != NULL) {
    2598 if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 1, 0)!=
    2599 XILHOSTAPPSVC_SUCCESS) {
    2600 callStopHookAndFreeSFcnMemory(S);
    2601 return;
    2602 } /* if */
    2603
    2604 if (IOBufferPtr->data != NULL) {
    2605 mxMemUnitPtr = (uint8_T *) IOBufferPtr->data;
    2606
    2607 /* write command id */
    2608 *mxMemUnitPtr = (uint8_T) XIL_SHUTDOWN_COMMAND;
    2609 mxMemUnitPtr++;
    2610 } /* if */
    2611 } /* if */
    2612 } /* if */
    2613 }
    2614
    2615 {
    2616 {
    2617 uint8_T * mxMemUnitPtr;
    2618 mwSize dataInSize = 0;
    2619 XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1);
    2620
    2621 /* provide the time information to the code instrumentation service */
    2622 {
    2623 void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10);
    2624 time_T simTime = ssGetT(S);
    2625 if (pCodeInstrService != NULL) {
    2626 codeInstrHostAppSvcSetTime(pCodeInstrService, simTime);
    2627 } /* if */
    2628 }
    2629
    2630 /* dispatch command to the target */
    2631 if (commandDispatch(S, IOBufferPtr, 1)!=XILHOSTAPPSVC_SUCCESS) {
    2632 callStopHookAndFreeSFcnMemory(S);
    2633 return;
    2634 } /* if */
    2635 }
    2636 }
    2637 } /* if */
    2638 } /* if */
    2639
    2640 callStopHookAndFreeSFcnMemory(S);
    2641}
    2642
    2643#define MDL_CLEANUP_RUNTIME_RESOURCES /* Change to #undef to remove function */
    2644#if defined(MDL_CLEANUP_RUNTIME_RESOURCES)
    2645
    2646static void mdlCleanupRuntimeResources(SimStruct *S)
    2647{
    2648 if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) {
    2649 return;
    2650 } /* if */
    2651
    2652 {
    2653 void * pCodeInstrMultiRunData = NULL;
    2654 pCodeInstrMultiRunData = (void *) ssGetPWorkValue(S, 11);
    2655 xilSimulinkUtilsStaticFreeMultiRunInstrData(pCodeInstrMultiRunData);
    2656 }
    2657
    2658 if (ssGetPWork(S) != NULL) {
    2659 int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5);
    2660 int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4);
    2661 if (pIsXILApplicationStarted != NULL) {
    2662 mxFree(pIsXILApplicationStarted);
    2663 ssSetPWorkValue(S, 5, NULL);
    2664 } /* if */
    2665
    2666 if (pCommErrorOccurred != NULL) {
    2667 mxFree(pCommErrorOccurred);
    2668 ssSetPWorkValue(S, 4, NULL);
    2669 } /* if */
    2670 } /* if */
    2671
    2672 if (ssGetPWork(S) != NULL) {
    2673 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2674 if (pXILUtils != NULL) {
    2675 xilUtilsDestroy(pXILUtils);
    2676 ssSetPWorkValue(S, 6, NULL);
    2677 } /* if */
    2678 } /* if */
    2679}
    2680
    2681#endif /* MDL_CLEANUP_RUNTIME_RESOURCES */
    2682
    2683#define MDL_ENABLE
    2684#if defined(MDL_ENABLE)
    2685
    2686static void mdlEnable(SimStruct *S)
    2687{
    2688 if (ssGetT(S) != ssGetTStart(S)) {
    2689 {
    2690 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2691 mxArray * rhs[ 3 ];
    2692 rhs[0] = mxCreateString("PIL:pil:EnableDisableCallbackError");
    2693 rhs[1] = mxCreateString("enable");
    2694 rhs[2] = mxCreateString("enable");
    2695 xilUtilsHandleError(pXILUtils, 3 , rhs );
    2696 return;
    2697 }
    2698 } /* if */
    2699}
    2700
    2701#endif /* MDL_ENABLE */
    2702
    2703#define MDL_DISABLE
    2704#if defined(MDL_DISABLE)
    2705
    2706static void mdlDisable(SimStruct *S)
    2707{
    2708 {
    2709 void * pXILUtils = (void *) ssGetPWorkValue(S, 6);
    2710 mxArray * rhs[ 3 ];
    2711 rhs[0] = mxCreateString("PIL:pil:EnableDisableCallbackError");
    2712 rhs[1] = mxCreateString("disable");
    2713 rhs[2] = mxCreateString("disable");
    2714 xilUtilsHandleError(pXILUtils, 3 , rhs );
    2715 return;
    2716 }
    2717}
    2718
    2719#endif /* MDL_DISABLE */
    2720
    2721/* Required S-function trailer */
    2722#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
    2723#include "simulink.c" /* MEX-file interface mechanism */
    2724#include "fixedpoint.c"
    2725#else
    2726#error Assertion failed: file must be compiled as a MEX-file
    2727#endif
    2728
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_subsystems.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_subsystems.html new file mode 100644 index 0000000..513a01e --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_subsystems.html @@ -0,0 +1,87 @@ + + + +Non-virtual subsystems in FCC_Sys_New_harness + + + + +

    +Non-virtual subsystems in FCC_Sys_New_harness +

    +
    + +
    +
    + +
    +

    +1. Code Mapping [hide] +

    + + + + + + + + + + +
    +

    +The following table:

      +
    • +provides a mapping from the non-virtual subsystems in the model to functions or reusable functions in the generated code and +
    • +
    • +notes exceptions that caused some non-virtual subsystems to not reuse code even though they were assigned a function packaging setting ('Function packaging' entry on the Subsystem Block Dialog) of 'Auto' or 'Reusable function'. +
    • + +
    + +

    + +
    + +No non-virtual subsystems generating functions in model + + +
    +

    +2. Code Reuse Exceptions [hide] +

    + + + + + + + + + + +
    +

    +The following section provides details on each exception that caused a non-virtual subsystem with a function packaging setting of

      +
    • +'Auto' to become an inlined code segment, +
    • +
    • +'Auto' to become a non-reusable function without arguments, or +
    • +
    • +'Reusable function' to become a non-reusable function without arguments. +
    • + +
    +Note:This section does not report graphically identical non-virtual subsystems marked as 'Auto' that were not reused due to differences in their functional properties (such as dimensions, datatypes, work vectors, parameters, etc.). You may identify reasons for non-reuse in such cases by inspecting the differences in the functional attributes of the subsystems in the model or in the inlined generated code. +

    + +
    +
    No reuse exception in model +
    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_survey.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_survey.html new file mode 100644 index 0000000..a6f4f85 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_survey.html @@ -0,0 +1,186 @@ + + + +Code Generation Report for 'FCC_Sys_New_harness' + + + + +

    +Code Generation Report for 'FCC_Sys_New_harness' +

    +
    + +
    +
    + +
    +

    +Model Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + +
    +Author + +bpotter +
    +Last Modified By + +super +
    +Model Version + +1.91 +
    +Tasking Mode + +MultiTasking +
    +
    + +Configuration settings at time of code generation + + +

    + +
    +

    +Code Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +System Target File + +ert.tlc +
    +Hardware Device Type + +Intel->x86-32 (Windows32) +
    +Simulink Coder Version + +9.3 (R2020a) 18-Nov-2019 +
    +Timestamp of Generated Source Code + +Thu Jul 16 18:51:26 2020 +
    + + + +
    +Type of Build + +Top Model +
    +Objectives Specified + +Execution efficiency, RAM efficiency +
    + +

    + +
    +

    +Additional Information +

    + + + + + + +
    + + + + + + + +
    +Code Generation Advisor + +Not run +
    + +
    + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_trace.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_trace.html new file mode 100644 index 0000000..9c8363e --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_trace.html @@ -0,0 +1,21 @@ +Traceability Report for FCC_Sys_New_harness + + +

    Eliminated / Virtual Blocks

    Block NameComment
    <Root>/Inputs

    Masked SubSystem

    <Root>/Size-Type

    Virtual SubSystem

    <Root>/Test Case Explanation

    Masked SubSystem

    <Root>/Test Unit (copied from FCC_Sys_New)

    Virtual SubSystem

    <S1>/Demux

    Demux

    <S1>/Act_Pos1

    Outport

    <S1>/Act_Pos2

    Outport

    <S1>/Act_Pos3

    Outport

    <S1>/Pilot_theta_cmd

    Outport

    <S1>/Pilot_phi_cmd

    Outport

    <S1>/Pilot_r_cmd

    Outport

    <S1>/AHRS1.theta

    Outport

    <S1>/AHRS1.phi

    Outport

    <S1>/AHRS1.psi

    Outport

    <S1>/AHRS1.q

    Outport

    <S1>/AHRS1.p

    Outport

    <S1>/AHRS1.r

    Outport

    <S1>/AHRS1.valid

    Outport

    <S1>/AHRS2.theta

    Outport

    <S1>/AHRS2.phi

    Outport

    <S1>/AHRS2.psi

    Outport

    <S1>/AHRS2.q

    Outport

    <S1>/AHRS2.p

    Outport

    <S1>/AHRS2.r

    Outport

    <S1>/AHRS2.valid

    Outport

    <S1>/AHRS3.theta

    Outport

    <S1>/AHRS3.phi

    Outport

    <S1>/AHRS3.psi

    Outport

    <S1>/AHRS3.q

    Outport

    <S1>/AHRS3.p

    Outport

    <S1>/AHRS3.r

    Outport

    <S1>/AHRS3.valid

    Outport

    <S2>/In1

    Inport

    <S2>/In2

    Inport

    <S2>/In3

    Inport

    <S2>/In4

    Inport

    <S2>/In5

    Inport

    <S2>/In6

    Inport

    <S2>/In7

    Inport

    <S2>/In8

    Inport

    <S2>/In9

    Inport

    <S2>/In10

    Inport

    <S2>/In11

    Inport

    <S2>/In12

    Inport

    <S2>/In13

    Inport

    <S2>/In14

    Inport

    <S2>/In15

    Inport

    <S2>/In16

    Inport

    <S2>/In17

    Inport

    <S2>/In18

    Inport

    <S2>/In19

    Inport

    <S2>/In20

    Inport

    <S2>/In21

    Inport

    <S2>/In22

    Inport

    <S2>/In23

    Inport

    <S2>/In24

    Inport

    <S2>/In25

    Inport

    <S2>/In26

    Inport

    <S2>/In27

    Inport

    <S2>/Bus7

    Virtual SubSystem

    <S2>/Bus8

    Virtual SubSystem

    <S2>/Bus9

    Virtual SubSystem

    <S2>/Cast10

    Eliminate redundant data type conversion

    <S2>/Cast11

    Eliminate redundant data type conversion

    <S2>/Cast12

    Eliminate redundant data type conversion

    <S2>/Cast14

    Eliminate redundant data type conversion

    <S2>/Cast15

    Eliminate redundant data type conversion

    <S2>/Cast16

    Eliminate redundant data type conversion

    <S2>/Cast17

    Eliminate redundant data type conversion

    <S2>/Cast18

    Eliminate redundant data type conversion

    <S2>/Cast19

    Eliminate redundant data type conversion

    <S2>/Cast21

    Eliminate redundant data type conversion

    <S2>/Cast22

    Eliminate redundant data type conversion

    <S2>/Cast23

    Eliminate redundant data type conversion

    <S2>/Cast24

    Eliminate redundant data type conversion

    <S2>/Cast25

    Eliminate redundant data type conversion

    <S2>/Cast26

    Eliminate redundant data type conversion

    <S2>/Cast7

    Eliminate redundant data type conversion

    <S2>/Cast8

    Eliminate redundant data type conversion

    <S2>/Cast9

    Eliminate redundant data type conversion

    <S2>/Sync1

    Eliminated since input and output rates are identical

    <S2>/Sync2

    Eliminated since input and output rates are identical

    <S2>/Sync3

    Eliminated since input and output rates are identical

    <S2>/Out1

    Outport

    <S2>/Out2

    Outport

    <S2>/Out3

    Outport

    <S2>/Out4

    Outport

    <S2>/Out5

    Outport

    <S2>/Out6

    Outport

    <S2>/Out7

    Outport

    <S2>/Out8

    Outport

    <S2>/Out9

    Outport

    <S3>/EmptySubsystem

    Empty SubSystem

    <S4>/Act_Pos1

    Inport

    <S4>/Act_Pos2

    Inport

    <S4>/Act_Pos3

    Inport

    <S4>/Pilot_theta_cmd

    Inport

    <S4>/Pilot_phi_cmd

    Inport

    <S4>/Pilot_r_cmd

    Inport

    <S4>/AHRS1

    Inport

    <S4>/AHRS2

    Inport

    <S4>/AHRS3

    Inport

    <S4>/Actuator1

    Outport

    <S4>/Actuator2

    Outport

    <S4>/Actuator3

    Outport

    <S5>/AHRS1(1).theta

    Inport

    <S5>/AHRS1(1).phi

    Inport

    <S5>/AHRS1(1).psi

    Inport

    <S5>/AHRS1(1).q

    Inport

    <S5>/AHRS1(1).p

    Inport

    <S5>/AHRS1(1).r

    Inport

    <S5>/AHRS1(1).valid

    Inport

    <S5>/Out

    Outport

    <S6>/AHRS2(1).theta

    Inport

    <S6>/AHRS2(1).phi

    Inport

    <S6>/AHRS2(1).psi

    Inport

    <S6>/AHRS2(1).q

    Inport

    <S6>/AHRS2(1).p

    Inport

    <S6>/AHRS2(1).r

    Inport

    <S6>/AHRS2(1).valid

    Inport

    <S6>/Out

    Outport

    <S7>/AHRS3(1).theta

    Inport

    <S7>/AHRS3(1).phi

    Inport

    <S7>/AHRS3(1).psi

    Inport

    <S7>/AHRS3(1).q

    Inport

    <S7>/AHRS3(1).p

    Inport

    <S7>/AHRS3(1).r

    Inport

    <S7>/AHRS3(1).valid

    Inport

    <S7>/Out

    Outport

    Traceable Simulink Blocks / Stateflow Objects / MATLAB Functions

    Subsystem: FCC_Sys_New_harness/Size-Type

    Object NameCode Location
    <S2>/Cast1FCC_Sys_New_harness.c:144, 145, 146, 147, 148, 150, 153, 156, 157, 158, 160, 163, 166
    FCC_Sys_New_harness.h:98
    <S2>/Cast13FCC_Sys_New_harness.c:313, 315, 316
    <S2>/Cast2FCC_Sys_New_harness.c:168, 169, 170, 171, 172, 174, 177, 180, 181, 182, 184, 187, 190
    FCC_Sys_New_harness.h:99
    <S2>/Cast20FCC_Sys_New_harness.c:344, 346, 347
    <S2>/Cast27FCC_Sys_New_harness.c:366, 368, 369
    <S2>/Cast3FCC_Sys_New_harness.c:192, 193, 194, 195, 196, 198, 201, 204, 205, 206, 208, 211, 214
    FCC_Sys_New_harness.h:100
    <S2>/Cast4FCC_Sys_New_harness.c:233, 234, 235, 236, 237, 239, 242, 245, 246, 247, 249, 252, 255
    <S2>/Cast5FCC_Sys_New_harness.c:257, 258, 259, 260, 261, 263, 266, 269, 270, 271, 273, 276, 279
    <S2>/Cast6FCC_Sys_New_harness.c:281, 282, 283, 284, 285, 287, 290, 293, 294, 295, 297, 300, 303
    <S2>/Sync10FCC_Sys_New_harness.c:226, 232, 304, 414, 425
    FCC_Sys_New_harness.h:70
    <S2>/Sync11FCC_Sys_New_harness.c:306, 307, 415, 426
    FCC_Sys_New_harness.h:71
    <S2>/Sync12FCC_Sys_New_harness.c:309, 310, 416, 427
    FCC_Sys_New_harness.h:72
    <S2>/Sync13FCC_Sys_New_harness.c:312, 315, 417, 428
    FCC_Sys_New_harness.h:104
    <S2>/Sync14FCC_Sys_New_harness.c:227, 232, 326, 431, 439
    FCC_Sys_New_harness.h:76
    <S2>/Sync15FCC_Sys_New_harness.c:328, 329, 432, 440
    FCC_Sys_New_harness.h:77
    <S2>/Sync16FCC_Sys_New_harness.c:331, 332, 433, 441
    FCC_Sys_New_harness.h:78
    <S2>/Sync17FCC_Sys_New_harness.c:334, 335, 434, 442
    FCC_Sys_New_harness.h:79
    <S2>/Sync18FCC_Sys_New_harness.c:337, 338, 435, 443
    FCC_Sys_New_harness.h:80
    <S2>/Sync19FCC_Sys_New_harness.c:340, 341, 436, 444
    FCC_Sys_New_harness.h:81
    <S2>/Sync20FCC_Sys_New_harness.c:343, 346, 437, 445
    FCC_Sys_New_harness.h:105
    <S2>/Sync21FCC_Sys_New_harness.c:228, 232, 348, 448, 456
    FCC_Sys_New_harness.h:82
    <S2>/Sync22FCC_Sys_New_harness.c:350, 351, 449, 457
    FCC_Sys_New_harness.h:83
    <S2>/Sync23FCC_Sys_New_harness.c:353, 354, 450, 458
    FCC_Sys_New_harness.h:84
    <S2>/Sync24FCC_Sys_New_harness.c:356, 357, 451, 459
    FCC_Sys_New_harness.h:85
    <S2>/Sync25FCC_Sys_New_harness.c:359, 360, 452, 460
    FCC_Sys_New_harness.h:86
    <S2>/Sync26FCC_Sys_New_harness.c:362, 363, 453, 461
    FCC_Sys_New_harness.h:87
    <S2>/Sync27FCC_Sys_New_harness.c:365, 368, 454, 462
    FCC_Sys_New_harness.h:106
    <S2>/Sync4FCC_Sys_New_harness.c:225, 232, 247, 249, 252, 372, 404, 405
    FCC_Sys_New_harness.h:101
    <S2>/Sync5FCC_Sys_New_harness.c:229, 232, 271, 273, 276, 407, 408
    FCC_Sys_New_harness.h:102
    <S2>/Sync6FCC_Sys_New_harness.c:230, 232, 295, 297, 300, 410, 411
    FCC_Sys_New_harness.h:103
    <S2>/Sync7FCC_Sys_New_harness.c:318, 319, 418, 422
    FCC_Sys_New_harness.h:73
    <S2>/Sync8FCC_Sys_New_harness.c:321, 322, 419, 423
    FCC_Sys_New_harness.h:74
    <S2>/Sync9FCC_Sys_New_harness.c:324, 325, 420, 424
    FCC_Sys_New_harness.h:75

    Subsystem: FCC_Sys_New_harness/Test Case Explanation

    No traceable objects in this Subsystem.

    \ No newline at end of file diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_traceInfo.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_traceInfo.js new file mode 100644 index 0000000..ff13667 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/FCC_Sys_New_harness_traceInfo.js @@ -0,0 +1,363 @@ +function RTW_rtwnameSIDMap() { + this.rtwnameHashMap = new Array(); + this.sidHashMap = new Array(); + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness"}; + this.sidHashMap["FCC_Sys_New_harness"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:75"}; + this.sidHashMap["FCC_Sys_New_harness:75"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:105"}; + this.sidHashMap["FCC_Sys_New_harness:105"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:229"}; + this.sidHashMap["FCC_Sys_New_harness:229"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:74"}; + this.sidHashMap["FCC_Sys_New_harness:74"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:151"}; + this.sidHashMap["FCC_Sys_New_harness:151"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:183"}; + this.sidHashMap["FCC_Sys_New_harness:183"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_Sys_New_harness:215"}; + this.sidHashMap["FCC_Sys_New_harness:215"] = {rtwname: ""}; + this.rtwnameHashMap["/Inputs"] = {sid: "FCC_Sys_New_harness:75"}; + this.sidHashMap["FCC_Sys_New_harness:75"] = {rtwname: "/Inputs"}; + this.rtwnameHashMap["/Size-Type"] = {sid: "FCC_Sys_New_harness:105"}; + this.sidHashMap["FCC_Sys_New_harness:105"] = {rtwname: "/Size-Type"}; + this.rtwnameHashMap["/Test Case Explanation"] = {sid: "FCC_Sys_New_harness:229"}; + this.sidHashMap["FCC_Sys_New_harness:229"] = {rtwname: "/Test Case Explanation"}; + this.rtwnameHashMap["/Test Unit (copied from FCC_Sys_New)"] = {sid: "FCC_Sys_New_harness:74"}; + this.sidHashMap["FCC_Sys_New_harness:74"] = {rtwname: "/Test Unit (copied from FCC_Sys_New)"}; + this.rtwnameHashMap["/Actuator1"] = {sid: "FCC_Sys_New_harness:226"}; + this.sidHashMap["FCC_Sys_New_harness:226"] = {rtwname: "/Actuator1"}; + this.rtwnameHashMap["/Actuator2"] = {sid: "FCC_Sys_New_harness:227"}; + this.sidHashMap["FCC_Sys_New_harness:227"] = {rtwname: "/Actuator2"}; + this.rtwnameHashMap["/Actuator3"] = {sid: "FCC_Sys_New_harness:228"}; + this.sidHashMap["FCC_Sys_New_harness:228"] = {rtwname: "/Actuator3"}; + this.rtwnameHashMap["/Demux"] = {sid: "FCC_Sys_New_harness:77"}; + this.sidHashMap["FCC_Sys_New_harness:77"] = {rtwname: "/Demux"}; + this.rtwnameHashMap["/FromWs"] = {sid: "FCC_Sys_New_harness:76"}; + this.sidHashMap["FCC_Sys_New_harness:76"] = {rtwname: "/FromWs"}; + this.rtwnameHashMap["/Act_Pos1"] = {sid: "FCC_Sys_New_harness:78"}; + this.sidHashMap["FCC_Sys_New_harness:78"] = {rtwname: "/Act_Pos1"}; + this.rtwnameHashMap["/Act_Pos2"] = {sid: "FCC_Sys_New_harness:79"}; + this.sidHashMap["FCC_Sys_New_harness:79"] = {rtwname: "/Act_Pos2"}; + this.rtwnameHashMap["/Act_Pos3"] = {sid: "FCC_Sys_New_harness:80"}; + this.sidHashMap["FCC_Sys_New_harness:80"] = {rtwname: "/Act_Pos3"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "FCC_Sys_New_harness:81"}; + this.sidHashMap["FCC_Sys_New_harness:81"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "FCC_Sys_New_harness:82"}; + this.sidHashMap["FCC_Sys_New_harness:82"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "FCC_Sys_New_harness:83"}; + this.sidHashMap["FCC_Sys_New_harness:83"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/AHRS1.theta"] = {sid: "FCC_Sys_New_harness:84"}; + this.sidHashMap["FCC_Sys_New_harness:84"] = {rtwname: "/AHRS1.theta"}; + this.rtwnameHashMap["/AHRS1.phi"] = {sid: "FCC_Sys_New_harness:85"}; + this.sidHashMap["FCC_Sys_New_harness:85"] = {rtwname: "/AHRS1.phi"}; + this.rtwnameHashMap["/AHRS1.psi"] = {sid: "FCC_Sys_New_harness:86"}; + this.sidHashMap["FCC_Sys_New_harness:86"] = {rtwname: "/AHRS1.psi"}; + this.rtwnameHashMap["/AHRS1.q"] = {sid: "FCC_Sys_New_harness:87"}; + this.sidHashMap["FCC_Sys_New_harness:87"] = {rtwname: "/AHRS1.q"}; + this.rtwnameHashMap["/AHRS1.p"] = {sid: "FCC_Sys_New_harness:88"}; + this.sidHashMap["FCC_Sys_New_harness:88"] = {rtwname: "/AHRS1.p"}; + this.rtwnameHashMap["/AHRS1.r"] = {sid: "FCC_Sys_New_harness:89"}; + this.sidHashMap["FCC_Sys_New_harness:89"] = {rtwname: "/AHRS1.r"}; + this.rtwnameHashMap["/AHRS1.valid"] = {sid: "FCC_Sys_New_harness:90"}; + this.sidHashMap["FCC_Sys_New_harness:90"] = {rtwname: "/AHRS1.valid"}; + this.rtwnameHashMap["/AHRS2.theta"] = {sid: "FCC_Sys_New_harness:91"}; + this.sidHashMap["FCC_Sys_New_harness:91"] = {rtwname: "/AHRS2.theta"}; + this.rtwnameHashMap["/AHRS2.phi"] = {sid: "FCC_Sys_New_harness:92"}; + this.sidHashMap["FCC_Sys_New_harness:92"] = {rtwname: "/AHRS2.phi"}; + this.rtwnameHashMap["/AHRS2.psi"] = {sid: "FCC_Sys_New_harness:93"}; + this.sidHashMap["FCC_Sys_New_harness:93"] = {rtwname: "/AHRS2.psi"}; + this.rtwnameHashMap["/AHRS2.q"] = {sid: "FCC_Sys_New_harness:94"}; + this.sidHashMap["FCC_Sys_New_harness:94"] = {rtwname: "/AHRS2.q"}; + this.rtwnameHashMap["/AHRS2.p"] = {sid: "FCC_Sys_New_harness:95"}; + this.sidHashMap["FCC_Sys_New_harness:95"] = {rtwname: "/AHRS2.p"}; + this.rtwnameHashMap["/AHRS2.r"] = {sid: "FCC_Sys_New_harness:96"}; + this.sidHashMap["FCC_Sys_New_harness:96"] = {rtwname: "/AHRS2.r"}; + this.rtwnameHashMap["/AHRS2.valid"] = {sid: "FCC_Sys_New_harness:97"}; + this.sidHashMap["FCC_Sys_New_harness:97"] = {rtwname: "/AHRS2.valid"}; + this.rtwnameHashMap["/AHRS3.theta"] = {sid: "FCC_Sys_New_harness:98"}; + this.sidHashMap["FCC_Sys_New_harness:98"] = {rtwname: "/AHRS3.theta"}; + this.rtwnameHashMap["/AHRS3.phi"] = {sid: "FCC_Sys_New_harness:99"}; + this.sidHashMap["FCC_Sys_New_harness:99"] = {rtwname: "/AHRS3.phi"}; + this.rtwnameHashMap["/AHRS3.psi"] = {sid: "FCC_Sys_New_harness:100"}; + this.sidHashMap["FCC_Sys_New_harness:100"] = {rtwname: "/AHRS3.psi"}; + this.rtwnameHashMap["/AHRS3.q"] = {sid: "FCC_Sys_New_harness:101"}; + this.sidHashMap["FCC_Sys_New_harness:101"] = {rtwname: "/AHRS3.q"}; + this.rtwnameHashMap["/AHRS3.p"] = {sid: "FCC_Sys_New_harness:102"}; + this.sidHashMap["FCC_Sys_New_harness:102"] = {rtwname: "/AHRS3.p"}; + this.rtwnameHashMap["/AHRS3.r"] = {sid: "FCC_Sys_New_harness:103"}; + this.sidHashMap["FCC_Sys_New_harness:103"] = {rtwname: "/AHRS3.r"}; + this.rtwnameHashMap["/AHRS3.valid"] = {sid: "FCC_Sys_New_harness:104"}; + this.sidHashMap["FCC_Sys_New_harness:104"] = {rtwname: "/AHRS3.valid"}; + this.rtwnameHashMap["/In1"] = {sid: "FCC_Sys_New_harness:106"}; + this.sidHashMap["FCC_Sys_New_harness:106"] = {rtwname: "/In1"}; + this.rtwnameHashMap["/In2"] = {sid: "FCC_Sys_New_harness:110"}; + this.sidHashMap["FCC_Sys_New_harness:110"] = {rtwname: "/In2"}; + this.rtwnameHashMap["/In3"] = {sid: "FCC_Sys_New_harness:114"}; + this.sidHashMap["FCC_Sys_New_harness:114"] = {rtwname: "/In3"}; + this.rtwnameHashMap["/In4"] = {sid: "FCC_Sys_New_harness:118"}; + this.sidHashMap["FCC_Sys_New_harness:118"] = {rtwname: "/In4"}; + this.rtwnameHashMap["/In5"] = {sid: "FCC_Sys_New_harness:122"}; + this.sidHashMap["FCC_Sys_New_harness:122"] = {rtwname: "/In5"}; + this.rtwnameHashMap["/In6"] = {sid: "FCC_Sys_New_harness:126"}; + this.sidHashMap["FCC_Sys_New_harness:126"] = {rtwname: "/In6"}; + this.rtwnameHashMap["/In7"] = {sid: "FCC_Sys_New_harness:130"}; + this.sidHashMap["FCC_Sys_New_harness:130"] = {rtwname: "/In7"}; + this.rtwnameHashMap["/In8"] = {sid: "FCC_Sys_New_harness:133"}; + this.sidHashMap["FCC_Sys_New_harness:133"] = {rtwname: "/In8"}; + this.rtwnameHashMap["/In9"] = {sid: "FCC_Sys_New_harness:136"}; + this.sidHashMap["FCC_Sys_New_harness:136"] = {rtwname: "/In9"}; + this.rtwnameHashMap["/In10"] = {sid: "FCC_Sys_New_harness:139"}; + this.sidHashMap["FCC_Sys_New_harness:139"] = {rtwname: "/In10"}; + this.rtwnameHashMap["/In11"] = {sid: "FCC_Sys_New_harness:142"}; + this.sidHashMap["FCC_Sys_New_harness:142"] = {rtwname: "/In11"}; + this.rtwnameHashMap["/In12"] = {sid: "FCC_Sys_New_harness:145"}; + this.sidHashMap["FCC_Sys_New_harness:145"] = {rtwname: "/In12"}; + this.rtwnameHashMap["/In13"] = {sid: "FCC_Sys_New_harness:148"}; + this.sidHashMap["FCC_Sys_New_harness:148"] = {rtwname: "/In13"}; + this.rtwnameHashMap["/In14"] = {sid: "FCC_Sys_New_harness:162"}; + this.sidHashMap["FCC_Sys_New_harness:162"] = {rtwname: "/In14"}; + this.rtwnameHashMap["/In15"] = {sid: "FCC_Sys_New_harness:165"}; + this.sidHashMap["FCC_Sys_New_harness:165"] = {rtwname: "/In15"}; + this.rtwnameHashMap["/In16"] = {sid: "FCC_Sys_New_harness:168"}; + this.sidHashMap["FCC_Sys_New_harness:168"] = {rtwname: "/In16"}; + this.rtwnameHashMap["/In17"] = {sid: "FCC_Sys_New_harness:171"}; + this.sidHashMap["FCC_Sys_New_harness:171"] = {rtwname: "/In17"}; + this.rtwnameHashMap["/In18"] = {sid: "FCC_Sys_New_harness:174"}; + this.sidHashMap["FCC_Sys_New_harness:174"] = {rtwname: "/In18"}; + this.rtwnameHashMap["/In19"] = {sid: "FCC_Sys_New_harness:177"}; + this.sidHashMap["FCC_Sys_New_harness:177"] = {rtwname: "/In19"}; + this.rtwnameHashMap["/In20"] = {sid: "FCC_Sys_New_harness:180"}; + this.sidHashMap["FCC_Sys_New_harness:180"] = {rtwname: "/In20"}; + this.rtwnameHashMap["/In21"] = {sid: "FCC_Sys_New_harness:194"}; + this.sidHashMap["FCC_Sys_New_harness:194"] = {rtwname: "/In21"}; + this.rtwnameHashMap["/In22"] = {sid: "FCC_Sys_New_harness:197"}; + this.sidHashMap["FCC_Sys_New_harness:197"] = {rtwname: "/In22"}; + this.rtwnameHashMap["/In23"] = {sid: "FCC_Sys_New_harness:200"}; + this.sidHashMap["FCC_Sys_New_harness:200"] = {rtwname: "/In23"}; + this.rtwnameHashMap["/In24"] = {sid: "FCC_Sys_New_harness:203"}; + this.sidHashMap["FCC_Sys_New_harness:203"] = {rtwname: "/In24"}; + this.rtwnameHashMap["/In25"] = {sid: "FCC_Sys_New_harness:206"}; + this.sidHashMap["FCC_Sys_New_harness:206"] = {rtwname: "/In25"}; + this.rtwnameHashMap["/In26"] = {sid: "FCC_Sys_New_harness:209"}; + this.sidHashMap["FCC_Sys_New_harness:209"] = {rtwname: "/In26"}; + this.rtwnameHashMap["/In27"] = {sid: "FCC_Sys_New_harness:212"}; + this.sidHashMap["FCC_Sys_New_harness:212"] = {rtwname: "/In27"}; + this.rtwnameHashMap["/Bus7"] = {sid: "FCC_Sys_New_harness:151"}; + this.sidHashMap["FCC_Sys_New_harness:151"] = {rtwname: "/Bus7"}; + this.rtwnameHashMap["/Bus8"] = {sid: "FCC_Sys_New_harness:183"}; + this.sidHashMap["FCC_Sys_New_harness:183"] = {rtwname: "/Bus8"}; + this.rtwnameHashMap["/Bus9"] = {sid: "FCC_Sys_New_harness:215"}; + this.sidHashMap["FCC_Sys_New_harness:215"] = {rtwname: "/Bus9"}; + this.rtwnameHashMap["/Cast1"] = {sid: "FCC_Sys_New_harness:107"}; + this.sidHashMap["FCC_Sys_New_harness:107"] = {rtwname: "/Cast1"}; + this.rtwnameHashMap["/Cast10"] = {sid: "FCC_Sys_New_harness:140"}; + this.sidHashMap["FCC_Sys_New_harness:140"] = {rtwname: "/Cast10"}; + this.rtwnameHashMap["/Cast11"] = {sid: "FCC_Sys_New_harness:143"}; + this.sidHashMap["FCC_Sys_New_harness:143"] = {rtwname: "/Cast11"}; + this.rtwnameHashMap["/Cast12"] = {sid: "FCC_Sys_New_harness:146"}; + this.sidHashMap["FCC_Sys_New_harness:146"] = {rtwname: "/Cast12"}; + this.rtwnameHashMap["/Cast13"] = {sid: "FCC_Sys_New_harness:149"}; + this.sidHashMap["FCC_Sys_New_harness:149"] = {rtwname: "/Cast13"}; + this.rtwnameHashMap["/Cast14"] = {sid: "FCC_Sys_New_harness:163"}; + this.sidHashMap["FCC_Sys_New_harness:163"] = {rtwname: "/Cast14"}; + this.rtwnameHashMap["/Cast15"] = {sid: "FCC_Sys_New_harness:166"}; + this.sidHashMap["FCC_Sys_New_harness:166"] = {rtwname: "/Cast15"}; + this.rtwnameHashMap["/Cast16"] = {sid: "FCC_Sys_New_harness:169"}; + this.sidHashMap["FCC_Sys_New_harness:169"] = {rtwname: "/Cast16"}; + this.rtwnameHashMap["/Cast17"] = {sid: "FCC_Sys_New_harness:172"}; + this.sidHashMap["FCC_Sys_New_harness:172"] = {rtwname: "/Cast17"}; + this.rtwnameHashMap["/Cast18"] = {sid: "FCC_Sys_New_harness:175"}; + this.sidHashMap["FCC_Sys_New_harness:175"] = {rtwname: "/Cast18"}; + this.rtwnameHashMap["/Cast19"] = {sid: "FCC_Sys_New_harness:178"}; + this.sidHashMap["FCC_Sys_New_harness:178"] = {rtwname: "/Cast19"}; + this.rtwnameHashMap["/Cast2"] = {sid: "FCC_Sys_New_harness:111"}; + this.sidHashMap["FCC_Sys_New_harness:111"] = {rtwname: "/Cast2"}; + this.rtwnameHashMap["/Cast20"] = {sid: "FCC_Sys_New_harness:181"}; + this.sidHashMap["FCC_Sys_New_harness:181"] = {rtwname: "/Cast20"}; + this.rtwnameHashMap["/Cast21"] = {sid: "FCC_Sys_New_harness:195"}; + this.sidHashMap["FCC_Sys_New_harness:195"] = {rtwname: "/Cast21"}; + this.rtwnameHashMap["/Cast22"] = {sid: "FCC_Sys_New_harness:198"}; + this.sidHashMap["FCC_Sys_New_harness:198"] = {rtwname: "/Cast22"}; + this.rtwnameHashMap["/Cast23"] = {sid: "FCC_Sys_New_harness:201"}; + this.sidHashMap["FCC_Sys_New_harness:201"] = {rtwname: "/Cast23"}; + this.rtwnameHashMap["/Cast24"] = {sid: "FCC_Sys_New_harness:204"}; + this.sidHashMap["FCC_Sys_New_harness:204"] = {rtwname: "/Cast24"}; + this.rtwnameHashMap["/Cast25"] = {sid: "FCC_Sys_New_harness:207"}; + this.sidHashMap["FCC_Sys_New_harness:207"] = {rtwname: "/Cast25"}; + this.rtwnameHashMap["/Cast26"] = {sid: "FCC_Sys_New_harness:210"}; + this.sidHashMap["FCC_Sys_New_harness:210"] = {rtwname: "/Cast26"}; + this.rtwnameHashMap["/Cast27"] = {sid: "FCC_Sys_New_harness:213"}; + this.sidHashMap["FCC_Sys_New_harness:213"] = {rtwname: "/Cast27"}; + this.rtwnameHashMap["/Cast3"] = {sid: "FCC_Sys_New_harness:115"}; + this.sidHashMap["FCC_Sys_New_harness:115"] = {rtwname: "/Cast3"}; + this.rtwnameHashMap["/Cast4"] = {sid: "FCC_Sys_New_harness:119"}; + this.sidHashMap["FCC_Sys_New_harness:119"] = {rtwname: "/Cast4"}; + this.rtwnameHashMap["/Cast5"] = {sid: "FCC_Sys_New_harness:123"}; + this.sidHashMap["FCC_Sys_New_harness:123"] = {rtwname: "/Cast5"}; + this.rtwnameHashMap["/Cast6"] = {sid: "FCC_Sys_New_harness:127"}; + this.sidHashMap["FCC_Sys_New_harness:127"] = {rtwname: "/Cast6"}; + this.rtwnameHashMap["/Cast7"] = {sid: "FCC_Sys_New_harness:131"}; + this.sidHashMap["FCC_Sys_New_harness:131"] = {rtwname: "/Cast7"}; + this.rtwnameHashMap["/Cast8"] = {sid: "FCC_Sys_New_harness:134"}; + this.sidHashMap["FCC_Sys_New_harness:134"] = {rtwname: "/Cast8"}; + this.rtwnameHashMap["/Cast9"] = {sid: "FCC_Sys_New_harness:137"}; + this.sidHashMap["FCC_Sys_New_harness:137"] = {rtwname: "/Cast9"}; + this.rtwnameHashMap["/Sync1"] = {sid: "FCC_Sys_New_harness:108"}; + this.sidHashMap["FCC_Sys_New_harness:108"] = {rtwname: "/Sync1"}; + this.rtwnameHashMap["/Sync10"] = {sid: "FCC_Sys_New_harness:141"}; + this.sidHashMap["FCC_Sys_New_harness:141"] = {rtwname: "/Sync10"}; + this.rtwnameHashMap["/Sync11"] = {sid: "FCC_Sys_New_harness:144"}; + this.sidHashMap["FCC_Sys_New_harness:144"] = {rtwname: "/Sync11"}; + this.rtwnameHashMap["/Sync12"] = {sid: "FCC_Sys_New_harness:147"}; + this.sidHashMap["FCC_Sys_New_harness:147"] = {rtwname: "/Sync12"}; + this.rtwnameHashMap["/Sync13"] = {sid: "FCC_Sys_New_harness:150"}; + this.sidHashMap["FCC_Sys_New_harness:150"] = {rtwname: "/Sync13"}; + this.rtwnameHashMap["/Sync14"] = {sid: "FCC_Sys_New_harness:164"}; + this.sidHashMap["FCC_Sys_New_harness:164"] = {rtwname: "/Sync14"}; + this.rtwnameHashMap["/Sync15"] = {sid: "FCC_Sys_New_harness:167"}; + this.sidHashMap["FCC_Sys_New_harness:167"] = {rtwname: "/Sync15"}; + this.rtwnameHashMap["/Sync16"] = {sid: "FCC_Sys_New_harness:170"}; + this.sidHashMap["FCC_Sys_New_harness:170"] = {rtwname: "/Sync16"}; + this.rtwnameHashMap["/Sync17"] = {sid: "FCC_Sys_New_harness:173"}; + this.sidHashMap["FCC_Sys_New_harness:173"] = {rtwname: "/Sync17"}; + this.rtwnameHashMap["/Sync18"] = {sid: "FCC_Sys_New_harness:176"}; + this.sidHashMap["FCC_Sys_New_harness:176"] = {rtwname: "/Sync18"}; + this.rtwnameHashMap["/Sync19"] = {sid: "FCC_Sys_New_harness:179"}; + this.sidHashMap["FCC_Sys_New_harness:179"] = {rtwname: "/Sync19"}; + this.rtwnameHashMap["/Sync2"] = {sid: "FCC_Sys_New_harness:112"}; + this.sidHashMap["FCC_Sys_New_harness:112"] = {rtwname: "/Sync2"}; + this.rtwnameHashMap["/Sync20"] = {sid: "FCC_Sys_New_harness:182"}; + this.sidHashMap["FCC_Sys_New_harness:182"] = {rtwname: "/Sync20"}; + this.rtwnameHashMap["/Sync21"] = {sid: "FCC_Sys_New_harness:196"}; + this.sidHashMap["FCC_Sys_New_harness:196"] = {rtwname: "/Sync21"}; + this.rtwnameHashMap["/Sync22"] = {sid: "FCC_Sys_New_harness:199"}; + this.sidHashMap["FCC_Sys_New_harness:199"] = {rtwname: "/Sync22"}; + this.rtwnameHashMap["/Sync23"] = {sid: "FCC_Sys_New_harness:202"}; + this.sidHashMap["FCC_Sys_New_harness:202"] = {rtwname: "/Sync23"}; + this.rtwnameHashMap["/Sync24"] = {sid: "FCC_Sys_New_harness:205"}; + this.sidHashMap["FCC_Sys_New_harness:205"] = {rtwname: "/Sync24"}; + this.rtwnameHashMap["/Sync25"] = {sid: "FCC_Sys_New_harness:208"}; + this.sidHashMap["FCC_Sys_New_harness:208"] = {rtwname: "/Sync25"}; + this.rtwnameHashMap["/Sync26"] = {sid: "FCC_Sys_New_harness:211"}; + this.sidHashMap["FCC_Sys_New_harness:211"] = {rtwname: "/Sync26"}; + this.rtwnameHashMap["/Sync27"] = {sid: "FCC_Sys_New_harness:214"}; + this.sidHashMap["FCC_Sys_New_harness:214"] = {rtwname: "/Sync27"}; + this.rtwnameHashMap["/Sync3"] = {sid: "FCC_Sys_New_harness:116"}; + this.sidHashMap["FCC_Sys_New_harness:116"] = {rtwname: "/Sync3"}; + this.rtwnameHashMap["/Sync4"] = {sid: "FCC_Sys_New_harness:120"}; + this.sidHashMap["FCC_Sys_New_harness:120"] = {rtwname: "/Sync4"}; + this.rtwnameHashMap["/Sync5"] = {sid: "FCC_Sys_New_harness:124"}; + this.sidHashMap["FCC_Sys_New_harness:124"] = {rtwname: "/Sync5"}; + this.rtwnameHashMap["/Sync6"] = {sid: "FCC_Sys_New_harness:128"}; + this.sidHashMap["FCC_Sys_New_harness:128"] = {rtwname: "/Sync6"}; + this.rtwnameHashMap["/Sync7"] = {sid: "FCC_Sys_New_harness:132"}; + this.sidHashMap["FCC_Sys_New_harness:132"] = {rtwname: "/Sync7"}; + this.rtwnameHashMap["/Sync8"] = {sid: "FCC_Sys_New_harness:135"}; + this.sidHashMap["FCC_Sys_New_harness:135"] = {rtwname: "/Sync8"}; + this.rtwnameHashMap["/Sync9"] = {sid: "FCC_Sys_New_harness:138"}; + this.sidHashMap["FCC_Sys_New_harness:138"] = {rtwname: "/Sync9"}; + this.rtwnameHashMap["/Out1"] = {sid: "FCC_Sys_New_harness:109"}; + this.sidHashMap["FCC_Sys_New_harness:109"] = {rtwname: "/Out1"}; + this.rtwnameHashMap["/Out2"] = {sid: "FCC_Sys_New_harness:113"}; + this.sidHashMap["FCC_Sys_New_harness:113"] = {rtwname: "/Out2"}; + this.rtwnameHashMap["/Out3"] = {sid: "FCC_Sys_New_harness:117"}; + this.sidHashMap["FCC_Sys_New_harness:117"] = {rtwname: "/Out3"}; + this.rtwnameHashMap["/Out4"] = {sid: "FCC_Sys_New_harness:121"}; + this.sidHashMap["FCC_Sys_New_harness:121"] = {rtwname: "/Out4"}; + this.rtwnameHashMap["/Out5"] = {sid: "FCC_Sys_New_harness:125"}; + this.sidHashMap["FCC_Sys_New_harness:125"] = {rtwname: "/Out5"}; + this.rtwnameHashMap["/Out6"] = {sid: "FCC_Sys_New_harness:129"}; + this.sidHashMap["FCC_Sys_New_harness:129"] = {rtwname: "/Out6"}; + this.rtwnameHashMap["/Out7"] = {sid: "FCC_Sys_New_harness:161"}; + this.sidHashMap["FCC_Sys_New_harness:161"] = {rtwname: "/Out7"}; + this.rtwnameHashMap["/Out8"] = {sid: "FCC_Sys_New_harness:193"}; + this.sidHashMap["FCC_Sys_New_harness:193"] = {rtwname: "/Out8"}; + this.rtwnameHashMap["/Out9"] = {sid: "FCC_Sys_New_harness:225"}; + this.sidHashMap["FCC_Sys_New_harness:225"] = {rtwname: "/Out9"}; + this.rtwnameHashMap["/EmptySubsystem"] = {sid: "FCC_Sys_New_harness:229:134"}; + this.sidHashMap["FCC_Sys_New_harness:229:134"] = {rtwname: "/EmptySubsystem"}; + this.rtwnameHashMap["/Act_Pos1"] = {sid: "FCC_Sys_New_harness:62"}; + this.sidHashMap["FCC_Sys_New_harness:62"] = {rtwname: "/Act_Pos1"}; + this.rtwnameHashMap["/Act_Pos2"] = {sid: "FCC_Sys_New_harness:63"}; + this.sidHashMap["FCC_Sys_New_harness:63"] = {rtwname: "/Act_Pos2"}; + this.rtwnameHashMap["/Act_Pos3"] = {sid: "FCC_Sys_New_harness:64"}; + this.sidHashMap["FCC_Sys_New_harness:64"] = {rtwname: "/Act_Pos3"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "FCC_Sys_New_harness:65"}; + this.sidHashMap["FCC_Sys_New_harness:65"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "FCC_Sys_New_harness:66"}; + this.sidHashMap["FCC_Sys_New_harness:66"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "FCC_Sys_New_harness:67"}; + this.sidHashMap["FCC_Sys_New_harness:67"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "FCC_Sys_New_harness:68"}; + this.sidHashMap["FCC_Sys_New_harness:68"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "FCC_Sys_New_harness:69"}; + this.sidHashMap["FCC_Sys_New_harness:69"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "FCC_Sys_New_harness:70"}; + this.sidHashMap["FCC_Sys_New_harness:70"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/FCC_New"] = {sid: "FCC_Sys_New_harness:61"}; + this.sidHashMap["FCC_Sys_New_harness:61"] = {rtwname: "/FCC_New"}; + this.rtwnameHashMap["/Actuator1"] = {sid: "FCC_Sys_New_harness:71"}; + this.sidHashMap["FCC_Sys_New_harness:71"] = {rtwname: "/Actuator1"}; + this.rtwnameHashMap["/Actuator2"] = {sid: "FCC_Sys_New_harness:72"}; + this.sidHashMap["FCC_Sys_New_harness:72"] = {rtwname: "/Actuator2"}; + this.rtwnameHashMap["/Actuator3"] = {sid: "FCC_Sys_New_harness:73"}; + this.sidHashMap["FCC_Sys_New_harness:73"] = {rtwname: "/Actuator3"}; + this.rtwnameHashMap["/AHRS1(1).theta"] = {sid: "FCC_Sys_New_harness:152"}; + this.sidHashMap["FCC_Sys_New_harness:152"] = {rtwname: "/AHRS1(1).theta"}; + this.rtwnameHashMap["/AHRS1(1).phi"] = {sid: "FCC_Sys_New_harness:153"}; + this.sidHashMap["FCC_Sys_New_harness:153"] = {rtwname: "/AHRS1(1).phi"}; + this.rtwnameHashMap["/AHRS1(1).psi"] = {sid: "FCC_Sys_New_harness:154"}; + this.sidHashMap["FCC_Sys_New_harness:154"] = {rtwname: "/AHRS1(1).psi"}; + this.rtwnameHashMap["/AHRS1(1).q"] = {sid: "FCC_Sys_New_harness:155"}; + this.sidHashMap["FCC_Sys_New_harness:155"] = {rtwname: "/AHRS1(1).q"}; + this.rtwnameHashMap["/AHRS1(1).p"] = {sid: "FCC_Sys_New_harness:156"}; + this.sidHashMap["FCC_Sys_New_harness:156"] = {rtwname: "/AHRS1(1).p"}; + this.rtwnameHashMap["/AHRS1(1).r"] = {sid: "FCC_Sys_New_harness:157"}; + this.sidHashMap["FCC_Sys_New_harness:157"] = {rtwname: "/AHRS1(1).r"}; + this.rtwnameHashMap["/AHRS1(1).valid"] = {sid: "FCC_Sys_New_harness:158"}; + this.sidHashMap["FCC_Sys_New_harness:158"] = {rtwname: "/AHRS1(1).valid"}; + this.rtwnameHashMap["/AHRS1(1)"] = {sid: "FCC_Sys_New_harness:159"}; + this.sidHashMap["FCC_Sys_New_harness:159"] = {rtwname: "/AHRS1(1)"}; + this.rtwnameHashMap["/Out"] = {sid: "FCC_Sys_New_harness:160"}; + this.sidHashMap["FCC_Sys_New_harness:160"] = {rtwname: "/Out"}; + this.rtwnameHashMap["/AHRS2(1).theta"] = {sid: "FCC_Sys_New_harness:184"}; + this.sidHashMap["FCC_Sys_New_harness:184"] = {rtwname: "/AHRS2(1).theta"}; + this.rtwnameHashMap["/AHRS2(1).phi"] = {sid: "FCC_Sys_New_harness:185"}; + this.sidHashMap["FCC_Sys_New_harness:185"] = {rtwname: "/AHRS2(1).phi"}; + this.rtwnameHashMap["/AHRS2(1).psi"] = {sid: "FCC_Sys_New_harness:186"}; + this.sidHashMap["FCC_Sys_New_harness:186"] = {rtwname: "/AHRS2(1).psi"}; + this.rtwnameHashMap["/AHRS2(1).q"] = {sid: "FCC_Sys_New_harness:187"}; + this.sidHashMap["FCC_Sys_New_harness:187"] = {rtwname: "/AHRS2(1).q"}; + this.rtwnameHashMap["/AHRS2(1).p"] = {sid: "FCC_Sys_New_harness:188"}; + this.sidHashMap["FCC_Sys_New_harness:188"] = {rtwname: "/AHRS2(1).p"}; + this.rtwnameHashMap["/AHRS2(1).r"] = {sid: "FCC_Sys_New_harness:189"}; + this.sidHashMap["FCC_Sys_New_harness:189"] = {rtwname: "/AHRS2(1).r"}; + this.rtwnameHashMap["/AHRS2(1).valid"] = {sid: "FCC_Sys_New_harness:190"}; + this.sidHashMap["FCC_Sys_New_harness:190"] = {rtwname: "/AHRS2(1).valid"}; + this.rtwnameHashMap["/AHRS2(1)"] = {sid: "FCC_Sys_New_harness:191"}; + this.sidHashMap["FCC_Sys_New_harness:191"] = {rtwname: "/AHRS2(1)"}; + this.rtwnameHashMap["/Out"] = {sid: "FCC_Sys_New_harness:192"}; + this.sidHashMap["FCC_Sys_New_harness:192"] = {rtwname: "/Out"}; + this.rtwnameHashMap["/AHRS3(1).theta"] = {sid: "FCC_Sys_New_harness:216"}; + this.sidHashMap["FCC_Sys_New_harness:216"] = {rtwname: "/AHRS3(1).theta"}; + this.rtwnameHashMap["/AHRS3(1).phi"] = {sid: "FCC_Sys_New_harness:217"}; + this.sidHashMap["FCC_Sys_New_harness:217"] = {rtwname: "/AHRS3(1).phi"}; + this.rtwnameHashMap["/AHRS3(1).psi"] = {sid: "FCC_Sys_New_harness:218"}; + this.sidHashMap["FCC_Sys_New_harness:218"] = {rtwname: "/AHRS3(1).psi"}; + this.rtwnameHashMap["/AHRS3(1).q"] = {sid: "FCC_Sys_New_harness:219"}; + this.sidHashMap["FCC_Sys_New_harness:219"] = {rtwname: "/AHRS3(1).q"}; + this.rtwnameHashMap["/AHRS3(1).p"] = {sid: "FCC_Sys_New_harness:220"}; + this.sidHashMap["FCC_Sys_New_harness:220"] = {rtwname: "/AHRS3(1).p"}; + this.rtwnameHashMap["/AHRS3(1).r"] = {sid: "FCC_Sys_New_harness:221"}; + this.sidHashMap["FCC_Sys_New_harness:221"] = {rtwname: "/AHRS3(1).r"}; + this.rtwnameHashMap["/AHRS3(1).valid"] = {sid: "FCC_Sys_New_harness:222"}; + this.sidHashMap["FCC_Sys_New_harness:222"] = {rtwname: "/AHRS3(1).valid"}; + this.rtwnameHashMap["/AHRS3(1)"] = {sid: "FCC_Sys_New_harness:223"}; + this.sidHashMap["FCC_Sys_New_harness:223"] = {rtwname: "/AHRS3(1)"}; + this.rtwnameHashMap["/Out"] = {sid: "FCC_Sys_New_harness:224"}; + this.sidHashMap["FCC_Sys_New_harness:224"] = {rtwname: "/Out"}; + this.getSID = function(rtwname) { return this.rtwnameHashMap[rtwname];} + this.getRtwname = function(sid) { return this.sidHashMap[sid];} +} +RTW_rtwnameSIDMap.instance = new RTW_rtwnameSIDMap(); diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_CInterface_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_CInterface_h.html new file mode 100644 index 0000000..28bc98f --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_CInterface_h.html @@ -0,0 +1,70 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#ifndef XILTgtAppSvc_CInterface_h
    4#define XILTgtAppSvc_CInterface_h
    5
    6#include "XILTgtAppSvc.h"
    7
    8XILTGTAPPSVC_API_EXTERN_C uint8_T xilTgtAppSvcCreate(void);
    9
    10XILTGTAPPSVC_API_EXTERN_C void xilTgtAppSvcDestroy(void);
    11
    12XILTGTAPPSVC_API_EXTERN_C uint8_T* xilTgtAppSvcGetReceivedData(uint16_T* size);
    13
    14XILTGTAPPSVC_API_EXTERN_C void xilTgtAppSvcFreeLastReceivedData(void);
    15
    16XILTGTAPPSVC_API_EXTERN_C uint8_T xilTgtAppSvcAllocBuffer(void** ppBuf,
    17 const uint16_T size);
    18
    19XILTGTAPPSVC_API_EXTERN_C IOUnit_T* xilTgtAppSvcGetBufferDataPtr(void* pBufVoid);
    20
    21XILTGTAPPSVC_API_EXTERN_C uint8_T xilTgtAppSvcSend(void* pBufVoid,
    22 const uint16_T payloadSize);
    23
    24XILTGTAPPSVC_API_EXTERN_C uint16_T xilTgtAppSvcGetMaxPayloadCapacity(void);
    25
    26#endif
    27
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_h.html new file mode 100644 index 0000000..f92120b --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/XILTgtAppSvc_h.html @@ -0,0 +1,68 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#ifndef XILTgtAppSvc_h
    4#define XILTgtAppSvc_h
    5
    6#include "XILTgtAppSvc_spec.h"
    7#include "rtwtypes.h"
    8
    9#if defined (USING_CS_API) || defined(BUILDING_LIBMWCODER_XILTGTAPPSVC)
    10
    11 typedef uint8_T IOUnit_T;
    12#else
    13
    14 #include "xilcomms_rtiostream.h"
    15#endif
    16
    17static const boolean_T XILTGTAPPSVC_ERROR = 0;
    18static const boolean_T XILTGTAPPSVC_SUCCESS = 1;
    19
    20#define XIL_RTIOSTREAM_BASED_SERVICE_ID 1
    21typedef enum {XIL_COMMAND_NOT_COMPLETE=0,
    22 XIL_COMMAND_COMPLETE,
    23 XIL_STEP_COMPLETE} XILCommandResponseType;
    24
    25#endif
    26
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_c.html new file mode 100644 index 0000000..9d1ad2c --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_c.html @@ -0,0 +1,254 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2007-2015 The MathWorks, Inc. */
    2
    3#include "codeinstr_data_stream.h"
    4#include "xil_interface_lib.h"
    5#include "CodeInstrTgtAppSvc_CInterface.h"
    6
    7#ifdef USING_CS_API
    8 #define CODE_INSTR_TX_BUFFER_MEMUNIT_SIZE codeInstrTgtAppSvcGetMaxPayloadCapacity()
    9 #define BUFFER_HEADER_SIZE 0
    10#else
    11 #include "rx_tx_buffer_sizes.h"
    12#endif
    13
    14#define COMMAND_COMPLETE_SIZE (sizeof(MemUnit_T))
    15#define COMMAND_COMPLETE_IDX 0
    16#define WRITE_DATA_BUFFER_IDX (COMMAND_COMPLETE_IDX + COMMAND_COMPLETE_SIZE)
    17#define USED_WRITE_BUFFER_SIZE (COMMAND_COMPLETE_SIZE + codeInstrWriteDataAvail)
    18#define WRITE_BUFFER_SIZE (CODE_INSTR_TX_BUFFER_MEMUNIT_SIZE - COMMAND_COMPLETE_SIZE - BUFFER_HEADER_SIZE)
    19
    20static void* pBuffer;
    21static IOUnit_T* codeInstrWriteBuffer;
    22static IOUnit_T* codeInstrWriteDataPtr;
    23static uint16_T codeInstrWriteDataAvail;
    24static MemUnit_T* commandComplete;
    25
    26/* reset the write buffer */
    27static XIL_INTERFACE_LIB_ERROR_CODE resetCodeInstrWriteBuffer(void) {
    28
    29 /* Ask the CS to allocate a buffer that the CodeInstr app service will
    30 * use for transmission
    31 */
    32 if (!codeInstrTgtAppSvcAllocBuffer(&pBuffer, CODE_INSTR_TX_BUFFER_MEMUNIT_SIZE)) {
    33 return XIL_INTERFACE_LIB_ERROR;
    34 }
    35 codeInstrWriteBuffer = codeInstrTgtAppSvcGetBufferDataPtr(pBuffer);
    36
    37 /* set commandComplete and codeInstrWriteDataPtr pointer */
    38 commandComplete = (MemUnit_T *) &codeInstrWriteBuffer[COMMAND_COMPLETE_IDX];
    39 codeInstrWriteDataPtr = &codeInstrWriteBuffer[WRITE_DATA_BUFFER_IDX];
    40
    41 /* ready for next command */
    42 codeInstrWriteDataAvail = 0;
    43 *commandComplete = 0;
    44
    45 return XIL_INTERFACE_LIB_SUCCESS;
    46}
    47
    48XIL_INTERFACE_LIB_ERROR_CODE codeInstrInit(void) {
    49 /* Create code instrumentation app service */
    50 if (codeInstrTgtAppSvcCreate() != CODEINSTRTGTAPPSVC_SUCCESS) {
    51 return XIL_INTERFACE_LIB_ERROR;
    52 }
    53
    54 /* Reset write buffer */
    55 return resetCodeInstrWriteBuffer();
    56}
    57
    58void codeInstrTerminate(void) {
    59 codeInstrTgtAppSvcDestroy();
    60}
    61
    62/* send pending writes */
    63static XIL_DATA_STREAM_ERROR_CODE sendWriteBuffer(void) {
    64 /* send */
    65 if (codeInstrTgtAppSvcSend(pBuffer, USED_WRITE_BUFFER_SIZE) == CODEINSTRTGTAPPSVC_ERROR) {
    66 return XIL_DATA_FLUSH_ERROR;
    67 }
    68
    69 /* reset */
    70 if (resetCodeInstrWriteBuffer()!= XIL_INTERFACE_LIB_SUCCESS) {
    71 return XIL_DATA_FLUSH_ERROR;
    72 }
    73
    74 return XIL_DATA_STREAM_SUCCESS;
    75}
    76
    77
    78XIL_DATA_STREAM_ERROR_CODE codeInstrWriteData(const MemUnit_T * src, uint32_T size) {
    79 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    80 const IOUnit_T * srcPtr = (const IOUnit_T *) src;
    81 size_t transferAmount;
    82 uint16_T bufferAvail;
    83
    84 /* block until all data is processed */
    85 while (size > 0) {
    86 /* send if we have a full message worth of data */
    87 if (codeInstrWriteDataAvail == WRITE_BUFFER_SIZE) {
    88 errorCode = sendWriteBuffer();
    89 if (errorCode != XIL_DATA_STREAM_SUCCESS) {
    90 return errorCode;
    91 }
    92 }
    93 bufferAvail = WRITE_BUFFER_SIZE - codeInstrWriteDataAvail;
    94 transferAmount = (uint16_T) MIN(bufferAvail, size);
    95 /* copy data into write buffer */
    96 memcpy((void *) codeInstrWriteDataPtr, srcPtr, transferAmount);
    97 size -= (uint32_T) transferAmount;
    98 codeInstrWriteDataAvail += (uint16_T) transferAmount;
    99 srcPtr += transferAmount;
    100 codeInstrWriteDataPtr += transferAmount;
    101 }
    102 return errorCode;
    103}
    104
    105
    106XIL_DATA_STREAM_ERROR_CODE codeInstrDataFlush(void) {
    107
    108 /* final part of command */
    109 *commandComplete = 1;
    110
    111 /* send the write buffer */
    112 if (sendWriteBuffer() == XIL_DATA_FLUSH_ERROR){
    113 return XIL_DATA_FLUSH_ERROR;
    114 }
    115
    116 return XIL_DATA_STREAM_SUCCESS;
    117
    118}
    119
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_h.html new file mode 100644 index 0000000..3a7bbdd --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_data_stream_h.html @@ -0,0 +1,54 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3/*
    4 * File: codeInstr_data_stream.h
    5 *
    6 */
    7
    8/* need error codes */
    9#include "xil_interface_lib.h"
    10
    11/* initialize code instrumentation service */
    12extern XIL_INTERFACE_LIB_ERROR_CODE codeInstrInit(void);
    13/* terminate code instrumentation service */
    14extern void codeInstrTerminate(void);
    15/* copy specified amount of data from the address specified to the output stream */
    16extern XIL_DATA_STREAM_ERROR_CODE codeInstrWriteData(const MemUnit_T *, uint32_T);
    17/* flush any buffered writes */
    18extern XIL_DATA_STREAM_ERROR_CODE codeInstrDataFlush(void);
    19
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_rtiostream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_rtiostream_c.html new file mode 100644 index 0000000..7693727 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/codeinstr_rtiostream_c.html @@ -0,0 +1,114 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#include "rx_tx_buffer_sizes.h"
    4#include "xil_common.h"
    5#include "CodeInstrTgtAppSvc_CInterface.h"
    6
    7/* code instrumentation buffer is statically allocated for rtiostream-based implementation */
    8static IOUnit_T codeInstrWriteBuffer[CODE_INSTR_TX_BUFFER_MEMUNIT_SIZE];
    9
    10extern uint8_T codeInstrTgtAppSvcCreate(void) {
    11 return CODEINSTRTGTAPPSVC_SUCCESS;
    12}
    13
    14extern void codeInstrTgtAppSvcDestroy(void) {
    15}
    16
    17/* Allocation method simply returns the statically allocated buffer */
    18extern uint8_T codeInstrTgtAppSvcAllocBuffer(
    19 void** ppBuf,
    20 const uint16_T dataSize) {
    21
    22 /* buffer is already statically allocated */
    23 *ppBuf = &codeInstrWriteBuffer[APPLICATION_ID_IDX];
    24
    25 UNUSED_PARAMETER(dataSize);
    26
    27 /* nothing to do as buffer is already statically allocated */
    28 return CODEINSTRTGTAPPSVC_SUCCESS;
    29}
    30
    31/* return pointer to the code instrumentation buffer data */
    32extern IOUnit_T * codeInstrTgtAppSvcGetBufferDataPtr(
    33 void* const pBuf) {
    34
    35 /* buffer is already statically allocated */
    36 UNUSED_PARAMETER(pBuf);
    37
    38 return &codeInstrWriteBuffer[PAYLOAD_IDX];
    39}
    40
    41/* send data over rtiostream */
    42extern uint8_T codeInstrTgtAppSvcSend(
    43 void* const pBuf,
    44 const uint16_T dataSize) {
    45
    46 return (uint8_T)commsEnqueueBuffer(pBuf, CODEINSTR_RTIOSTREAM_BASED_SERVICE_ID, dataSize);
    47}
    48
    49
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_c.html new file mode 100644 index 0000000..e87ea05 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_c.html @@ -0,0 +1,784 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2015-2019 The MathWorks, Inc. */
    2
    3#include "coder_assumptions_app.h"
    4#include "coder_assumptions_data_stream.h"
    5#include "xil_interface_lib.h"
    6
    7/*
    8 * Include coder_assumptions.h for Hardware Implementation setting
    9 * preprocessor validation checks.
    10 * These checks verify fundamental data types that the comms
    11 * stack relies on, e.g. uint8_T, uint16_T, uint32_T.
    12 *
    13 * Also access the global results variables and the entry point
    14 * function for running coder assumptions tests.
    15 */
    16#include "coder_assumptions.h"
    17
    18/* combine arguments (after expanding arguments) */
    19#define CA_EXP_CONCAT(a,b) CA_CONCAT(a,b)
    20#define CA_CONCAT(a,b) a ## b
    21
    22/* Compile time static assert for checking fundamental assumptions such
    23 * as sizeof values for specific data types. */
    24#define CA_STATIC_ASSERT(expr, msg) typedef char CA_EXP_CONCAT(assert_failed__, msg) [(expr) ? (+1) : (-1)]
    25
    26#define CA_RETURN_IF_ERROR(errCode) if((errCode) != XIL_DATA_STREAM_SUCCESS) return (errCode)
    27
    28#include "coder_assumptions_hwimpl.h"
    29
    30#ifdef HOST_WORD_ADDRESSABLE_TESTING
    31 /* MemUnit_T can be any of uint8_T, uint16_T, uint32_T
    32 * Just check it is consistent with MEM_UNIT_BYTES */
    33 CA_STATIC_ASSERT(sizeof(MemUnit_T) == MEM_UNIT_BYTES, INVALID_MEMUNIT_T);
    34#else
    35 /* Verify MemUnit_T: sizeof must be 1 */
    36 CA_STATIC_ASSERT(sizeof(MemUnit_T) == 1, MEMUNIT_T_NOT_SIZEOF_1);
    37 /* Verify MEM_UNIT_BYTES: must match the size of the largest integer that has sizeof == 1
    38 * Only word addressable targets up to 32-bits are supported. */
    39 CA_STATIC_ASSERT((sizeof(uint32_T) == 1) ? MEM_UNIT_BYTES == 4 :
    40 (sizeof(uint16_T) == 1) ? MEM_UNIT_BYTES == 2 :
    41 (sizeof(uint8_T) == 1) ? MEM_UNIT_BYTES == 1 : 0, INVALID_MEM_UNIT_BYTES);
    42#endif
    43
    44#include "coder_assumptions_shared_enums.h"
    45
    46static MemUnit_T pwsEnabled;
    47
    48
    49static XIL_DATA_STREAM_ERROR_CODE sendResult(const CA_TestResult result,
    50 const MemUnit_T resultType,
    51 const MemUnit_T actual,
    52 const MemUnit_T assumed) {
    53 XIL_DATA_STREAM_ERROR_CODE errorCode;
    54 MemUnit_T tmp;
    55 /* send result type */
    56 errorCode = coderAssumptionsWriteData(&resultType, sizeof(MemUnit_T));
    57 CA_RETURN_IF_ERROR(errorCode);
    58
    59 /* send result status */
    60 tmp = (MemUnit_T) result.status;
    61 errorCode = coderAssumptionsWriteData(&tmp, sizeof(MemUnit_T));
    62 CA_RETURN_IF_ERROR(errorCode);
    63
    64 /* send result msg id */
    65 tmp = (MemUnit_T) result.msg;
    66 errorCode = coderAssumptionsWriteData(&tmp, sizeof(MemUnit_T));
    67 CA_RETURN_IF_ERROR(errorCode);
    68
    69 /* send actual */
    70 errorCode = coderAssumptionsWriteData(&actual, sizeof(MemUnit_T));
    71 CA_RETURN_IF_ERROR(errorCode);
    72
    73 /* send assumed */
    74 errorCode = coderAssumptionsWriteData(&assumed, sizeof(MemUnit_T));
    75 CA_RETURN_IF_ERROR(errorCode);
    76
    77 /* final return */
    78 return errorCode;
    79}
    80
    81static XIL_DATA_STREAM_ERROR_CODE transmitMemUnitBytes(void) {
    82 XIL_DATA_STREAM_ERROR_CODE errorCode;
    83 const MemUnit_T memUnitBytes = MEM_UNIT_BYTES;
    84
    85 /* send memUnitBytes */
    86 errorCode = coderAssumptionsWriteData(&memUnitBytes, sizeof(MemUnit_T));
    87 CA_RETURN_IF_ERROR(errorCode);
    88
    89 errorCode = coderAssumptionsSendWriteBuffer();
    90 CA_RETURN_IF_ERROR(errorCode);
    91
    92 return errorCode;
    93}
    94
    95/* portable word sizes specified checks */
    96static XIL_DATA_STREAM_ERROR_CODE sendPWS(void) {
    97 XIL_DATA_STREAM_ERROR_CODE errorCode;
    98 MemUnit_T commandId;
    99
    100 /* send CA_PWS */
    101 commandId = CA_PWS;
    102 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    103 CA_RETURN_IF_ERROR(errorCode);
    104
    105 /* PWS enabled in build */
    106 commandId = CA_PWS_ENABLED;
    107 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    108 CA_RETURN_IF_ERROR(errorCode);
    109
    110 pwsEnabled = (MemUnit_T) CA_Actual_HWImpl.portableWordSizes;
    111 errorCode = coderAssumptionsWriteData(&pwsEnabled, sizeof(MemUnit_T));
    112 CA_RETURN_IF_ERROR(errorCode);
    113
    114 /* extended PWS checks */
    115 if (pwsEnabled) {
    116 /* config setting mismatch */
    117 errorCode = sendResult(CA_PortableWordSizes_Results.configSetting,
    118 (MemUnit_T) CA_PWS_CONFIG_SETTING,
    119 (MemUnit_T) CA_Actual_HWImpl.portableWordSizes,
    120 (MemUnit_T) CA_Expected_HWImpl.portableWordSizes);
    121 CA_RETURN_IF_ERROR(errorCode);
    122 }
    123
    124
    125 errorCode = coderAssumptionsSendWriteBuffer();
    126 CA_RETURN_IF_ERROR(errorCode);
    127
    128 return errorCode;
    129}
    130
    131/* hardware implementation checks message 1 */
    132static XIL_DATA_STREAM_ERROR_CODE sendHWImpl1(void) {
    133 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    134 MemUnit_T commandId;
    135
    136 /* send CA_HW_IMPL_SIZES_1 */
    137 commandId = CA_HW_IMPL_SIZES_1;
    138 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    139 CA_RETURN_IF_ERROR(errorCode);
    140
    141 /* bit per char */
    142 errorCode = sendResult(CA_HWImpl_Results.bitsPerChar,
    143 (MemUnit_T) CA_HW_IMPL_BIT_CHAR,
    144 (MemUnit_T) CA_Actual_HWImpl.bitsPerChar,
    145 (MemUnit_T) CA_Expected_HWImpl.bitsPerChar);
    146 CA_RETURN_IF_ERROR(errorCode);
    147
    148 /* bit per short */
    149 errorCode = sendResult(CA_HWImpl_Results.bitsPerShort,
    150 (MemUnit_T) CA_HW_IMPL_BIT_SHORT,
    151 (MemUnit_T) CA_Actual_HWImpl.bitsPerShort,
    152 (MemUnit_T) CA_Expected_HWImpl.bitsPerShort);
    153 CA_RETURN_IF_ERROR(errorCode);
    154
    155 /* bit per int */
    156 errorCode = sendResult(CA_HWImpl_Results.bitsPerInt,
    157 (MemUnit_T) CA_HW_IMPL_BIT_INT,
    158 (MemUnit_T) CA_Actual_HWImpl.bitsPerInt,
    159 (MemUnit_T) CA_Expected_HWImpl.bitsPerInt);
    160 CA_RETURN_IF_ERROR(errorCode);
    161
    162 /* bit per long */
    163 errorCode = sendResult(CA_HWImpl_Results.bitsPerLong,
    164 (MemUnit_T) CA_HW_IMPL_BIT_LONG,
    165 (MemUnit_T) CA_Actual_HWImpl.bitsPerLong,
    166 (MemUnit_T) CA_Expected_HWImpl.bitsPerLong);
    167 CA_RETURN_IF_ERROR(errorCode);
    168
    169 /* transmit message */
    170 errorCode = coderAssumptionsSendWriteBuffer();
    171 CA_RETURN_IF_ERROR(errorCode);
    172
    173 return errorCode;
    174}
    175
    176/* hardware implementation checks message 2 */
    177static XIL_DATA_STREAM_ERROR_CODE sendHWImpl2(void) {
    178 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    179 MemUnit_T commandId;
    180
    181 /* send CA_HW_IMPL_SIZES_2 */
    182 commandId = CA_HW_IMPL_SIZES_2;
    183 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    184 CA_RETURN_IF_ERROR(errorCode);
    185
    186 /* support long long */
    187 errorCode = sendResult(CA_HWImpl_Results.supportLongLong,
    188 (MemUnit_T) CA_HW_IMPL_SUPPORT_LONGLONG,
    189 (MemUnit_T) CA_Actual_HWImpl.supportLongLong,
    190 (MemUnit_T) CA_Expected_HWImpl.supportLongLong);
    191 CA_RETURN_IF_ERROR(errorCode);
    192
    193 /* bit per long long */
    194 errorCode = sendResult(CA_HWImpl_Results.bitsPerLongLong,
    195 (MemUnit_T) CA_HW_IMPL_BIT_LONGLONG,
    196 (MemUnit_T) CA_Actual_HWImpl.bitsPerLongLong,
    197 (MemUnit_T) CA_Expected_HWImpl.bitsPerLongLong);
    198 CA_RETURN_IF_ERROR(errorCode);
    199
    200 /* bit per float */
    201 errorCode = sendResult(CA_HWImpl_Results.bitsPerFloat,
    202 (MemUnit_T) CA_HW_IMPL_BIT_FLOAT,
    203 (MemUnit_T) CA_Actual_HWImpl.bitsPerFloat,
    204 (MemUnit_T) CA_Expected_HWImpl.bitsPerFloat);
    205 CA_RETURN_IF_ERROR(errorCode);
    206
    207 /* bit per double */
    208 errorCode = sendResult(CA_HWImpl_Results.bitsPerDouble,
    209 (MemUnit_T) CA_HW_IMPL_BIT_DOUBLE,
    210 (MemUnit_T) CA_Actual_HWImpl.bitsPerDouble,
    211 (MemUnit_T) CA_Expected_HWImpl.bitsPerDouble);
    212 CA_RETURN_IF_ERROR(errorCode);
    213
    214 /* transmit message */
    215 errorCode = coderAssumptionsSendWriteBuffer();
    216 CA_RETURN_IF_ERROR(errorCode);
    217
    218 return errorCode;
    219}
    220
    221/* hardware implementation checks message 3 */
    222static XIL_DATA_STREAM_ERROR_CODE sendHWImpl3(void) {
    223 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    224 MemUnit_T commandId;
    225
    226 /* send CA_HW_IMPL_SIZES_3 */
    227 commandId = CA_HW_IMPL_SIZES_3;
    228 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    229 CA_RETURN_IF_ERROR(errorCode);
    230
    231 /* bit per pointer */
    232 errorCode = sendResult(CA_HWImpl_Results.bitsPerPointer,
    233 (MemUnit_T) CA_HW_IMPL_BIT_POINTER,
    234 (MemUnit_T) CA_Actual_HWImpl.bitsPerPointer,
    235 (MemUnit_T) CA_Expected_HWImpl.bitsPerPointer);
    236 CA_RETURN_IF_ERROR(errorCode);
    237
    238 /* bit per size_t */
    239 errorCode = sendResult(CA_HWImpl_Results.bitsPerSizeT,
    240 (MemUnit_T) CA_HW_IMPL_BIT_SIZE_T,
    241 (MemUnit_T) CA_Actual_HWImpl.bitsPerSizeT,
    242 (MemUnit_T) CA_Expected_HWImpl.bitsPerSizeT);
    243 CA_RETURN_IF_ERROR(errorCode);
    244
    245 /* bit per ptrdiff_t */
    246 errorCode = sendResult(CA_HWImpl_Results.bitsPerPtrDiffT,
    247 (MemUnit_T) CA_HW_IMPL_BIT_PTRDIFF_T,
    248 (MemUnit_T) CA_Actual_HWImpl.bitsPerPtrDiffT,
    249 (MemUnit_T) CA_Expected_HWImpl.bitsPerPtrDiffT);
    250 CA_RETURN_IF_ERROR(errorCode);
    251
    252 /* transmit message */
    253 errorCode = coderAssumptionsSendWriteBuffer();
    254 CA_RETURN_IF_ERROR(errorCode);
    255
    256 return errorCode;
    257}
    258
    259
    260/* hardware implementation checks message 4 */
    261static XIL_DATA_STREAM_ERROR_CODE sendHWImpl4(void) {
    262 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    263 MemUnit_T commandId;
    264
    265 /* send CA_HW_IMPL_SIZES_4 */
    266 commandId = CA_HW_IMPL_SIZES_4;
    267 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    268 CA_RETURN_IF_ERROR(errorCode);
    269
    270 /* byte order */
    271 errorCode = sendResult(CA_HWImpl_Results.byteOrder,
    272 (MemUnit_T) CA_HW_IMPL_BYTE_ORDER,
    273 (MemUnit_T) CA_Actual_HWImpl.byteOrder,
    274 (MemUnit_T) CA_Expected_HWImpl.byteOrder);
    275 CA_RETURN_IF_ERROR(errorCode);
    276
    277 /* integer division rounding */
    278 errorCode = sendResult(CA_HWImpl_Results.intDivRoundTo,
    279 (MemUnit_T) CA_HW_IMPL_INT_DIV_ROUND,
    280 (MemUnit_T) CA_Actual_HWImpl.intDivRoundTo,
    281 (MemUnit_T) CA_Expected_HWImpl.intDivRoundTo);
    282 CA_RETURN_IF_ERROR(errorCode);
    283
    284 /* shift right on a signed integer */
    285 errorCode = sendResult(CA_HWImpl_Results.shiftRightBehavior,
    286 (MemUnit_T) CA_HW_IMPL_SHIFT_RIGHT,
    287 (MemUnit_T) CA_Actual_HWImpl.shiftRightBehavior,
    288 (MemUnit_T) CA_Expected_HWImpl.shiftRightBehavior);
    289 CA_RETURN_IF_ERROR(errorCode);
    290
    291 /* transmit message */
    292 errorCode = coderAssumptionsSendWriteBuffer();
    293 CA_RETURN_IF_ERROR(errorCode);
    294
    295 return errorCode;
    296}
    297
    298/* hardware implementation, checks unrelated to sizes */
    299static XIL_DATA_STREAM_ERROR_CODE sendHardwareChecks(void){
    300 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    301 MemUnit_T commandId;
    302
    303 commandId = CA_CHECKS_1;
    304 errorCode = coderAssumptionsWriteData(&commandId, sizeof(MemUnit_T));
    305 CA_RETURN_IF_ERROR(errorCode);
    306
    307 /* memory at startup */
    308 errorCode = sendResult(CA_HWImpl_Results.memoryAtStartup,
    309 (MemUnit_T) CA_HW_IMPL_MEMORY_STARTUP,
    310 (MemUnit_T) CA_Actual_HWImpl.memoryAtStartup,
    311 (MemUnit_T) CA_Expected_HWImpl.memoryAtStartup);
    312 CA_RETURN_IF_ERROR(errorCode);
    313
    314 /* denormal flush to zero */
    315 errorCode = sendResult(CA_HWImpl_Results.denormalFlushToZero,
    316 (MemUnit_T) CA_HW_IMPL_DENORMAL_FTZ,
    317 (MemUnit_T) CA_Actual_HWImpl.denormalFlushToZero,
    318 (MemUnit_T) CA_Expected_HWImpl.denormalFlushToZero);
    319 CA_RETURN_IF_ERROR(errorCode);
    320
    321 /* denormal as zero */
    322 errorCode = sendResult(CA_HWImpl_Results.denormalAsZero,
    323 (MemUnit_T) CA_HW_IMPL_DENORMAL_DAZ,
    324 (MemUnit_T) CA_Actual_HWImpl.denormalAsZero,
    325 (MemUnit_T) CA_Expected_HWImpl.denormalAsZero);
    326 CA_RETURN_IF_ERROR(errorCode);
    327
    328 /* transmit message */
    329 errorCode = coderAssumptionsSendWriteBuffer();
    330 CA_RETURN_IF_ERROR(errorCode);
    331
    332 return errorCode;
    333}
    334
    335static XIL_DATA_STREAM_ERROR_CODE runChecks(void) {
    336 XIL_DATA_STREAM_ERROR_CODE errorCode;
    337 MemUnit_T endTransmission = CA_END_TRANSMIT;
    338
    339 /* first, run the coder assumptions checks */
    340 CA_Run_Tests();
    341
    342 /* now send the results to the host */
    343 errorCode = transmitMemUnitBytes();
    344 CA_RETURN_IF_ERROR(errorCode);
    345
    346 errorCode = sendPWS();
    347 CA_RETURN_IF_ERROR(errorCode);
    348
    349 errorCode = sendHWImpl1();
    350 CA_RETURN_IF_ERROR(errorCode);
    351 errorCode = sendHWImpl2();
    352 CA_RETURN_IF_ERROR(errorCode);
    353 errorCode = sendHWImpl3();
    354 CA_RETURN_IF_ERROR(errorCode);
    355 errorCode = sendHWImpl4();
    356 CA_RETURN_IF_ERROR(errorCode);
    357
    358 /* send results of miscellaneous checks */
    359 errorCode = sendHardwareChecks();
    360 CA_RETURN_IF_ERROR(errorCode);
    361
    362 /* let host know all tests have completed */
    363 errorCode = coderAssumptionsWriteData(&endTransmission, sizeof(MemUnit_T));
    364 CA_RETURN_IF_ERROR(errorCode);
    365 errorCode = coderAssumptionsSendWriteBuffer();
    366
    367 /* final return */
    368 return errorCode;
    369}
    370
    371
    372/*
    373 * XIL interface entry points
    374 *
    375 */
    376XIL_INTERFACE_LIB_ERROR_CODE coderAssumptionsRun(void) {
    377 if (runChecks() != XIL_DATA_STREAM_SUCCESS) {
    378 return XIL_INTERFACE_LIB_ERROR;
    379 }
    380 else {
    381 return XIL_INTERFACE_LIB_SUCCESS;
    382 }
    383}
    384
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_h.html new file mode 100644 index 0000000..7631d64 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_app_h.html @@ -0,0 +1,38 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2015 The MathWorks, Inc. */
    2
    3/*
    4 * File: coder_assumptions_app.h
    5 *
    6 */
    7
    8#include "xil_error_codes.h"
    9
    10extern XIL_INTERFACE_LIB_ERROR_CODE coderAssumptionsRun(void);
    11
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_c.html new file mode 100644 index 0000000..075f142 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_c.html @@ -0,0 +1,188 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2015-2017 The MathWorks, Inc. */
    2
    3#include "coder_assumptions_data_stream.h"
    4#include "xil_interface_lib.h"
    5#include "CoderAssumpTgtAppSvc_CInterface.h"
    6
    7#ifdef USING_CS_API
    8 #define CA_TX_BUFFER_MEMUNIT_SIZE coderAssumpTgtAppSvcGetMaxPayloadCapacity()
    9 #define BUFFER_HEADER_SIZE 0
    10#else
    11 #include "rx_tx_buffer_sizes.h"
    12#endif
    13
    14static void* pBuffer;
    15static IOUnit_T* coderAssumptionsWriteDataPtr;
    16static uint16_T coderAssumptionsWriteDataAvail;
    17
    18XIL_DATA_STREAM_ERROR_CODE coderAssumptionsWriteData(const void * src, const size_t size) {
    19 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    20
    21 const size_t WRITE_BUFFER_SIZE = CA_TX_BUFFER_MEMUNIT_SIZE - BUFFER_HEADER_SIZE;
    22 size_t sizeToTransfer = size;
    23
    24 /* check to see if buffer will overflow */
    25 if ((coderAssumptionsWriteDataAvail + sizeToTransfer) > WRITE_BUFFER_SIZE) {
    26 errorCode = XIL_WRITE_DATA_ERROR;
    27 return errorCode;
    28 }
    29
    30 /* copy data into write buffer */
    31 memcpy((void *) coderAssumptionsWriteDataPtr, src, sizeToTransfer);
    32 coderAssumptionsWriteDataAvail += (uint16_T) sizeToTransfer;
    33 coderAssumptionsWriteDataPtr += sizeToTransfer;
    34
    35 return errorCode;
    36}
    37
    38
    39/* reset the write buffer */
    40XIL_INTERFACE_LIB_ERROR_CODE resetCoderAssumptionsWriteBuffer(void) {
    41
    42 /* Ask the CS to allocate a buffer that the app will
    43 * use for transmission
    44 */
    45 if (!coderAssumpTgtAppSvcAllocBuffer(&pBuffer, CA_TX_BUFFER_MEMUNIT_SIZE)) {
    46 return XIL_INTERFACE_LIB_ERROR;
    47 }
    48
    49 /* set coderAssumptionsWriteDataPtr pointer */
    50 coderAssumptionsWriteDataPtr = coderAssumpTgtAppSvcGetBufferDataPtr(pBuffer);
    51
    52 /* ready for next command */
    53 coderAssumptionsWriteDataAvail = 0;
    54
    55 return XIL_INTERFACE_LIB_SUCCESS;
    56}
    57
    58/* send pending writes */
    59XIL_DATA_STREAM_ERROR_CODE coderAssumptionsSendWriteBuffer(void) {
    60 /* send */
    61 if (coderAssumpTgtAppSvcSend(pBuffer, coderAssumptionsWriteDataAvail) == CODERASSUMPTGTAPPSVC_ERROR) {
    62 return XIL_WRITE_DATA_ERROR;
    63 }
    64
    65 /* reset */
    66 if (resetCoderAssumptionsWriteBuffer()!= XIL_INTERFACE_LIB_SUCCESS) {
    67 return XIL_WRITE_DATA_ERROR;
    68 }
    69
    70 return XIL_DATA_STREAM_SUCCESS;
    71}
    72
    73XIL_INTERFACE_LIB_ERROR_CODE coderAssumptionsInit(void) {
    74 /* Create coder assumptions app service */
    75 if (coderAssumpTgtAppSvcCreate() != CODERASSUMPTGTAPPSVC_SUCCESS) {
    76 return XIL_INTERFACE_LIB_ERROR;
    77 }
    78
    79 /* Reset write buffer */
    80 return resetCoderAssumptionsWriteBuffer();
    81}
    82
    83void coderAssumptionsTerminate(void) {
    84 coderAssumpTgtAppSvcDestroy();
    85}
    86
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_h.html new file mode 100644 index 0000000..09b2a71 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_data_stream_h.html @@ -0,0 +1,48 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2015-2017 The MathWorks, Inc. */
    2
    3/*
    4 * File: coder_assumptions_data_stream.h
    5 *
    6 */
    7
    8#include "xil_error_codes.h"
    9#include <stddef.h>
    10
    11extern XIL_DATA_STREAM_ERROR_CODE coderAssumptionsWriteData(const void * src, const size_t size);
    12extern XIL_DATA_STREAM_ERROR_CODE coderAssumptionsSendWriteBuffer(void);
    13extern XIL_INTERFACE_LIB_ERROR_CODE resetCoderAssumptionsWriteBuffer(void);
    14extern XIL_INTERFACE_LIB_ERROR_CODE coderAssumptionsInit(void);
    15extern void coderAssumptionsTerminate(void);
    16
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_rtiostream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_rtiostream_c.html new file mode 100644 index 0000000..8c22e9a --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_rtiostream_c.html @@ -0,0 +1,114 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#include "rx_tx_buffer_sizes.h"
    4#include "xil_common.h"
    5#include "CoderAssumpTgtAppSvc_CInterface.h"
    6
    7/* coder assumptions buffer is statically allocated for rtiostream-based implementation */
    8static IOUnit_T coderAssumpWriteBuffer[CA_TX_BUFFER_MEMUNIT_SIZE];
    9
    10extern uint8_T coderAssumpTgtAppSvcCreate(void) {
    11 return CODERASSUMPTGTAPPSVC_SUCCESS;
    12}
    13
    14extern void coderAssumpTgtAppSvcDestroy(void) {
    15}
    16
    17/* Allocation method simply returns the statically allocated buffer */
    18extern uint8_T coderAssumpTgtAppSvcAllocBuffer(
    19 void** ppBuf,
    20 const uint16_T dataSize) {
    21
    22 /* buffer is already statically allocated */
    23 *ppBuf = &coderAssumpWriteBuffer[APPLICATION_ID_IDX];
    24
    25 UNUSED_PARAMETER(dataSize);
    26
    27 /* nothing to do as buffer is already statically allocated */
    28 return CODERASSUMPTGTAPPSVC_SUCCESS;
    29}
    30
    31/* return pointer to the coder assumptions buffer data */
    32extern IOUnit_T * coderAssumpTgtAppSvcGetBufferDataPtr(
    33 void* const pBuf) {
    34
    35 /* buffer is already statically allocated */
    36 UNUSED_PARAMETER(pBuf);
    37
    38 return &coderAssumpWriteBuffer[PAYLOAD_IDX];
    39}
    40
    41/* send data over rtiostream */
    42extern uint8_T coderAssumpTgtAppSvcSend(
    43 void* const pBuf,
    44 const uint16_T dataSize) {
    45
    46 return (uint8_T)commsEnqueueBuffer(pBuf, CODERASSUMP_RTIOSTREAM_BASED_SERVICE_ID, dataSize);
    47}
    48
    49
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_shared_enums_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_shared_enums_h.html new file mode 100644 index 0000000..38975dc --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_assumptions_shared_enums_h.html @@ -0,0 +1,160 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2017 The MathWorks, Inc. */
    2
    3#ifndef __CODER_ASSUMPTIONS_SHARED_ENUMS_H__
    4#define __CODER_ASSUMPTIONS_SHARED_ENUMS_H__
    5
    6typedef enum {
    7 CA_LITTLE_ENDIAN = 0,
    8 CA_BIG_ENDIAN,
    9 CA_UNSPECIFIED,
    10 CA_UNABLE_TO_DETERMINE_ON_TARGET
    11} CA_EndianessValue;
    12
    13typedef enum {
    14 CA_FLOOR = 0,
    15 CA_ZERO,
    16 CA_UNDEFINED
    17} CA_IntDivRoundToValue;
    18
    19typedef enum {
    20 CA_NOT_RUN = 0,
    21 CA_FAIL,
    22 CA_PASS,
    23 CA_WARN,
    24 CA_INFO,
    25 CA_SKIP
    26} CA_TestResultStatus;
    27
    28typedef enum {
    29 CA_NO_MSG = 0,
    30 CA_WARN_INT_DIV_UNDEFINED,
    31 CA_WARN_BYTE_ORDER_UNSPECIFIED,
    32 CA_ERROR_PWS_CONFIG_SETTING
    33} CA_TestResultMsgId;
    34
    35typedef enum {
    36 CA_HW_IMPL_SIZES_1=0,
    37 CA_HW_IMPL_SIZES_2,
    38 CA_HW_IMPL_SIZES_3,
    39 CA_HW_IMPL_SIZES_4,
    40 CA_CHECKS_1, /* Results of checks unrelated to hardware sizes. */
    41 CA_PWS,
    42 CA_END_TRANSMIT /* Sent when CA transmissions have finished. */
    43} CODERASSUMPTIONS_COMMAND;
    44
    45typedef enum {
    46 CA_HW_IMPL_BIT_CHAR = 0,
    47 CA_HW_IMPL_BIT_SHORT,
    48 CA_HW_IMPL_BIT_INT,
    49 CA_HW_IMPL_BIT_LONG,
    50 CA_HW_IMPL_BIT_LONGLONG,
    51 CA_HW_IMPL_BIT_FLOAT,
    52 CA_HW_IMPL_BIT_DOUBLE,
    53 CA_HW_IMPL_BIT_POINTER,
    54 CA_HW_IMPL_BIT_SIZE_T,
    55 CA_HW_IMPL_BIT_PTRDIFF_T,
    56 CA_HW_IMPL_SUPPORT_LONGLONG,
    57 CA_HW_IMPL_SHIFT_RIGHT,
    58 CA_HW_IMPL_INT_DIV_ROUND,
    59 CA_HW_IMPL_BYTE_ORDER,
    60 CA_HW_IMPL_MEMORY_STARTUP,
    61 CA_HW_IMPL_DENORMAL_FTZ,
    62 CA_HW_IMPL_DENORMAL_DAZ
    63} CA_HW_IMPL_RESULT;
    64
    65typedef enum {
    66 CA_PWS_ENABLED = 0,
    67 CA_PWS_CONFIG_SETTING
    68} CA_PWS_RESULT;
    69
    70#endif
    71
    72
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_profile_code_icon.png b/src/validation/FCC_Sys_New_harness_ert_rtw/html/coder_profile_code_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..62ad9f56baac851aae23368cbc0e63f85dba6822 GIT binary patch literal 786 zcmV+t1MU2YP)4b1HtznKN!A$`_90_!_C07ci%pS zg9i>Ww6?Y~eEss3fyvOokU>XBhvDD9e+=(Gd|&_wz~LO*APhr606igwFqQkbqVp1- z!}|nzAWNPgR0&c<^{GChbHT?S$JI4=r#C*l_m^YuoWru*q1t*uJM4yz_ z{U1bQH`#-`fA{b0o`A#a&w$qY085gjh3ES-WmQU=rtQBPKuuvXnM$|Y;n;d;^B{sC z5MvBc8FOT|ZJUj7KA)u0@6m81r51q@^g7U5K!w)9y~bJ))EK9i%oXVk2E$f}j5WFT z2ecMQl`4qi_{VN-HHwz9S}kQhUx@8E6k;tlem-+jrUTSuz1~Qc9ccBXj$F^ + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2015 The MathWorks, Inc. */
    2#ifndef comms_interface_h
    3#define comms_interface_h
    4
    5/* error codes */
    6static const int COMMS_ERROR = 0;
    7static const int COMMS_SUCCESS = 1;
    8
    9/* initialize comm service */
    10extern int commsInit(const int argc, void * argv[]);
    11
    12/* terminate comm service */
    13extern int commsTerminate(void);
    14
    15#endif
    16
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/css/coder_app.css b/src/validation/FCC_Sys_New_harness_ert_rtw/html/css/coder_app.css new file mode 100644 index 0000000..d47cf0e --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/css/coder_app.css @@ -0,0 +1,184 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +pre#code { + font-family: Consolas, Courier; + font-size: small; +} + +.ct { + font-style: italic; + color: #117755 +} /* comment */ +.pp { + font-weight:bold; + color: #992211 +} /* preprocessor */ +.kw, .br { + font-weight:bold; + color: #112266 +} /* keyword or brace */ +.dt { + font-weight:bold; + color: #112266 +} /* data type */ +.tk { + font-style: normal; + color: #112266 +} /* regular token */ +pre#code a.req { + text-decoration: none; + color: #112266 +} +pre#code a.req_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.req_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +pre#code a.blk { + text-decoration: none; +} +pre#code a.blk_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.blk_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +a.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight token */ +tr.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight row */ +a.hiliteToken, tr.hiliteToken, td.hiliteToken { + background-color: #ffff99; +} +.hiliteCurrentLine, tr.hiliteCurrentLine > td { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); + box-shadow: inset 0 1px 0 0 rgba(150, 12, 116, 0.25), inset 0 -1px 0 0 rgba(150, 12, 116, 0.25); +} +span.hiliteTotalLine { + font-style: normal; + color: #aff; +} +a.tk { + text-decoration: none; +} +a.tk:hover { + text-decoration: none; +} +a.active { + text-decoration: underline; +} +a.active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} /* hyperlink */ +table.code { + border: 0px +} +table.code td { + vertical-align: top; +} +table.code td.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} +table.code > tr:first { + text-align: right; +} /* hyperlink */ + +ul.popup_attrib_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.popup_attrib_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} +.highlighted { + background-color:yellow; +} +a:class1 { + color: -webkit-link; + text-decoration: underline; + cursor: hand; +} +.scroll +{ + height:80px; + overflow:scroll; + overflow-x:hidden; +} +div#popup_window { + position: absolute; + background-color: rgb(203,203,255); + border: solid 3px #ECECEC; + border-radius: 5px; + /* shadow box around the window*/ + -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + padding: 2px; +} +div#popup_window a { + text-decoration: none; + color: green; +} +div#popup_window a:hover { + cursor: pointer; + text-decoration: underline; + color: blue; +} +div#popup_window tr.selected { + background-color: #ffff99; +} +div#token_usage_nav { + border-bottom: 1px solid gray; +} +table#token_usage_details { + cellpadding: 100px; + table-layout:fixed; + border: 0px; +} +.token_usage_details_tabrow { + width: 40px; +} +table#token_usage_details td { + padding-right: 5em; + padding-left: 1em; +} +.token_usage_details_tabrow:hover { + background-color: gray; +} +.nav_table td.hidden { + display: none; +} +table#codeTbl tr td { + color: #112266 +} +table#codeTbl tr td { + padding-left: 10px; +} +table#codeTbl tr td:first-child { + font-style: italic; + color: #888888; + text-align: right; + padding-left:0px; +} + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/define.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/define.js new file mode 100644 index 0000000..bb10948 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/define.js @@ -0,0 +1,408 @@ +function CodeDefine() { +this.def = new Array(); +this.def["rt_OneStep"] = {file: "ert_main_c.html",line:40,type:"fcn"}; +this.def["main"] = {file: "ert_main_c.html",line:131,type:"fcn"}; +this.def["FCC_Sys_New_harness_TimingBrdg"] = {file: "FCC_Sys_New_harness_c.html",line:46,type:"var"}; +this.def["FCC_Sys_New_harness_DW"] = {file: "FCC_Sys_New_harness_c.html",line:49,type:"var"}; +this.def["FCC_Sys_New_harness_Y"] = {file: "FCC_Sys_New_harness_c.html",line:52,type:"var"}; +this.def["FCC_Sys_New_harness_M_"] = {file: "FCC_Sys_New_harness_c.html",line:55,type:"var"}; +this.def["FCC_Sys_New_harness_M"] = {file: "FCC_Sys_New_harness_c.html",line:56,type:"var"}; +this.def["FCC_Sys_New_harness_step0"] = {file: "FCC_Sys_New_harness_c.html",line:60,type:"fcn"}; +this.def["FCC_Sys_New_harness_step2"] = {file: "FCC_Sys_New_harness_c.html",line:394,type:"fcn"}; +this.def["FCC_Sys_New_harness_initialize"] = {file: "FCC_Sys_New_harness_c.html",line:474,type:"fcn"}; +this.def["RT_MODEL_FCC_Sys_New_harness_T"] = {file: "FCC_Sys_New_harness_h.html",line:65,type:"type"}; +this.def["DW_FCC_Sys_New_harness_T"] = {file: "FCC_Sys_New_harness_h.html",line:107,type:"type"}; +this.def["ExtY_FCC_Sys_New_harness_T"] = {file: "FCC_Sys_New_harness_h.html",line:114,type:"type"}; +this.def["AHRS_Bus"] = {file: "../../slprj/ert/_sharedutils/html/AHRS_Bus_h.html",line:38,type:"type"}; +this.def["rtTimingBridge"] = {file: "../../slprj/ert/_sharedutils/html/model_reference_types_h.html",line:28,type:"type"}; +this.def["rtCtrlRateMdlRefTiming"] = {file: "../../slprj/ert/_sharedutils/html/model_reference_types_h.html",line:43,type:"type"}; +this.def["int8_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:55,type:"type"}; +this.def["uint8_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:56,type:"type"}; +this.def["int16_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:57,type:"type"}; +this.def["uint16_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:58,type:"type"}; +this.def["int32_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:59,type:"type"}; +this.def["uint32_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:60,type:"type"}; +this.def["real32_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:61,type:"type"}; +this.def["real64_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:62,type:"type"}; +this.def["real_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:68,type:"type"}; +this.def["time_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:69,type:"type"}; +this.def["boolean_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:70,type:"type"}; +this.def["int_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:71,type:"type"}; +this.def["uint_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:72,type:"type"}; +this.def["ulong_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:73,type:"type"}; +this.def["ulonglong_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:74,type:"type"}; +this.def["char_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:75,type:"type"}; +this.def["uchar_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:76,type:"type"}; +this.def["byte_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:77,type:"type"}; +this.def["int64_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:78,type:"type"}; +this.def["uint64_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:79,type:"type"}; +this.def["int8_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:89,type:"type"}; +this.def["uint8_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:90,type:"type"}; +this.def["int16_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:91,type:"type"}; +this.def["uint16_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:92,type:"type"}; +this.def["int32_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:93,type:"type"}; +this.def["uint32_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:94,type:"type"}; +this.def["int64_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:95,type:"type"}; +this.def["uint64_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:96,type:"type"}; +this.def["real32_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:97,type:"type"}; +this.def["real64_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:98,type:"type"}; +this.def["real_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:104,type:"type"}; +this.def["time_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:105,type:"type"}; +this.def["boolean_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:106,type:"type"}; +this.def["int_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:107,type:"type"}; +this.def["uint_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:108,type:"type"}; +this.def["ulong_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:109,type:"type"}; +this.def["ulonglong_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:110,type:"type"}; +this.def["char_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:111,type:"type"}; +this.def["uchar_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:112,type:"type"}; +this.def["byte_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:113,type:"type"}; +this.def["pointer_T"] = {file: "../../slprj/ert/_sharedutils/html/rtwtypes_h.html",line:136,type:"type"}; +this.def["IOUnit_T"] = {file: "CodeInstrTgtAppSvc_h.html",line:11,type:"type"}; +this.def["CodeInstrTgtAppSvc.h:CODEINSTRTGTAPPSVC_ERROR"] = {file: "CodeInstrTgtAppSvc_h.html",line:17,type:"var"}; +this.def["CodeInstrTgtAppSvc.h:CODEINSTRTGTAPPSVC_SUCCESS"] = {file: "CodeInstrTgtAppSvc_h.html",line:18,type:"var"}; +this.def["IOUnit_T"] = {file: "CoderAssumpTgtAppSvc_CInterface_h.html",line:10,type:"type"}; +this.def["CoderAssumpTgtAppSvc_CInterface.h:CODERASSUMPTGTAPPSVC_ERROR"] = {file: "CoderAssumpTgtAppSvc_CInterface_h.html",line:17,type:"var"}; +this.def["CoderAssumpTgtAppSvc_CInterface.h:CODERASSUMPTGTAPPSVC_SUCCESS"] = {file: "CoderAssumpTgtAppSvc_CInterface_h.html",line:18,type:"var"}; +this.def["targetIOFd_T"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:49,type:"type"}; +this.def["XIL_COMMAND_TYPE_ENUM"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:67,type:"type"}; +this.def["FCC_Sys_New_harness_sbs.c:growTargetIOFd"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:74,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:closeAndFreeTargetIOFd"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:88,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:recvData"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:112,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:sendData"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:132,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:commandDispatch"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:147,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:commandResponse"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:166,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:copyIOData"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:200,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:copyStringIOData"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:208,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:codeInstrServiceData"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:222,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:callStopHookAndFreeSFcnMemory"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:246,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processResponseError"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:344,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processResponsePrintf"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:362,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processResponseFopen"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:421,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processResponseFprintf"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:503,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processResponseSignalRaised"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:587,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processErrorAndTargetIOResponseCases"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:607,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:getBusElementDimension"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:650,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:processParams"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:667,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:startAndSetupApplication"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:796,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:sendInitializeCommand"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1199,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlCheckParameters"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1396,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlInitializeSizes"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1402,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlSetInputPortSampleTime"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1620,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlSetOutputPortSampleTime"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1631,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlInitializeSampleTimes"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1639,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlSetupRuntimeResources"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1655,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlSimStatusChange"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1777,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlStart"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1923,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:XILoutputTID01"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:1964,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:XILoutputTID02"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2205,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlProcessParameters"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2374,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlInitializeConditions"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2388,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlSetWorkWidths"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2411,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlOutputs"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2417,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlUpdate"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2439,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlTerminate"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2445,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlCleanupRuntimeResources"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2646,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlEnable"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2686,type:"fcn"}; +this.def["FCC_Sys_New_harness_sbs.c:mdlDisable"] = {file: "FCC_Sys_New_harness_sbs_c.html",line:2706,type:"fcn"}; +this.def["IOUnit_T"] = {file: "XILTgtAppSvc_h.html",line:11,type:"type"}; +this.def["XILTgtAppSvc.h:XILTGTAPPSVC_ERROR"] = {file: "XILTgtAppSvc_h.html",line:17,type:"var"}; +this.def["XILTgtAppSvc.h:XILTGTAPPSVC_SUCCESS"] = {file: "XILTgtAppSvc_h.html",line:18,type:"var"}; +this.def["XILCommandResponseType"] = {file: "XILTgtAppSvc_h.html",line:23,type:"type"}; +this.def["codeinstr_data_stream.c:pBuffer"] = {file: "codeinstr_data_stream_c.html",line:20,type:"var"}; +this.def["codeinstr_data_stream.c:codeInstrWriteBuffer"] = {file: "codeinstr_data_stream_c.html",line:21,type:"var"}; +this.def["codeinstr_data_stream.c:codeInstrWriteDataPtr"] = {file: "codeinstr_data_stream_c.html",line:22,type:"var"}; +this.def["codeinstr_data_stream.c:codeInstrWriteDataAvail"] = {file: "codeinstr_data_stream_c.html",line:23,type:"var"}; +this.def["codeinstr_data_stream.c:commandComplete"] = {file: "codeinstr_data_stream_c.html",line:24,type:"var"}; +this.def["codeinstr_data_stream.c:resetCodeInstrWriteBuffer"] = {file: "codeinstr_data_stream_c.html",line:27,type:"fcn"}; +this.def["codeInstrInit"] = {file: "codeinstr_data_stream_c.html",line:48,type:"fcn"}; +this.def["codeInstrTerminate"] = {file: "codeinstr_data_stream_c.html",line:58,type:"fcn"}; +this.def["codeinstr_data_stream.c:sendWriteBuffer"] = {file: "codeinstr_data_stream_c.html",line:63,type:"fcn"}; +this.def["codeInstrWriteData"] = {file: "codeinstr_data_stream_c.html",line:78,type:"fcn"}; +this.def["codeInstrDataFlush"] = {file: "codeinstr_data_stream_c.html",line:106,type:"fcn"}; +this.def["codeinstr_rtiostream.c:CODE_INSTR_TX_BUFFER_MEMUNIT_SIZE"] = {file: "codeinstr_rtiostream_c.html",line:8,type:"var"}; +this.def["PAYLOAD_IDX"] = {file: "codeinstr_rtiostream_c.html",line:38,type:"var"}; +this.def["coder_assumptions_app.c:pwsEnabled"] = {file: "coder_assumptions_app_c.html",line:46,type:"var"}; +this.def["coder_assumptions_app.c:sendResult"] = {file: "coder_assumptions_app_c.html",line:49,type:"fcn"}; +this.def["coder_assumptions_app.c:transmitMemUnitBytes"] = {file: "coder_assumptions_app_c.html",line:81,type:"fcn"}; +this.def["coder_assumptions_app.c:sendPWS"] = {file: "coder_assumptions_app_c.html",line:96,type:"fcn"}; +this.def["coder_assumptions_app.c:sendHWImpl1"] = {file: "coder_assumptions_app_c.html",line:132,type:"fcn"}; +this.def["coder_assumptions_app.c:sendHWImpl2"] = {file: "coder_assumptions_app_c.html",line:177,type:"fcn"}; +this.def["coder_assumptions_app.c:sendHWImpl3"] = {file: "coder_assumptions_app_c.html",line:222,type:"fcn"}; +this.def["coder_assumptions_app.c:sendHWImpl4"] = {file: "coder_assumptions_app_c.html",line:261,type:"fcn"}; +this.def["coder_assumptions_app.c:sendHardwareChecks"] = {file: "coder_assumptions_app_c.html",line:299,type:"fcn"}; +this.def["coder_assumptions_app.c:runChecks"] = {file: "coder_assumptions_app_c.html",line:335,type:"fcn"}; +this.def["coderAssumptionsRun"] = {file: "coder_assumptions_app_c.html",line:376,type:"fcn"}; +this.def["coder_assumptions_data_stream.c:pBuffer"] = {file: "coder_assumptions_data_stream_c.html",line:14,type:"var"}; +this.def["coder_assumptions_data_stream.c:coderAssumptionsWriteDataPtr"] = {file: "coder_assumptions_data_stream_c.html",line:15,type:"var"}; +this.def["coder_assumptions_data_stream.c:coderAssumptionsWriteDataAvail"] = {file: "coder_assumptions_data_stream_c.html",line:16,type:"var"}; +this.def["coderAssumptionsWriteData"] = {file: "coder_assumptions_data_stream_c.html",line:18,type:"fcn"}; +this.def["resetCoderAssumptionsWriteBuffer"] = {file: "coder_assumptions_data_stream_c.html",line:40,type:"fcn"}; +this.def["coderAssumptionsSendWriteBuffer"] = {file: "coder_assumptions_data_stream_c.html",line:59,type:"fcn"}; +this.def["coderAssumptionsInit"] = {file: "coder_assumptions_data_stream_c.html",line:73,type:"fcn"}; +this.def["coderAssumptionsTerminate"] = {file: "coder_assumptions_data_stream_c.html",line:83,type:"fcn"}; +this.def["coder_assumptions_rtiostream.c:CA_TX_BUFFER_MEMUNIT_SIZE"] = {file: "coder_assumptions_rtiostream_c.html",line:8,type:"var"}; +this.def["PAYLOAD_IDX"] = {file: "coder_assumptions_rtiostream_c.html",line:38,type:"var"}; +this.def["CA_EndianessValue"] = {file: "coder_assumptions_shared_enums_h.html",line:11,type:"type"}; +this.def["CA_IntDivRoundToValue"] = {file: "coder_assumptions_shared_enums_h.html",line:17,type:"type"}; +this.def["CA_TestResultStatus"] = {file: "coder_assumptions_shared_enums_h.html",line:26,type:"type"}; +this.def["CA_TestResultMsgId"] = {file: "coder_assumptions_shared_enums_h.html",line:33,type:"type"}; +this.def["CODERASSUMPTIONS_COMMAND"] = {file: "coder_assumptions_shared_enums_h.html",line:43,type:"type"}; +this.def["CA_HW_IMPL_RESULT"] = {file: "coder_assumptions_shared_enums_h.html",line:63,type:"type"}; +this.def["CA_PWS_RESULT"] = {file: "coder_assumptions_shared_enums_h.html",line:68,type:"type"}; +this.def["comms_interface.h:COMMS_ERROR"] = {file: "comms_interface_h.html",line:6,type:"var"}; +this.def["comms_interface.h:COMMS_SUCCESS"] = {file: "comms_interface_h.html",line:7,type:"var"}; +this.def["timestamp_x86"] = {file: "host_timer_x86_c.html",line:17,type:"fcn"}; +this.def["uint64_T"] = {file: "host_timer_x86_h.html",line:27,type:"type"}; +this.def["VerbosityLevel"] = {file: "rtiostream_tcpip_c.html",line:150,type:"type"}; +this.def["SOCKET"] = {file: "rtiostream_tcpip_c.html",line:193,type:"type"}; +this.def["send_buffer_t"] = {file: "rtiostream_tcpip_c.html",line:201,type:"type"}; +this.def["send_buffer_t"] = {file: "rtiostream_tcpip_c.html",line:203,type:"type"}; +this.def["send_buffer_t"] = {file: "rtiostream_tcpip_c.html",line:205,type:"type"}; +this.def["rtiostream_socklen_t"] = {file: "rtiostream_tcpip_c.html",line:217,type:"type"}; +this.def["rtiostream_socklen_t"] = {file: "rtiostream_tcpip_c.html",line:219,type:"type"}; +this.def["ServerData"] = {file: "rtiostream_tcpip_c.html",line:228,type:"type"}; +this.def["UDPPacketBuffer"] = {file: "rtiostream_tcpip_c.html",line:235,type:"type"}; +this.def["udpSeqNum_T"] = {file: "rtiostream_tcpip_c.html",line:238,type:"type"}; +this.def["UDPData"] = {file: "rtiostream_tcpip_c.html",line:254,type:"type"}; +this.def["CommsProtocol"] = {file: "rtiostream_tcpip_c.html",line:257,type:"type"}; +this.def["ConnectionData"] = {file: "rtiostream_tcpip_c.html",line:292,type:"type"}; +this.def["rtiostream_tcpip.c:MAX_NUM_CONNECTIONS"] = {file: "rtiostream_tcpip_c.html",line:309,type:"var"}; +this.def["rtiostream_tcpip.c:initConnectionData"] = {file: "rtiostream_tcpip_c.html",line:406,type:"fcn"}; +this.def["rtiostream_tcpip.c:getConnectionData"] = {file: "rtiostream_tcpip_c.html",line:562,type:"fcn"}; +this.def["rtiostream_tcpip.c:getConnectionID"] = {file: "rtiostream_tcpip_c.html",line:581,type:"fcn"}; +this.def["rtiostream_tcpip.c:freeConnectionData"] = {file: "rtiostream_tcpip_c.html",line:604,type:"fcn"}; +this.def["rtiostream_tcpip.c:createUDPPacketBuffer"] = {file: "rtiostream_tcpip_c.html",line:629,type:"fcn"}; +this.def["rtiostream_tcpip.c:freeUDPPacketBuffer"] = {file: "rtiostream_tcpip_c.html",line:653,type:"fcn"}; +this.def["rtiostream_tcpip.c:resetUDPPacketBuffer"] = {file: "rtiostream_tcpip_c.html",line:668,type:"fcn"}; +this.def["rtiostream_tcpip.c:socketDataPending"] = {file: "rtiostream_tcpip_c.html",line:680,type:"fcn"}; +this.def["rtiostream_tcpip.c:initialUDPServerRecvfrom"] = {file: "rtiostream_tcpip_c.html",line:807,type:"fcn"}; +this.def["rtiostream_tcpip.c:processUDPRecvSeqNum"] = {file: "rtiostream_tcpip_c.html",line:844,type:"fcn"}; +this.def["rtiostream_tcpip.c:socketDataGet"] = {file: "rtiostream_tcpip_c.html",line:899,type:"fcn"}; +this.def["rtiostream_tcpip.c:socketDataSet"] = {file: "rtiostream_tcpip_c.html",line:967,type:"fcn"}; +this.def["rtiostream_tcpip.c:serverStreamRecv"] = {file: "rtiostream_tcpip_c.html",line:1043,type:"fcn"}; +this.def["rtiostream_tcpip.c:serverOpenSocket"] = {file: "rtiostream_tcpip_c.html",line:1106,type:"fcn"}; +this.def["rtiostream_tcpip.c:serverAcceptSocket"] = {file: "rtiostream_tcpip_c.html",line:1276,type:"fcn"}; +this.def["rtiostream_tcpip.c:nameLookup"] = {file: "rtiostream_tcpip_c.html",line:1358,type:"fcn"}; +this.def["rtiostream_tcpip.c:processArgs"] = {file: "rtiostream_tcpip_c.html",line:1407,type:"fcn"}; +this.def["rtiostream_tcpip.c:clientOpenSocket"] = {file: "rtiostream_tcpip_c.html",line:1595,type:"fcn"}; +this.def["rtiostream_tcpip.c:waitForClientClose"] = {file: "rtiostream_tcpip_c.html",line:1687,type:"fcn"}; +this.def["rtIOStreamOpen"] = {file: "rtiostream_tcpip_c.html",line:1711,type:"fcn"}; +this.def["rtIOStreamSend"] = {file: "rtiostream_tcpip_c.html",line:1851,type:"fcn"}; +this.def["rtIOStreamRecv"] = {file: "rtiostream_tcpip_c.html",line:1910,type:"fcn"}; +this.def["rtIOStreamClose"] = {file: "rtiostream_tcpip_c.html",line:1968,type:"fcn"}; +this.def["IOUnit_T"] = {file: "rtiostream_utils_c.html",line:24,type:"type"}; +this.def["IOUnit_T"] = {file: "rtiostream_utils_c.html",line:32,type:"type"}; +this.def["IOUnit_T"] = {file: "rtiostream_utils_c.html",line:35,type:"type"}; +this.def["rtIOStreamBlockingSend"] = {file: "rtiostream_utils_c.html",line:40,type:"fcn"}; +this.def["rtIOStreamBlockingRecv"] = {file: "rtiostream_utils_c.html",line:72,type:"fcn"}; +this.def["main"] = {file: "sil_main_c.html",line:11,type:"fcn"}; +this.def["TARGET_IO_ERROR_ID"] = {file: "target_io_c.html",line:36,type:"type"}; +this.def["target_io.c:TARGET_IO_BUFFER_SIZE"] = {file: "target_io_c.html",line:38,type:"var"}; +this.def["target_io.c:TARGET_IO_BUFFER_SIZE"] = {file: "target_io_c.html",line:40,type:"var"}; +this.def["target_io.c:fid"] = {file: "target_io_c.html",line:44,type:"var"}; +this.def["targetWriteDataWithErrorCheck"] = {file: "target_io_c.html",line:52,type:"fcn"}; +this.def["target_io.c:targetWriteDataWithCharToMemUnitWidening"] = {file: "target_io_c.html",line:61,type:"fcn"}; +this.def["targetPrintf"] = {file: "target_io_c.html",line:75,type:"fcn"}; +this.def["targetFopen"] = {file: "target_io_c.html",line:123,type:"fcn"}; +this.def["targetFprintf"] = {file: "target_io_c.html",line:168,type:"fcn"}; +this.def["xil_data_stream.c:pBuffer"] = {file: "xil_data_stream_c.html",line:25,type:"var"}; +this.def["xil_data_stream.c:xilWriteBuffer"] = {file: "xil_data_stream_c.html",line:26,type:"var"}; +this.def["xil_data_stream.c:xilWriteDataPtr"] = {file: "xil_data_stream_c.html",line:27,type:"var"}; +this.def["xil_data_stream.c:xilWriteDataAvail"] = {file: "xil_data_stream_c.html",line:28,type:"var"}; +this.def["xil_data_stream.c:commandResponseType"] = {file: "xil_data_stream_c.html",line:29,type:"var"}; +this.def["resetXILWriteBuffer"] = {file: "xil_data_stream_c.html",line:32,type:"fcn"}; +this.def["silpilInit"] = {file: "xil_data_stream_c.html",line:53,type:"fcn"}; +this.def["xil_data_stream.c:sendWriteBuffer"] = {file: "xil_data_stream_c.html",line:65,type:"fcn"}; +this.def["xilWriteData"] = {file: "xil_data_stream_c.html",line:79,type:"fcn"}; +this.def["xilReadData"] = {file: "xil_data_stream_c.html",line:106,type:"fcn"}; +this.def["xilDataFlush"] = {file: "xil_data_stream_c.html",line:178,type:"fcn"}; +this.def["silpilTerminate"] = {file: "xil_data_stream_c.html",line:196,type:"fcn"}; +this.def["xil_instrumentation.c:xsd_xil_timer_corrected"] = {file: "xil_instrumentation_c.html",line:30,type:"var"}; +this.def["xil_instrumentation.c:xsd_xil_timer_unfreeze"] = {file: "xil_instrumentation_c.html",line:31,type:"var"}; +this.def["xil_instrumentation.c:xsd_xil_freezing_busy"] = {file: "xil_instrumentation_c.html",line:32,type:"var"}; +this.def["xilUploadProfilingData"] = {file: "xil_instrumentation_c.html",line:33,type:"fcn"}; +this.def["xilProfilingTimerFreezeInternal"] = {file: "xil_instrumentation_c.html",line:40,type:"fcn"}; +this.def["xilProfilingTimerUnFreezeInternal"] = {file: "xil_instrumentation_c.html",line:51,type:"fcn"}; +this.def["xilProfilingTimerFreeze"] = {file: "xil_instrumentation_c.html",line:56,type:"fcn"}; +this.def["xilProfilingTimerUnFreeze"] = {file: "xil_instrumentation_c.html",line:63,type:"fcn"}; +this.def["taskTimeStart"] = {file: "xil_instrumentation_c.html",line:70,type:"fcn"}; +this.def["taskTimeEnd"] = {file: "xil_instrumentation_c.html",line:77,type:"fcn"}; +this.def["profileStart"] = {file: "xil_instrumentation_c.html",line:86,type:"fcn"}; +this.def["profileEnd"] = {file: "xil_instrumentation_c.html",line:95,type:"fcn"}; +this.def["profileStart_F_02840e440c240744"] = {file: "xil_instrumentation_c.html",line:106,type:"fcn"}; +this.def["profileEnd_FCC_Sys_New_harness"] = {file: "xil_instrumentation_c.html",line:111,type:"fcn"}; +this.def["taskTimeStart_0c6401e40e940cc4"] = {file: "xil_instrumentation_c.html",line:117,type:"fcn"}; +this.def["taskTimeEnd_FCC_Sys_New_harness"] = {file: "xil_instrumentation_c.html",line:122,type:"fcn"}; +this.def["xil_interface.c:xil_fcnid0_task1_y"] = {file: "xil_interface_c.html",line:26,type:"var"}; +this.def["xil_interface.c:xil_fcnid0_init_y"] = {file: "xil_interface_c.html",line:27,type:"var"}; +this.def["xilProcessParams"] = {file: "xil_interface_c.html",line:30,type:"fcn"}; +this.def["xilUploadCodeInstrData"] = {file: "xil_interface_c.html",line:40,type:"fcn"}; +this.def["xilGetDataTypeInfo"] = {file: "xil_interface_c.html",line:60,type:"fcn"}; +this.def["xilInitialize"] = {file: "xil_interface_c.html",line:65,type:"fcn"}; +this.def["xilPause"] = {file: "xil_interface_c.html",line:82,type:"fcn"}; +this.def["xilSystemInitialize"] = {file: "xil_interface_c.html",line:94,type:"fcn"}; +this.def["xilSystemReset"] = {file: "xil_interface_c.html",line:108,type:"fcn"}; +this.def["xilGetHostToTargetData"] = {file: "xil_interface_c.html",line:122,type:"fcn"}; +this.def["xilGetTargetToHostPreData"] = {file: "xil_interface_c.html",line:141,type:"fcn"}; +this.def["xilOutput"] = {file: "xil_interface_c.html",line:160,type:"fcn"}; +this.def["xilUpdate"] = {file: "xil_interface_c.html",line:187,type:"fcn"}; +this.def["xilGetTargetToHostData"] = {file: "xil_interface_c.html",line:199,type:"fcn"}; +this.def["xilTerminate"] = {file: "xil_interface_c.html",line:325,type:"fcn"}; +this.def["xilEnable"] = {file: "xil_interface_c.html",line:336,type:"fcn"}; +this.def["xilDisable"] = {file: "xil_interface_c.html",line:349,type:"fcn"}; +this.def["XIL_INTERFACE_ERROR_CODE"] = {file: "xil_interface_common_h.html",line:20,type:"type"}; +this.def["XIL_COMMAND_TYPE_ENUM"] = {file: "xil_interface_common_h.html",line:35,type:"type"}; +this.def["XIL_RESPONSE_ID"] = {file: "xil_interface_common_h.html",line:47,type:"type"}; +this.def["XIL_HANDLE_RECV_STATE"] = {file: "xil_interface_common_h.html",line:58,type:"type"}; +this.def["XIL_PROCESS_MSG_CONTEXT_SWITCH"] = {file: "xil_interface_common_h.html",line:68,type:"type"}; +this.def["XILIOData"] = {file: "xil_interface_common_h.html",line:75,type:"type"}; +this.def["xil_interface_lib.c:xilIODataPtr"] = {file: "xil_interface_lib_c.html",line:34,type:"var"}; +this.def["xil_interface_lib.c:isShutdownCommand"] = {file: "xil_interface_lib_c.html",line:35,type:"var"}; +this.def["xil_interface_lib.c:processMsgSuccess"] = {file: "xil_interface_lib_c.html",line:36,type:"var"}; +this.def["xil_interface_lib.c:cc"] = {file: "xil_interface_lib_c.html",line:39,type:"var"}; +this.def["xil_interface_lib.c:restoreProcessMsgContext"] = {file: "xil_interface_lib_c.html",line:42,type:"fcn"}; +this.def["xil_interface_lib.c:getNextXILIOData"] = {file: "xil_interface_lib_c.html",line:49,type:"fcn"}; +this.def["xil_interface_lib.c:processHostToTargetData"] = {file: "xil_interface_lib_c.html",line:56,type:"fcn"}; +this.def["xil_interface_lib.c:processTargetToHostData"] = {file: "xil_interface_lib_c.html",line:102,type:"fcn"}; +this.def["xil_interface_lib.c:processTargetToHostPreData"] = {file: "xil_interface_lib_c.html",line:129,type:"fcn"}; +this.def["xil_interface_lib.c:finalizeCommandResponse"] = {file: "xil_interface_lib_c.html",line:156,type:"fcn"}; +this.def["xil_interface_lib.c:computeNextState"] = {file: "xil_interface_lib_c.html",line:188,type:"fcn"}; +this.def["xil_interface_lib.c:xilReadCommandCode"] = {file: "xil_interface_lib_c.html",line:344,type:"fcn"}; +this.def["xilProcessMsg"] = {file: "xil_interface_lib_c.html",line:371,type:"fcn"}; +this.def["xilRun"] = {file: "xil_interface_lib_c.html",line:619,type:"fcn"}; +this.def["xilCommandDispatchAndResponse"] = {file: "xil_interface_lib_c.html",line:639,type:"fcn"}; +this.def["xilGetCurrentProcessMsgContext"] = {file: "xil_interface_lib_c.html",line:688,type:"fcn"}; +this.def["swapBytes"] = {file: "xil_interface_lib_c.html",line:696,type:"fcn"}; +this.def["xil_interface_lib.c:xilReadDataAndSwapBytes"] = {file: "xil_interface_lib_c.html",line:711,type:"fcn"}; +this.def["XIL_IO_TYPE"] = {file: "xil_interface_lib_private_h.html",line:15,type:"type"}; +this.def["XIL_PROCESSDATA_ERROR_CODE"] = {file: "xil_interface_lib_private_h.html",line:20,type:"type"}; +this.def["XIL_RESPONSE_ERROR_ID"] = {file: "xil_interface_lib_private_h.html",line:34,type:"type"}; +this.def["xil_rtiostream.c:XIL_TX_BUFFER_MEMUNIT_SIZE"] = {file: "xil_rtiostream_c.html",line:8,type:"var"}; +this.def["PAYLOAD_IDX"] = {file: "xil_rtiostream_c.html",line:38,type:"var"}; +this.def["XIL_SIGNAL_RAISED"] = {file: "xil_services_c.html",line:41,type:"type"}; +this.def["xil_services.c:XILSigHandler"] = {file: "xil_services_c.html",line:43,type:"fcn"}; +this.def["xilInit"] = {file: "xil_services_c.html",line:100,type:"fcn"}; +this.def["xilTerminateComms"] = {file: "xil_services_c.html",line:141,type:"fcn"}; +this.def["xilcomms_rtiostream.c:streamID"] = {file: "xilcomms_rtiostream_c.html",line:22,type:"var"}; +this.def["xilcomms_rtiostream.c:RTIOSTREAM_RX_BUFFER_SIZE"] = {file: "xilcomms_rtiostream_c.html",line:25,type:"var"}; +this.def["commsInit"] = {file: "xilcomms_rtiostream_c.html",line:29,type:"fcn"}; +this.def["commsTerminate"] = {file: "xilcomms_rtiostream_c.html",line:39,type:"fcn"}; +this.def["commsEnqueueBuffer"] = {file: "xilcomms_rtiostream_c.html",line:48,type:"fcn"}; +this.def["rtiostreamReadMessage"] = {file: "xilcomms_rtiostream_c.html",line:110,type:"fcn"}; +} +CodeDefine.instance = new CodeDefine(); +var testHarnessInfo = {OwnerFileName: "", HarnessOwner: "", HarnessName: "", IsTestHarness: "0"}; +var relPathToBuildDir = "../ert_main.c"; +var fileSep = "\\"; +var isPC = true; +function Html2SrcLink() { + this.html2SrcPath = new Array; + this.html2Root = new Array; + this.html2SrcPath["ert_main_c.html"] = "../ert_main.c"; + this.html2Root["ert_main_c.html"] = "ert_main_c.html"; + this.html2SrcPath["FCC_Sys_New_harness_c.html"] = "../FCC_Sys_New_harness.c"; + this.html2Root["FCC_Sys_New_harness_c.html"] = "FCC_Sys_New_harness_c.html"; + this.html2SrcPath["FCC_Sys_New_harness_h.html"] = "../FCC_Sys_New_harness.h"; + this.html2Root["FCC_Sys_New_harness_h.html"] = "FCC_Sys_New_harness_h.html"; + this.html2SrcPath["AHRS_Bus_h.html"] = "../AHRS_Bus.h"; + this.html2Root["AHRS_Bus_h.html"] = "../../slprj/ert/_sharedutils/html/AHRS_Bus_h.html"; + this.html2SrcPath["model_reference_types_h.html"] = "../model_reference_types.h"; + this.html2Root["model_reference_types_h.html"] = "../../slprj/ert/_sharedutils/html/model_reference_types_h.html"; + this.html2SrcPath["rtwtypes_h.html"] = "../rtwtypes.h"; + this.html2Root["rtwtypes_h.html"] = "../../slprj/ert/_sharedutils/html/rtwtypes_h.html"; + this.html2SrcPath["CodeInstrTgtAppSvc_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/extern/include/coder/connectivity/CodeInstrTgtAppSvc/CodeInstrTgtAppSvc.h"; + this.html2Root["CodeInstrTgtAppSvc_h.html"] = "CodeInstrTgtAppSvc_h.html"; + this.html2SrcPath["CodeInstrTgtAppSvc_CInterface_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/extern/include/coder/connectivity/CodeInstrTgtAppSvc/CodeInstrTgtAppSvc_CInterface.h"; + this.html2Root["CodeInstrTgtAppSvc_CInterface_h.html"] = "CodeInstrTgtAppSvc_CInterface_h.html"; + this.html2SrcPath["CoderAssumpTgtAppSvc_CInterface_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/extern/include/coder/connectivity/CoderAssumpTgtAppSvc/CoderAssumpTgtAppSvc_CInterface.h"; + this.html2Root["CoderAssumpTgtAppSvc_CInterface_h.html"] = "CoderAssumpTgtAppSvc_CInterface_h.html"; + this.html2SrcPath["FCC_Sys_New_harness_sbs_c.html"] = "../sil/FCC_Sys_New_harness_sbs.c"; + this.html2Root["FCC_Sys_New_harness_sbs_c.html"] = "FCC_Sys_New_harness_sbs_c.html"; + this.html2SrcPath["XILTgtAppSvc_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/extern/include/coder/connectivity/XILTgtAppSvc/XILTgtAppSvc.h"; + this.html2Root["XILTgtAppSvc_h.html"] = "XILTgtAppSvc_h.html"; + this.html2SrcPath["XILTgtAppSvc_CInterface_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/extern/include/coder/connectivity/XILTgtAppSvc/XILTgtAppSvc_CInterface.h"; + this.html2Root["XILTgtAppSvc_CInterface_h.html"] = "XILTgtAppSvc_CInterface_h.html"; + this.html2SrcPath["codeinstr_data_stream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/codeinstr_data_stream.c"; + this.html2Root["codeinstr_data_stream_c.html"] = "codeinstr_data_stream_c.html"; + this.html2SrcPath["codeinstr_data_stream_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/codeinstr_data_stream.h"; + this.html2Root["codeinstr_data_stream_h.html"] = "codeinstr_data_stream_h.html"; + this.html2SrcPath["codeinstr_rtiostream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/codeinstr_rtiostream.c"; + this.html2Root["codeinstr_rtiostream_c.html"] = "codeinstr_rtiostream_c.html"; + this.html2SrcPath["coder_assumptions_app_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/coder_assumptions_app.c"; + this.html2Root["coder_assumptions_app_c.html"] = "coder_assumptions_app_c.html"; + this.html2SrcPath["coder_assumptions_app_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/coder_assumptions_app.h"; + this.html2Root["coder_assumptions_app_h.html"] = "coder_assumptions_app_h.html"; + this.html2SrcPath["coder_assumptions_data_stream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/coder_assumptions_data_stream.c"; + this.html2Root["coder_assumptions_data_stream_c.html"] = "coder_assumptions_data_stream_c.html"; + this.html2SrcPath["coder_assumptions_data_stream_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/coder_assumptions_data_stream.h"; + this.html2Root["coder_assumptions_data_stream_h.html"] = "coder_assumptions_data_stream_h.html"; + this.html2SrcPath["coder_assumptions_rtiostream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/coder_assumptions_rtiostream.c"; + this.html2Root["coder_assumptions_rtiostream_c.html"] = "coder_assumptions_rtiostream_c.html"; + this.html2SrcPath["coder_assumptions_shared_enums_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/coder_assumptions_shared_enums.h"; + this.html2Root["coder_assumptions_shared_enums_h.html"] = "coder_assumptions_shared_enums_h.html"; + this.html2SrcPath["comms_interface_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/comms_interface.h"; + this.html2Root["comms_interface_h.html"] = "comms_interface_h.html"; + this.html2SrcPath["host_timer_x86_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/coder/profile/src/host_timer_x86.c"; + this.html2Root["host_timer_x86_c.html"] = "host_timer_x86_c.html"; + this.html2SrcPath["host_timer_x86_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/coder/profile/src/host_timer_x86.h"; + this.html2Root["host_timer_x86_h.html"] = "host_timer_x86_h.html"; + this.html2SrcPath["rtiostream_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/coder/rtiostream/src/rtiostream.h"; + this.html2Root["rtiostream_h.html"] = "rtiostream_h.html"; + this.html2SrcPath["rtiostream_tcpip_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c"; + this.html2Root["rtiostream_tcpip_c.html"] = "rtiostream_tcpip_c.html"; + this.html2SrcPath["rtiostream_utils_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/coder/rtiostream/src/utils/rtiostream_utils.c"; + this.html2Root["rtiostream_utils_c.html"] = "rtiostream_utils_c.html"; + this.html2SrcPath["rtiostream_utils_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/coder/rtiostream/src/utils/rtiostream_utils.h"; + this.html2Root["rtiostream_utils_h.html"] = "rtiostream_utils_h.html"; + this.html2SrcPath["rx_tx_buffer_sizes_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/rx_tx_buffer_sizes.h"; + this.html2Root["rx_tx_buffer_sizes_h.html"] = "rx_tx_buffer_sizes_h.html"; + this.html2SrcPath["sil_main_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/sil_main.c"; + this.html2Root["sil_main_c.html"] = "sil_main_c.html"; + this.html2SrcPath["target_io_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/target_io.c"; + this.html2Root["target_io_c.html"] = "target_io_c.html"; + this.html2SrcPath["target_io_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/target_io.h"; + this.html2Root["target_io_h.html"] = "target_io_h.html"; + this.html2SrcPath["xil_common_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_common.h"; + this.html2Root["xil_common_h.html"] = "xil_common_h.html"; + this.html2SrcPath["xil_data_stream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_data_stream.c"; + this.html2Root["xil_data_stream_c.html"] = "xil_data_stream_c.html"; + this.html2SrcPath["xil_data_stream_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_data_stream.h"; + this.html2Root["xil_data_stream_h.html"] = "xil_data_stream_h.html"; + this.html2SrcPath["xil_instrumentation_c.html"] = "../sil/xil_instrumentation.c"; + this.html2Root["xil_instrumentation_c.html"] = "xil_instrumentation_c.html"; + this.html2SrcPath["xil_instrumentation_h.html"] = "../sil/xil_instrumentation.h"; + this.html2Root["xil_instrumentation_h.html"] = "xil_instrumentation_h.html"; + this.html2SrcPath["xil_interface_c.html"] = "../sil/xil_interface.c"; + this.html2Root["xil_interface_c.html"] = "xil_interface_c.html"; + this.html2SrcPath["xil_interface_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_interface.h"; + this.html2Root["xil_interface_h.html"] = "xil_interface_h.html"; + this.html2SrcPath["xil_interface_common_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_interface_common.h"; + this.html2Root["xil_interface_common_h.html"] = "xil_interface_common_h.html"; + this.html2SrcPath["xil_interface_lib_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_interface_lib.c"; + this.html2Root["xil_interface_lib_c.html"] = "xil_interface_lib_c.html"; + this.html2SrcPath["xil_interface_lib_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_interface_lib.h"; + this.html2Root["xil_interface_lib_h.html"] = "xil_interface_lib_h.html"; + this.html2SrcPath["xil_interface_lib_private_h.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_interface_lib_private.h"; + this.html2Root["xil_interface_lib_private_h.html"] = "xil_interface_lib_private_h.html"; + this.html2SrcPath["xil_rtiostream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_rtiostream.c"; + this.html2Root["xil_rtiostream_c.html"] = "xil_rtiostream_c.html"; + this.html2SrcPath["xil_services_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xil_services.c"; + this.html2Root["xil_services_c.html"] = "xil_services_c.html"; + this.html2SrcPath["xilcomms_rtiostream_c.html"] = "../../../../../../../../Program Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c/xilcomms_rtiostream.c"; + this.html2Root["xilcomms_rtiostream_c.html"] = "xilcomms_rtiostream_c.html"; + this.getLink2Src = function (htmlFileName) { + if (this.html2SrcPath[htmlFileName]) + return this.html2SrcPath[htmlFileName]; + else + return null; + } + this.getLinkFromRoot = function (htmlFileName) { + if (this.html2Root[htmlFileName]) + return this.html2Root[htmlFileName]; + else + return null; + } +} +Html2SrcLink.instance = new Html2SrcLink(); +var fileList = [ +"ert_main_c.html","FCC_Sys_New_harness_c.html","FCC_Sys_New_harness_h.html","AHRS_Bus_h.html","model_reference_types_h.html","rtwtypes_h.html","CodeInstrTgtAppSvc_h.html","CodeInstrTgtAppSvc_CInterface_h.html","CoderAssumpTgtAppSvc_CInterface_h.html","FCC_Sys_New_harness_sbs_c.html","XILTgtAppSvc_h.html","XILTgtAppSvc_CInterface_h.html","codeinstr_data_stream_c.html","codeinstr_data_stream_h.html","codeinstr_rtiostream_c.html","coder_assumptions_app_c.html","coder_assumptions_app_h.html","coder_assumptions_data_stream_c.html","coder_assumptions_data_stream_h.html","coder_assumptions_rtiostream_c.html","coder_assumptions_shared_enums_h.html","comms_interface_h.html","host_timer_x86_c.html","host_timer_x86_h.html","rtiostream_h.html","rtiostream_tcpip_c.html","rtiostream_utils_c.html","rtiostream_utils_h.html","rx_tx_buffer_sizes_h.html","sil_main_c.html","target_io_c.html","target_io_h.html","xil_common_h.html","xil_data_stream_c.html","xil_data_stream_h.html","xil_instrumentation_c.html","xil_instrumentation_h.html","xil_interface_c.html","xil_interface_h.html","xil_interface_common_h.html","xil_interface_lib_c.html","xil_interface_lib_h.html","xil_interface_lib_private_h.html","xil_rtiostream_c.html","xil_services_c.html","xilcomms_rtiostream_c.html"]; diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/ert_main_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/ert_main_c.html new file mode 100644 index 0000000..a07c5d1 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/ert_main_c.html @@ -0,0 +1,342 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: ert_main.c
    7 *
    8 * Code generated for Simulink model 'FCC_Sys_New_harness'.
    9 *
    10 * Model version : 1.91
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:26 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#include <stddef.h>
    23#include <stdio.h> /* This ert_main.c example uses printf/fflush */
    24#include "FCC_Sys_New_harness.h" /* Model's header file */
    25#include "rtwtypes.h"
    26#include "model_reference_types.h"
    27
    28/*
    29 * Associating rt_OneStep with a real-time clock or interrupt service routine
    30 * is what makes the generated code "real-time". The function rt_OneStep is
    31 * always associated with the base rate of the model. Subrates are managed
    32 * by the base rate from inside the generated code. Enabling/disabling
    33 * interrupts and floating point context switches are target specific. This
    34 * example code indicates where these should take place relative to executing
    35 * the generated code step function. Overrun behavior should be tailored to
    36 * your application needs. This example simply sets an error status in the
    37 * real-time model and returns from rt_OneStep.
    38 */
    39void rt_OneStep(void);
    40void rt_OneStep(void)
    41{
    42 static boolean_T OverrunFlags[3] = { 0, 0, 0 };
    43
    44 static boolean_T eventFlags[3] = { 0, 0, 0 };/* Model has 3 rates */
    45
    46 static int_T taskCounter[3] = { 0, 0, 0 };
    47
    48 /* Disable interrupts here */
    49
    50 /* Check base rate for overrun */
    51 if (OverrunFlags[0]) {
    52 rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun");
    53 return;
    54 }
    55
    56 OverrunFlags[0] = true;
    57
    58 /* Save FPU context here (if necessary) */
    59 /* Re-enable timer or interrupt here */
    60
    61 /*
    62 * For a bare-board target (i.e., no operating system), the
    63 * following code checks whether any subrate overruns,
    64 * and also sets the rates that need to run this time step.
    65 */
    66 if (taskCounter[2] == 0) {
    67 if (eventFlags[2]) {
    68 OverrunFlags[0] = false;
    69 OverrunFlags[2] = true;
    70
    71 /* Sampling too fast */
    72 rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun");
    73 return;
    74 }
    75
    76 eventFlags[2] = true;
    77 }
    78
    79 taskCounter[1]++;
    80 if (taskCounter[1] == 1) {
    81 taskCounter[1]= 0;
    82 }
    83
    84 taskCounter[2]++;
    85 if (taskCounter[2] == 10) {
    86 taskCounter[2]= 0;
    87 }
    88
    89 /* Set model inputs associated with base rate here */
    90
    91 /* Step the model for base rate */
    92 FCC_Sys_New_harness_step0();
    93
    94 /* Get model outputs here */
    95
    96 /* Indicate task for base rate complete */
    97 OverrunFlags[0] = false;
    98
    99 /* If task 1 is running, don't run any lower priority task */
    100 if (OverrunFlags[1]) {
    101 return;
    102 }
    103
    104 /* Step the model for subrate */
    105 if (eventFlags[2]) {
    106 OverrunFlags[2] = true;
    107
    108 /* Set model inputs associated with subrates here */
    109
    110 /* Step the model for subrate 2 */
    111 FCC_Sys_New_harness_step2();
    112
    113 /* Get model outputs here */
    114
    115 /* Indicate task complete for subrate */
    116 OverrunFlags[2] = false;
    117 eventFlags[2] = false;
    118 }
    119
    120 /* Disable interrupts here */
    121 /* Restore FPU context here (if necessary) */
    122 /* Enable interrupts here */
    123}
    124
    125/*
    126 * The example "main" function illustrates what is required by your
    127 * application code to initialize, execute, and terminate the generated code.
    128 * Attaching rt_OneStep to a real-time clock is target specific. This example
    129 * illustrates how you do this relative to initializing the model.
    130 */
    131int_T main(int_T argc, const char *argv[])
    132{
    133 /* Unused arguments */
    134 (void)(argc);
    135 (void)(argv);
    136
    137 /* Initialize model */
    138 FCC_Sys_New_harness_initialize();
    139
    140 /* Attach rt_OneStep to a timer or interrupt service routine with
    141 * period 0.001 seconds (the model's base sample time) here. The
    142 * call syntax for rt_OneStep is
    143 *
    144 * rt_OneStep();
    145 */
    146 printf("Warning: The simulation will run forever. "
    147 "Generated ERT main won't simulate model step behavior. "
    148 "To change this behavior select the 'MAT-file logging' option.\n");
    149 fflush((NULL));
    150 while (rtmGetErrorStatus(FCC_Sys_New_harness_M) == (NULL)) {
    151 /* Perform other application tasks here */
    152 }
    153
    154 /* Disable rt_OneStep() here */
    155 return 0;
    156}
    157
    158/*
    159 * File trailer for generated code.
    160 *
    161 * [EOF]
    162 */
    163
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/hilite_warning.png b/src/validation/FCC_Sys_New_harness_ert_rtw/html/hilite_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f013f815ae58acfcb9112170c871851d666b820f GIT binary patch literal 3014 zcmV;%3pw004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 PPZ&I1{an^LB{Ts5e&c7T literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_c.html new file mode 100644 index 0000000..4d955f1 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_c.html @@ -0,0 +1,186 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2009-2018 The MathWorks, Inc. */
    2
    3#include "host_timer_x86.h"
    4
    5#if defined(__APPLE__)
    6#include <mach/mach_time.h>
    7#endif
    8
    9/* Use the rdtsc instruction to access the time stamp counter (all x86
    10 * processors). This instruction moves the contents of the 64-bit timer to
    11 * e.g. the %eax, %edx registers. For functions returning a 32-bit type,
    12 * only the contents of the %eax register are used. For functions returning
    13 * a 64-bit type, the content of both %eax and %edx registers is used.
    14 */
    15
    16/* Function returning a 64-bit timer value */
    17uint64_T timestamp_x86(void)
    18{
    19
    20#if defined(__GNUC__ )
    21# ifndef __x86_64
    22# error For gcc, the assembler is valid for only for 64-bit architectures.
    23# endif
    24 union {
    25 uint64_T big;
    26 struct {
    27 uint32_T lo;
    28 uint32_T hi;
    29 } small;
    30 } ret;
    31 __asm__ volatile ("rdtsc"
    32 : "=a"(ret.small.lo), "=d"(ret.small.hi) /* Specify registers
    33 * that contain the
    34 * captured value of the
    35 * timestamp counter */
    36 );
    37 return ret.big;
    38
    39#elif defined(_MSC_VER)
    40
    41# if _MSC_VER <= 1200 /* MSVC 6.0 or lower */
    42 __asm rdtsc
    43# else
    44 return (uint64_T) __rdtsc();
    45# endif
    46
    47#elif defined(__LCC64__)
    48
    49 volatile uint64_T ret = 0;
    50
    51 _asm("rdtsc");
    52 _asm("movl %edx, -4(%rbp)");
    53 _asm("movl %eax, -8(%rbp)");
    54
    55 return ret;
    56
    57#elif defined(__APPLE__)
    58
    59 return mach_absolute_time();
    60
    61#else
    62
    63# error("Unsupported compiler")
    64
    65#endif
    66
    67}
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_h.html new file mode 100644 index 0000000..46d3b6d --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/host_timer_x86_h.html @@ -0,0 +1,86 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2012 The MathWorks, Inc. */
    2
    3#ifndef _HOST_TIMER_X86_H_
    4#define _HOST_TIMER_X86_H_
    5
    6#include "rtwtypes.h"
    7
    8/* rtwtypes.h may not provide a typedef for uint64_T. We must detect this case
    9 * and provide the typedef. */
    10#if defined(PROFILING_DEFINE_UINT64_TIMER_TYPE) && !defined(MAX_uint64_T)
    11# if defined(__x86_64__) || defined(__LP64__)
    12/* use long long to support MinGW on Win64
    13 * long long is also 64-bit on Linux / Mac */
    14# define UINT64_T unsigned long long
    15# elif defined(_MSC_VER) || (defined(__BORLANDC__) && __BORLANDC__ >= 0x530) \
    16 || (defined(__WATCOMC__) && __WATCOMC__ >= 1100) \
    17 || defined(__int64)
    18# define UINT64_T unsigned __int64
    19# else
    20# error There is no 64-bit unsigned type available for this platform.
    21# endif
    22
    23# if defined(__GNUC__) && \
    24 ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >=9)))
    25 __extension__
    26# endif
    27 typedef UINT64_T uint64_T;
    28#endif
    29
    30
    31
    32uint64_T timestamp_x86(void);
    33
    34#endif /* _HOST_TIMER_X86_H_ */
    35
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/inspect.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/inspect.html new file mode 100644 index 0000000..b628c7a --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/inspect.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/js/coder_app.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/js/coder_app.js new file mode 100644 index 0000000..3c34823 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/js/coder_app.js @@ -0,0 +1,525 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +function queryByClassName(className, elem) { + if (!elem) elem = document.body; + if (typeof elem.querySelectorAll === "function") { + return elem.querySelectorAll("."+className); + } else { + return elem.getElementsByClass(className); + } +} + +function nav_token_usage_details(direction) { + var els = queryByClassName("token_usage_details_tabrow"); + var selectedIdx = 0; + var selectedClassName = "selected"; + for (selectedIdx; selectedIdx < els.length; selectedIdx++) { + if (els[selectedIdx].classList.contains(selectedClassName)) { + break; + } + } + var nextIdx = selectedIdx; + if (direction === -1 && selectedIdx > 0) { + nextIdx = selectedIdx-1; + } else if (direction === 1 && selectedIdx < els.length - 1) { + nextIdx = selectedIdx + 1; + } + if (nextIdx !== selectedIdx) { + els[selectedIdx].classList.remove(selectedClassName); + els[nextIdx].classList.add(selectedClassName); + els[nextIdx].scrollIntoView(alignWithTop=false); + } + return false; +} + +function tabrowClicked(event) { +} + +function popupOnload() { + var els = queryByClassName("token_usage_details_tabrow"); + for (var i=0; i" + + top.rtwGetFileName(link2Src) + ""; + var bodyNode = document.body; + bodyNode.insertBefore(link, bodyNode.firstElementChild); + } + top.updateHyperlinks(); + // update fileSelector frame + if (top.fileSelector) { + var o = top.fileSelector.document.getElementById('fileSelector'); + if (o) { + o.value = filename; + } + } + // add links to line numbers + var hasLineFlag = null; + if (top.TraceInfoLineFlag && top.TraceInfoLineFlag.instance) { + hasLineFlag = true; + } else { + hasLineFlag = false; + } + + if(hasLineFlag) { + var lines = queryByClassName("ln", codeElement); + var lineTraceFlag = top.TraceInfoLineFlag.instance.lineTraceFlag; + var lineNo = null; + for (var i=0; i= 0; --i) { + var childNode = trNode.childNodes[i]; + if (childNode.tagName.toUpperCase() === "TD") { + return childNode.childNodes; + } + } + return null; +} + +// see g1225075 +function fixBoxStyleFnHeaderLineWidths() { + // Match strings like "/**********/" which is the top line of + // a box-style function comment header + var reBoxHeader = /\/\*+\//; + + // Match strings like "' */" which is the contents of the text + // element originally generated in the report to pad the width of + // the line. + var rePadding = /'\s*\*\//; + + // All block identifier elements in the report page + blkLineElts = queryByClassName("blk"); + for (var i = 0; i < blkLineElts.length; ++i) { + var origPadding = blkLineElts[i].nextSibling; + if (origPadding.textContent.match(rePadding)) { + var spanElt = findParent(blkLineElts[i], { tagName: "span", className: "ct" }); + if (!spanElt) { + continue; + } + + // The numbered line in the report containing block identifier "i" + var tableRowElt = findParent(spanElt, { tagName: "tr" }); + if (!tableRowElt) { + continue; + } + + // Loop backward through table rows (i.e., report lines) looking + // for the "/***************/" start of the header. When found save + // its pixel width. Not actually the width of the itself but + // the span inside its last . This is will determine the real + // padding that is needed for proper alignment regardless of font + // or CKJ characters. + var targetWidth = 0; + var sanity = Number.MAX_VALUE; + var node = tableRowElt.previousSibling; + while (node && (sanity-- > 0)) { + var lastCellContents = getLastTableCellContents(node); + if (lastCellContents) { + if (lastCellContents.length === 0) { + break; + } + if (lastCellContents[0].textContent.match(reBoxHeader)) { + targetWidth = lastCellContents[0].offsetWidth; + break; + } + } + node = node.previousSibling; + } + + // If applying a new padding (i.e., targetWidth > 0), replace + // the original padding "' */' (a single text element) with + // two text elements and a span in between. The span will be the + // new pixel-accurate padding. + if (targetWidth > 0) { + var singleQuoteNode = document.createTextNode("'"); + var spacerNode = document.createElement('span'); + origPadding.textContent = "*/"; + origPadding.parentNode.insertBefore(spacerNode, origPadding); + origPadding.parentNode.insertBefore(singleQuoteNode, spacerNode); + + var padWidth = targetWidth - spanElt.offsetWidth; + spacerNode.style.display = 'inline-block'; + spacerNode.style.width = String(padWidth) + "px"; + spacerNode.style.height = '1em'; // cursor won't work w/o some height + spacerNode.style.cursor = 'text'; + } + } + } +} + +// the onload function for source file +function srcFileOnload() { + var codeElement = document.getElementById("codeTbl"); + var insertFunction = getInsertFunction(codeElement); + try { + var els = codeElement.getElementsByTagName("tr"); + for (var i = 0; i < els.length; i++) { + registerDelayedOnMouseOver(els[i], lineOnMouseIn, lineOnMouseOut); + } + updateToken(codeElement); + } catch (err) {}; + insertFunction(); + // add code to model hyperlinks for all tokens + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + // highlight the filename in the TOC frame + if (top.rtwreport_contents_frame && top.hiliteByFileName(top.rtwreport_document_frame.document.location.href)) { + // remove the highlights in the TOC frame if filename is hilite successfully + top.removeHiliteTOC(top.rtwreport_contents_frame); + } + + // annotate code with code coverage data + if (typeof rtwannotate === 'function') { + rtwannotate(filename.replace(/.html$/,"_cov.xml")); + } + + fixBoxStyleFnHeaderLineWidths(); + + // highlight token and row + if (top.RTW_TraceInfo.instance && top.RTW_TraceArgs.instance) { + var i; + // find the highlight file name + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(filename); + var ids=[], rows=[]; + if (typeof fileIdx !== "undefined") { + ids = top.RTW_TraceArgs.instance.getIDs(fileIdx); + rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + // highlight rows in file + for (i=0; i 0) + top.RTW_TraceInfo.instance.setInitLocation(filename,rows[0]); + else { + top.toggleNavSideBar("off"); + return; + } + } + + // display navigation side bar + if (top.rtwreport_nav_frame) top.rtwreport_nav_frame.location.reload(); + if (rows.length>0) { + top.toggleNavSideBar("on"); + top.toggleNavToolBar("on"); + } else { + top.toggleNavSideBar("off"); + } + } + top.scrollToLineBasedOnHash(document.location.hash); + function getHash() { + var loc; + var aHash=""; + var topDocObj = top.window.document; + // get the hash value from location. + loc = topDocObj.location; + loc = loc.search || loc.hash; + aHash = loc.substring(1); + aHash = decodeURI(aHash); + return aHash; + } +} + +function createPopup(filename, evt) { + var anchorObj = evt.currentTarget; + if (anchorObj.children.length > 0) + return; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var windowObj = top.getInspectWindow(); + var propObj = top.getInspectData(filename, anchorObj); + var navObj = top.getInspectLink(filename, location.pathname, anchorObj); + if (propObj) { + windowObj.appendChild(propObj); + windowObj.style.left = "0px"; + if (anchorObj.parentElement.nodeName === "TD" && + anchorObj.parentElement.parentElement.nodeName === "TR") { + anchorObj.parentElement.parentElement.lastChild.insertBefore(windowObj, + anchorObj.parentElement.parentElement.lastChild.lastChild.nextSibling); + var left = Math.min(evt.clientX , window.innerWidth - windowObj.scrollWidth - 30); + left = Math.max(0, left); + windowObj.style.left = "" + left + "px"; + } + } +}; + +function destroyPopup(anchorObj) { + var popWindow = document.getElementById("popup_window"); + if (popWindow) { + popWindow.parentElement.removeChild(popWindow); + } +}; diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/membrane_16.png b/src/validation/FCC_Sys_New_harness_ert_rtw/html/membrane_16.png new file mode 100644 index 0000000000000000000000000000000000000000..6c73d8d2332e8b1055265c94ccd7cbc5e80abced GIT binary patch literal 3546 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 Ux@2OV7XSbN07*qoM6N<$g2aovW&i*H literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/nav.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/nav.html new file mode 100644 index 0000000..64f68db --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/nav.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/navToolbar.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/navToolbar.html new file mode 100644 index 0000000..d07c72e --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/navToolbar.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_h.html new file mode 100644 index 0000000..73925f3 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_h.html @@ -0,0 +1,126 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Copyright 2007-2012 The MathWorks, Inc.
    3 *
    4 * File: rtiostream.h
    5 *
    6 * Abstract:
    7 * Function prototypes and defines for rtIOStream API.
    8 */
    9
    10#ifndef RTIOSTREAM_H
    11#define RTIOSTREAM_H
    12
    13#include <stddef.h>
    14
    15#define RTIOSTREAM_ERROR (-1)
    16#define RTIOSTREAM_NO_ERROR (0)
    17
    18/* Note: if the functions declared in this file should be compiled into a shared
    19 * library (e.g. a .dll file on Windows), you must ensure that the functions are
    20 * externally visible. The procedure to achieve this depends on the compiler and
    21 * linker you are using. For example, on Windows, you may need to provide an
    22 * exports definition .def file that lists all of the functions to be
    23 * exported; see ./rtiostream/rtiostream_pc.def for a suitable .def file.
    24 */
    25
    26#ifndef RTIOSTREAMAPI
    27#define RTIOSTREAMAPI
    28#endif
    29
    30RTIOSTREAMAPI int rtIOStreamOpen(
    31 int argc,
    32 void * argv[]
    33);
    34
    35RTIOSTREAMAPI int rtIOStreamSend(
    36 int streamID,
    37 const void * src,
    38 size_t size,
    39 size_t * sizeSent
    40 );
    41
    42RTIOSTREAMAPI int rtIOStreamRecv(
    43 int streamID,
    44 void * dst,
    45 size_t size,
    46 size_t * sizeRecvd
    47 );
    48
    49RTIOSTREAMAPI int rtIOStreamClose(
    50 int streamID
    51 );
    52
    53
    54#endif /* #ifndef RTIOSTREAM_H */
    55
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_tcpip_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_tcpip_c.html new file mode 100644 index 0000000..956adf2 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_tcpip_c.html @@ -0,0 +1,4038 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Copyright 1994-2019 The MathWorks, Inc.
    3 *
    4 * File: rtiostream_tcpip.c
    5 *
    6 * Abstract: This source file implements both client-side and server-side TCP/IP
    7 * and UDP/IP communication. Typically, this driver is used to support host-target
    8 * communication where the client-side device driver runs on the host and the
    9 * server-side driver runs on the target. For this implementation, both
    10 * client-side and server-side driver code has been combined into a single
    11 * file.
    12 *
    13 * If you are using this code as a starting point to implement a TCP/IP or
    14 * UDP/IP driver for a custom target it is only necessary to include code
    15 * for the server side of the connection.
    16 */
    17
    18#ifndef _WIN32
    19/* Required BSD Unix extensions are not available by default on certain Unix
    20 * distributions */
    21#define _DEFAULT_SOURCE /* _DEFAULT_SOURCE must be defined to avoid
    22 _BSD_SOURCE deprecation warning
    23 for glibc >= 2.20 */
    24#define _BSD_SOURCE /* Required to support glibc <= 2.19 */
    25#endif
    26
    27#include <stdio.h>
    28#include <stdlib.h>
    29#include <ctype.h>
    30#include <string.h>
    31#include <limits.h>
    32#include "rtiostream.h"
    33#include "tmwtypes.h"
    34
    35#ifdef _WIN32
    36 /* WINDOWS */
    37
    38#if defined(_MSC_VER)
    39 /* temporarily disable warning triggered
    40 * by windows.h */
    41 #pragma warning(push)
    42 #pragma warning(disable: 4255)
    43#endif
    44
    45#include <windows.h>
    46
    47#if defined(_MSC_VER)
    48 /* restore warning */
    49 #pragma warning(pop)
    50#endif
    51
    52# ifdef __LCC__
    53# ifndef __LCC64__
    54# include <winsock2.h>
    55# endif
    56# include <errno.h>
    57# endif
    58
    59#define RTIOSTREAM_ECONNRESET WSAECONNRESET
    60
    61#elif defined(VXWORKS)
    62 /*VxWorks headers*/
    63# include <selectLib.h>
    64# include <sockLib.h>
    65# include <inetLib.h>
    66# include <ioLib.h>
    67# include <taskLib.h>
    68# include <netinet/tcp.h>
    69
    70#define RTIOSTREAM_ECONNRESET ECONNRESET
    71
    72#else
    73 /* UNIX */
    74# include <signal.h>
    75# include <sys/time.h> /* Linux */
    76# include <sys/types.h> /* Linux */
    77# include <sys/socket.h>
    78# include <sys/poll.h>
    79# include <netinet/in.h> /* Linux */
    80# include <netinet/tcp.h> /* Linux */
    81# include <arpa/inet.h> /* Linux */
    82# include <netdb.h>
    83# include <errno.h>
    84# include <fcntl.h>
    85# include <unistd.h>
    86
    87#define RTIOSTREAM_ECONNRESET ECONNRESET
    88#endif
    89
    90#if defined(_WIN32) || defined(VXWORKS)
    91#define USE_SELECT
    92#endif
    93
    94#ifdef USE_MEXPRINTF
    95#include "mex.h"
    96#define printf mexPrintf
    97#define SERVER_PORT_PRINTF(FORMAT, ARG1) mexPrintf(FORMAT, ARG1)
    98#else
    99/* If stdout is redirected to file, it is essential that the port number is
    100 * available immediately in the output file. With LCC, printf does not flush
    101 * correctly to the redirected output file - use fprintf & fflush instead. */
    102#define SERVER_PORT_PRINTF(FORMAT, ARG1) fprintf(stdout, FORMAT, ARG1); \
    103 fflush(stdout)
    104#endif
    105
    106/***************** DEFINES ****************************************************/
    107#define HOSTNAME_MAXLEN (64U)
    108
    109#define SERVER_PORT_NUM (17725U) /* sqrt(pi)*10000 */
    110
    111/*
    112 * EXT_BLOCKING
    113 *
    114 * Depending on the implementation of the main program (e.g., grt_main.c,
    115 * rt_main.c), the EXT_BLOCKING flag must be set to either 0 or 1.
    116 *
    117 * rt_main.c (tornado/vxworks): rt_main.c is a real-time, multi-tasking target.
    118 * The upload and packet servers are called via background (low priority) tasks.
    119 * In this case, it is o.k. for the transport function to block as the blocked
    120 * tasks will simply be pre-empted in order to enable the model to run. It is
    121 * desirable to block instead of to poll to free up the cpu for any other
    122 * potential work.
    123 */
    124#ifdef VXWORKS
    125# define EXT_BLOCKING (1)
    126#else
    127# define EXT_BLOCKING (0)
    128#endif
    129
    130/* timeout of 0 means to return immediately */
    131#define BLOCKING_RECV_TIMEOUT_NOWAIT (0)
    132/* timeout of -1 means to wait indefinitely */
    133#define BLOCKING_RECV_TIMEOUT_NEVER (-1)
    134/* rogue value for blocking receive timeout */
    135#define DEFAULT_BLOCKING_RECV_TIMEOUT (-2)
    136/* timeout of -3 means to wait for 10 ms to avoid high CPU load */
    137#define BLOCKING_RECV_TIMEOUT_10MS (-3)
    138/* wake up from blocking every second */
    139#define DEFAULT_BLOCKING_RECV_TIMEOUT_SECS_CLIENT (1)
    140/* only wake up from blocking when data arrives */
    141#define DEFAULT_BLOCKING_RECV_TIMEOUT_SECS_SERVER (BLOCKING_RECV_TIMEOUT_NEVER)
    142/* server wait time for client to close its socket */
    143#define BLOCKING_RECV_TIMEOUT_SOCK_SHUTDOWN (60)
    144
    145/* define a set of verbosity levels:
    146 *
    147 * 0: no verbose output
    148 * 1: verbose output with data
    149 * 2: extra verbose output including when data size is zero*/
    150typedef enum {VERBOSITY_LEVEL_0=0, VERBOSITY_LEVEL_1, VERBOSITY_LEVEL_2} VerbosityLevel;
    151/* default verbosity value */
    152#define DEFAULT_VERBOSITY VERBOSITY_LEVEL_0
    153
    154/* default protocol value */
    155#define DEFAULT_PROTOCOL TCP_PROTOCOL
    156/* allowed -protocol strings */
    157#define TCP_PROTOCOL_STRING "TCP"
    158#define UDP_PROTOCOL_STRING "UDP"
    159#define UDP_PACKET_LOSS_DETECTON_PROTOCOL_STRING "UDP_PACKET_LOSS_DETECTION"
    160
    161/* default UDP max packet size
    162 *
    163 * The maximum size of UDP packets that are transmitted / received must be
    164 * consistent on the host and target otherwise receive errors will occur at
    165 * the side with the smaller buffer size specified.
    166 *
    167 * Use the "-maxudppacketsize SIZE" argument to specify a different packet size.
    168 * This option is particularly useful when using a custom server implementation
    169 * that uses a different max packet size to the default.
    170 *
    171 * The maximum UDP payload is 65507 bytes, which can be achieved for localhost
    172 * based communications on Linux and Windows, but Mac has a lower size of
    173 * 9216.
    174 */
    175#define UDP_MAX_PACKET_SIZE 9216
    176#define DEFAULT_MAX_UDP_PACKET_SIZE UDP_MAX_PACKET_SIZE
    177/* increase the UDP socket receive size to decrease the
    178 * possibility of buffer overflow */
    179#define DEFAULT_UDP_SOCKET_RECEIVE_SIZE_REQUEST (512 * 1024)
    180#define DEFAULT_UDP_SOCKET_SEND_SIZE_REQUEST (512 * 1024)
    181
    182#define DEFAULT_IS_USING_SEQ_NUM 1
    183
    184#ifdef WIN32
    185 /* WINDOWS */
    186# define close closesocket
    187# define SOCK_ERR SOCKET_ERROR
    188#else
    189 /* UNIX, VXWORKS */
    190# define INVALID_SOCKET (-1)
    191# define SOCK_ERR (-1)
    192
    193 typedef int SOCKET;
    194#endif
    195
    196/*
    197 * send prototype differs on different platforms. The following typedefs
    198 * suppress compiler warnings.
    199 */
    200#if defined(WIN32)
    201typedef const char * send_buffer_t;
    202#elif defined(VXWORKS)
    203typedef char * send_buffer_t;
    204#else
    205typedef const void * send_buffer_t;
    206#endif
    207
    208/* MIN utility */
    209#ifndef MIN
    210#define MIN(a,b) ((a) < (b) ? (a) : (b))
    211#endif
    212
    213/***************** TYPEDEFS **************************************************/
    214
    215#if (defined(_WIN32)) || (defined(VXWORKS))
    216 /* socklen_t may not be available */
    217 typedef int rtiostream_socklen_t;
    218#else
    219 typedef socklen_t rtiostream_socklen_t;
    220#endif
    221
    222/* Server specific data structure */
    223typedef struct ServerData_tag {
    224 int port; /* port number associated with the server socket */
    225 SOCKET listenSock; /* listening socket to accept incoming connections */
    226 char *serverInfoFile; /* the filename that is used to write the server
    227 port number when dynamic port allocation is used */
    228} ServerData;
    229
    230/* UDP send / receive buffer data structure */
    231typedef struct UDPPacketBuffer_tag {
    232 char * buffer; /* pointer to the buffer */
    233 char * dataPtr; /* pointer to the current position in the buffer */
    234 int dataAvail; /* amount of data in the buffer */
    235} UDPPacketBuffer;
    236
    237/* Type for the optional UDP sequence number */
    238typedef uint32_T udpSeqNum_T;
    239/* byte size of the UDP sequence number */
    240#define UDP_SEQ_NUM_SIZE ((int) sizeof(udpSeqNum_T))
    241
    242/* UDP specific data structure */
    243typedef struct UDPData_tag {
    244 int isUsingSeqNum; /* is this connection using sequence numbers */
    245 int maxPacketSize; /* max packet size (buffer size) */
    246 UDPPacketBuffer * recvBuffer; /* buffer for an incoming datagram */
    247 UDPPacketBuffer * sendBuffer; /* buffer for an outgoing datagram */
    248 udpSeqNum_T sendSeqNum; /* sequence number to add to outgoing datagrams */
    249 udpSeqNum_T expectedRecvSeqNum; /* expected sequence number in incoming
    250 datagrams */
    251 int resetExpectedRecvSeqNum; /* flags whether to reset expectedRecvSeqNum
    252 to the sequence number of the next incoming
    253 datagram */
    254} UDPData;
    255
    256/* enum of supported communications protocols */
    257typedef enum {TCP_PROTOCOL, UDP_PROTOCOL} CommsProtocol;
    258
    259/* Data encapsulating a single client / server connection */
    260typedef struct ConnectionData_tag {
    261 int isInUse; /* is this ConnectionData instance currently in use? */
    262 int isServer; /* is this ConnectionData instance a Server (or client)? */
    263 int blockingRecvTimeout; /* Timeout value in seconds. rtIOStreamRecv
    264 blocks until at least some of the requested
    265 data is available or the timeout expires.
    266 If a timeout occurs the receiveSize will be 0.
    267
    268 A value of BLOCKING_RECV_TIMEOUT_NOWAIT (0)
    269 means to block for 0 seconds (polling mode).
    270 rtIOStreamRecv processes
    271 any pending data or, if no data is available,
    272 returns immediately with a receiveSize of 0.
    273
    274 A value of BLOCKING_RECV_TIMEOUT_NEVER (-1)
    275 means to block indefinitely (full blocking
    276 mode). rtIOStreamRecv blocks
    277 until at least some of the requested data is
    278 available. receiveSize should always be
    279 greater than 0.
    280
    281 A value of BLOCKING_RECV_TIMEOUT_10MS (-3)
    282 means to block for up to 10 ms to avoid high CPU
    283 load.
    284 */
    285 VerbosityLevel verbosity; /* enum indicating the level of verbosity to be displayed on the output */
    286 CommsProtocol protocol; /* TCP or UDP protocol */
    287 SOCKET sock; /* socket to send/receive packets */
    288 ServerData * serverData; /* Server specific data - NULL for clients */
    289 UDPData * udpData; /* UDP specific data - NULL for TCP */
    290 int udpSendBufSize;
    291 int udpRecvBufSize;
    292} ConnectionData;
    293
    294/**************** LOCAL DATA *************************************************/
    295
    296/* All local data resides in the per client /
    297 * server instance ConnectionData structures to make sure each connection is
    298 * completely independent.
    299 *
    300 * Each ConnectionData does not use much memory; any optionally required
    301 * send / recv buffers are dynamically allocated and freed when the ConnectionData
    302 * actually becomes in use.
    303 *
    304 * The static array will be deallocated when the shared library is unloaded.
    305 *
    306 * Using an array rather than a linked list allows us to have fast direct lookup
    307 * of ConnectionData from connectionID during calls to rtIOStreamSend/Recv */
    308#define MAX_NUM_CONNECTIONS (50)
    309static ConnectionData connectionDataArray[MAX_NUM_CONNECTIONS];
    310
    311/************** LOCAL FUNCTION PROTOTYPES ************************************/
    312
    313static int initConnectionData(int connectionID,
    314 int isServer,
    315 CommsProtocol protocol,
    316 SOCKET sock,
    317 int blockingRecvTimeout,
    318 int maxPacketSize,
    319 int serverPort,
    320 char * serverInfoFile,
    321 VerbosityLevel verbosity,
    322 int isUsingSeqNum,
    323 int udpSendBufSize,
    324 int udpRecvBufSize);
    325
    326static int getConnectionID(void);
    327
    328static ConnectionData * getConnectionData(int connectionID);
    329
    330static void freeConnectionData(ConnectionData * connection);
    331
    332static UDPPacketBuffer * createUDPPacketBuffer(int maxPacketSize);
    333
    334static void freeUDPPacketBuffer(UDPPacketBuffer ** udpPacketBuffer);
    335
    336static void resetUDPPacketBuffer(UDPPacketBuffer * udpPacketBuffer);
    337
    338static int processUDPRecvSeqNum(ConnectionData * connection);
    339
    340static int initialUDPServerRecvfrom(ConnectionData * connection,
    341 struct sockaddr * clientSA,
    342 rtiostream_socklen_t * clientSALen);
    343
    344static int waitForClientClose(ConnectionData * connection);
    345
    346static int socketDataSet(
    347 ConnectionData * connection,
    348 const void *src,
    349 const size_t size,
    350 size_t *sizeSent);
    351
    352static int socketDataGet(
    353 ConnectionData * connection,
    354 char *dst,
    355 const size_t size,
    356 size_t *sizeRecvd);
    357
    358static int socketDataPending(
    359 const SOCKET sock,
    360 ConnectionData * connection,
    361 int *outPending,
    362 int timeoutSecs);
    363
    364static int serverStreamRecv(
    365 ConnectionData * connection,
    366 void * dst,
    367 size_t size,
    368 size_t * sizeRecvd);
    369
    370static SOCKET serverOpenSocket(int port, char * serverInfoFile, CommsProtocol protocol,int udpSendBufSize, int udpRecvBufSize);
    371
    372#if (!defined(VXWORKS))
    373static SOCKET clientOpenSocket(char * hostName, unsigned int portNum, CommsProtocol protocol, int udpSendBufSize, int udpRecvBufSize);
    374#endif
    375
    376static void serverAcceptSocket(ConnectionData * connection);
    377
    378static int processArgs(
    379 const int argc,
    380 void * argv[],
    381 char ** hostName,
    382 unsigned int * portNum,
    383 unsigned int * isClient,
    384 int * isBlocking,
    385 int * recvTimeout,
    386 char ** serverInfoFile,
    387 CommsProtocol * protocol,
    388 int * maxPacketSize,
    389 VerbosityLevel * verbosity,
    390 int * isUsingSeqNum,
    391 int * udpSendBufSize,
    392 int * udpRecvBufSize);
    393
    394#if (!defined(VXWORKS))
    395static unsigned long nameLookup(char * hostName);
    396#endif
    397
    398/*************** LOCAL FUNCTIONS **********************************************/
    399
    400/* Function: initConnectionData =================================================
    401 * Abstract:
    402 * Initializes a client / server ConnectionData for the specified protocol.
    403 *
    404 * A return value of RTIOSTREAM_ERROR indicates an error.
    405 */
    406static int initConnectionData(int connectionID,
    407 int isServer,
    408 CommsProtocol protocol,
    409 SOCKET sock,
    410 int blockingRecvTimeout,
    411 int maxPacketSize,
    412 int serverPort,
    413 char * serverInfoFile,
    414 VerbosityLevel verbosity,
    415 int isUsingSeqNum,
    416 int udpSendBufSize,
    417 int udpRecvBufSize) {
    418 int retVal = RTIOSTREAM_NO_ERROR;
    419 ConnectionData * connection = &connectionDataArray[connectionID];
    420
    421 /* initialize the new ConnectionData */
    422 connection->isInUse = 1;
    423 connection->isServer = isServer;
    424 connection->blockingRecvTimeout = blockingRecvTimeout;
    425 connection->protocol = protocol;
    426 connection->verbosity = verbosity;
    427 connection->udpSendBufSize = udpSendBufSize;
    428 connection->udpRecvBufSize = udpRecvBufSize;
    429 /* initialize to NULL early so that calls to
    430 * freeConnectionData on error will succeed */
    431 connection->udpData = NULL;
    432 connection->serverData = NULL;
    433
    434 if (connection->protocol == UDP_PROTOCOL) {
    435 /* initialize the UDP data */
    436 connection->udpData = (UDPData *) malloc(sizeof(UDPData));
    437 if (connection->udpData == NULL) {
    438 printf("initConnectionData:UDPData malloc failed.\n");
    439 freeConnectionData(connection);
    440 retVal = RTIOSTREAM_ERROR;
    441 return retVal;
    442 }
    443 /* initialize to NULL */
    444 connection->udpData->recvBuffer = NULL;
    445 connection->udpData->sendBuffer = NULL;
    446 connection->udpData->isUsingSeqNum = isUsingSeqNum;
    447 connection->udpData->maxPacketSize = maxPacketSize;
    448 /* send sequence numbers always start from 0 */
    449 connection->udpData->sendSeqNum = 0;
    450 /* initially, seed the expectedRecvSeqNum from the first
    451 * received packet */
    452 connection->udpData->resetExpectedRecvSeqNum = 1;
    453 connection->udpData->recvBuffer = createUDPPacketBuffer(maxPacketSize);
    454 if (connection->udpData->recvBuffer == NULL) {
    455 printf("initConnectionData:createUDPPacketBuffer failed.\n");
    456 freeConnectionData(connection);
    457 retVal = RTIOSTREAM_ERROR;
    458 return retVal;
    459 }
    460 if (maxPacketSize > UDP_MAX_PACKET_SIZE) {
    461 /* packet size cannot exceed the maximum
    462 * UDP packet size */
    463 printf("initConnectionData: udpmaxpacketsize must be less than %d\n", UDP_MAX_PACKET_SIZE);
    464 freeConnectionData(connection);
    465 retVal = RTIOSTREAM_ERROR;
    466 return retVal;
    467 }
    468 if (connection->udpData->isUsingSeqNum) {
    469 /* packet size must be larger than the size
    470 * of the sequence number */
    471 if (maxPacketSize <= UDP_SEQ_NUM_SIZE) {
    472 printf("initConnectionData: udpmaxpacketsize must be larger than %d\n", UDP_SEQ_NUM_SIZE);
    473 freeConnectionData(connection);
    474 retVal = RTIOSTREAM_ERROR;
    475 return retVal;
    476 }
    477 /* send buffer will be required in order to add the sequence
    478 * number to the outgoing data */
    479 connection->udpData->sendBuffer = createUDPPacketBuffer(maxPacketSize);
    480 if (connection->udpData->sendBuffer == NULL) {
    481 printf("initConnectionData:createUDPPacketBuffer failed.\n");
    482 freeConnectionData(connection);
    483 retVal = RTIOSTREAM_ERROR;
    484 return retVal;
    485 }
    486 }
    487 }
    488
    489 if (isServer) {
    490 /* initialize server data */
    491 connection->serverData = (ServerData *) malloc(sizeof(ServerData));
    492 if (connection->serverData == NULL) {
    493 printf("initConnectionData:ServerData malloc failed.\n");
    494 freeConnectionData(connection);
    495 retVal = RTIOSTREAM_ERROR;
    496 return retVal;
    497 }
    498 connection->serverData->port = serverPort;
    499 connection->serverData->serverInfoFile = serverInfoFile;
    500 /* provided sock is the listening sock */
    501 connection->serverData->listenSock = sock;
    502 /* later call to serverAcceptSocket will set sock */
    503 connection->sock = INVALID_SOCKET;
    504 }
    505 else {
    506 /* store the provided socket */
    507 connection->sock = sock;
    508 }
    509
    510 if (verbosity) {
    511 if (connection->protocol == TCP_PROTOCOL) {
    512 printf("Connection id %d, protocol: TCP/IP\n", connectionID);
    513 }
    514 else if (connection->protocol == UDP_PROTOCOL) {
    515 printf("Connection id %d, protocol: UDP/IP\n", connectionID);
    516 printf("Connection id %d, maxPacketSize: %d\n", connectionID,
    517 connection->udpData->maxPacketSize);
    518 printf("Connection id %d, isUsingSeqNum: %d\n", connectionID,
    519 connection->udpData->isUsingSeqNum);
    520 }
    521 else {
    522 printf("initConnectionData:invalid protocol.\n");
    523 freeConnectionData(connection);
    524 retVal = RTIOSTREAM_ERROR;
    525 return retVal;
    526 }
    527 {
    528 /* display the size of the socket receive buffer */
    529 rtiostream_socklen_t optionLen = sizeof(int);
    530 int optionValue;
    531 getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *) &optionValue, &optionLen);
    532 printf("Connection id %d, udpSendBufSize: %d\n", connectionID, optionValue);
    533 getsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *) &optionValue, &optionLen);
    534 printf("Connection id %d, udpRecvBufSize: %d\n", connectionID, optionValue);
    535 }
    536 printf("Connection id %d, blockingRecvTimeout: %d\n", connectionID,
    537 connection->blockingRecvTimeout);
    538 if ((connection->isServer) && (connection->serverData != NULL)) {
    539 printf("Connection id %d, type: server\n", connectionID);
    540 if (connection->serverData->serverInfoFile != NULL) {
    541 printf("Connection id %d, server info file: %s\n", connectionID,
    542 connection->serverData->serverInfoFile);
    543 }
    544 }
    545 else {
    546 printf("Connection id %d, type: client\n", connectionID);
    547 }
    548 printf("Connection id %d, socket id %d\n", connectionID, (int) sock);
    549 /* relevant to both clients and servers */
    550 printf("Connection id %d, server port: %d\n", connectionID, serverPort);
    551 }
    552 return retVal;
    553}
    554
    555/* Function: getConnectionData =================================================
    556 * Abstract:
    557 * Retrieves a ConnectionData instance given its connectionID
    558 * (as returned by initConnectionData)
    559 *
    560 * NOTE: An invalid connectionID will lead to a NULL pointer being returned
    561 */
    562static ConnectionData * getConnectionData(int connectionID) {
    563 /* return NULL for invalid or uninitialized connectionIDs */
    564 ConnectionData * connection = NULL;
    565 if ((connectionID >= 0) && (connectionID < MAX_NUM_CONNECTIONS)) {
    566 if (connectionDataArray[connectionID].isInUse) {
    567 connection = &connectionDataArray[connectionID];
    568 }
    569 }
    570 return connection;
    571}
    572
    573/* Function: getConnectionID =================================================
    574 * Abstract:
    575 * Returns a connectionID corresponding to a ConnectionData that is not
    576 * already in use.
    577 *
    578 * Returns RTIOSTREAM_ERROR if all available ConnectionData instances are
    579 * already in use.
    580 */
    581static int getConnectionID(void) {
    582 int connectionID;
    583 int foundUnusedConnectionData = 0;
    584 /* linear search for an unused ConnectionData */
    585 for (connectionID = 0; connectionID < MAX_NUM_CONNECTIONS; connectionID++) {
    586 if (!connectionDataArray[connectionID].isInUse) {
    587 foundUnusedConnectionData = 1;
    588 break;
    589 }
    590 }
    591 if (!foundUnusedConnectionData) {
    592 /* all ConnectionData's are in use */
    593 printf("getConnectionID: All %d available connections are in use.\n", MAX_NUM_CONNECTIONS);
    594 connectionID = RTIOSTREAM_ERROR;
    595 }
    596 return connectionID;
    597}
    598
    599/* Function: freeConnectionData =================================================
    600 * Abstract:
    601 * Frees memory associated with the ConnectionData referenced by connectionID.
    602 * Marks the ConnectionData instance as no longer in use.
    603 */
    604static void freeConnectionData(ConnectionData * connection) {
    605 /* mark the ConnectionData as not in use */
    606 connection->isInUse = 0;
    607 /* free dynamic memory */
    608 if (connection->protocol == UDP_PROTOCOL) {
    609 freeUDPPacketBuffer(&connection->udpData->recvBuffer);
    610 /* freeConnectionData is called if connection->udpData did not allocate */
    611 if (connection->udpData != NULL) {
    612 if (connection->udpData->isUsingSeqNum) {
    613 freeUDPPacketBuffer(&connection->udpData->sendBuffer);
    614 }
    615 }
    616 free(connection->udpData);
    617 connection->udpData = NULL;
    618 }
    619 if (connection->isServer) {
    620 free(connection->serverData);
    621 connection->serverData = NULL;
    622 }
    623}
    624
    625/* Function: createUDPPacketBuffer =================================================
    626 * Abstract:
    627 * Allocates storage for and initializes a UDPPacketBuffer
    628 */
    629static UDPPacketBuffer * createUDPPacketBuffer(int maxPacketSize) {
    630 /* initialize the UDP packet buffer */
    631 UDPPacketBuffer * udpPacketBuffer = (UDPPacketBuffer *) malloc(sizeof(UDPPacketBuffer));
    632 if (udpPacketBuffer == NULL) {
    633 printf("createUDPPacketBuffer:UDPPacketBuffer malloc failed.\n");
    634 return udpPacketBuffer;
    635 }
    636 /* allocate the buffer */
    637 udpPacketBuffer->buffer = (char *) calloc((size_t)maxPacketSize, sizeof(char));
    638 if (udpPacketBuffer->buffer == NULL) {
    639 printf("createUDPPacketBuffer:UDPPacketBuffer buffer malloc failed.\n");
    640 /* free everything we allocated */
    641 free(udpPacketBuffer);
    642 udpPacketBuffer = NULL;
    643 return udpPacketBuffer;
    644 }
    645 resetUDPPacketBuffer(udpPacketBuffer);
    646 return udpPacketBuffer;
    647}
    648
    649/* Function: freeUDPPacketBuffer =================================================
    650 * Abstract:
    651 * Frees memory associated with the referenced UDPPacketBuffer
    652 */
    653static void freeUDPPacketBuffer(UDPPacketBuffer ** udpPacketBuffer) {
    654 if (*udpPacketBuffer != NULL) {
    655 /* free the buffer */
    656 free((*udpPacketBuffer)->buffer);
    657 (*udpPacketBuffer)->buffer = NULL;
    658 /* free the container */
    659 free(*udpPacketBuffer);
    660 *udpPacketBuffer = NULL;
    661 }
    662}
    663
    664/* Function: resetUDPPacketBuffer =================================================
    665 * Abstract:
    666 * Resets the referenced UDP Packet Buffer so that it is ready to receive fresh data
    667 */
    668static void resetUDPPacketBuffer(UDPPacketBuffer * udpPacketBuffer) {
    669 udpPacketBuffer->dataPtr = udpPacketBuffer->buffer;
    670 udpPacketBuffer->dataAvail = 0;
    671}
    672
    673/* Function: socketDataPending =================================================
    674 * Abstract:
    675 * Returns true, via the 'pending' arg, if data is pending on the comm line.
    676 * Returns false otherwise.
    677 *
    678 * RTIOSTREAM_NO_ERROR is returned on success, RTIOSTREAM_ERROR on failure.
    679 */
    680static int socketDataPending(
    681 const SOCKET sock,
    682 ConnectionData * connection,
    683 int *outPending,
    684 int timeoutSecs)
    685{
    686 int retVal = RTIOSTREAM_NO_ERROR;
    687 int pending;
    688
    689 #ifdef USE_SELECT
    690 /* Variables used with select() on Win32 & VXWorks */
    691 struct timeval tval;
    692 struct timeval * tvalPtr;
    693 fd_set ReadFds;
    694 #else
    695 /* Variables used with poll() on Linux */
    696 struct pollfd PollReadFd[1];
    697 int tvalPoll;
    698 #endif
    699
    700
    701 if (connection->protocol == UDP_PROTOCOL) {
    702 /* first check the UDP buffer */
    703 UDPPacketBuffer * udpPacketBuffer = connection->udpData->recvBuffer;
    704 if (udpPacketBuffer->dataAvail) {
    705 *outPending = 1;
    706 return retVal;
    707 }
    708 }
    709
    710 #ifdef USE_SELECT /* Beginning of block for using select */
    711 FD_ZERO(&ReadFds);
    712
    713 #if defined(_WIN32) && defined(_MSC_VER)
    714 /*temporarily disable warning C4127 caused by using FD_SET*/
    715 #pragma warning(push)
    716 #pragma warning(disable: 4127)
    717 #endif
    718
    719 /* Using fd_set structure ReadFds on Win32/VXWorks */
    720 FD_SET(sock, &ReadFds);
    721
    722 #if defined(_WIN32) && defined(_MSC_VER)
    723 /*enable the warning C4127*/
    724 #pragma warning(pop)
    725 #endif
    726
    727 /* Select() uses a timeval structure for specifying timeout */
    728 switch (timeoutSecs) {
    729 case BLOCKING_RECV_TIMEOUT_NEVER:
    730 /* specify null pointer for blocking */
    731 tvalPtr = NULL;
    732 break;
    733 case BLOCKING_RECV_TIMEOUT_10MS:
    734 /* set up the 10ms time-val */
    735 tval.tv_sec = 0;
    736 tval.tv_usec = 10000;
    737 tvalPtr = &tval;
    738 break;
    739 default:
    740 /* set up the time-val */
    741 tval.tv_sec = timeoutSecs;
    742 tval.tv_usec = 0;
    743 tvalPtr = &tval;
    744 break;
    745 }
    746 #else /* Else block for using select */
    747 /* Poll() uses an int specifying timeout in milliseconds */
    748 switch (timeoutSecs) {
    749 case BLOCKING_RECV_TIMEOUT_NEVER:
    750 /* specify negative value for blocking */
    751 tvalPoll = -1;
    752 break;
    753 case BLOCKING_RECV_TIMEOUT_10MS:
    754 /* set up the 10ms time-val */
    755 tvalPoll = 10;
    756 break;
    757 default:
    758 /* set up the time-val */
    759 tvalPoll = timeoutSecs*1000;
    760 break;
    761 }
    762 #endif /* End of block for using select */
    763
    764
    765 #ifdef USE_SELECT
    766 /* Use select() on Win32 and VxWorks */
    767 /*
    768 * Casting the first arg to int removes warnings on windows 64-bit
    769 * platform. It is safe to cast a SOCKET to an int here because on
    770 * Linux SOCKET is typedef'd to int and on windows the first argument
    771 * to select is ignored (so it doesn't matter what the value is).
    772 */
    773 pending = select((int)(sock + 1), &ReadFds, NULL, NULL, tvalPtr);
    774 #else
    775 /* Use poll() on Linux and Mac to avoid issues with sockets >= FD_SETSIZE */
    776 PollReadFd[0].fd = sock;
    777 PollReadFd[0].events = POLLIN;
    778 pending = poll( PollReadFd, 1, tvalPoll);
    779 #endif
    780
    781 #ifdef USE_SELECT
    782 if (pending == SOCK_ERR)
    783 #else
    784 /* On Linux an extra check of POLLERR flag is needed to detect and report
    785 an error if the other end suddenly crashes. The same flag doesn't seem to be
    786 activated on Mac */
    787 if ((pending == SOCK_ERR) ||
    788 (PollReadFd[0].revents & POLLERR))
    789 #endif
    790 {
    791 retVal = RTIOSTREAM_ERROR;
    792 }
    793
    794 *outPending = (pending==1) && (retVal == RTIOSTREAM_NO_ERROR);
    795 return(retVal);
    796
    797} /* end socketDataPending */
    798
    799/* Function: initialUDPServerRecvfrom =====================================================
    800 * Abstract:
    801 * Reads data from the client via "recvfrom" into the UDP packet buffer.
    802 * The client sockaddr is returned via clientSA and clientSALen.
    803 *
    804 * RTIOSTREAM_NO_ERROR is returned on success, RTIOSTREAM_ERROR is returned on
    805 * failure.
    806 */
    807static int initialUDPServerRecvfrom(ConnectionData * connection,
    808 struct sockaddr * clientSA,
    809 rtiostream_socklen_t * clientSALen) {
    810 int nRead;
    811 int retVal;
    812 UDPPacketBuffer * udpPacketBuffer = connection->udpData->recvBuffer;
    813 /* reset */
    814 resetUDPPacketBuffer(udpPacketBuffer);
    815 /* initialize ahead of call to recvfrom */
    816 *clientSALen = sizeof(*clientSA);
    817 /* read into UDP buffer from the listenSock
    818 * and get sockaddr of the client */
    819 nRead = recvfrom(connection->serverData->listenSock,
    820 udpPacketBuffer->dataPtr,
    821 (size_t)connection->udpData->maxPacketSize,
    822 0U,
    823 clientSA,
    824 clientSALen);
    825
    826 if (nRead == SOCK_ERR) {
    827 retVal = RTIOSTREAM_ERROR;
    828 } else {
    829 /* set dataAvail */
    830 udpPacketBuffer->dataAvail = nRead;
    831 /* handle optional sequence number */
    832 retVal = processUDPRecvSeqNum(connection);
    833 }
    834 return retVal;
    835}
    836
    837/* Function: processUDPRecvSeqNum =====================================================
    838 * Abstract:
    839 * Processes sequence numbers in received UDP datagrams.
    840 *
    841 * RTIOSTREAM_NO_ERROR is returned on success, RTIOSTREAM_ERROR is returned on
    842 * failure.
    843 */
    844static int processUDPRecvSeqNum(ConnectionData * connection) {
    845 int retVal = RTIOSTREAM_NO_ERROR;
    846 if (connection->udpData->isUsingSeqNum) {
    847 UDPPacketBuffer * udpPacketBuffer = connection->udpData->recvBuffer;
    848 /* process sequence number */
    849 udpSeqNum_T recvSeqNum;
    850 if (udpPacketBuffer->dataAvail < UDP_SEQ_NUM_SIZE) {
    851 printf("No receive sequence number found.\n");
    852 retVal = RTIOSTREAM_ERROR;
    853 return retVal;
    854 }
    855 /* read sequence number from the buffer
    856 *
    857 * sequence number is always transmitted / received in
    858 * host Endian */
    859 memcpy(&recvSeqNum,
    860 udpPacketBuffer->dataPtr,
    861 UDP_SEQ_NUM_SIZE);
    862 udpPacketBuffer->dataPtr += UDP_SEQ_NUM_SIZE;
    863 udpPacketBuffer->dataAvail -= UDP_SEQ_NUM_SIZE;
    864 if (connection->verbosity) {
    865 printf("Received UDP packet with sequence number: %u\n", recvSeqNum);
    866 }
    867 if (connection->udpData->resetExpectedRecvSeqNum) {
    868 /* reset the expected sequence number */
    869 connection->udpData->expectedRecvSeqNum = recvSeqNum + 1;
    870 connection->udpData->resetExpectedRecvSeqNum = 0;
    871 }
    872 else {
    873 /* compare with expected receive seq num */
    874 if (recvSeqNum != connection->udpData->expectedRecvSeqNum) {
    875 printf("UDP packet sequence number mismatch. Expected #: %u, Actual #: %u\n",
    876 connection->udpData->expectedRecvSeqNum, recvSeqNum);
    877 retVal = RTIOSTREAM_ERROR;
    878 }
    879 else {
    880 /* increment expected receive seq num */
    881 connection->udpData->expectedRecvSeqNum++;
    882 }
    883 }
    884 }
    885 return retVal;
    886}
    887
    888/* Function: socketDataGet =====================================================
    889 * Abstract:
    890 * Attempts to gets the specified number of bytes from the specified socket.
    891 * The number of bytes read is returned via the 'sizeRecvd' parameter.
    892 * RTIOSTREAM_NO_ERROR is returned on success, RTIOSTREAM_ERROR is returned on
    893 * failure.
    894 *
    895 * NOTES:
    896 * o it is not an error for 'sizeRecvd' to be returned as 0
    897 * o this function blocks if no data is available
    898 */
    899static int socketDataGet(ConnectionData * connection,
    900 char *dst,
    901 const size_t size,
    902 size_t *sizeRecvd)
    903{
    904 int nRead = 0;
    905 int retVal = RTIOSTREAM_NO_ERROR;
    906 /* Ensure size is not out of range for socket API recv function */
    907 int sizeLim = (int) MIN(size, INT_MAX);
    908
    909 if (connection->protocol == TCP_PROTOCOL) {
    910 nRead = recv(connection->sock, dst, (size_t)sizeLim, 0U);
    911 if (nRead == SOCK_ERR) {
    912 retVal = RTIOSTREAM_ERROR;
    913 } else {
    914 retVal = RTIOSTREAM_NO_ERROR;
    915 }
    916 }
    917 else {
    918 UDPPacketBuffer * udpPacketBuffer = connection->udpData->recvBuffer;
    919 /* receive more data in to the buffer if required */
    920 if (udpPacketBuffer->dataAvail == 0) {
    921 /* reset */
    922 resetUDPPacketBuffer(udpPacketBuffer);
    923 /* read into buffer */
    924 nRead = recv(connection->sock,
    925 udpPacketBuffer->dataPtr,
    926 (size_t)connection->udpData->maxPacketSize,
    927 0U);
    928
    929 if (nRead == SOCK_ERR) {
    930 retVal = RTIOSTREAM_ERROR;
    931 } else {
    932 udpPacketBuffer->dataAvail = nRead;
    933 /* handle optional sequence number */
    934 retVal = processUDPRecvSeqNum(connection);
    935 if (retVal == RTIOSTREAM_ERROR) {
    936 return retVal;
    937 }
    938 }
    939 }
    940 /* get data from the buffer */
    941 /* for the special case where we request a */
    942 /* size of 0 bytes, return the whole buffer */
    943 if (udpPacketBuffer->dataAvail) {
    944 if (size == 0) {
    945 nRead = udpPacketBuffer->dataAvail;
    946 } else {
    947 nRead = MIN(udpPacketBuffer->dataAvail, sizeLim);
    948 }
    949 memcpy(dst, (void *) udpPacketBuffer->dataPtr, (size_t)nRead);
    950 udpPacketBuffer->dataAvail -= nRead;
    951 udpPacketBuffer->dataPtr += nRead;
    952 }
    953 }
    954
    955 if (retVal!=RTIOSTREAM_ERROR) {
    956 *sizeRecvd = (size_t) nRead;
    957 }
    958
    959 return retVal;
    960} /* end socketDataGet */
    961
    962
    963/* Function: socketDataSet =====================================================
    964 * Abstract:
    965 * Utility function to send data via the specified socket
    966 */
    967static int socketDataSet(
    968 ConnectionData * connection,
    969 const void *src,
    970 const size_t size,
    971 size_t *sizeSent)
    972{
    973 int nSent;
    974 int retVal = RTIOSTREAM_NO_ERROR;
    975 const void *sendSrc = src;
    976
    977 /* Ensure size is not out of range for socket API send function */
    978 int sizeLim = (int) MIN(size, INT_MAX);
    979
    980 if (connection->protocol == UDP_PROTOCOL) {
    981 /* limit sends according to max packet size */
    982 int maxPacketSize = connection->udpData->maxPacketSize;
    983 if (connection->udpData->isUsingSeqNum) {
    984 int transferAmount;
    985 UDPPacketBuffer * udpPacketBuffer = connection->udpData->sendBuffer;
    986 /* need to apply sequence number and then increment it */
    987 resetUDPPacketBuffer(udpPacketBuffer);
    988 /* set data src */
    989 sendSrc = udpPacketBuffer->dataPtr;
    990 /* add sequence number to the buffer
    991 *
    992 * sequence number is always transmitted / received in
    993 * host Endian */
    994 memcpy(udpPacketBuffer->dataPtr,
    995 &connection->udpData->sendSeqNum,
    996 UDP_SEQ_NUM_SIZE);
    997 udpPacketBuffer->dataPtr += UDP_SEQ_NUM_SIZE;
    998 udpPacketBuffer->dataAvail += UDP_SEQ_NUM_SIZE;
    999 /* copy the data - don't overflow the packet buffer */
    1000 transferAmount = MIN(sizeLim, maxPacketSize - udpPacketBuffer->dataAvail);
    1001 memcpy(udpPacketBuffer->dataPtr,
    1002 src,
    1003 (size_t)transferAmount);
    1004 udpPacketBuffer->dataAvail += transferAmount;
    1005 sizeLim = udpPacketBuffer->dataAvail;
    1006 }
    1007 else {
    1008 sizeLim = MIN(maxPacketSize, sizeLim);
    1009 }
    1010 }
    1011
    1012 nSent = send(connection->sock, (send_buffer_t)sendSrc, (size_t)sizeLim, 0);
    1013 if (nSent == SOCK_ERR) {
    1014 retVal = RTIOSTREAM_ERROR;
    1015 } else {
    1016 if ((connection->protocol == UDP_PROTOCOL) &&
    1017 (connection->udpData->isUsingSeqNum) &&
    1018 (nSent > 0)) {
    1019 if (nSent < (int) UDP_SEQ_NUM_SIZE) {
    1020 /* expected the sequence number to have transmitted */
    1021 retVal = RTIOSTREAM_ERROR;
    1022 return retVal;
    1023 }
    1024 else {
    1025 if (connection->verbosity) {
    1026 printf("Sent UDP packet with sequence number: %u\n", connection->udpData->sendSeqNum);
    1027 }
    1028 /* increment sequence number */
    1029 connection->udpData->sendSeqNum++;
    1030 nSent -= UDP_SEQ_NUM_SIZE;
    1031 }
    1032 }
    1033 *sizeSent = (size_t)nSent;
    1034 }
    1035
    1036 return retVal;
    1037}
    1038
    1039/* Function: serverStreamRecv =================================================
    1040 * Abstract:
    1041 * Send data from the server-side
    1042 */
    1043static int serverStreamRecv(
    1044 ConnectionData * connection,
    1045 void * dst,
    1046 size_t size,
    1047 size_t * sizeRecvd)
    1048{
    1049 int retVal = RTIOSTREAM_NO_ERROR;
    1050 *sizeRecvd = 0;
    1051
    1052 if (connection->sock == INVALID_SOCKET) {
    1053 /* Attempt to open connection */
    1054 serverAcceptSocket(connection);
    1055 }
    1056
    1057 if (connection->sock != INVALID_SOCKET) {
    1058 int pending;
    1059 if (connection->blockingRecvTimeout != BLOCKING_RECV_TIMEOUT_NEVER) {
    1060 /* only call costly "select" if necessary */
    1061 retVal = socketDataPending(connection->sock,
    1062 connection,
    1063 &pending,
    1064 connection->blockingRecvTimeout);
    1065 }
    1066 else {
    1067 /* block in "recv" if necessary */
    1068 pending = 1;
    1069 }
    1070
    1071 if ( (pending !=0) && (retVal==RTIOSTREAM_NO_ERROR) && (size>0) ) {
    1072
    1073 retVal = socketDataGet(connection, (char *)dst, size, sizeRecvd);
    1074
    1075 if (*sizeRecvd == 0) {
    1076
    1077 if (errno == RTIOSTREAM_ECONNRESET) {
    1078 /* If we are closing the connection and we received this
    1079 * error, it means the other side of the connection was
    1080 * already closed. Since we are expecting this, we can
    1081 * ignore this particular error.
    1082 */
    1083 retVal = RTIOSTREAM_NO_ERROR;
    1084 } else {
    1085 /* Connection closed gracefully by client */
    1086 }
    1087
    1088 close(connection->sock);
    1089 connection->sock = INVALID_SOCKET;
    1090 }
    1091 }
    1092
    1093 if ( retVal == RTIOSTREAM_ERROR ) {
    1094 close(connection->sock);
    1095 connection->sock = INVALID_SOCKET;
    1096 }
    1097 }
    1098
    1099 return retVal;
    1100}
    1101
    1102/* Function: serverOpenSocket =================================================
    1103 * Abstract:
    1104 * Opens the listening socket to be used for accepting an incoming connection.
    1105 */
    1106static SOCKET serverOpenSocket(int port, char * serverInfoFile, CommsProtocol protocol, int udpSendBufSize, int udpRecvBufSize)
    1107{
    1108
    1109 struct sockaddr_in serverAddr;
    1110 int sockStatus;
    1111 rtiostream_socklen_t sFdAddSize = (rtiostream_socklen_t) sizeof(struct sockaddr_in);
    1112 SOCKET lFd;
    1113 int option;
    1114
    1115 /*
    1116 * Create a TCP or UDP based socket.
    1117 */
    1118 memset((void *) &serverAddr,0,(size_t)sFdAddSize);
    1119 serverAddr.sin_family = AF_INET;
    1120 serverAddr.sin_port = htons((unsigned short int) port);
    1121 serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    1122
    1123 if (protocol == TCP_PROTOCOL) {
    1124 lFd = socket(AF_INET, SOCK_STREAM, 0);
    1125 }
    1126 else {
    1127 lFd = socket(AF_INET, SOCK_DGRAM, 0);
    1128 }
    1129
    1130 if (lFd == INVALID_SOCKET) {
    1131 printf("socket() call failed.\n");
    1132 } else {
    1133 /*
    1134 * Listening socket should always use the SO_REUSEADDR option
    1135 * ("Unix Network Programming - Networking APIs:Sockets and XTI",
    1136 * Volume 1, 2nd edition, by W. Richard Stevens).
    1137 */
    1138 option = 1;
    1139 sockStatus =
    1140 setsockopt(lFd,SOL_SOCKET,SO_REUSEADDR,(char*)&option,sizeof(option));
    1141 if (sockStatus == SOCK_ERR) {
    1142 printf("setsocketopt() call failed.\n");
    1143 close(lFd);
    1144 lFd = INVALID_SOCKET;
    1145 }
    1146 if (protocol == TCP_PROTOCOL)
    1147 {
    1148 if (lFd != INVALID_SOCKET)
    1149 {
    1150 /* Disable Nagle's Algorithm*/
    1151 option = 1;
    1152 sockStatus =
    1153 setsockopt(lFd,IPPROTO_TCP,TCP_NODELAY,(char*)&option,sizeof(option));
    1154 if (sockStatus == SOCK_ERR) {
    1155 printf("setsocketopt() TCP_NODELAY call failed.\n");
    1156 close(lFd);
    1157 lFd = INVALID_SOCKET;
    1158 }
    1159 }
    1160 }
    1161 if (protocol == UDP_PROTOCOL)
    1162 {
    1163 if (lFd != INVALID_SOCKET)
    1164 {
    1165
    1166 /* increase the UDP socket send size to increase the
    1167 * transfer rate */
    1168 sockStatus =
    1169 setsockopt(lFd, SOL_SOCKET, SO_SNDBUF,(char*)&udpSendBufSize, sizeof(int));
    1170 if (sockStatus == SOCK_ERR) {
    1171 printf("setsocketopt() SO_SNDBUF call failed.\n");
    1172 close(lFd);
    1173 lFd = INVALID_SOCKET;
    1174 }
    1175 }
    1176
    1177 if (lFd != INVALID_SOCKET)
    1178 {
    1179 /* increase the UDP socket receive size to decrease the
    1180 * possibility of buffer overflow */
    1181 sockStatus =
    1182 setsockopt(lFd, SOL_SOCKET, SO_RCVBUF,(char*)&udpRecvBufSize, sizeof(int));
    1183 if (sockStatus == SOCK_ERR) {
    1184 printf("setsocketopt() SO_RCVBUF call failed.\n");
    1185 close(lFd);
    1186 lFd = INVALID_SOCKET;
    1187 }
    1188 }
    1189 }
    1190 }
    1191
    1192 if (lFd != INVALID_SOCKET) {
    1193 sockStatus = bind(lFd, (struct sockaddr *) &serverAddr, sFdAddSize);
    1194 if (sockStatus == SOCK_ERR) {
    1195 printf("bind() call failed: %s\n", strerror(errno));
    1196 close(lFd);
    1197 lFd = INVALID_SOCKET;
    1198 }
    1199 }
    1200
    1201 if (lFd != INVALID_SOCKET) {
    1202 if (port == 0) {
    1203 /* port 0 specifies dynamic free port allocation
    1204 * reuse serverAddr to store the actual address / port */
    1205 sockStatus = getsockname(lFd, (struct sockaddr *) &serverAddr, &sFdAddSize);
    1206 if (sockStatus == SOCK_ERR) {
    1207 fprintf(stderr,"getsockname() call failed: %s\n", strerror(errno));
    1208 close(lFd);
    1209 lFd = INVALID_SOCKET;
    1210 } else {
    1211 if(serverInfoFile != NULL) {
    1212 FILE* fh;
    1213 uint16_T serverPortNo;
    1214 int fprintfErr = 0;
    1215 int fcloseErr = 0;
    1216
    1217 /* Open file in append mode to save info already stored in the file*/
    1218 fh = fopen(serverInfoFile,"a");
    1219#ifdef __LCC64__
    1220 /* This is needed due to an issue with LCC64, see the following geck: g919889 */
    1221 fseek ( fh, 0 , SEEK_END );
    1222#endif
    1223 if (fh == NULL) {
    1224 fprintf(stderr,"Unable to open output file to write server port number: %s\n", strerror(errno));
    1225 lFd = INVALID_SOCKET;
    1226 }
    1227
    1228 serverPortNo = ntohs(serverAddr.sin_port);
    1229 fprintfErr = fprintf(fh, "Server Port Number: %d\n", serverPortNo);
    1230 if (fprintfErr < 0) {
    1231 fprintf(stderr,"Server port number is: %d\nUnable to write server port number to output file: %s\n",
    1232 serverPortNo, strerror(errno));
    1233 lFd = INVALID_SOCKET;
    1234 }
    1235
    1236 fcloseErr = fclose(fh);
    1237 if (fcloseErr == EOF) {
    1238 fprintf(stderr,"Server port number is: %d\nUnable to close output file after writing server port number: %s\n",
    1239 serverPortNo ,strerror(errno));
    1240 lFd = INVALID_SOCKET;
    1241 }
    1242
    1243 } else {
    1244 /* write the server port number to stdout */
    1245 SERVER_PORT_PRINTF("Server Port Number: %d\n", ntohs(serverAddr.sin_port));
    1246 }
    1247 }
    1248 }
    1249 }
    1250 if (protocol == TCP_PROTOCOL) {
    1251 if (lFd != INVALID_SOCKET) {
    1252 sockStatus = listen(lFd, 2);
    1253 if (sockStatus == SOCK_ERR) {
    1254 printf("listen() call failed.\n");
    1255 close(lFd);
    1256 lFd = INVALID_SOCKET;
    1257 }
    1258 }
    1259 }
    1260 return lFd;
    1261}
    1262/* Function: serverAcceptSocket =================================================
    1263 * Abstract:
    1264 * Called when the target is not currently connected to the host, this
    1265 * function attempts to open the connection.
    1266 *
    1267 * In the case of sockets, this is a passive operation in that the host
    1268 * initiates contact, the target simply listens for connection requests.
    1269 *
    1270 * NOTES:
    1271
    1272 * Blocks according to blockingRecvTimeout. When
    1273 * polling, there may be no open requests pending. In this case, this
    1274 * function returns without making a connection; this is not an error.
    1275 */
    1276static void serverAcceptSocket(ConnectionData * connection)
    1277{
    1278 struct sockaddr_in clientAddr;
    1279 rtiostream_socklen_t sFdAddSize = sizeof(struct sockaddr_in);
    1280 SOCKET cFd = INVALID_SOCKET;
    1281 int error = RTIOSTREAM_NO_ERROR;
    1282 int pending;
    1283
    1284 /* Check that the listening socket is still valid and open a new socket if
    1285 * not */
    1286 if (connection->serverData->listenSock == INVALID_SOCKET) {
    1287 connection->serverData->listenSock = serverOpenSocket(connection->serverData->port,
    1288 connection->serverData->serverInfoFile,
    1289 connection->protocol,
    1290 connection->udpSendBufSize, connection->udpRecvBufSize);
    1291 }
    1292
    1293 /* pass listenSock rather than sock */
    1294 error = socketDataPending(connection->serverData->listenSock,
    1295 connection,
    1296 &pending,
    1297 connection->blockingRecvTimeout);
    1298
    1299 if ( (pending > 0) && (error==RTIOSTREAM_NO_ERROR) ) {
    1300 if (connection->protocol == TCP_PROTOCOL) {
    1301 /*
    1302 * Wait to accept a connection on the comm socket.
    1303 */
    1304 cFd = accept(connection->serverData->listenSock,
    1305 (struct sockaddr *)&clientAddr,
    1306 &sFdAddSize);
    1307
    1308 if (cFd == INVALID_SOCKET) {
    1309 printf("accept() for comm socket failed.\n");
    1310 error = RTIOSTREAM_ERROR;
    1311 }
    1312
    1313 if (error == RTIOSTREAM_ERROR) {
    1314 close(connection->serverData->listenSock);
    1315 connection->serverData->listenSock = INVALID_SOCKET;
    1316 }
    1317 }
    1318 else {
    1319 /* UDP - data is pending */
    1320 struct sockaddr clientSA;
    1321 rtiostream_socklen_t clientSALen;
    1322 /* new connection, make sure we reset expectedRecvSeqNum,
    1323 * if sequence numbers are in use */
    1324 connection->udpData->resetExpectedRecvSeqNum = 1;
    1325 /* Do the initial UDP server "recvfrom" to get the
    1326 * client sockaddr. Data read will be placed
    1327 * ready in the UDP packet buffer. */
    1328 error = initialUDPServerRecvfrom(connection, &clientSA, &clientSALen);
    1329 if (error == RTIOSTREAM_ERROR) {
    1330 close(connection->serverData->listenSock);
    1331 connection->serverData->listenSock = INVALID_SOCKET;
    1332 printf("initialUDPServerRecvfrom() failed.\n");
    1333 }
    1334 else {
    1335 /* connect exclusively to the client so we no longer
    1336 * have to use recvfrom / sendto */
    1337 if (connect(connection->serverData->listenSock,
    1338 &clientSA,
    1339 clientSALen) == SOCK_ERR) {
    1340 close(connection->serverData->listenSock);
    1341 connection->serverData->listenSock = INVALID_SOCKET;
    1342 printf("Server connect() failed.\n");
    1343 }
    1344 }
    1345 /* for UDP, the socket and listening socket are the same */
    1346 cFd = connection->serverData->listenSock;
    1347 }
    1348 }
    1349 /* set sock */
    1350 connection->sock = cFd;
    1351}
    1352
    1353
    1354/* Function: nameLookup =======================
    1355 * Lookup target network name.
    1356 */
    1357#if (!defined(VXWORKS))
    1358static unsigned long nameLookup(char * hostName) {
    1359
    1360 struct hostent * hp = NULL;
    1361 struct in_addr * iaddr = NULL;
    1362 unsigned long addr = INADDR_NONE;
    1363
    1364 /*
    1365 * Default to localhost if hostname not specified.
    1366 */
    1367 if (hostName == NULL) {
    1368 static char localhost[] = "localhost";
    1369 hostName = localhost;
    1370 }
    1371
    1372 /*
    1373 * See if the address is an IPV4 dot separated address:
    1374 */
    1375 addr = inet_addr(hostName);
    1376
    1377 if (addr == INADDR_NONE) {
    1378 /* Since the address is not an IPV4 dot separated address,
    1379 * do a name lookup to get this:
    1380 */
    1381 hp = gethostbyname(hostName);
    1382 if (hp == NULL) {
    1383 printf("gethostbyname() call failed.\n");
    1384 addr = INADDR_NONE;
    1385 } else {
    1386 iaddr = (struct in_addr *) hp->h_addr;
    1387 addr = iaddr->s_addr;
    1388 }
    1389 }
    1390 return(addr);
    1391}
    1392#endif
    1393
    1394/* Function: processArgs ====================================================
    1395 * Abstract:
    1396 * Process the arguments specified by the user when opening the rtIOStream.
    1397 *
    1398 * If any unrecognized options are encountered, ignore them.
    1399 *
    1400 * Returns zero if successful or RTIOSTREAM_ERROR if
    1401 * an error occurred.
    1402 *
    1403 * o IMPORTANT!!!
    1404 * As the arguments are processed, their strings should be NULL'd out in
    1405 * the argv array.
    1406 */
    1407static int processArgs(
    1408 const int argc,
    1409 void * argv[],
    1410 char ** hostName,
    1411 unsigned int * portNum,
    1412 unsigned int * isClient,
    1413 int * isBlocking,
    1414 int * recvTimeout,
    1415 char ** serverInfoFile,
    1416 CommsProtocol * protocol,
    1417 int * maxPacketSize,
    1418 VerbosityLevel * verbosity,
    1419 int * isUsingSeqNum,
    1420 int * udpSendBufSize,
    1421 int * udpRecvBufSize)
    1422{
    1423 int retVal = RTIOSTREAM_NO_ERROR;
    1424 int count = 0;
    1425
    1426 while(count < argc) {
    1427 const char *option = (char *)argv[count];
    1428 count++;
    1429
    1430 if (option != NULL) {
    1431
    1432 if ((strcmp(option, "-hostname") == 0) && (count != argc)) {
    1433
    1434 *hostName = (char *)argv[count];
    1435 count++;
    1436 argv[count-2] = NULL;
    1437 argv[count-1] = NULL;
    1438
    1439 } else if ((strcmp(option, "-port") == 0) && (count != argc)) {
    1440 char tmpstr[2];
    1441 int itemsConverted;
    1442 const char *portStr = (char *)argv[count];
    1443
    1444 count++;
    1445
    1446 itemsConverted = sscanf(portStr,"%d%1s", (int *) portNum, tmpstr);
    1447 if ( (itemsConverted != 1) ||
    1448 ( ((*portNum != 0) && (*portNum < 255)) || (*portNum > 65535))
    1449 ) {
    1450
    1451 retVal = RTIOSTREAM_ERROR;
    1452 } else {
    1453
    1454 argv[count-2] = NULL;
    1455 argv[count-1] = NULL;
    1456 }
    1457
    1458 } else if ((strcmp(option, "-client") == 0) && (count != argc)) {
    1459
    1460 *isClient = ( strcmp( (char *)argv[count], "1") == 0 );
    1461
    1462 count++;
    1463 argv[count-2] = NULL;
    1464 argv[count-1] = NULL;
    1465
    1466 } else if ((strcmp(option, "-blocking") == 0) && (count != argc)) {
    1467
    1468 *isBlocking = ( strcmp( (char *)argv[count], "1") == 0 );
    1469
    1470 count++;
    1471 argv[count-2] = NULL;
    1472 argv[count-1] = NULL;
    1473
    1474 } else if ((strcmp(option, "-verbose") == 0) && (count != argc)) {
    1475 int verbosityVal;
    1476 int itemsConverted;
    1477 const char *verbosityStr = (char *)argv[count];
    1478 count++;
    1479 itemsConverted = sscanf(verbosityStr,"%d", &verbosityVal);
    1480
    1481 if ((itemsConverted != 1) || (verbosityVal < 0)) {
    1482 retVal = RTIOSTREAM_ERROR;
    1483 } else {
    1484 *verbosity = (VerbosityLevel) verbosityVal;
    1485 argv[count-2] = NULL;
    1486 argv[count-1] = NULL;
    1487 }
    1488
    1489 } else if ((strcmp(option, "-recv_timeout_secs") == 0) && (count != argc)) {
    1490 char tmpstr[2];
    1491 int itemsConverted;
    1492 const char *timeoutSecsStr = (char *)argv[count];
    1493
    1494 count++;
    1495
    1496 itemsConverted = sscanf(timeoutSecsStr,"%d%1s", (int *) recvTimeout, tmpstr);
    1497 if ( itemsConverted != 1 ) {
    1498 retVal = RTIOSTREAM_ERROR;
    1499 } else {
    1500
    1501 argv[count-2] = NULL;
    1502 argv[count-1] = NULL;
    1503 }
    1504
    1505 } else if((strcmp(option, "-server_info_file") == 0) && (count != argc)) {
    1506 *serverInfoFile= (char *) argv[count];
    1507
    1508 count++;
    1509 argv[count-2] = NULL;
    1510 argv[count-1] = NULL;
    1511 } else if ((strcmp(option, "-protocol") == 0) && (count != argc)) {
    1512 char * protocolStr = (char *) argv[count];
    1513 count++;
    1514 argv[count-2] = NULL;
    1515 argv[count-1] = NULL;
    1516 /* initialize dependent properties */
    1517 *isUsingSeqNum = 0;
    1518 /* process protocolStr */
    1519 if (strcmp(protocolStr, TCP_PROTOCOL_STRING) == 0) {
    1520 *protocol = TCP_PROTOCOL;
    1521 }
    1522 else if (strcmp(protocolStr, UDP_PROTOCOL_STRING) == 0) {
    1523 *protocol = UDP_PROTOCOL;
    1524 }
    1525 else if (strcmp(protocolStr, UDP_PACKET_LOSS_DETECTON_PROTOCOL_STRING) == 0) {
    1526 *protocol = UDP_PROTOCOL;
    1527 /* enable sequence number protocol */
    1528 *isUsingSeqNum = 1;
    1529 }
    1530 else {
    1531 /* unrecognized protocol */
    1532 retVal = RTIOSTREAM_ERROR;
    1533 }
    1534 } else if ((strcmp(option, "-udpmaxpacketsize") == 0) && (count != argc)) {
    1535 char tmpstr[2];
    1536 int itemsConverted;
    1537 const char *maxUPDSizeStr = (char *)argv[count];
    1538
    1539 count++;
    1540
    1541 itemsConverted = sscanf(maxUPDSizeStr,"%d%1s", maxPacketSize, tmpstr);
    1542 if ( itemsConverted != 1 ) {
    1543 retVal = RTIOSTREAM_ERROR;
    1544 } else {
    1545 argv[count-2] = NULL;
    1546 argv[count-1] = NULL;
    1547 }
    1548 }else if ((strcmp(option, "-udpsendbuffersize") == 0) && (count != argc)) {
    1549 char tmpstr[2];
    1550 int itemsConverted;
    1551 const char *udpSendBufSizeStr = (char *)argv[count];
    1552
    1553 count++;
    1554
    1555 itemsConverted = sscanf(udpSendBufSizeStr,"%d%1s", udpSendBufSize, tmpstr);
    1556 if ( itemsConverted != 1 ) {
    1557 retVal = RTIOSTREAM_ERROR;
    1558 } else {
    1559 argv[count-2] = NULL;
    1560 argv[count-1] = NULL;
    1561 }
    1562 }else if ((strcmp(option, "-udpreceivebuffersize") == 0) && (count != argc)) {
    1563 char tmpstr[2];
    1564 int itemsConverted;
    1565 const char *udpRecvBufSizeStr = (char *)argv[count];
    1566
    1567 count++;
    1568
    1569 itemsConverted = sscanf(udpRecvBufSizeStr,"%d%1s", udpRecvBufSize, tmpstr);
    1570 if ( itemsConverted != 1 ) {
    1571 retVal = RTIOSTREAM_ERROR;
    1572 } else {
    1573 argv[count-2] = NULL;
    1574 argv[count-1] = NULL;
    1575 }
    1576 } else {
    1577 /* issue a warning for the unexpected argument: exception
    1578 * is first argument which might be the executable name (
    1579 * SIL/PIL and extmode use-cases). */
    1580 if ((count!=1) || (strncmp(option, "-", 1)==0)) {
    1581 printf("The argument '%s' passed to rtiostream_tcpip is "
    1582 "not valid and will be ignored.\n", option);
    1583 }
    1584 }
    1585 }
    1586 }
    1587 return retVal;
    1588}
    1589
    1590/* Function: clientOpenSocket =================================================
    1591 * Abstract:
    1592 * Open a connection as Client
    1593 */
    1594#if (!defined(VXWORKS))
    1595static SOCKET clientOpenSocket(char * hostName, unsigned int portNum, CommsProtocol protocol, int udpSendBufSize, int udpRecvBufSize) {
    1596
    1597 struct sockaddr_in sa;
    1598 unsigned long addr = INADDR_NONE;
    1599 int errStatus = RTIOSTREAM_NO_ERROR;
    1600 SOCKET cSock = INVALID_SOCKET;
    1601
    1602 addr = nameLookup(hostName);
    1603
    1604 if (addr!=INADDR_NONE) {
    1605
    1606 sa.sin_addr.s_addr = addr;
    1607 sa.sin_family = AF_INET; /*hp->h_addrtype;*/
    1608 sa.sin_port = htons((unsigned short) portNum);
    1609
    1610 /*
    1611 * Create the sockets & make connections.
    1612 */
    1613 if (protocol == TCP_PROTOCOL) {
    1614 cSock = socket(PF_INET,SOCK_STREAM,0);
    1615 }
    1616 else {
    1617 cSock = socket(PF_INET,SOCK_DGRAM,0);
    1618 }
    1619
    1620 if (cSock == INVALID_SOCKET) {
    1621 errStatus = RTIOSTREAM_ERROR;
    1622 printf("socket() call failed for comm socket.\n");
    1623 }
    1624 } else {
    1625 errStatus = RTIOSTREAM_ERROR;
    1626 }
    1627
    1628 if (protocol == UDP_PROTOCOL)
    1629 {
    1630 if (errStatus!=RTIOSTREAM_ERROR)
    1631 {
    1632 /* increase the UDP socket send size to increase the
    1633 * transfer rate */
    1634 int sockStatus =
    1635 setsockopt(cSock, SOL_SOCKET, SO_SNDBUF,(char*)&udpSendBufSize, sizeof(int));
    1636 if (sockStatus == SOCK_ERR) {
    1637 printf("setsocketopt() SO_SNDBUF call failed.\n");
    1638 cSock = INVALID_SOCKET;
    1639 errStatus = RTIOSTREAM_ERROR;
    1640 }
    1641 }
    1642 if (errStatus!=RTIOSTREAM_ERROR)
    1643 {
    1644 /* increase the UDP socket receive size to decrease the
    1645 * possibility of buffer overflow */
    1646 int sockStatus =
    1647 setsockopt(cSock, SOL_SOCKET, SO_RCVBUF,(char*)&udpRecvBufSize, sizeof(int));
    1648 if (sockStatus == SOCK_ERR) {
    1649 printf("setsocketopt() SO_RCVBUF call failed.\n");
    1650 cSock = INVALID_SOCKET;
    1651 errStatus = RTIOSTREAM_ERROR;
    1652 }
    1653 }
    1654 }
    1655
    1656 if (errStatus!=RTIOSTREAM_ERROR) {
    1657 if (connect(cSock, (struct sockaddr *)&sa, sizeof(sa)) == SOCK_ERR) {
    1658 char tmp[1024];
    1659
    1660 sprintf(tmp,
    1661 "Attempting to establish connection with hostname '%s' "
    1662 "through port %d.\n",
    1663 hostName,
    1664 ntohs(sa.sin_port));
    1665 cSock = INVALID_SOCKET;
    1666 printf("%s",tmp);
    1667 }
    1668 }
    1669
    1670 return cSock;
    1671}
    1672#endif
    1673
    1674/* Function: waitForClientClose =============================================
    1675 * Abstract:
    1676 *
    1677 * Allow the client to close its end of the socket connection before the server
    1678 * closes its own socket.
    1679 *
    1680 * The server will receive any outstanding data on the socket. When the server
    1681 * receives 0 bytes, it indicates that it has acknowledged that the client
    1682 * is closing its socket (this is essential for the client to complete
    1683 * closing its socket without error) or that it timed out waiting for the client to
    1684 * close its socket.
    1685 *
    1686 */
    1687static int waitForClientClose(ConnectionData * connection) {
    1688 int retVal = RTIOSTREAM_NO_ERROR;
    1689#define TMP_BUF_SIZE (40)
    1690 char * tmpBuf[TMP_BUF_SIZE];
    1691 size_t numRecvd;
    1692 /* cache the original blockingRecvTimeout */
    1693 int savedBlockingRecvTimeout = connection->blockingRecvTimeout;
    1694 /* wait time for client to close its socket */
    1695 connection->blockingRecvTimeout = BLOCKING_RECV_TIMEOUT_SOCK_SHUTDOWN;
    1696 do {
    1697 retVal = serverStreamRecv(connection, (void *) tmpBuf, TMP_BUF_SIZE, &numRecvd);
    1698 } while ((numRecvd > 0) && (retVal == RTIOSTREAM_NO_ERROR));
    1699 /* restore blockingRecvTimeout */
    1700 connection->blockingRecvTimeout = savedBlockingRecvTimeout;
    1701#undef TMP_BUF_SIZE
    1702 return retVal;
    1703}
    1704
    1705/***************** VISIBLE FUNCTIONS ******************************************/
    1706
    1707/* Function: rtIOStreamOpen =================================================
    1708 * Abstract:
    1709 * Open the connection with the target.
    1710 */
    1711int rtIOStreamOpen(int argc, void * argv[])
    1712{
    1713 char *xHostName = NULL; /* default */
    1714 char *serverInfoFile = NULL; /* default */
    1715 unsigned int xPortNum = (SERVER_PORT_NUM); /* default */
    1716 unsigned int isClient = 0; /* default */
    1717 CommsProtocol protocol = DEFAULT_PROTOCOL;
    1718 int isBlockingRecv = EXT_BLOCKING; /* default */
    1719 int blockingRecvTimeout = DEFAULT_BLOCKING_RECV_TIMEOUT; /* rogue value */
    1720 int maxPacketSize = DEFAULT_MAX_UDP_PACKET_SIZE;
    1721 VerbosityLevel verbosity = DEFAULT_VERBOSITY;
    1722 int isUsingSeqNum = DEFAULT_IS_USING_SEQ_NUM;
    1723 int udpSendBufSize = DEFAULT_UDP_SOCKET_SEND_SIZE_REQUEST;
    1724 int udpRecvBufSize = DEFAULT_UDP_SOCKET_RECEIVE_SIZE_REQUEST;
    1725 int result = RTIOSTREAM_NO_ERROR;
    1726 int streamID;
    1727 SOCKET sock = INVALID_SOCKET;
    1728
    1729 /* determine the streamID for this new connection */
    1730 streamID = getConnectionID();
    1731 if (streamID == RTIOSTREAM_ERROR) {
    1732 result = RTIOSTREAM_ERROR;
    1733 return result;
    1734 }
    1735
    1736 result = processArgs(argc, argv,
    1737 &xHostName,
    1738 &xPortNum,
    1739 &isClient,
    1740 &isBlockingRecv,
    1741 &blockingRecvTimeout,
    1742 &serverInfoFile,
    1743 &protocol,
    1744 &maxPacketSize,
    1745 &verbosity,
    1746 &isUsingSeqNum,
    1747 &udpSendBufSize,
    1748 &udpRecvBufSize);
    1749
    1750 if (result == RTIOSTREAM_ERROR) {
    1751 return result;
    1752 }
    1753
    1754 if (verbosity) {
    1755 printf("rtIOStreamOpen\n");
    1756 }
    1757
    1758 if (isBlockingRecv) {
    1759 /* blocking: if blockingRecvTimeout has not been set, initialize to the client or
    1760 * server specific default */
    1761 if ((blockingRecvTimeout == DEFAULT_BLOCKING_RECV_TIMEOUT) ||
    1762 (blockingRecvTimeout < BLOCKING_RECV_TIMEOUT_10MS)) {
    1763 if (isClient) {
    1764 blockingRecvTimeout = DEFAULT_BLOCKING_RECV_TIMEOUT_SECS_CLIENT;
    1765 }
    1766 else {
    1767 blockingRecvTimeout = DEFAULT_BLOCKING_RECV_TIMEOUT_SECS_SERVER;
    1768 }
    1769 }
    1770 }
    1771 else {
    1772 /* not blocking: set the timeout to return immediately */
    1773 blockingRecvTimeout = BLOCKING_RECV_TIMEOUT_NOWAIT;
    1774 }
    1775
    1776#ifdef VXWORKS /* UDP is not supported on VxWorks */
    1777 if (protocol == UDP_PROTOCOL) {
    1778 result = RTIOSTREAM_ERROR;
    1779 return result;
    1780 }
    1781#endif
    1782
    1783#ifdef _WIN32
    1784 {
    1785 WSADATA data;
    1786 if (WSAStartup((MAKEWORD(1,1)), &data)) {
    1787 result = RTIOSTREAM_ERROR;
    1788 printf("WSAStartup() call failed.\n");
    1789 }
    1790 }
    1791#endif
    1792
    1793 if (result != RTIOSTREAM_ERROR) { /* polyspace DEFECT:USELESS_IF [Not a defect:Unset] "Needed for Windows" */
    1794 if (isClient == 1) {
    1795#if (!defined(VXWORKS)) /* Client side connection not supported on VxWorks */
    1796 sock = clientOpenSocket(xHostName, xPortNum, protocol,udpSendBufSize,udpRecvBufSize);
    1797 if (sock == INVALID_SOCKET) {
    1798 result = RTIOSTREAM_ERROR;
    1799 }
    1800#endif
    1801 } else {
    1802 sock = serverOpenSocket((int)xPortNum, serverInfoFile, protocol,udpSendBufSize,udpRecvBufSize);
    1803 if (sock == INVALID_SOCKET) {
    1804 result = RTIOSTREAM_ERROR;
    1805 }
    1806 }
    1807 }
    1808
    1809 if (result != RTIOSTREAM_ERROR) {
    1810 int isServer;
    1811 if (isClient == 1) {
    1812 isServer = 0;
    1813 }
    1814 else {
    1815 isServer = 1;
    1816 }
    1817 result = initConnectionData(streamID,
    1818 isServer,
    1819 protocol,
    1820 sock,
    1821 blockingRecvTimeout,
    1822 maxPacketSize,
    1823 (int)xPortNum,
    1824 serverInfoFile,
    1825 verbosity,
    1826 isUsingSeqNum,
    1827 udpSendBufSize,
    1828 udpRecvBufSize);
    1829 }
    1830
    1831 if (result != RTIOSTREAM_ERROR) {
    1832 result = streamID;
    1833 }
    1834 else {
    1835 if (sock != INVALID_SOCKET) {
    1836 /* cleanup */
    1837 close(sock);
    1838 }
    1839 }
    1840 return result;
    1841}
    1842
    1843/* Function: rtIOStreamSend =====================================================
    1844 * Abstract:
    1845 * Sends the specified number of bytes on the comm line. Returns the number of
    1846 * bytes sent (if successful) or a negative value if an error occurred. As long
    1847 * as an error does not occur, this function is guaranteed to set the requested
    1848 * number of bytes; the function blocks if tcpip's send buffer doesn't have
    1849 * room for all of the data to be sent
    1850 */
    1851int rtIOStreamSend(
    1852 int streamID,
    1853 const void *src,
    1854 size_t size,
    1855 size_t *sizeSent)
    1856{
    1857 int retVal = RTIOSTREAM_NO_ERROR;
    1858 ConnectionData * connection = getConnectionData(streamID);
    1859 *sizeSent = 0;
    1860
    1861 if (connection == NULL) {
    1862 retVal = RTIOSTREAM_ERROR;
    1863 return retVal;
    1864 }
    1865
    1866 if (connection->isServer) {
    1867 if (connection->sock == INVALID_SOCKET) {
    1868 serverAcceptSocket(connection);
    1869 }
    1870
    1871 if (connection->sock != INVALID_SOCKET) {
    1872#ifndef VXWORKS
    1873 retVal = socketDataSet(connection, src, size, sizeSent);
    1874#else
    1875 /*
    1876 * VXWORKS send prototype does not have src as const. This suppresses
    1877 * the compiler warning.
    1878 */
    1879
    1880 retVal = socketDataSet(connection, (char *)src, size, sizeSent);
    1881#endif
    1882 }
    1883 } else { /* Client stream */
    1884 retVal = socketDataSet(connection, src, size, sizeSent);
    1885 }
    1886
    1887 if (connection->verbosity) {
    1888 if ((*sizeSent > 0) || (connection->verbosity >= VERBOSITY_LEVEL_2)) {
    1889 size_t currElement;
    1890 printf("rtIOStreamSend (connection id %d): size = %lu, sizeSent = %lu: ",
    1891 streamID,
    1892 (unsigned long) size,
    1893 (unsigned long) *sizeSent);
    1894
    1895 for (currElement = 0; currElement < *sizeSent; currElement++) {
    1896 printf("%02x ", ((const unsigned char *) src)[currElement]);
    1897 }
    1898 printf("\n");
    1899 }
    1900 }
    1901
    1902 return retVal;
    1903}
    1904
    1905
    1906/* Function: rtIOStreamRecv ================================================
    1907 * Abstract: receive data
    1908 *
    1909 */
    1910int rtIOStreamRecv(
    1911 int streamID,
    1912 void * dst,
    1913 size_t size,
    1914 size_t * sizeRecvd)
    1915{
    1916 int retVal = RTIOSTREAM_NO_ERROR;
    1917 ConnectionData * connection = getConnectionData(streamID);
    1918
    1919 *sizeRecvd = 0;
    1920
    1921 if (connection == NULL) {
    1922 retVal = RTIOSTREAM_ERROR;
    1923 return retVal;
    1924 }
    1925
    1926 if (connection->isServer) {
    1927 retVal = serverStreamRecv(connection, dst, size, sizeRecvd);
    1928 } else { /* Client stream */
    1929 int pending;
    1930 if (connection->blockingRecvTimeout != BLOCKING_RECV_TIMEOUT_NEVER) {
    1931 /* only call costly "select" if necessary */
    1932 retVal = socketDataPending(connection->sock,
    1933 connection,
    1934 &pending,
    1935 connection->blockingRecvTimeout);
    1936 }
    1937 else {
    1938 /* block in "recv" if necessary */
    1939 pending = 1;
    1940 }
    1941 if (pending && (size>0)) {
    1942 retVal = socketDataGet(connection, (char *)dst, size, sizeRecvd);
    1943 }
    1944 }
    1945
    1946 if (connection->verbosity) {
    1947 if ((*sizeRecvd > 0 ) || (connection->verbosity >= VERBOSITY_LEVEL_2)) {
    1948 size_t currElement;
    1949 printf("rtIOStreamRecv (connection id %d): size = %lu, sizeRecvd = %lu: ",
    1950 streamID,
    1951 (unsigned long) size,
    1952 (unsigned long) *sizeRecvd);
    1953
    1954 for (currElement = 0; currElement < *sizeRecvd; currElement++) {
    1955 printf("%02x ", ((const unsigned char *) dst)[currElement]);
    1956 }
    1957 printf("\n");
    1958 }
    1959 }
    1960
    1961 return retVal;
    1962}
    1963
    1964/* Function: rtIOStreamClose ================================================
    1965 * Abstract: close the connection.
    1966 *
    1967 */
    1968int rtIOStreamClose(int streamID)
    1969{
    1970 int retVal = RTIOSTREAM_NO_ERROR;
    1971 ConnectionData * connection = getConnectionData(streamID);
    1972 if (connection == NULL) {
    1973 retVal = RTIOSTREAM_ERROR;
    1974 return retVal;
    1975 }
    1976
    1977 if (connection->verbosity) {
    1978 printf("rtIOStreamClose (connection id %d)\n", streamID);
    1979 }
    1980
    1981 if (connection->isServer) {
    1982 /* Only if the client actually made a connection */
    1983 if (connection->sock != INVALID_SOCKET) {
    1984 if (connection->protocol == TCP_PROTOCOL) {
    1985 /* graceful shutdown */
    1986 retVal = waitForClientClose(connection);
    1987 }
    1988
    1989 /* close the socket */
    1990 close(connection->sock);
    1991 connection->sock = INVALID_SOCKET;
    1992 }
    1993 if (connection->protocol == TCP_PROTOCOL) {
    1994 /* TCP: additionally close the listening socket
    1995 *
    1996 * for UDP, sock and listenSock are the same
    1997 * socket - avoid closing it twice */
    1998 close(connection->serverData->listenSock);
    1999 }
    2000 /* set to INVALID_SOCKET for all protocol types */
    2001 connection->serverData->listenSock = INVALID_SOCKET;
    2002 } else {
    2003 SOCKET cSock = connection->sock;
    2004 close(cSock);
    2005
    2006 }
    2007 freeConnectionData(connection);
    2008 return retVal;
    2009}
    2010
    2011
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_c.html new file mode 100644 index 0000000..4bb2667 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_c.html @@ -0,0 +1,224 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2012-2013 The MathWorks, Inc. */
    2
    3#include "rtiostream_utils.h"
    4
    5/* include rtIOStream interface to use */
    6#include "rtiostream.h"
    7
    8/* TARGET_CONNECTIVITY_TESTING might be defined by some MathWorks tests for
    9 * testing purposes only. In this case, we force SIZE_MAX to be 4 so we
    10 * could test the pointer arithmetic in rtIOStreamBlockingSend and
    11 * rtIOStreamBlockingRecv.
    12 */
    13#ifdef TARGET_CONNECTIVITY_TESTING
    14 #define SIZE_MAX 4
    15#else
    16 /* define SIZE_MAX if not already defined (e.g. by a C99 compiler) */
    17 #ifndef SIZE_MAX
    18 #define SIZE_MAX ((size_t)-1)
    19 #endif
    20#endif
    21
    22#ifndef MemUnit_T
    23 /* External Mode */
    24 typedef unsigned char IOUnit_T;
    25#else
    26 /* SIL/PIL */
    27 #ifdef HOST_WORD_ADDRESSABLE_TESTING
    28 /* rtIOStream will handle data in single byte chunks
    29 *
    30 * uint8_T can be > 8-bits for certain portable word sizes
    31 * cases (e.g. C2000) so use native type instead */
    32 typedef unsigned char IOUnit_T;
    33 #else
    34 /* rtIOStream will handle data in MemUnit_T size chunks */
    35 typedef MemUnit_T IOUnit_T;
    36 #endif
    37#endif
    38
    39/* Blocks until all requested outgoing data is sent */
    40int rtIOStreamBlockingSend(const int streamID,
    41 const void * const src,
    42 uint32_T size) {
    43
    44 size_t transferAmount;
    45 size_t sizeSent;
    46 int errorCode = RTIOSTREAM_NO_ERROR;
    47 const IOUnit_T * srcPtr = (const IOUnit_T *) src;
    48
    49 /* use a variable to avoid SIZE_MAX being treated as a constant
    50 * which leads to compiler warnings for "MIN" on platforms where
    51 * SIZE_MAX > UINT32_MAX */
    52 size_t sizeMax = SIZE_MAX;
    53 while (size > 0) {
    54 /* support full uint32 size */
    55 transferAmount = (size_t) MIN(sizeMax, size);
    56 errorCode = rtIOStreamSend(streamID,
    57 (const void *) srcPtr,
    58 transferAmount,
    59 &sizeSent);
    60 if (errorCode == RTIOSTREAM_ERROR) {
    61 return errorCode;
    62 }
    63 else {
    64 size -= (uint32_T) sizeSent;
    65 srcPtr += sizeSent;
    66 }
    67 }
    68 return errorCode;
    69}
    70
    71/* Blocks until all requested incoming data is received */
    72int rtIOStreamBlockingRecv(const int streamID,
    73 void * const dst,
    74 uint32_T size) {
    75
    76 size_t transferAmount;
    77 size_t sizeRecvd;
    78 int errorCode = RTIOSTREAM_NO_ERROR;
    79 IOUnit_T * dstPtr = (IOUnit_T *) dst;
    80
    81 /* use a variable to avoid SIZE_MAX being treated as a constant
    82 * which leads to compiler warnings for "MIN" on platforms where
    83 * SIZE_MAX > UINT32_MAX */
    84 size_t sizeMax = SIZE_MAX;
    85 while (size > 0) {
    86 /* support full uint32 size */
    87 transferAmount = (size_t) MIN(sizeMax, size);
    88 errorCode = rtIOStreamRecv(streamID,
    89 (void *) dstPtr,
    90 transferAmount,
    91 &sizeRecvd);
    92 if (errorCode == RTIOSTREAM_ERROR) {
    93 return errorCode;
    94 }
    95 else {
    96 size -= (uint32_T) sizeRecvd;
    97 dstPtr += sizeRecvd;
    98 }
    99 }
    100 return errorCode;
    101}
    102
    103
    104
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_h.html new file mode 100644 index 0000000..01b903a --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtiostream_utils_h.html @@ -0,0 +1,88 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2012 The MathWorks, Inc. */
    2
    3#ifndef _RTIOSTREAM_UTILS_H_
    4#define _RTIOSTREAM_UTILS_H_
    5
    6
    7#ifdef __cplusplus
    8extern "C" {
    9#endif
    10
    11/* Target-side rtIOStream utility APIs */
    12
    13#include "rtwtypes.h" /* include definition of uint32_T */
    14#include <stddef.h> /* include definition of size_t */
    15
    16/* MIN utility */
    17#ifndef MIN
    18#define MIN(a,b) ((a) < (b) ? (a) : (b))
    19#endif
    20
    21/* Blocks until all requested outgoing data is sent. */
    22extern int rtIOStreamBlockingSend(const int streamID,
    23 const void * const src,
    24 uint32_T size);
    25
    26/* Blocks until all requested incoming data is received. */
    27extern int rtIOStreamBlockingRecv(const int streamID,
    28 void * const dst,
    29 uint32_T size);
    30
    31#ifdef __cplusplus
    32}
    33#endif /* __cplusplus */
    34
    35#endif /* _RTIOSTREAM_UTILS_H_ */
    36
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwhilite.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwhilite.js new file mode 100644 index 0000000..bb368a1 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwhilite.js @@ -0,0 +1,2081 @@ +// Copyright 2006-2019 The MathWorks, Inc. + +// Class RTW_Hash ------------------------------------------------------------ +// Internal web browser doesn't change window.location.hash if the link points +// to the same page. +// RTW_Hash remembers the hash value when the page is loaded in the first time +// or a link is clicked. +// removeHiliteByHash cleans the high lighted elements according to the stored +// hash value +function RTW_Hash(aHash) { + if (aHash == null) { + this.fHash = ""; + } else { + this.fHash = aHash; + }; + + this.getHash = function() { + return this.fHash; + } + + this.setHash = function(aHash) { + this.fHash = aHash; + } +} + +RTW_Hash.instance = null; + +// Class RTW_TraceInfo -------------------------------------------------------- +function RTW_TraceInfo(aFileLinks) { + this.fFileLinks = aFileLinks; + this.fLines = new Array(); + this.fTotalLines = 0; // total number of highlighted lines + this.fNumLines = new Array(); + this.fFileIdxCache = new Array(); + this.fDisablePanel = false; + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + this.fCurrCodeNode = null; + this.getHtmlFileName = function(aIndex) { + if (aIndex < this.fFileLinks.length) { + var href = this.fFileLinks[aIndex].href; + return href.substring(href.lastIndexOf('/')+1); + } + } + this.getSrcFileName = function(aIndex) { + var name = this.getHtmlFileName(aIndex); + if (name) + name = RTW_TraceInfo.toSrcFileName(name); + return name; + } + this.getNumFileLinks = function() { + return this.fFileLinks.length; + } + this.setFileLinkColor = function(aIndex, aColor) { + var link = this.fFileLinks[aIndex]; + if (link && link.parentNode && link.parentNode.style) + link.parentNode.style.backgroundColor = aColor; + } + this.highlightFileLink = function(aIndex, aColor) { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, i == aIndex ? aColor : ""); + } + } + this.highlightCurrFileLink = function(aColor) { + this.highlightFileLink(this.fCurrFileIdx); + } + this.highlightLines = function(aCodeNode,aColor) { + this.fCurrCodeNode = aCodeNode; + var lines = this.fLines[this.getHtmlFileName(this.fCurrFileIdx)]; + if (lines && aCodeNode) { + for (var i = 0; i < lines.length; ++i) { + var lineObj = aCodeNode.childNodes[lines[i]-1]; + if (lineObj) + lineObj.style.backgroundColor=aColor; + } + } + } + this.getFileIdx = function(aFile) { + if (this.fFileIdxCache[aFile] != null) + return this.fFileIdxCache[aFile]; + for (var i = 0; i < this.fFileLinks.length; ++i) { + if (this.getHtmlFileName(i) == aFile) { + this.fFileIdxCache[aFile] = i; + return i; + } + } + return null; + } + this.getCurrFileIdx = function() { return this.fCurrFileIdx; } + this.setNumHighlightedLines = function(aFileIdx, aNumLines) { + this.fNumLines[aFileIdx] = aNumLines; + updateNumHighlightedLines(this.fFileLinks[aFileIdx], aNumLines); + } + this.getNumLines = function(aFileIdx) { + return this.fNumLines[aFileIdx] != null ? this.fNumLines[aFileIdx] : 0; + } + this.getNumLinesAll = function() { + var sum = 0; + var len = this.fNumLines.length; + for (var i = 0; i < len; ++i) { + sum += this.getNumLines(i); + } + return sum; + } + this.getPrevButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonPrev"); + else + return document.getElementById("rtwIdButtonPrev"); + } + this.getNextButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonNext"); + else + return document.getElementById("rtwIdButtonNext"); + } + this.getPanel = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdTracePanel"); + else + return document.getElementById("rtwIdTracePanel"); + } + this.removeHighlighting = function() { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, ""); + this.setNumHighlightedLines(i, 0); + } + // remove highlight and reset current code node + try { + if (this.fCurrCodeNode != null) + this.highlightLines(getCodeNode(),""); + } catch (e) {}; + this.fCurrCodeNode = null; + if (this.getPrevButton()) { this.getPrevButton().disabled = true; } + if (this.getNextButton()) { this.getNextButton().disabled = true; } + if (this.getPanel()) { this.getPanel().style.display = "none"; } + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + } + this.setCurrLineIdx = function(aLineIdx) { + this.fCurrLineIdx = aLineIdx; + } + this.getCurrLineIdx = function() { return this.fCurrLineIdx; } + this.setCurrent = function(aFileIdx, aLineIdx) { + this.fCurrFileIdx = aFileIdx; + var numLines = this.getNumLines(aFileIdx); + if (!numLines || aLineIdx >= numLines) + this.fCurrLineIdx = -1; + else + this.fCurrLineIdx = aLineIdx; + var allNumLines = this.getNumLinesAll(); + if (this.getPrevButton()) { + this.getPrevButton().disabled = (allNumLines <= 1 || !this.hasPrev()); + } + if (this.getNextButton()) { + this.getNextButton().disabled = (allNumLines <= 1 || !this.hasNext()); + } + if (this.getPanel() && !this.fDisablePanel) { + this.getPanel().style.display = 'block'; + } + } + this.setDisablePanel = function(aDisable) { + this.fDisablePanel = aDisable; + } + this.getPrevFileIdx = function() { + if (this.fCurrLineIdx > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx - 1; i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + // update the navigation bar state + this.updateNavState = function() { + if (this.getPrevButton()) + this.getPrevButton().disabled = !this.hasPrev(); + if (this.getNextButton()) + this.getNextButton().disabled = !this.hasNext(); + setTraceNumber(); + } + this.hasPrev = function() { + return this.getPrevFileIdx() != null; + } + this.getFirstFileIdx = function() { + for (var i = 0; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + } + this.getLastFileIdx = function() { + for (var i = this.getNumFileLinks(); i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + } + this.goFirst = function() { + this.fCurrFileIdx = this.getFirstFileIdx(); + this.fCurrLineIdx = 0; + this.updateNavState(); + } + this.goLast = function() { + this.fCurrFileIdx = this.getLastFileIdx();; + this.fCurrLineIdx = this.getNumLines(this.fCurrFileIdx) - 1; + this.updateNavState(); + } + this.goPrev = function() { + var fileIdx = this.getPrevFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + --this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = this.getNumLines(fileIdx) - 1; + } + this.updateNavState(); + } + this.getNextFileIdx = function() { + if (this.fCurrLineIdx < this.getNumLines(this.fCurrFileIdx) - 1 && this.getNumLines(this.fCurrFileIdx) > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx + 1; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + this.hasNext = function() { + return this.getNextFileIdx() != null; + } + this.goNext = function() { + var fileIdx = this.getNextFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + ++this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = 0; + } + this.updateNavState(); + } + this.setTotalLines = function(num) { + this.fTotalLines = num; + } + this.getTotalLines = function() { return this.fTotalLines;} + this.setLines = function(aFile, aLines) { + this.fLines[aFile] = aLines; + var index = this.getFileIdx(aFile); + if (index != null) + this.setNumHighlightedLines(index,aLines.length); + } + this.getLines = function(aFile) { + return this.fLines[aFile]; + } + // get current on focus line number + this.getCurrLine = function() { + var file = this.getHtmlFileName(this.getCurrFileIdx()); + var lines = this.fLines[file]; + var line = null; + if (lines) { + var line = lines[this.fCurrLineIdx]; + } + return line; + } + this.getHRef = function(aFileIdx, aLineIdx, offset) { + var file = this.getHtmlFileName(aFileIdx); + var lines = this.fLines[file]; + if (lines) { + var line = lines[aLineIdx]; + line = offset_line(line, offset); + file = file+"#"+line; + } + return file; + } + + this.getCurrentHRef = function(offset) { + return this.getHRef(this.fCurrFileIdx, this.fCurrLineIdx, offset); + } + this.setInitLocation = function(aFile, aLine) { + var fileIdx = this.getFileIdx(aFile); + var lineIdx = null; + if (fileIdx != null && aLine) { + var lines = this.getLines(aFile); + for (var i = 0; i < lines.length; ++i) { + if (lines[i] == aLine) { + lineIdx = i; + break; + } + } + } + if (fileIdx == null || lineIdx == null) + this.setCurrent(-1,-1); + else + this.setCurrent(fileIdx,lineIdx); + } +} + +// Static methods in RTW_TraceInfo + +RTW_TraceInfo.getFileLinks = function(docObj) { + var links; + if (docObj && docObj.getElementsByName) + links = docObj.getElementsByName("rtwIdGenFileLinks"); + return links ? links : new Array(); +} + +RTW_TraceInfo.toSrcFileName = function(aHtmlFileName) { + aHtmlFileName = aHtmlFileName.replace(/_c.html$/,".c"); + aHtmlFileName = aHtmlFileName.replace(/_h.html$/,".h"); + aHtmlFileName = aHtmlFileName.replace(/_cpp.html$/,".cpp"); + aHtmlFileName = aHtmlFileName.replace(/_hpp.html$/,".hpp"); + aHtmlFileName = aHtmlFileName.replace(/_cc.html$/,".hpp"); + return aHtmlFileName; +} + +RTW_TraceInfo.instance = null; + +// Class RTW_TraceArgs -------------------------------------------------------- +// file.c:10,20,30&file.h:10,20,30[&color=value] or +// sid=model:1[&color=value] +RTW_TraceArgs = function(aHash) { + this.fColor = null; + this.fFontSize = null; + this.fInitFile = null; + this.fInitLine = null; + this.fSID = null; + this.fFiles = new Array(); + this.fLines = new Array(); + this.fMessage = null; + this.fBlock = null; + this.fNumBlocks = 0; + this.fUseExternalBrowser = true; + this.fInStudio = false; + this.fModel2CodeSrc = null; + this.fInCodeTrace = false; + this.fTraceData = null; + this.fFileIdx = []; // filename to fileId + this.fRows = []; // highlighted rows indexed by fileId + this.fIDs = []; // highlighted IDs indexed by fileId + + this.hasSid = function() { + return !(this.fSID == null); + } + this.parseCommand = function(aHash) { + var args = new Array(); + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf('='); + if (sep != -1) { + var cmd = arg.substring(0,sep); + var opt = arg.substring(sep+1); + switch (cmd.toLowerCase()) { + case "color": + this.fColor = opt; + break; + case "fontsize": + this.fFontSize = opt; + break; + case "initfile": + this.fInitFile = RTW_TraceArgs.toHtmlFileName(opt); + break; + case "initline": + this.fInitLine = opt; + break; + case "msg": + this.fMessage = opt; + break; + case "block": + this.fBlock = unescape(opt); + break; + case "numblocks": + this.fNumBlocks = parseInt(opt); + break; + case "sid": + this.fSID = opt; + // convert sid to code location + break; + case "model2code_src": + // model2code_src from model or webview + this.fModel2CodeSrc = opt; + break; + case "useexternalbrowser": + this.fUseExternalBrowser = (opt=="true"); + break; + case "instudio": + this.fInStudio = (opt=="true"); + break; + case "incodetrace": + this.fInCodeTrace = (opt=="true"); + break; + case "tracedata": + this.fTraceData = decodeURI(opt); + break; + } + } + } + } + this.parseUrlHash = function(aHash) { + var rows, sep, assignSep; + if (aHash) { + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf(':'); + assignSep = arg.indexOf('='); + if (sep !== -1 && assignSep === -1) { + var fileLines = arg.split(':'); + var htmlFileName = RTW_TraceArgs.toHtmlFileName(fileLines[0]); + this.fFileIdx[htmlFileName] = i; + this.fFiles.push(htmlFileName); + if (fileLines[1]) { + rows = fileLines[1].split(','); + rows = uniqueRows(rows); + this.fLines.push(rows); + this.fRows[i] = rows; + } + } + } + if (this.fInitFile == null && this.fFiles.length > 0) { + this.fInitFile = this.fFiles[0]; + this.fInitLine = (this.fLines[0] == null ? -1 : this.fLines[0][0]); + } + } + } + this.parseUrlHash2 = function(aHash) { + aHash = decodeURI(aHash); + var rows; + var ids; + if (aHash && aHash.length > 0 && aHash[0] === "[") { + var input = eval(aHash); + var i; + var j; + // set highlight files from url + for (i=0; i 0 + && top.rtwreport_document_frame.location.href !== "about:blank" && forceReload !== true) { + updateHyperlinks(); + return; + } + + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; + + // redirect the page based on the url + var initPage = null; + if (RTW_TraceArgs.instance.getNumFiles()) { + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + RTW_TraceInfo.instance.removeHighlighting() + var numFiles = RTW_TraceArgs.instance.getNumFiles(); + var tLines = 0; + for (var i = 0; i < numFiles; ++i) { + RTW_TraceInfo.instance.setLines(RTW_TraceArgs.instance.getFile(i),RTW_TraceArgs.instance.getLines(i)); + tLines += RTW_TraceArgs.instance.getLines(i).length; + } + RTW_TraceInfo.instance.setTotalLines(tLines); + if (aPanel == false) { + RTW_TraceInfo.instance.setDisablePanel(true); + } + var initFile = RTW_TraceArgs.instance.getInitFile(); + RTW_TraceInfo.instance.setInitLocation(initFile,RTW_TraceArgs.instance.getInitLine()); + if (!hasInCodeTrace()) { + initPage = RTW_TraceInfo.instance.getCurrentHRef(); + } else { + initPage = initFile; + } + } else { + // catch error that document frame is in another domain + try { + var fileDocObj = top.rtwreport_document_frame.document; + if (fileDocObj.location && (!fileDocObj.location.href || fileDocObj.location.href == "about:blank")) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + var tracePage = tocDocObj.getElementById("rtwIdTraceability"); + if (summaryPage) { + initPage = summaryPage.href; + } else if (tracePage) { + initPage = tracePage; + } + } + } catch(e) {}; + } + if (RTW_TraceArgs.instance && RTW_TraceArgs.instance.fMessage) { + // display diagnostic message + var linkId = "rtwIdMsgFileLink"; + var msgFile = tocDocObj.getElementById(linkId); + if (msgFile && msgFile.style) { + msgFile.style.display = "block"; + // Highlight the background of msg link + tocHiliteById(linkId); + } + initPage = "rtwmsg.html"; + } + if (initPage) { + var is_same_page = false; + try { + var fileDocObj = top.rtwreport_document_frame.document; + is_same_page = isSamePage(fileDocObj.location.href, initPage); + } catch(e) {}; + if (document.getElementById("rtwreport_document_frame")) { + document.getElementById("rtwreport_document_frame").setAttribute("src", initPage); + } else { + top.rtwreport_document_frame.location.href = initPage; + } + + if (is_same_page) { + // Goto the same page won't trigger onload function. + // Call it manuelly to highligh new code location. + rtwFileOnLoad(top.rtwreport_document_frame.document); + } + } +} + +// Compare if href1(i.e. file:///path/file1.html#222) and href2(i.e.file2.html) are same pages. +// isSamePage return true if file1 == file2. +function isSamePage(href1, href2) { + var page1 = href1.substring(href1.lastIndexOf('/')+1,href1.lastIndexOf('.html')); + var page2 = href2.substring(href2.lastIndexOf('/')+1,href2.lastIndexOf('.html')); + return (page1 == page2); +} + +// Callback for main document loading +function rtwMainOnLoad() { + rtwMainOnLoadFcn(document,null,true, false); + var newUrl; + // modify history state to avoid reload from pressing back + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser() && + typeof window.history.replaceState === "function") { + if (window.location.search.length > 0) { + if (window.location.search.indexOf("loaded=true") === -1) { + newUrl = document.location.pathname + window.location.search + '&loaded=true'; + } else { + newUrl = document.location.pathname + window.location.search; + } + } else { + newUrl = document.location.pathname + window.location.search + '?loaded=true'; + } + window.history.replaceState("","",newUrl); + } +} + +// Helper function for traceability report +function rtwMainReload(location) { + // remove highlight filename and lines before reloading the page + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + rtwMainOnLoadFcn(document,location,true,true); +} + +function rtwMainReloadNoPanel(location) { + rtwMainOnLoadFcn(document,location,false,true); +} + +// Callback for hyperlink "Remove Highlighting" +function rtwRemoveHighlighting() { + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + if (rtwSrcFrame()) { + rtwSrcFrame().focus(); + } + if (hasInCodeTrace()) { + removeInCodeTraceHighlight(); + } +} + +// Display diagnostic message in document frame +function rtwDisplayMessage() { + var docObj = top.rtwreport_document_frame.document; + var msg = docObj.getElementById(RTW_TraceArgs.instance.fMessage); + if (!msg) { + msg = docObj.getElementById("rtwMsg_notTraceable"); + } + if (msg && msg.style) { + msg.style.display = "block"; // make message visible + var msgstr = msg.innerHTML; + // replace '%s' in message with block name + if (top.RTW_TraceArgs.instance) { + var sid = top.RTW_TraceArgs.instance.getBlock(); + if (sid) { + var block = sid; + if (top.RTW_rtwnameSIDMap && top.RTW_rtwnameSIDMap.instance && top.RTW_rtwnameSIDMap.instance.getRtwname(sid)) { + block = top.RTW_rtwnameSIDMap.instance.getRtwname(sid).rtwname; + block = block.replace("<", "<").replace(">", ">"); + } else { + block = sid; + } + if (block) { + msgstr = msgstr.replace("%s", block); + } + } + } + msg.innerHTML = msgstr; + } +} + +function updateHyperlinks() { + docObj = top.rtwreport_document_frame; + if (docObj && docObj.document) { + if (RTW_TraceArgs.instance === null || !RTW_TraceArgs.instance.getUseExternalBrowser()) { + var plain_link = docObj.document.getElementById("linkToText_plain"); + if (plain_link && plain_link.href && plain_link.href.indexOf("matlab:coder.internal.editUrlTextFile") === -1 ) { + plain_link.href = "matlab:coder.internal.editUrlTextFile('" + str2StrVar(plain_link.href) + "')"; + } + var alink = docObj.document.getElementById("linkToCS"); + var linkCmd = "matlab:coder.internal.viewCodeConfigsetFromReport"; + if (alink && alink.href && alink.href.indexOf(linkCmd) === -1) { + alink.href = linkCmd+ "('" + str2StrVar(alink.href) + "');"; + if(alink.style) { + alink.style.display = ""; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) { + hidden_link.style.display = "none"; + } + } + } + } else { + var alink = docObj.document.getElementById("linkToCS"); + if (alink && alink.style) { + alink.style.display = "none"; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) + hidden_link.style.display = ""; + } + if (typeof docObj.document.getElementsByClassName === "function") { + alinks = docObj.document.getElementsByClassName("callMATLAB"); + } else if (typeof docObj.document.getElementsByName === "function") { + alinks = docObj.document.getElementsByName("callMATLAB"); + } else { + alinks = []; + } + alink = docObj.document.getElementById("CodeGenAdvCheck"); + if (alink && alink.href && alink.href.indexOf("externalweb=true")===-1) { + alink.href = alink.href + "?externalweb=true"; + } + + if (typeof docObj.document.getElementsByName === "function") + var objs = docObj.document.getElementsByName("MATLAB_link"); + else + objs = []; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + objs[objIndex].style.display = "none"; + } + } + } + updateCode2ModelLinks(docObj.document); + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; +} + +function update_modelref_report_link(docObj) { + if (docObj.getElementsByName) { + var arg = ""; + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser()) { + arg = "?useExternalBrowser=false"; + } + if (RTW_TraceArgs && RTW_TraceArgs.instance && RTW_TraceArgs.instance.getModel2CodeSrc() != null) { + if (arg.length > 0) + arg = arg + "&model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + else + arg = "?model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + } + if (arg.length > 0) { + links = docObj.getElementsByName('external_link'); + for (var link_idx = 0; link_idx < links.length; ++link_idx) { + links[link_idx].href = links[link_idx].href + arg; + } + } + } +} + +function rtwResizeFrame(f) { + if (f) { + f.style.height = f.contentWindow.document.body.scrollHeight + "px"; + } +} + +function rtwPageOnLoad(id) { + // highlight toc entry + tocHiliteById(id); + // restore elements state + if (top && top.restoreState) { + if (top.rtwreport_contents_frame && top.rtwreport_contents_frame.document) + top.restoreState(top.rtwreport_contents_frame.document); + if (top.rtwreport_document_frame && top.rtwreport_document_frame.document) { + top.restoreState(top.rtwreport_document_frame.document); + rtwResizeFrame(top.rtwreport_document_frame.document.getElementById("rtwIdContentsIframe")); + } + } + updateHyperlinks(); +} + +// highlight code after changeSys +function rtwChangeSysCallback(sid) { + if (sid == "" || typeof RTW_Sid2UrlHash == "undefined" || !RTW_Sid2UrlHash.instance) + return false; + urlHash = RTW_Sid2UrlHash.instance.getUrlHash(sid); + if (urlHash != undefined) { + if (RTW_TraceArgs && RTW_TraceArgs.instance && + !RTW_TraceArgs.instance.getUseExternalBrowser()) + urlHash = (urlHash == "")? "?useExternalBrowser=false" : + urlHash+"&useExternalBrowser=false"; + rtwMainReload(urlHash, true); + return true; + } else { + // remove highlighting from traceinfo + rtwRemoveHighlighting(); + return false; + } +} + +function emlFileOnload(docObj) { + var loc = docObj.location; + if (loc.hash) { + var line = loc.hash.substring(1); + hiliteEmlLine(docObj, line); + } +} + +function hiliteEmlLine(docObj, line) { + var bgColor; + if (top.HiliteCodeStatus) + bgColor = "#66CCFF"; + else + bgColor = "#E8D152"; + // unhighlight + if (typeof docObj.HiliteLine != "undefined") { + trObj = docObj.getElementById("LN_"+docObj.HiliteLine); + if (trObj != null) { + trObj.style.backgroundColor = ""; + } + } + // hilighlight + trObj = docObj.getElementById("LN_"+line); + if (trObj != null) { + trObj.style.backgroundColor = bgColor; + docObj.HiliteLine = line; + } +} + +function emlLineOnClick(docObj,sid,line) { + if (top) { + top.HiliteCodeStatus = top.rtwChangeSysCallback(sid); + } + hiliteEmlLine(docObj, line); +} + +function updateCode2ModelLinks(docObj) { + var webviewFrame = top.document.getElementById('rtw_webviewMidFrame'); + var link2model = false; + var isTestHarness = false; + if (top.testHarnessInfo && top.testHarnessInfo.IsTestHarness === "1") { + isTestHarness = true; + } + if (webviewFrame || isTestHarness) { + if (webviewFrame && RTW_TraceArgs.instance && + (RTW_TraceArgs.instance.getModel2CodeSrc() !== "model" || + RTW_TraceArgs.instance.getUseExternalBrowser()) + ) { + hiliteCmd = "javascript:top.rtwHilite("; + } else { + hiliteCmd = "matlab:coder.internal.code2model("; + link2model = true; + } + var objs = docObj.getElementsByName('code2model'); + var o = null; + var str = ''; + var sid = ''; + var pattern = "'code2model',"; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + o = objs[objIndex]; + str = o.href.substring(o.href.indexOf('(')+1); + if (str.indexOf(pattern) > -1) { + str = str.substring(str.indexOf(pattern) + pattern.length); + } + o.href = hiliteCmd + str; + if (link2model && isTestHarness) { + sid = str.substring(0, str.indexOf(")")); + o.href = hiliteCmd + sid + ",'" + + top.testHarnessInfo.HarnessName+ "','" + + top.testHarnessInfo.HarnessOwner+ "','" + + top.testHarnessInfo.OwnerFileName + "');"; + } + } + } +} + +function rtwHilite(aBlock,aParentSID) { + if (aBlock.indexOf('-') !== -1) { + // remove sid range: model:sid:2-10 => model:sid + var s; + s = aBlock.split(':'); + if (s.length > 0) { + s = s[s.length-1]; + if (s.indexOf('-') != -1) { + aBlock = aBlock.substring(0, aBlock.lastIndexOf(':')); + } + } + } + if (typeof aParentSID === "undefined") { + if (top.RTW_SidParentMap && top.RTW_SidParentMap.instance) + aParentSID = top.RTW_SidParentMap.instance.getParentSid(aBlock); + else + aParentSID = aBlock; + } + top.HiliteCodeStatus = true; + + // webview 2 defines an interface api, call slwebview. + if (top.slwebview) { + // webview 2.x + if (top.codeToWebView(aBlock, aParentSID) === -1) { + alert("Cannot highlight block in model Web view. It may not be exported."); + } + + } else { + // webview 1.x + if (hiliteBlockForRTWReport(aBlock,aParentSID) === false) { + if (hiliteBlockForRTWReport(aBlock, aBlock) === false) { + rtwHilite(aParentSID); + } + } + } +} + +function str2StrVar(str) { + return str.replace(/'/g,"''"); +} +window.onload=rtwMainOnLoad; + +// handle incode traceability highlighting +function inCodeTraceOnload() { + var tocDocObj = top.rtwreport_contents_frame.document; + if (!top.RTW_TraceArgs.instance) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + top.rtwreport_document_frame.location.href = summaryPage.href; + return; + } + + var files = top.RTW_TraceArgs.instance.getFile(); + if (files.length === 0) { + if (top.RTW_TraceArgs.instance) { + var block = top.RTW_TraceArgs.instance.getBlock(); + block = block.replace("<", "<").replace(">", ">"); + } + top.rtwreport_document_frame.document.write("
    No traceability information for block " + block + ".
    "); + return; + }; + + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + + // update filelist with num of highlighted lines + var tocDoc = top.rtwreport_contents_frame.document; + var tLines = 0; + for (var i=0; i 1) { + var spanNodes = parent.getElementsByTagName('span'); + var len = spanNodes.length; + if (len > 0) { + if (aNumLines > 0) { + /* display number of matches */ + spanNodes.item(len-1).innerHTML = " ("+aNumLines+")"; + } else { + /* clear number of matches */ + spanNodes.item(len-1).innerHTML = ""; + } + } + } +} + +function setupInStudio() { + if (top.whole) { + var tmp = top.whole.rows.split(","); + tmp[0] = "35px"; + top.whole.rows = tmp.join(); + } + if (top.main) { + var tmp = top.main.cols.split(","); + tmp[0] = "0"; + top.main.cols = tmp.join(); + } + // add file list to source file + if (top.Html2SrcLink && top.Html2SrcLink.instance && top.fileSelector) { + var myDoc = top.fileSelector.document; + var fileSelector = myDoc.createElement("select"); + fileSelector.id = "fileSelector"; + fileSelector.onchange = top.fileSelectorOnChange; + var filename; + var filelink; + fileSelector.innerHTML += ""; + for (var i=0; i < top.fileList.length; i++) { + filename = top.fileList[i]; + filelink = top.Html2SrcLink.instance.getLink2Src(filename); + fileSelector.innerHTML += ""; + } + var bodyNode = myDoc.body; + bodyNode.insertBefore(fileSelector, bodyNode.firstElementChild); + var textNode = myDoc.createElement("span"); + textNode.innerHTML = "Goto: "; + bodyNode.insertBefore(textNode, fileSelector); + var myCss = myDoc.createElement("link"); + myCss.type = "text/css"; + myCss.rel = "stylesheet"; + myCss.href = "rtwreport.css"; + myDoc.getElementsByTagName("head")[0].appendChild(myCss); + } +} + +function toggleNavSideBar(val) { + if (top.main) { + var tmp = top.main.cols.split(","); + + if (val === "on") { + tmp[tmp.length-1] = "15px"; + } else { + tmp[tmp.length-1] = "0"; + } + top.main.cols = tmp.join(); + if (top.rtwreport_nav_frame) + top.rtwreport_nav_frame.location.href = "nav.html"; + } +}; + +function toggleNavToolBar(val) +{ + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp1 = midFrame.rows.split(","); + var frameIdx = getNavToolbarFrameIdx(); + if (val === "on") { + tmp1[frameIdx] = "40px"; + } else { + tmp1[frameIdx] = "0"; + } + midFrame.rows = tmp1.join(); + if (top.rtwreport_navToolbar_frame) { + top.rtwreport_navToolbar_frame.location.href = "navToolbar.html"; + } + } +}; + +var GlobalConfig = { + navHiliteColor: "#0000ff", + fileLinkHiliteColor: "#ffff99", + navToolbarBgcolor: "ivory", + offset: 10, + hiliteToken: false +}; +var NavSideBarState = { + calLineHeight: 0, + overLink: false, + linkTarget: null, + lastLinkTarget: null, + linkTargetIdx: 0 +} +function drawNavSideBar() { + var rectHeight = 1; + if (!top || !top.rtwreport_document_frame || !top.rtwreport_nav_frame) return; + + if (!top.RTW_TraceArgs.instance) return; + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(); + if (fileIdx === undefined) return; + var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + if (rows.length === 0) return; // no highlighted line + + var codeTbl = top.rtwreport_document_frame.document.getElementById("codeTbl"); + if (!codeTbl) return; // no code table + + var nRows = codeTbl.rows.length + 1; + var canvas = top.rtwreport_nav_frame.document.getElementById("canvas"); + canvas.width = top.rtwreport_nav_frame.innerWidth; + canvas.height = top.rtwreport_nav_frame.innerHeight-2; + NavSideBarState.calLineHeight = canvas.height/nRows; + if (canvas.getContext) { + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + // fill background + ctx.fillStyle = GlobalConfig.navToolbarBgcolor; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = GlobalConfig.navHiliteColor; + for (var i=0;i" + anchorObj.text + "
  • "+ + size + "
  • "; + } + propObj.appendChild(ulObj); + + return propObj; +} +function getInspectLink(file, pathname, anchorObj) { + var model = top.reportModel; + var tokenId = anchorObj.id; + var navObj = document.createElement("div"); + navObj.id = "token_usage_nav"; + ulObj = document.createElement("ul"); + ulObj.id = "token_nav_links"; + ulObj.className="popup_attrib_list"; + var srcFileName = RTW_TraceInfo.toSrcFileName(file); + var defObj; + if (top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]) { + defObj = top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]; + } else if (top.CodeDefine.instance.def[anchorObj.text]) { + defObj = top.CodeDefine.instance.def[anchorObj.text]; + } + var line = anchorObj.id.substring(0,anchorObj.id.indexOf("c")); + // link to model + if (top.TraceInfoFlag && top.TraceInfoFlag.instance && + top.TraceInfoFlag.instance.traceFlag[srcFileName+":"+anchorObj.id]) { + return null; + } + // link to def/decl + if (defObj) { + var filename = defObj.file.split(/\//); + filename = filename[filename.length-1]; + ulObj.innerHTML += "
  • " + anchorObj.text + " defined at " + RTW_TraceInfo.toSrcFileName(filename) + " line " + defObj.line + "
  • "; + } + navObj.appendChild(ulObj); + return navObj; +} + +var LastHiliteTokenId = null; +function rmHiliteClickedToken() { + if (LastHiliteTokenId) { + var o = top.rtwreport_document_frame.document.getElementById(LastHiliteTokenId); + if (o) { + o.className = o.className.replace("hiliteToken", ""); + } + } +} +function hiliteClickedToken(elem) { + rmHiliteClickedToken(); + LastHiliteTokenId = elem.id; + elem.className += " hiliteToken"; +} + +var initLine = null; +function scrollToInitLine() { + if (initLine) { + var lineElem = top.rtwreport_document_frame.document.getElementById(initLine); + if (lineElem) { + lineElem.scrollIntoView(); + } + } +} + +function scrollToLineBasedOnHash(hashValue) { + // move to the current highlight line if the hash is not empty + if (hashValue === "") { + if (top.RTW_TraceInfo.instance && top.RTW_TraceInfo.instance.getCurrLine() !== null) { + top.rtwreport_document_frame.document.location.href=top.RTW_TraceInfo.instance.getCurrentHRef(); + top.initLine = top.rtwreport_document_frame.document.location.hash.substr(1); + } + } else { + // scroll and hilite line + hashValue = hashValue.substr(1); + if (isNaN(hashValue)) { + // #fcn_name + var pattern = "+newPage"; + if (hashValue.indexOf(pattern) != -1) { + hashValue = hashValue.replace(pattern, ''); + var lineElem = top.rtwreport_document_frame.document.getElementById(hashValue); + initLine = hashValue; // save initLine in case the dom is updated later by anootation + if (lineElem) { + lineElem.scrollIntoView(); + addTagToCurrentLine(); + } + + } else { + var token = null; + pattern = ["var_", "fcn_", "type_"]; + for (var i =0; i < pattern.length; i++) { + if (hashValue.indexOf(pattern[i]) === 0) { + token = hashValue.substr(pattern[i].length); + break; + } + } + if (token !== null && top.CodeDefine && top.CodeDefine.instance) { + var addr; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var srcFileName; + if (top.RTW_TraceInfo) { + srcFileName = top.RTW_TraceInfo.toSrcFileName(filename); + } + if (top.CodeDefine.instance.def[srcFileName + ":" + token]) { + addr = top.CodeDefine.instance.def[srcFileName + ":" + token]; + } else { + addr = top.CodeDefine.instance.def[token]; + } + if (addr) { + hilite_line(addr.line); + } + } else { // token id like #line"c"#col + if (hashValue.indexOf("c") !== -1) { + hilite_line(hashValue.substr(0, hashValue.indexOf("c")), hashValue); + } + } + } + } else { // #line + hilite_line(hashValue); + } + } + return false; + // hilite line number and scroll with an offset + function hilite_line(line, tokenId) { + if (isNaN(line)) return; + if (!tokenId) { + tokenId = line; + } + var elem = top.rtwreport_document_frame.document.getElementById(tokenId); + hiliteClickedToken(elem); + initLine = offset_line(line); + scrollToInitLine(); + } +} + +function tokenLinkOnClick(event) { + var alink = event.currentTarget; + if (alink.pathname === top.rtwreport_document_frame.location.pathname) { + event.preventDefault(); + scrollToLineBasedOnHash(alink.hash); + } + return false; +} +function inspectToken(file, pathname, event) { + var height = "70px"; + // show inspect data + if (top.rtwreport_inspect_frame) { + var windowObj = getInspectWindow(); + var propObj = getInspectData(file, event.currentTarget); + var navObj = getInspectLink(file, pathname, event.currentTarget); + if (navObj === null) { + closeInspectWindow(); + return false; + } + if (propObj === null) { + height = "50px"; + } else { + windowObj.appendChild(propObj); + } + windowObj.appendChild(navObj); + var data = top.rtwreport_inspect_frame.document.getElementById("popup_window"); + if (data) { + data.parentNode.replaceChild(windowObj.cloneNode(true), data); + } + } + var offsetHeight = 0; + var docHeight = 0; + if (typeof(top.rtwInspectFrame().document.body.offsetHeight) === "number") { + offsetHeight = top.rtwInspectFrame().document.body.offsetHeight; + } + if (typeof(top.rtwInspectFrame().document.height) === "number") { + docHeight = top.rtwInspectFrame().document.height; + } + if (offsetHeight > 0) { + height = ""+offsetHeight+"px"; + } else if (docHeight > 0) { + height = ""+docHeight+"px"; + } + setInspectWindow(height); + return false; +} +function setInspectWindow(height) { + // show inspect code frame + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp = midFrame.rows.split(","); + tmp[getInspectFrameIdx()] = height; + midFrame.rows = tmp.join(); + } +} +function closeInspectWindow() { + setInspectWindow(0); + return false; +} + +// set the trace number in the navigation toolbar +function setTraceNumber() { + if (RTW_TraceInfo.instance) { + var aFrame = rtwNavToolbarFrame(); + if (aFrame) { + var node = aFrame.document.getElementById("rtwIdTraceNumber"); + // calculate current line index over total highlighted lines + var currNum = RTW_TraceInfo.instance.getCurrLineIdx(); + for (var idx=0;idx 0) + line = (line > GlobalConfig.offset ? line - GlobalConfig.offset : 1); + return line; +} + +function load_js(frame, file) { + var h = frame.document.getElementsByTagName("head")[0]; + var o = h.getElementsByTagName('script'); + for (var i=0;iBlock-to-Code Highlighting Message + + + +

    Block-to-Code Highlighting Message

    + + \ No newline at end of file diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport.css b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport.css new file mode 100644 index 0000000..54b994a --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport.css @@ -0,0 +1,257 @@ +/* Copyright 2011-2016 The MathWorks, Inc. */ +body,p,table {font-family: calibri, verdana, sans-serif;} +button,.buton {font-family: calibri, verdana, sans-serif;} +button,.button {font-size: small;} +.small_font {font-size: small;} +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } +input { font-family: sans-serif, verdana, calibri; } +table { + background-color: #ffffff; + width: 100%; +} + +table.toc, table.button, table.panel { + border-style: none; +} + +/* LineNumber */ +.LN { + font-style: italic; + color: #888888; +} + +/* Comment */ +.CT { + font-style: italic; + color: #117755; +} + +/* PreProcessor */ +PP { + /* font-weight: bold; */ + color: #992211; +} + +/* Keyword */ +.KW { + /* font-weight: bold; */ + color: #0000FF; +} + +/* Datatype */ +.DT { + /* font-weight: bold; */ + color: #112266 +} + +.highlighted { + background-color: yellow; +} + +.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} + +input.search { + background-color: #ffffff; +} + +input.failedSearch { + background-color: #F78181; +} + +/* ensure that code2model links are comment green */ +a.code2model:link { + color: #117755; + font-style: italic; +} +a.code2model:visited{ + color: #117755; + font-style: italic; +} + +.toc td, .button td, .panel td { + border-style: none; + padding: 4px; +} + +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } + +/******* table *******/ +/* default table style */ +table.AltRow { + border-collapse: collapse; border: none; border-spacing: 0pt; + border-top: solid #4F81BD 1.0pt; border-bottom: solid #4F81BD 1.0pt; +} +table.AltRow th, table.AltRow td { padding: 2pt 8pt 2pt 2pt } +/* default alternating row style */ +table.AltRow tr.even td { background-color:#D3DFEE; border:none;} +table.AltRow tr.odd td { background-color:#FFFFFF; border:none;} +/* tr class="heading" */ +table.AltRow tr.heading td, table.AltRow th { + background-color:#FFFFFF; font-weight:bold; border:none; + border-bottom: solid #4F81BD 1.0pt; +} +/* table class="FirstColumn" */ +table.FirstColumn td:first-child { font-weight:bold } +/* table class="TotalRow" */ +table.TotalRow tr:last-child { font-weight:bold } +table.TotalRow tr:last-child td { border-top: solid #4F81BD 1.0pt } + +a.closeButton { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) ); + background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9'); + background-color:#f9f9f9; + -webkit-border-top-left-radius:20px; + -moz-border-radius-topleft:20px; + border-top-left-radius:20px; + -webkit-border-top-right-radius:20px; + -moz-border-radius-topright:20px; + border-top-right-radius:20px; + -webkit-border-bottom-right-radius:20px; + -moz-border-radius-bottomright:20px; + border-bottom-right-radius:20px; + -webkit-border-bottom-left-radius:20px; + -moz-border-radius-bottomleft:20px; + border-bottom-left-radius:20px; + text-indent:0; + border:2px solid #dcdcdc; + display:inline-block; + color:#454143; + font-family:Arial; + font-size:15px; + font-weight:bold; + font-style:normal; + height:20px; + line-height:20px; + width:20px; + text-decoration:none; + text-align:center; + cursor: pointer; +} +a.closeButton:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) ); + background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9', endColorstr='#f9f9f9'); + background-color:#e9e9e9; +} +a.closeButton:active { + position:relative; + top:1px; +} + +.button { + -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; + -webkit-border-top-left-radius:5px; + -moz-border-radius-topleft:5px; + border-top-left-radius:5px; + -webkit-border-top-right-radius:5px; + -moz-border-radius-topright:5px; + border-top-right-radius:5px; + -webkit-border-bottom-right-radius:5px; + -moz-border-radius-bottomright:5px; + border-bottom-right-radius:5px; + -webkit-border-bottom-left-radius:5px; + -moz-border-radius-bottomleft:5px; + border-bottom-left-radius:5px; + text-indent:0px; + border:1px solid #dcdcdc; + display:inline-block; + color:black; + font-family:Arial; + font-size:12px; + font-weight:bold; + font-style:normal; + height:12px; + line-height:12px; + width:45px; + text-decoration:none; + text-align:center; + text-shadow:1px 1px 0px #ffffff; +} +.button:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) ); + background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed'); + background-color:#dfdfdf; +}.button:active { + position:relative; + top:1px; +}.button:disabled { + color:#777777; +} + +ul.nav_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.nav_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} + +.nav_toolbar { + background-color: ivory; + margin-top: 0; +} + +.inspect_body { + margin: 0; + margin-bottom: 0; + display: inline; + vertical-align:middle; +} + +table.nav_table { + background-color: ivory; + border: none; + width: 100%; + display: inline; + vertical-align:middle; +} + +table#rtwIdTracePanel > tr > td { + white-space: nowrap; + table-layout:fixed; + vertical-align:middle; +} + +table.nav_table > button { + height: 20px; +} +select#fileSelector { + padding: 5px; + font-size: 16px; + line-height: 1; + border-radius: 0; + height: 34px; +} + +.treeTable table{ + table-layout: fixed; +} +.treeTable td:first-child > span{ + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + width: 100%; +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport_utils.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport_utils.js new file mode 100644 index 0000000..f58fb49 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwreport_utils.js @@ -0,0 +1,92 @@ +// Copyright 2011-2013 The MathWorks, Inc. + + +function local_onload() { + if (typeof top.rtwreport_document_frame !== "undefined") { + var docObj = window.document; + var alink = docObj.getElementById("linkToText_plain"); + if (alink) { + alink.href = "matlab:coder.internal.editUrlTextFile('" + alink.href + "')"; + } + alink = docObj.getElementById("linkToCS"); + if (alink) { + alink.href = "matlab:coder.internal.viewCodeConfigsetFromReport('" + alink.href + "');"; + } + } +} + +var utils = (function() { + + // Load via Microsoft.XMLDOM--for older versions of IE + function loadXML_MSXMLDOM(filename, callback, async) { + if (navigator.appName == "Microsoft Internet Explorer") { + // Internet Explorer 5/6 + try { + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = async; + xmlDoc.onreadystatechange = function() { + if (xmlDoc.readyState == 4) { + callback(xmlDoc); + } + } + xmlDoc.load(filename); + return true; + } catch(e) { + } + } + return false; + } + + // Load via XMLHttpRequest + function loadXML_XHR(filename, callback, async) { + if (window.XMLHttpRequest) { + try { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + callback(this.responseXML); + } + } + xhr.open("GET", filename, async); + xhr.send(""); + return true; + } catch(e) { + if (navigator.appName === "Netscape" && e.code === 1012) { + // file not found: ignore + return true; + } + } + } + return false; + } + + return { + trimText: function(s) { + // In IE9, String.trim not present + if (s && s.trim) { + return s.trim(); + } + else { + return s; + } + }, + getText: function(elt) { + // In IE9, use 'text' property rather than 'textContent' + return elt.textContent ? elt.textContent : elt.text; + }, + loadXML: function(filename, callback, options) { + var async = !!options && typeof(options["async"]) !== "undefined" ? options.async : true; + if (!loadXML_XHR(filename, callback, async)) { + if (!loadXML_MSXMLDOM(filename, callback, async)) { + return false; + } + } + return true; + } + }; +})(); + +function code2model(sid) { + utils.loadXML("http://localhost:31415/matlab/feval/coder.internal.code2model?arguments=[\"" + sid + "\"]", function() {}); + //window.location.href = "matlab:coder.internal.code2model('" + sid + "')"; +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwshrink.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwshrink.js new file mode 100644 index 0000000..8e2affb --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rtwshrink.js @@ -0,0 +1,210 @@ +// Copyright 2011-2017 The MathWorks, Inc. + +function RTW_STRUCT(prop, value) { + this.prop = prop; + if (typeof(value) == 'undefined') { + this.value = ""; + } else { + this.value = value; + } +} + +// initialize the cache when code generation report is first loaded +function RTW_BOOK() { + this.length = 0; + this.rtw_pages = new Array(); + this.getPage = function(file) { + return this.rtw_pages[file]; + }; + this.addPage = function(file) { + var page; + if (this.hasPage(file)) { + page = this.rtw_pages[file]; + } else { + page = new RTW_PAGE(file); + this.rtw_pages[file] = page; + } + return page; + }; + this.hasPage = function(file) { + return typeof(this.rtw_pages[file]) != 'undefined'; + }; + this.removePage = function(file) { + var tmp; + if (typeof(this.rtw_pages[file]) != 'undefined') { + tmp = this.rtw_pages[file]; + delete this.rtw_pages[file]; + this.length--; + } + return tmp; + }; +} + +if (!RTW_BOOK.instance) { + RTW_BOOK.instance = new RTW_BOOK(); +} + +function RTW_PAGE() { + this.length = 0; + this.items = new Array(); + this.pagename = ''; + if (arguments.length > 0 && typeof(arguments[1]) != 'undefined') { + this.pagename = arguments[1]; + } + + this.getItem = function(id) { + return this.items[id]; + }; + this.getItems = function() { + return this.items; + }; + this.addItem = function(id, value) { + var tmp; + if (typeof(value) != 'undefined') { + if (typeof(this.items[id]) != 'undefined') { + this.length++; + } else { + tmp = this.items[id]; + } + this.items[id] = value; + this.length++; + } + return tmp; + }; + this.hasItem = function(id) { + return typeof(this.items[id]) != 'undefined'; + }; + this.removeItem = function(id) { + var tmp; + if (typeof(this.items[id]) != 'undefined') { + tmp = this.items[id]; + delete this.items[id]; + this.length--; + } + return tmp; + }; +} + +function rtwTableShrink(doc, obj, id, isSymbol) { + var hide, hide_text, show, show_text; + if (isSymbol) { + hide = "[-]"; + hide_text = hide; + show = "[+]"; + show_text = show; + } else { + hide = "[hide]"; + hide_text = "[hide]"; + show = "[show]"; + show_text = "[show]"; + } + hide = "" + hide + ""; + show = "" + show + ""; + if (doc.getElementsByName) { + var o = doc.getElementsByName(id); + for (var oid = 0; oid < o.length; ++oid) { + if (o[oid].style.display === "none") { + o[oid].style.display = ""; + } else { + o[oid].style.display = "none"; + } + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } + + // IE supports innerText while other browsers support textContent + if (obj.textContent) { + var objText = obj.textContent; + } else { + var objText = obj.innerText; + } + + if (objText.toLowerCase() === show_text.toLowerCase()) { + obj.innerHTML = hide; + } else { + obj.innerHTML = show; + } + + if (addToPage) { + addToPage(doc, obj, 'innerHTML'); + } +} + +function rtwTableExpand(doc, controlObj, id) { + if (doc.getElementById) { + var obj = doc.getElementById(id); + if (obj && obj.style.display === "none") { + rtwTableShrink(doc, controlObj, id, false); + } + } +} + +function restoreState(docObj) { + var filename = docObj.location.href; + if (RTW_BOOK.instance && RTW_BOOK.instance.hasPage(filename)) { + var page = RTW_BOOK.instance.getPage(filename); + var items = page.getItems(); + var elem; + if (docObj.getElementsByName) { + for (var i in items) { + var o = docObj.getElementsByName(i); + for (var oid = 0; oid < o.length; ++oid) { + elem = o[oid]; + if (items[i].prop === 'display') { + if (elem.style.display === 'none') { + elem.style.display = ''; + } else { + elem.style.display = 'none'; + } + } else if (items[i].prop === 'innerHTML') { + elem.innerHTML = items[i].value; + } + } + } + } + } +} + +function addToPage(docObj, obj, prop) { + var filename = docObj.location.href; + if (RTW_BOOK.instance) { + var page; + if (RTW_BOOK.instance.hasPage(filename)) { + page = RTW_BOOK.instance.getPage(filename); + } else { + page = RTW_BOOK.instance.addPage(filename); + } + if (page.hasItem(obj.id)) { + page.removeItem(obj.id); + } else { + var my_struct; + if (prop === "display") { + my_struct = new RTW_STRUCT(prop, obj.style.display); + } else { + my_struct = new RTW_STRUCT(prop, obj.innerHTML); + } + page.addItem(obj.id, my_struct); + } + } +} + +function rtwSwitchView(doc, obj1, obj2) { + if (doc.getElementsByName) { + var o = doc.getElementsByName(obj1); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = "none"; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + var o = doc.getElementsByName(obj2); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = ""; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/rx_tx_buffer_sizes_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rx_tx_buffer_sizes_h.html new file mode 100644 index 0000000..493e8c3 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/rx_tx_buffer_sizes_h.html @@ -0,0 +1,180 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2016 The MathWorks, Inc. */
    2
    3/*
    4 * File: rx_tx_buffer_sizes.h
    5 *
    6 * Defines the buffer sizes for the various XIL services.
    7 * Make sure we are backwards compatible with PIL implementations that
    8 * define RTIOSTREAM_TX_BUFFER_BYTE_SIZE and RTIOSTREAM_RX_BUFFER_BYTE_SIZE
    9 * in their connectivity config. We will use these preprocessor defines to
    10 * derive both the RX and TX buffer sizes for the various XIL services and
    11 * make sure we don't incur more memory requirements.
    12 */
    13
    14#ifndef __RX_TX_BUFFER_SIZES_H__
    15#define __RX_TX_BUFFER_SIZES_H__
    16
    17#include "rtwtypes.h"
    18
    19/* transmit buffer size in mem units - no need to worry about fractions
    20 * as division in C always floors the result.
    21 */
    22#define RTIOSTREAM_TX_BUFFER_MEMUNIT_SIZE (RTIOSTREAM_TX_BUFFER_BYTE_SIZE / MEM_UNIT_BYTES)
    23
    24/* Receive buffer size */
    25#ifdef HOST_WORD_ADDRESSABLE_TESTING
    26#define RTIOSTREAM_RX_BUFFER_SIZE (RTIOSTREAM_RX_BUFFER_BYTE_SIZE)
    27#else
    28#define RTIOSTREAM_RX_BUFFER_SIZE (RTIOSTREAM_RX_BUFFER_BYTE_SIZE / MEM_UNIT_BYTES)
    29#endif
    30
    31/* # app services sharing the TX buffer allocation */
    32#ifdef CODE_INSTRUMENTATION_ENABLED
    33 #define NUM_APPS_SHARING_TX 2
    34#else
    35 /* XIL */
    36 #define NUM_APPS_SHARING_TX 1
    37#endif
    38
    39/* send buffer sizes for applications */
    40#ifdef HOST_WORD_ADDRESSABLE_TESTING
    41 /* buffer is actually defined in terms of "byte" IOUnits
    42 * so use BYTE_SIZE to make sure we have the same effective
    43 * buffer size during PWS */
    44 #define XIL_TX_BUFFER_MEMUNIT_SIZE (RTIOSTREAM_TX_BUFFER_BYTE_SIZE / NUM_APPS_SHARING_TX)
    45#else
    46 #define XIL_TX_BUFFER_MEMUNIT_SIZE (RTIOSTREAM_TX_BUFFER_MEMUNIT_SIZE / NUM_APPS_SHARING_TX)
    47#endif
    48
    49#if CODE_INSTRUMENTATION_ENABLED
    50 #define CODE_INSTR_TX_BUFFER_MEMUNIT_SIZE XIL_TX_BUFFER_MEMUNIT_SIZE
    51#endif
    52
    53#if CODER_ASSUMPTIONS_ENABLED == 1
    54/* buffer includes space for BUFFER_HEADER_SIZE */
    55#ifdef HOST_WORD_ADDRESSABLE_TESTING
    56 /* buffer is actually defined in terms of "byte" IOUnits
    57 * so multiply up to make sure we have the same effective
    58 * buffer size during PWS */
    59 #define CA_TX_BUFFER_MEMUNIT_SIZE (32 * MEM_UNIT_BYTES)
    60 #if CA_TX_BUFFER_MEMUNIT_SIZE > RTIOSTREAM_TX_BUFFER_BYTE_SIZE
    61 #error "Coder assumptions transmit buffer size must be less than or equal to the overall rtiostream transmit buffer size. Increase RTIOSTREAM_TX_BUFFER_BYTE_SIZE accordingly."
    62 #endif
    63#else
    64 /* simply reserve a 32 memunit buffer */
    65 #define CA_TX_BUFFER_MEMUNIT_SIZE 32
    66 #if CA_TX_BUFFER_MEMUNIT_SIZE > RTIOSTREAM_TX_BUFFER_MEMUNIT_SIZE
    67 #error "Coder assumptions transmit buffer size must be less than or equal to the overall rtiostream transmit buffer size. Increase RTIOSTREAM_TX_BUFFER_BYTE_SIZE accordingly."
    68 #endif
    69#endif
    70
    71#endif
    72
    73#define APPLICATION_ID_SIZE (sizeof(MemUnit_T))
    74#define WRITE_DATA_AVAIL_SIZE (sizeof(uint32_T))
    75#define BUFFER_HEADER_SIZE (APPLICATION_ID_SIZE + WRITE_DATA_AVAIL_SIZE)
    76#define APPLICATION_ID_IDX 0
    77#define PAYLOAD_SIZE_IDX (APPLICATION_ID_IDX + APPLICATION_ID_SIZE)
    78#define PAYLOAD_IDX (PAYLOAD_SIZE_IDX + WRITE_DATA_AVAIL_SIZE)
    79
    80#endif /*__RX_TX_BUFFER_SIZES_H__ */
    81
    82
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/search.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/search.js new file mode 100644 index 0000000..816380f --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/search.js @@ -0,0 +1,559 @@ +// Copyright 2007-2012 The MathWorks, Inc. + +function createHighlightSpanStart(num) +{ + return ""; +} + +var str2pos; // This is a map between a tag stripped string and the original string. +function getTagStrippedStringAndMap(aString) +{ + var tagStrippedString = new String(); + + str2pos = new Array(); + + var inTag = false; + var inScript = false; + + for (var strPos = 0; strPos < aString.length; strPos++) { + if (inTag && aString.charAt(strPos) == '>') { + inTag = false; + if (inScript && (strPos > 8) && (aString.slice(strPos, strPos - 8) == '/script>')) { + inScript = false; + } + continue; + } else if (!inTag && aString.charAt(strPos) == '<') { + inTag = true; + if (!inScript && aString.slice(strPos, strPos + 7) == ' str2posprev+1) // we have jumped some text, so there must be a tag + { + // insert end tag + newText += highlightEndTag; + + // insert intermediate body text tags + newText += bodyText.slice(str2posprev+1, str2pos[cnt]); + + // insert start tag + newText += highlightStartTag; + } + newText += bodyText.charAt(str2pos[cnt]); + str2posprev=str2pos[cnt]; + } + + // insert end + newText += highlightEndTag; + return newText; + +} + +// check to see if the sequence at position 'i' in taglessString is actually in +// the middle of an escape sequence. We assume escape sequences follow the pattern +// &;. We check for  , <, > and & +function isInEscapedSequence(i, taglessString, searchTerm) +{ + var escapeSeq = / |<|>|&/gi; + var maxEscapeSeqLength = 6; + var startPos = 0; + var endPos = 0; + + // exit if the search term has an escape sequence inside it + if (escapeSeq.test(searchTerm)) { + return false; + } + + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + // go back in the string until we find an ampersand or we hit maxEscapeSeqLength characters + tempI = i; + var bFound = false; + while (tempI >= 0 && tempI > (i-maxEscapeSeqLength)) { + if (taglessString.charAt(tempI) == "&") { + startPos = tempI; + bFound = true; + break; + } + tempI = tempI-1; + + // if we hit a ';' in any position other than the first while searching + // for an ampersand, then we cannot be inside an escape sequence + if (tempI >= 0 && taglessString.charAt(tempI) == ";") { + return false; + } + } + if (!bFound) { + return false; + } + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + var subString = taglessString.substring(startPos, startPos + maxEscapeSeqLength); + return escapeSeq.test(subString); +} + +// Adds highlighting to bodyText around searchTerm. Case sensitivity is optional. +// hitCount is used to a) count the number of search matches and b) Generate unique +// name strings for each highlighting SPAN element. +function addHighlight(bodyText, searchTerm, caseSensitive, hitCount) +{ + var highlightStartTag = ""; + var highlightEndTag = ""; + + var newText = ""; + var i = 0; + var previ = 0; + var bodyTextUC = bodyText.toUpperCase(); + + if (caseSensitive) { + var taglessString = getTagStrippedStringAndMap(bodyText); + } else { + var taglessString = getTagStrippedStringAndMap(bodyTextUC); + } + + // escape the search term in case the user input '<' or '>' etc + searchTerm = escapeSpecialChars(searchTerm); + + if (!caseSensitive) { + var searchTermUC = searchTerm.toUpperCase(); + } + + // search for subsequent matches + while (true) { + if (caseSensitive) { + i = taglessString.indexOf(searchTerm, i); + } else { + i = taglessString.indexOf(searchTermUC, i); + } + if (i < 0) break; + + // we have a match! + + // make sure that the match is not inside an escaped sequence of text + // such as   + if (isInEscapedSequence(i, taglessString, searchTerm)) { + i=i+1; + continue; + } + + // insert highlight tags that cross tag boundaries + highlightStartTag = createHighlightSpanStart(hitCount); + hitCount = hitCount+1; + newText += insertHighlighting(bodyText, previ, i, searchTerm.length, highlightStartTag, highlightEndTag); + previ = str2pos[i+searchTerm.length-1]+1; + + i = i + searchTerm.length; + } + + newText += bodyText.slice(previ, bodyText.length); + return [newText, hitCount]; +} + +function removeHighlight(bodyText) +{ + // We use regular expressions here rather than a straight text search because + // some browsers actually insert double quotes and capitalize. Also, each highlight + // name is uniquely numbered in order of discovery + var highlightStartTag = //i; + var highlightEndTag = /<\/span>/i; + + var newText = ""; + + var startPatternFirstIndex = -1; + var startPatternLastIndex = -1; + + var endPatternFirstIndex = -1; + var endPatternLastIndex = -1; + + while (highlightStartTag.test(bodyText) === true) { + startPatternFirstIndex = bodyText.search(highlightStartTag); + newText += bodyText.substring(0, startPatternFirstIndex); + startPatternLastIndex = bodyText.indexOf('>', startPatternFirstIndex+1); + + bodyText = bodyText.substr(startPatternLastIndex+1); + endPatternFirstIndex = bodyText.search(highlightEndTag); + newText += bodyText.substring(0, endPatternFirstIndex); + endPatternLastIndex = endPatternFirstIndex+7; + + bodyText = bodyText.substr(endPatternLastIndex); + } + if (startPatternFirstIndex < 0) { + return bodyText; + } else { + return newText+bodyText; + } +} + +function removeHighlightInAllDocs() +{ + if (top) { + for (var i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + if (typeof currentDoc.body !== "undefined" && currentDoc.body !== null) + currentDoc.body.innerHTML=removeHighlight(currentDoc.body.innerHTML); + } + } + } +} + +function findInDoc(searchStringFromSubmitBox, doc, caseSensitive, hitCount) +{ + var searchBody = doc.body.innerHTML; + // if the document is empty, or the documents is invalid, return + if (!doc.body || typeof(searchBody) === "undefined") { + return [false, hitCount]; + } + + // inject highlighting code into html + var result = addHighlight(searchBody, searchStringFromSubmitBox, caseSensitive, hitCount); + doc.body.innerHTML = result[0]; + + return [true, result[1]]; +} + +var currentlyHighlightedHit; + +function getSpansByName(name) +{ + var allSpans = []; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + var highlightedSpans = currentDoc.getElementsByName(name); + if (highlightedSpans && highlightedSpans.length && highlightedSpans.length > 0) { + for (j = 0; j < highlightedSpans.length; j++) { + allSpans = allSpans.concat(highlightedSpans[j]); + } + } + } + } + return allSpans; +} + +function isVisibleElement(elementID) +{ + if (elementID) + return elementID.offsetWidth > 0 || elementID.offsetHeight > 0; + else + return false; +} + +function areAllSpansVisible(spans) +{ + isVisible = true; + for (i = 0; i < highlightedSpans.length; i++) { + isVisible = isVisible && isVisibleElement(highlightedSpans[i]); + } + return isVisible; +} + +function getNextVisible() +{ + var isVisible = false; + var foundVisible = false; + while (!isVisible) { + currentlyHighlightedHit = currentlyHighlightedHit + 1; + highlightedSpans = setCurrentSearchMatchIfVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + isVisible = true; + } else if (currentlyHighlightedHit < totalHits) { + continue; + } else { + // we have reached the end + isVisible = false; + currentlyHighlightedHit = 0; + highlightedSpans = null; + break; + } + } + + return highlightedSpans; +} + +function clearCurrentSearchMatch() +{ + // clear prior highlighting + spanName = "highlight" + currentlyHighlightedHit; + highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (highlightedSpans[i]) { + highlightedSpans[i].setAttribute("class", "highlighted"); + } + } + } +} + +function setCurrentSearchMatchIfVisible(hitNum){ + currentlyHighlightedHit = hitNum; + var spanName = "highlight" + currentlyHighlightedHit; + var highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (!isVisibleElement(highlightedSpans[i])) { + highlightedSpans = null; + break; + } + } + } + return highlightedSpans; +} + +// this takes in an option integer 'hitNum'. If not specified, it scrolls +// to the next hit +function scrollToNextHit(hitNum) +{ + var i = 0; + var found = false; + var spanName = ""; + var highlightedSpans; + var searchBox = findElement('searchTxtBox'); + + clearCurrentSearchMatch(); + + if (hitNum) { + // if a number is provided, use it + highlightedSpans = setCurrentSearchMatchIfVisible(hitNum); + } else { + // start working on next element to highlight + highlightedSpans = getNextVisible(); + } + + // we found the current + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + + // if highlightedSpans is invalid, then we did not find any valid, visible subsequent matches + // wrap to beginning or indicate no matches + } else { + // Element not found. Scroll to first visible element + currentlyHighlightedHit = 0; + var highlightedSpans = getNextVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + } else { + // there aren't any matches + searchBox.setAttribute("class", "failedSearch"); + } + } +} + +// find search box +function findElement(element) +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var elem = top.frames[i].document.getElementById(element); + if (elem) { + return elem; + } + } + } +} + +// Restore search term once form is submitted +function initSearchBox(strInitValue) +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.value = strInitValue; + } +} + +// Sets focus back on to the text box +function setFocusOnTxtBox() +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.focus(); + txtBox.select(); + } + return txtBox; +} + +var previousSearchString; +var totalHits; +function findInAllDocs(searchStringFromSubmitBox, caseSensitive) +{ + if (previousSearchString != searchStringFromSubmitBox) { + // If the search string has changed or a new page has been loaded, do a new search + var hitCount = 1; + var i = 0; + var success = false; + previousSearchString = searchStringFromSubmitBox; + + // start by removing traceinfo highlighting + rtwRemoveHighlighting(); + + // remove all previous search highlighting + removeHighlightInAllDocs(); + + // 1. Iterate through all frames in window and search + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + + // if we have no search term, restore + if (searchStringFromSubmitBox !== "") { + // search and highlight in all frames + var srchResult = findInDoc(searchStringFromSubmitBox, currentDoc, caseSensitive, hitCount); + hitCount = srchResult[1]; + totalHits = srchResult[1]; + } + } + + // 2. Restore search term once form is submitted and text highlighted + if (searchStringFromSubmitBox != "") { + strInitValue = searchStringFromSubmitBox; + } + initSearchBox(strInitValue); + + // 3. Scroll to the first hit encountered + scrollToNextHit(1); + + // 4. Set focus back to text box and select text + var txtBox = setFocusOnTxtBox(); + if (txtBox) { + txtBox.select(); + } + + } else { + // If the search string is the same, then scroll to the next + // hit if the hit is valid. Else wrap back. + scrollToNextHit(); + } + return false; +} + +// if the search box is empty, clear highlighting +function clearIfEmpty() +{ + txtBox = findElement('searchTxtBox'); + if (txtBox.value == "") { + txtBox.setAttribute("class", "search"); + removeHighlightInAllDocs(); + previousSearchString=""; + setFocusOnTxtBox(); + } +} + +function keyPressSwitchyard(keyPressEvent) +{ + var kc; + keyPressEvent = (keyPressEvent == null ? window.keyPressEvent : keyPressEvent); + + // typically IE does not support this + if (!keyPressEvent || (typeof keyPressEvent == "undefined")) { + return; + } + + if (keyPressEvent.keyCode) { + kc=keyPressEvent.keyCode; + } else if (keyPressEvent.which) { + kc=keyPressEvent.which; + } else { + return; + } + + // we do not care about the browser find appearing. If it does appear, then + // we are running an external browser and that is okay. + + // handle Ctrl-Key combinations + if (keyPressEvent.ctrlKey) { + switch (kc) { + case 70: // Ctrl-F + { + setFocusOnTxtBox(); + break; + } + + default: break; + } + } +} + +function installDocumentKeyPressHandler() +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + currentDoc.onkeydown = keyPressSwitchyard; + } + top.document.onkeydown = keyPressSwitchyard; + + // This also clears search related highlighting + removeHighlightInAllDocs(); + currentlyHighlightedHit = 0; + if (previousSearchString) initSearchBox(previousSearchString); + previousSearchString = ""; +} + +// This function is a onresize callback for the rtwreport_contents_frame +// It is used to dynamically resize the searchbox based on the size of the frame. +function setWidthDynamic(frameID, elementID, extraSpace, minSize) +{ + var frame = document.getElementById(frameID); + + // sanity check input args + if (frame && extraSpace > 0 && minSize > 0) { + var frameWidth = frame.scrollWidth; + var newSize = extraSpace + minSize + 40; // 40 is the extra whitespace + var element = findElement(elementID); + if (element) + { + if (frameWidth < newSize) { + element.style.width = minSize; + } else { + element.style.width = frameWidth - extraSpace - 40; + } + } + } +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/sil_main_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/sil_main_c.html new file mode 100644 index 0000000..7b8a3d4 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/sil_main_c.html @@ -0,0 +1,102 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2006-2019 The MathWorks, Inc. */
    2
    3/*
    4 * File: sil_main.c
    5 *
    6 * SIL main
    7 *
    8 */
    9#include "xil_interface_lib.h"
    10
    11int main(const int argc, char * argv[]) {
    12 XIL_INTERFACE_LIB_ERROR_CODE errorCode = XIL_INTERFACE_LIB_SUCCESS;
    13 /* avoid warnings about infinite loops */
    14 volatile int loop = 1;
    15
    16 /* XIL initialization */
    17 errorCode = xilInit(argc, (void **) argv);
    18 if (errorCode != XIL_INTERFACE_LIB_SUCCESS) {
    19 /* terminate application */
    20 return errorCode;
    21 }
    22 /* main XIL loop */
    23 while(loop) {
    24 errorCode = xilRun();
    25 if (errorCode != XIL_INTERFACE_LIB_SUCCESS) {
    26 if (errorCode == XIL_INTERFACE_LIB_TERMINATE) {
    27 XIL_INTERFACE_LIB_ERROR_CODE exitCode;
    28 /* orderly shutdown of rtiostream */
    29 exitCode = xilTerminateComms();
    30 if (exitCode == XIL_INTERFACE_LIB_SUCCESS) {
    31 exitCode = 0;
    32 }
    33 /* terminate */
    34 return exitCode;
    35 } else {
    36 /* terminate with error code */
    37 return errorCode;
    38 }
    39 }
    40 }
    41 return errorCode;
    42}
    43
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/spinner.gif b/src/validation/FCC_Sys_New_harness_ert_rtw/html/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4ab78302c5d6ff92def7688c291999a4fcbd70d GIT binary patch literal 4178 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 + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2011-2013 The MathWorks, Inc. */
    2#include <stdio.h> /* sprintf */
    3#include <stdarg.h> /* variable argument lists */
    4#include "xil_interface_common.h"
    5#include "xil_data_stream.h"
    6#include "xil_common.h"
    7#include "target_io.h"
    8#include "rtwtypes.h"
    9
    10/* test for ISO C99 or greater, which supports vsnprintf
    11 *
    12 * WARNING: if the compiler is ANSI C90 then we use vsprintf instead.
    13 * Therefore, it is possible to overrun the buffer so the
    14 * caller must take care not to exceed the buffer size!
    15 */
    16#if __STDC_VERSION__ >= 199901L
    17#define VSNPRINTF_AVAILABLE
    18#endif
    19
    20#ifndef TARGET_IO_BUFFER_SIZE
    21/* default buffer size is large enough for most use cases */
    22#define TARGET_IO_BUFFER_SIZE 64
    23#endif
    24
    25#ifndef TARGET_IO_MAX_FILE_ID
    26/* -1 avoids warning about the comparison that is done
    27 * in targetFopen
    28 *
    29 * note that MAX_uint16_T will be limited to uint16 max
    30 * even when portable word sizes maps uint16 to a larger
    31 * type such as uint32 on the SHARC */
    32#define TARGET_IO_MAX_FILE_ID ((uint16_T)(65535U - 1))
    33#endif
    34
    35typedef enum {TARGET_IO_SUCCESS=0,
    36 TARGET_IO_BUFFER_TRUNC } TARGET_IO_ERROR_ID;
    37
    38static char targetStdioBuffer[TARGET_IO_BUFFER_SIZE];
    39#ifdef HOST_WORD_ADDRESSABLE_TESTING
    40static MemUnit_T hostWordStdioBuffer[TARGET_IO_BUFFER_SIZE];
    41#endif
    42
    43/* fid is the file id on target and is limited to TARGET_IO_MAX_FILE_ID */
    44static uint16_T fid = 0;
    45
    46/* call xilWriteData and check for errors */
    47static void targetWriteDataWithErrorCheck(const MemUnit_T *, uint32_T);
    48#ifdef HOST_WORD_ADDRESSABLE_TESTING
    49static void targetWriteDataWithCharToMemUnitWidening(const char *, MemUnit_T *, uint16_T);
    50#endif /* HOST_WORD_ADDRESSABLE_TESTING */
    51
    52void targetWriteDataWithErrorCheck(const MemUnit_T * data, uint32_T size) {
    53 if (xilWriteData(data, size) != XIL_DATA_STREAM_SUCCESS) {
    54 for (;;) {
    55 /* fatal comms error */
    56 }
    57 }
    58}
    59
    60#ifdef HOST_WORD_ADDRESSABLE_TESTING
    61static void targetWriteDataWithCharToMemUnitWidening(const char *pCharBuff, MemUnit_T *pMemUnitBuff, uint16_T buffSize) {
    62 uint16_T i;
    63 for(i=0;i<buffSize;i++) {
    64 pMemUnitBuff[i] = (MemUnit_T) pCharBuff[i];
    65 }
    66 targetWriteDataWithErrorCheck(pMemUnitBuff, buffSize * sizeof(MemUnit_T));
    67}
    68#endif
    69
    70/* Forward a printf back to the host machine
    71 *
    72 * Printf size must not exceed the TARGET_IO_BUFFER_SIZE
    73 * otherwise overflow will occur.
    74 */
    75void targetPrintf(const char * fmt, ...) {
    76 va_list argptr;
    77 uint16_T printSize;
    78 int vsPrintSize;
    79 MemUnit_T responseId = XIL_RESPONSE_PRINTF;
    80 MemUnit_T errorId = TARGET_IO_SUCCESS;
    81
    82 va_start(argptr, fmt);
    83#ifdef VSNPRINTF_AVAILABLE
    84 /* size arg includes '\0', return value does not */
    85 vsPrintSize = vsnprintf(&targetStdioBuffer[0], TARGET_IO_BUFFER_SIZE, fmt, argptr);
    86#else
    87 vsPrintSize = vsprintf(&targetStdioBuffer[0], fmt, argptr);
    88#endif
    89 if ((vsPrintSize < 0) || (vsPrintSize >= TARGET_IO_BUFFER_SIZE)) {
    90 /* set error id if error or buffer overruns */
    91 errorId = TARGET_IO_BUFFER_TRUNC;
    92 /* do not send any data */
    93 printSize = 0;
    94 } else {
    95 /* add one for the terminating null character */
    96 printSize = (uint16_T) vsPrintSize + 1;
    97 }
    98 va_end(argptr);
    99
    100 /* send response id */
    101 targetWriteDataWithErrorCheck(&responseId, sizeof(responseId));
    102 /* send error id */
    103 targetWriteDataWithErrorCheck(&errorId, sizeof(errorId));
    104 /* send printSize */
    105 targetWriteDataWithErrorCheck((MemUnit_T *) &printSize, sizeof(printSize));
    106 /* send data */
    107 if (printSize > 0) {
    108#ifdef HOST_WORD_ADDRESSABLE_TESTING
    109 targetWriteDataWithCharToMemUnitWidening(&targetStdioBuffer[0], &hostWordStdioBuffer[0], printSize);
    110#else
    111 targetWriteDataWithErrorCheck((MemUnit_T *)&targetStdioBuffer[0], printSize);
    112#endif
    113 }
    114 return;
    115}
    116
    117
    118/* Forward a fopen back to the host.
    119 *
    120 * fid is used on target to act as a valid
    121 * "file descriptor".
    122 */
    123unsigned short targetFopen(const char * fileName) {
    124 uint16_T fileNameSize;
    125 MemUnit_T responseId = XIL_RESPONSE_FOPEN;
    126
    127 /* size of file name string */
    128 fileNameSize = (uint16_T) strlen(fileName);
    129
    130 /* add one for the terminating null character */
    131 fileNameSize++;
    132
    133 /* check bounds and reset to 0 if necessary which will trigger an error
    134 * on the host */
    135 if(fid > TARGET_IO_MAX_FILE_ID) {
    136 fid = 0;
    137 }
    138 /* send response id */
    139 targetWriteDataWithErrorCheck(&responseId, sizeof(responseId));
    140 /* send file id */
    141 targetWriteDataWithErrorCheck((MemUnit_T *)&fid, sizeof(fid));
    142 /* send size of file name string */
    143 targetWriteDataWithErrorCheck((MemUnit_T *)&fileNameSize, sizeof(fileNameSize));
    144#ifdef HOST_WORD_ADDRESSABLE_TESTING
    145 /* in case the total size is bigger than the hostWordStdioBuffer, send in
    146 * multiple chunks */
    147 {
    148 while (fileNameSize > 0) {
    149 uint16_T transferSize = MIN(fileNameSize, TARGET_IO_BUFFER_SIZE);
    150 /* send file name string */
    151 targetWriteDataWithCharToMemUnitWidening(fileName, &hostWordStdioBuffer[0], transferSize);
    152 fileNameSize -= transferSize;
    153 fileName += transferSize;
    154 }
    155 }
    156#else
    157 /* send file name string */
    158 targetWriteDataWithErrorCheck((const MemUnit_T *)fileName, fileNameSize);
    159#endif
    160
    161 /* return fid, THEN increment it */
    162 return (unsigned short) (fid++); /* unsigned short is at least 16-bits
    163 * wide. See header file for more
    164 * information on why this cast is
    165 * required. */
    166}
    167
    168void targetFprintf(unsigned short targetFid, const char * fmt, ...) {
    169 va_list argptr;
    170 uint16_T fprintSize;
    171 int vsFprintSize;
    172 MemUnit_T responseId = XIL_RESPONSE_FPRINTF;
    173 MemUnit_T errorId = TARGET_IO_SUCCESS;
    174 const uint16_T targetFid16 = (uint16_T) targetFid; /* We only use the
    175 * lowermost 16 bits of
    176 * targetFid. unsigned
    177 * int is guaranteed to
    178 * be at least 16 bits
    179 * wide. See header file
    180 * for more information
    181 * on why this cast is
    182 * required. */
    183
    184 va_start(argptr, fmt);
    185#ifdef VSNPRINTF_AVAILABLE
    186 /* size arg includes '\0', return value does not */
    187 vsFprintSize = vsnprintf(&targetStdioBuffer[0], TARGET_IO_BUFFER_SIZE, fmt, argptr);
    188#else
    189 vsFprintSize = vsprintf(&targetStdioBuffer[0], fmt, argptr);
    190#endif
    191 if ((vsFprintSize < 0) || (vsFprintSize >= TARGET_IO_BUFFER_SIZE)) {
    192 /* set error id if error or buffer overruns */
    193 errorId = TARGET_IO_BUFFER_TRUNC;
    194 /* do not send any data */
    195 fprintSize = 0;
    196 } else {
    197 /* add one for the terminating null character */
    198 fprintSize = (uint16_T) vsFprintSize + 1;
    199 }
    200 va_end(argptr);
    201
    202 /* send response id */
    203 targetWriteDataWithErrorCheck(&responseId, sizeof(responseId));
    204 /* send error id */
    205 targetWriteDataWithErrorCheck(&errorId, sizeof(errorId));
    206 /* send file id*/
    207 targetWriteDataWithErrorCheck((const MemUnit_T *)&targetFid16,
    208 sizeof(targetFid16));
    209 /* send fprintSize */
    210 targetWriteDataWithErrorCheck((MemUnit_T *)&fprintSize, sizeof(fprintSize));
    211 if (fprintSize > 0) {
    212#ifdef HOST_WORD_ADDRESSABLE_TESTING
    213 /* send data */
    214 targetWriteDataWithCharToMemUnitWidening(&targetStdioBuffer[0], &hostWordStdioBuffer[0], fprintSize);
    215#else
    216 /* send data */
    217 targetWriteDataWithErrorCheck((MemUnit_T *)&targetStdioBuffer[0], fprintSize);
    218#endif
    219 }
    220 return;
    221}
    222
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/target_io_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/target_io_h.html new file mode 100644 index 0000000..ba7c920 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/target_io_h.html @@ -0,0 +1,90 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2011-2013 The MathWorks, Inc. */
    2#ifndef __TARGET_STDIO_H__
    3#define __TARGET_STDIO_H__
    4
    5#ifdef __cplusplus
    6extern "C" {
    7#endif
    8/*
    9 * The default buffer size is 64 bytes with
    10 * 1 bytes reserved for null terminator at the end.
    11 *
    12 * For LDRA I/O forward support, by default configuration, a minimal
    13 * of 25 bytes buffer is enough. LDRA users can change the column
    14 * width of output data format, which may exceed this 25 bytes
    15 * boundary value. However, the 64 bytes buffer will provide a safer
    16 * limit.
    17 *
    18 */
    19
    20
    21/*
    22 * For compatibility with third party code coverage tools, this header must not
    23 * include rtwtypes.h. In particular, we must not use uint16_T in this header
    24 * file. Note that unsigned short is guaranteed to be at least 16 bits wide on
    25 * any platform; see implementation of targetFopen, targetFprintf for casts that
    26 * rely on this guarantee.
    27 */
    28extern void targetPrintf(const char * fmt, ...);
    29extern unsigned short targetFopen(const char * fileName);
    30extern void targetFprintf(unsigned short targetFid, const char * fmt, ...);
    31
    32#ifdef __cplusplus
    33}
    34#endif /* __cplusplus */
    35
    36#endif /* __TARGET_STDIO_H__ */
    37
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..ad2b573d90ece41e8f6b00834bfa7f613b14fd6c GIT binary patch literal 16425 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo_flag.js b/src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo_flag.js new file mode 100644 index 0000000..98ce986 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/traceInfo_flag.js @@ -0,0 +1,222 @@ +function TraceInfoFlag() { + this.traceFlag = new Array(); + this.traceFlag["FCC_Sys_New_harness.c:146c9"]=1; + this.traceFlag["FCC_Sys_New_harness.c:147c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:148c50"]=1; + this.traceFlag["FCC_Sys_New_harness.c:156c9"]=1; + this.traceFlag["FCC_Sys_New_harness.c:157c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:157c14"]=1; + this.traceFlag["FCC_Sys_New_harness.c:170c9"]=1; + this.traceFlag["FCC_Sys_New_harness.c:171c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:172c50"]=1; + this.traceFlag["FCC_Sys_New_harness.c:180c9"]=1; + this.traceFlag["FCC_Sys_New_harness.c:181c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:181c14"]=1; + this.traceFlag["FCC_Sys_New_harness.c:194c9"]=1; + this.traceFlag["FCC_Sys_New_harness.c:195c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:196c50"]=1; + this.traceFlag["FCC_Sys_New_harness.c:204c9"]=1; + this.traceFlag["FCC_Sys_New_harness.c:205c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:205c14"]=1; + this.traceFlag["FCC_Sys_New_harness.c:221c15"]=1; + this.traceFlag["FCC_Sys_New_harness.c:221c46"]=1; + this.traceFlag["FCC_Sys_New_harness.c:222c15"]=1; + this.traceFlag["FCC_Sys_New_harness.c:222c46"]=1; + this.traceFlag["FCC_Sys_New_harness.c:223c15"]=1; + this.traceFlag["FCC_Sys_New_harness.c:223c49"]=1; + this.traceFlag["FCC_Sys_New_harness.c:232c60"]=1; + this.traceFlag["FCC_Sys_New_harness.c:235c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:236c13"]=1; + this.traceFlag["FCC_Sys_New_harness.c:237c52"]=1; + this.traceFlag["FCC_Sys_New_harness.c:245c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:246c13"]=1; + this.traceFlag["FCC_Sys_New_harness.c:246c16"]=1; + this.traceFlag["FCC_Sys_New_harness.c:259c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:260c13"]=1; + this.traceFlag["FCC_Sys_New_harness.c:261c52"]=1; + this.traceFlag["FCC_Sys_New_harness.c:269c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:270c13"]=1; + this.traceFlag["FCC_Sys_New_harness.c:270c16"]=1; + this.traceFlag["FCC_Sys_New_harness.c:283c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:284c13"]=1; + this.traceFlag["FCC_Sys_New_harness.c:285c52"]=1; + this.traceFlag["FCC_Sys_New_harness.c:293c11"]=1; + this.traceFlag["FCC_Sys_New_harness.c:294c13"]=1; + this.traceFlag["FCC_Sys_New_harness.c:294c16"]=1; + this.traceFlag["FCC_Sys_New_harness.c:315c79"]=1; + this.traceFlag["FCC_Sys_New_harness.c:346c79"]=1; + this.traceFlag["FCC_Sys_New_harness.c:368c79"]=1; + this.traceFlag["FCC_Sys_New_harness.c:469c15"]=1; + this.traceFlag["FCC_Sys_New_harness.c:469c27"]=1; + this.traceFlag["FCC_Sys_New_harness.c:469c39"]=1; + this.traceFlag["FCC_Sys_New_harness.c:469c51"]=1; + this.traceFlag["FCC_Sys_New_harness.c:469c64"]=1; + this.traceFlag["FCC_Sys_New_harness.c:470c15"]=1; + this.traceFlag["FCC_Sys_New_harness.h:93c10"]=1; + this.traceFlag["FCC_Sys_New_harness.h:94c10"]=1; + this.traceFlag["FCC_Sys_New_harness.h:95c10"]=1; +} +top.TraceInfoFlag.instance = new TraceInfoFlag(); +function TraceInfoLineFlag() { + this.lineTraceFlag = new Array(); + this.lineTraceFlag["FCC_Sys_New_harness.c:145"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:146"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:147"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:148"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:150"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:153"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:156"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:157"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:158"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:160"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:163"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:169"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:170"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:171"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:172"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:174"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:177"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:180"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:181"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:182"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:184"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:187"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:193"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:194"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:195"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:196"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:198"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:201"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:204"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:205"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:206"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:208"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:211"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:221"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:222"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:223"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:232"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:234"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:235"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:236"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:237"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:239"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:242"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:245"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:246"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:247"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:249"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:252"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:258"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:259"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:260"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:261"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:263"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:266"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:269"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:270"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:271"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:273"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:276"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:282"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:283"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:284"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:285"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:287"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:290"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:293"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:294"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:295"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:297"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:300"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:304"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:307"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:310"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:315"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:316"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:319"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:322"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:325"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:326"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:329"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:332"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:335"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:338"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:341"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:346"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:347"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:348"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:351"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:354"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:357"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:360"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:363"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:368"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:369"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:405"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:408"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:411"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:422"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:423"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:424"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:425"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:426"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:427"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:428"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:439"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:440"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:441"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:442"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:443"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:444"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:445"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:456"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:457"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:458"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:459"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:460"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:461"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:462"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:469"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.c:470"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:69"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:70"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:71"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:72"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:73"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:74"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:75"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:76"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:77"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:78"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:79"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:80"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:81"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:82"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:83"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:84"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:85"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:86"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:87"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:88"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:89"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:90"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:92"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:93"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:94"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:95"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:96"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:98"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:99"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:100"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:101"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:102"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:103"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:104"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:105"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:106"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:111"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:112"]=1; + this.lineTraceFlag["FCC_Sys_New_harness.h:113"]=1; +} +top.TraceInfoLineFlag.instance = new TraceInfoLineFlag(); diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_common_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_common_h.html new file mode 100644 index 0000000..5e2530a --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_common_h.html @@ -0,0 +1,94 @@ + + + + + + + + + + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2011-2013 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_common.h
    5 *
    6 * SIL/PIL common definitions
    7 */
    8
    9#ifndef __XIL_COMMON_H__
    10#define __XIL_COMMON_H__
    11
    12#include "rtwtypes.h"
    13#include <string.h> /* include definition of size_t */
    14
    15/*
    16 * UNUSED_PARAMETER(x)
    17 * Used to specify that a function parameter (argument) is required but not
    18 * accessed by the function body.
    19 */
    20#ifndef UNUSED_PARAMETER
    21# if defined(__LCC__)
    22# define UNUSED_PARAMETER(x) /* do nothing */
    23# else
    24
    25/*
    26 * This is the semi-ANSI standard way of indicating that an
    27 * unused function parameter is required.
    28 */
    29# define UNUSED_PARAMETER(x) (void) (x)
    30# endif
    31#endif
    32
    33/* MIN is typically used in data stream implementations */
    34#ifndef MIN
    35#define MIN(a,b) ((a) < (b) ? (a) : (b))
    36#endif
    37
    38#endif
    39
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_c.html new file mode 100644 index 0000000..d95b489 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_c.html @@ -0,0 +1,418 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2007-2016 The MathWorks, Inc. */
    2#include "comms_interface.h"
    3#ifndef USING_CS_API
    4#include "rtiostream.h"
    5#include "rtiostream_utils.h"
    6#endif
    7#include "xil_data_stream.h"
    8#include "xil_interface_lib.h"
    9#include "XILTgtAppSvc_CInterface.h"
    10
    11#ifdef USING_CS_API
    12 #define XIL_TX_BUFFER_MEMUNIT_SIZE xilTgtAppSvcGetMaxPayloadCapacity()
    13 #define BUFFER_HEADER_SIZE 0
    14#else
    15 #include "rx_tx_buffer_sizes.h"
    16#endif
    17
    18#define COMMAND_COMPLETE_SIZE (sizeof(MemUnit_T))
    19#define COMMAND_COMPLETE_IDX 0
    20#define WRITE_DATA_BUFFER_IDX (COMMAND_COMPLETE_IDX + COMMAND_COMPLETE_SIZE)
    21#define USED_WRITE_BUFFER_SIZE (COMMAND_COMPLETE_SIZE + xilWriteDataAvail)
    22#define WRITE_BUFFER_SIZE (XIL_TX_BUFFER_MEMUNIT_SIZE - COMMAND_COMPLETE_SIZE - BUFFER_HEADER_SIZE)
    23
    24
    25static void* pBuffer;
    26static IOUnit_T* xilWriteBuffer;
    27static IOUnit_T* xilWriteDataPtr;
    28static uint16_T xilWriteDataAvail;
    29static MemUnit_T* commandResponseType;
    30
    31/* reset the write buffer */
    32XIL_INTERFACE_LIB_ERROR_CODE resetXILWriteBuffer(void) {
    33
    34 /* Ask the CS to allocate a buffer that the XIL app service will use for
    35 * transmission
    36 */
    37 if (!xilTgtAppSvcAllocBuffer(&pBuffer, XIL_TX_BUFFER_MEMUNIT_SIZE)) {
    38 return XIL_INTERFACE_LIB_ERROR;
    39 }
    40 xilWriteBuffer = xilTgtAppSvcGetBufferDataPtr(pBuffer);
    41
    42 /* set commandResponseType and xilWriteDataPtr pointer */
    43 commandResponseType = (MemUnit_T *) &xilWriteBuffer[COMMAND_COMPLETE_IDX];
    44 xilWriteDataPtr = &xilWriteBuffer[WRITE_DATA_BUFFER_IDX];
    45
    46 /* ready for next command */
    47 xilWriteDataAvail = 0;
    48 *commandResponseType = XIL_COMMAND_NOT_COMPLETE;
    49
    50 return XIL_INTERFACE_LIB_SUCCESS;
    51}
    52
    53XIL_INTERFACE_LIB_ERROR_CODE silpilInit(void) {
    54
    55 /* Create XIL service */
    56 if (xilTgtAppSvcCreate() != XILTGTAPPSVC_SUCCESS) {
    57 return XIL_INTERFACE_LIB_ERROR;
    58 }
    59
    60 /* Reset write buffer */
    61 return resetXILWriteBuffer();
    62}
    63
    64/* send pending writes */
    65static XIL_DATA_STREAM_ERROR_CODE sendWriteBuffer(void) {
    66
    67 if (xilTgtAppSvcSend(pBuffer, USED_WRITE_BUFFER_SIZE) == XILTGTAPPSVC_ERROR) {
    68 return XIL_DATA_FLUSH_ERROR;
    69 }
    70
    71 /* reset */
    72 if (resetXILWriteBuffer()!= XIL_INTERFACE_LIB_SUCCESS) {
    73 return XIL_DATA_FLUSH_ERROR;
    74 }
    75
    76 return XIL_DATA_STREAM_SUCCESS;
    77}
    78
    79XIL_DATA_STREAM_ERROR_CODE xilWriteData(const MemUnit_T * src, uint32_T size) {
    80 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    81 const IOUnit_T * srcPtr = (const IOUnit_T *) src;
    82 size_t transferAmount;
    83 uint16_T bufferAvail;
    84
    85 /* block until all data is processed */
    86 while (size > 0) {
    87 /* send if we have a full message worth of data */
    88 if (xilWriteDataAvail == WRITE_BUFFER_SIZE) {
    89 errorCode = sendWriteBuffer();
    90 if (errorCode != XIL_DATA_STREAM_SUCCESS) {
    91 return errorCode;
    92 }
    93 }
    94 bufferAvail = WRITE_BUFFER_SIZE - xilWriteDataAvail;
    95 transferAmount = (uint16_T) MIN(bufferAvail, size);
    96 /* copy data into write buffer */
    97 memcpy((void *) xilWriteDataPtr, srcPtr, transferAmount);
    98 size -= (uint32_T) transferAmount;
    99 xilWriteDataAvail += (uint16_T) transferAmount;
    100 srcPtr += transferAmount;
    101 xilWriteDataPtr += transferAmount;
    102 }
    103 return errorCode;
    104}
    105
    106XIL_DATA_STREAM_ERROR_CODE xilReadData(MemUnit_T * dst, uint32_T size) {
    107
    108 XIL_DATA_STREAM_ERROR_CODE errorCode = XIL_DATA_STREAM_SUCCESS;
    109
    110 static IOUnit_T* currentBufferPosition = NULL;
    111 static uint16_T currentBufSize = 0;
    112 uint16_T readAmount;
    113 int32_T index = 0;
    114 int rtIOStreamErrorStatus;
    115 IOUnit_T * dstPtr = (IOUnit_T *) dst;
    116
    117 while (size > 0)
    118 {
    119 if (currentBufSize > 0) {
    120
    121 readAmount = (uint16_T) MIN(currentBufSize, size);
    122 memcpy(dstPtr+index, currentBufferPosition, (size_t)readAmount);
    123
    124 currentBufSize -= readAmount;
    125 currentBufferPosition +=readAmount;
    126 size -= (uint32_T)readAmount;
    127
    128 if (size == 0) {
    129 /* If we've satisfied the data request we're done, return */
    130 return errorCode;
    131 }
    132
    133 /*Buffer empty and more data needed get new data*/
    134 index += (int32_T)readAmount;
    135 }
    136
    137 /* Get NEW DATA */
    138#ifdef USING_CS_API
    139 {
    140 uint16_T tmpSize = 0;
    141 static uint8_T * tmpData;
    142 static boolean_T firstTime = true;
    143
    144 /*If we've previously read a message free it before getting the next*/
    145 if (!firstTime)
    146 {
    147 xilTgtAppSvcFreeLastReceivedData();
    148 }
    149
    150 /*Block until a message has been received*/
    151 while (tmpSize == 0)
    152 {
    153 tmpData = xilTgtAppSvcGetReceivedData(&tmpSize);
    154 }
    155
    156 /*Update first time flag*/
    157 firstTime = false;
    158
    159 /*Setup buffer position and size from message data*/
    160 currentBufSize = tmpSize;
    161 currentBufferPosition = (IOUnit_T *)tmpData;
    162 }
    163#else
    164 rtIOStreamErrorStatus = rtiostreamReadMessage(&currentBufferPosition, &currentBufSize);
    165
    166 if (rtIOStreamErrorStatus == RTIOSTREAM_ERROR)
    167 return XIL_READ_DATA_ERROR;
    168
    169
    170#endif
    171 }
    172
    173 return errorCode;
    174}
    175
    176
    177
    178XIL_DATA_STREAM_ERROR_CODE xilDataFlush(MemUnit_T isEndOfXILStep) {
    179
    180 /* final part of command */
    181 if (isEndOfXILStep) {
    182 *commandResponseType = XIL_STEP_COMPLETE;
    183 } else {
    184 *commandResponseType = XIL_COMMAND_COMPLETE;
    185 }
    186
    187 /* send the write buffer */
    188 if (sendWriteBuffer() == XIL_DATA_FLUSH_ERROR){
    189 return XIL_DATA_FLUSH_ERROR;
    190 }
    191
    192 return XIL_DATA_STREAM_SUCCESS;
    193
    194}
    195
    196void silpilTerminate(void) {
    197 xilTgtAppSvcDestroy();
    198}
    199
    200
    201
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_h.html new file mode 100644 index 0000000..28e4b25 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_data_stream_h.html @@ -0,0 +1,86 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2007-2016 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_data_stream.h
    5 */
    6
    7#ifndef XIL_DATA_STREAM_H
    8#define XIL_DATA_STREAM_H
    9
    10#include "xil_common.h"
    11#include "xil_error_codes.h"
    12
    13#ifdef __cplusplus
    14extern "C" {
    15#endif
    16
    17/* reset the write buffer */
    18XIL_INTERFACE_LIB_ERROR_CODE resetXILWriteBuffer(void);
    19/* copy specified amount of data from the address specified to the output stream */
    20XIL_DATA_STREAM_ERROR_CODE xilWriteData(const MemUnit_T *, uint32_T);
    21/* copy specified amount of data from the input stream to address specified */
    22XIL_DATA_STREAM_ERROR_CODE xilReadData(MemUnit_T *, uint32_T );
    23/* flush any buffered writes */
    24XIL_DATA_STREAM_ERROR_CODE xilDataFlush(MemUnit_T isEndOfXILStep);
    25/* initialize SIL/PIL service */
    26XIL_INTERFACE_LIB_ERROR_CODE silpilInit(void);
    27/* terminate SIL/PIL service */
    28void silpilTerminate(void);
    29
    30#ifdef __cplusplus
    31}
    32#endif
    33
    34#endif
    35
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_c.html new file mode 100644 index 0000000..61c11f9 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_c.html @@ -0,0 +1,268 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * File: xil_instrumentation.c
    3 *
    4 * Code generated for instrumentation.
    5 *
    6 */
    7
    8#include "xil_instrumentation.h"
    9
    10/* Code instrumentation offset(s) for model FCC_Sys_New_harness */
    11#define profileStart_F_02840e440c240744_offset 3
    12#define profileEnd_FCC_Sys_New_harness_offset 3
    13
    14/* Code instrumentation offset(s) for model FCC_Sys_New_harness */
    15#define taskTimeStart_0c6401e40e940cc4_offset 0
    16#define taskTimeEnd_FCC_Sys_New_harness_offset 0
    17
    18/* A function parameter may be intentionally unused */
    19#ifndef UNUSED_PARAMETER
    20# if defined(__LCC__)
    21# define UNUSED_PARAMETER(x)
    22# else
    23# define UNUSED_PARAMETER(x) (void) (x)
    24# endif
    25#endif
    26
    27#define SIZEOF_SECTION_ID_CONTAINER sizeof(uint64_T)
    28#define SIZEOF_TIMER_TYPE sizeof(uint64_T)
    29
    30static uint64_T xsd_xil_timer_corrected = 0;
    31static uint64_T xsd_xil_timer_unfreeze = 0;
    32static uint32_T xsd_xil_freezing_busy = 0;
    33void xilUploadProfilingData(uint32_T sectionId)
    34{
    35 xilUploadCodeInstrData((void *)(&xsd_xil_timer_corrected), (uint32_T)
    36 (SIZEOF_TIMER_TYPE), sectionId);
    37}
    38
    39/* The internal freeze and unfreeze methods cannot be nested. The customer-visible implementation avoids nesting problems */
    40void xilProfilingTimerFreezeInternal(void)
    41{
    42 /* Update the value of the corrected timer to exclude time spent in the
    43 * instrumentation code.
    44 *
    45 * Using a timer that increments on each tick.
    46 */
    47 xsd_xil_timer_corrected = xsd_xil_timer_corrected + (((uint64_T)(timestamp_x86
    48 ())) - xsd_xil_timer_unfreeze);
    49}
    50
    51void xilProfilingTimerUnFreezeInternal(void)
    52{
    53 xsd_xil_timer_unfreeze = ( uint64_T ) (timestamp_x86());
    54}
    55
    56void xilProfilingTimerFreeze(void)
    57{
    58 if (xsd_xil_freezing_busy == 0) {
    59 xilProfilingTimerFreezeInternal();
    60 } /* if */
    61}
    62
    63void xilProfilingTimerUnFreeze(void)
    64{
    65 if (xsd_xil_freezing_busy == 0) {
    66 xilProfilingTimerUnFreezeInternal();
    67 } /* if */
    68}
    69
    70void taskTimeStart(uint32_T sectionId)
    71{
    72 /* Send execution profiling data to host */
    73 xilUploadProfilingData(sectionId);
    74 xilProfilingTimerUnFreezeInternal();
    75}
    76
    77void taskTimeEnd(uint32_T sectionId)
    78{
    79 uint32_T sectionIdNeg = ~sectionId;
    80 xilProfilingTimerFreezeInternal();
    81
    82 /* Send execution profiling data to host */
    83 xilUploadProfilingData(sectionIdNeg);
    84}
    85
    86void profileStart(uint32_T sectionId)
    87{
    88 xilProfilingTimerFreezeInternal();
    89
    90 /* Send execution profiling data to host */
    91 xilUploadProfilingData(sectionId);
    92 xilProfilingTimerUnFreezeInternal();
    93}
    94
    95void profileEnd(uint32_T sectionId)
    96{
    97 uint32_T sectionIdNeg = ~sectionId;
    98 xilProfilingTimerFreezeInternal();
    99
    100 /* Send execution profiling data to host */
    101 xilUploadProfilingData(sectionIdNeg);
    102 xilProfilingTimerUnFreezeInternal();
    103}
    104
    105/* Code instrumentation method(s) for model FCC_Sys_New_harness */
    106void profileStart_F_02840e440c240744(uint32_T sectionId)
    107{
    108 profileStart(profileStart_F_02840e440c240744_offset + sectionId);
    109}
    110
    111void profileEnd_FCC_Sys_New_harness(uint32_T sectionId)
    112{
    113 profileEnd(profileEnd_FCC_Sys_New_harness_offset + sectionId);
    114}
    115
    116/* Code instrumentation method(s) for model FCC_Sys_New_harness */
    117void taskTimeStart_0c6401e40e940cc4(uint32_T sectionId)
    118{
    119 taskTimeStart(taskTimeStart_0c6401e40e940cc4_offset + sectionId);
    120}
    121
    122void taskTimeEnd_FCC_Sys_New_harness(uint32_T sectionId)
    123{
    124 taskTimeEnd(taskTimeEnd_FCC_Sys_New_harness_offset + sectionId);
    125}
    126
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_h.html new file mode 100644 index 0000000..cce113c --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_instrumentation_h.html @@ -0,0 +1,126 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * File: xil_instrumentation.h
    3 *
    4 * Code generated for instrumentation.
    5 *
    6 */
    7
    8/* Functions with a C call interface */
    9#ifdef __cplusplus
    10
    11extern "C" {
    12
    13#endif
    14
    15#include "host_timer_x86.h"
    16#ifdef __cplusplus
    17
    18}
    19#endif
    20
    21#include "rtwtypes.h"
    22
    23/* Upload code instrumentation data point */
    24void xilUploadCodeInstrData(
    25 void* pData, uint32_T numMemUnits, uint32_T sectionId);
    26
    27/* Called before starting a profiled section of code */
    28void taskTimeStart(uint32_T);
    29
    30/* Called on finishing a profiled section of code */
    31void taskTimeEnd(uint32_T);
    32
    33/* Uploads data */
    34void xilUploadProfilingData(uint32_T sectionId);
    35
    36/* Pause the timer while running code associated with storing and uploading the data. */
    37void xilProfilingTimerFreeze(void);
    38
    39/* Restart the timer after a pause */
    40void xilProfilingTimerUnFreeze(void);
    41
    42/* Called before starting a profiled section of code */
    43void profileStart(uint32_T);
    44
    45/* Called on finishing a profiled section of code */
    46void profileEnd(uint32_T);
    47
    48/* Code instrumentation method(s) for model FCC_Sys_New_harness */
    49void profileStart_F_02840e440c240744(uint32_T sectionId);
    50void profileEnd_FCC_Sys_New_harness(uint32_T sectionId);
    51
    52/* Code instrumentation method(s) for model FCC_Sys_New_harness */
    53void taskTimeStart_0c6401e40e940cc4(uint32_T sectionId);
    54void taskTimeEnd_FCC_Sys_New_harness(uint32_T sectionId);
    55
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_c.html new file mode 100644 index 0000000..2e197cf --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_c.html @@ -0,0 +1,738 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * File: xil_interface.c
    3 *
    4 * SIL generated interface for code: "FCC_Sys_New_harness"
    5 *
    6 */
    7
    8#include "FCC_Sys_New_harness.h"
    9#include "xil_interface.h"
    10#include "xil_instrumentation.h"
    11
    12/* Functions with a C call interface */
    13#ifdef __cplusplus
    14
    15extern "C" {
    16
    17#endif
    18
    19#include "xil_data_stream.h"
    20#include "codeinstr_data_stream.h"
    21#ifdef __cplusplus
    22
    23}
    24#endif
    25
    26static XILIOData xil_fcnid0_task1_y[4];
    27static XILIOData xil_fcnid0_init_y[4];
    28
    29/* In-the-Loop Interface functions - see xil_interface.h */
    30XIL_INTERFACE_ERROR_CODE xilProcessParams(uint32_T xilFcnId)
    31{
    32 /* Single In-the-Loop Component */
    33 if (xilFcnId != 0) {
    34 return XIL_INTERFACE_UNKNOWN_FCNID;
    35 }
    36
    37 return XIL_INTERFACE_SUCCESS;
    38}
    39
    40void xilUploadCodeInstrData(void * pData, uint32_T numMemUnits, uint32_T
    41 sectionId)
    42{
    43 /* Send code instrumentation data to host */
    44 if (codeInstrWriteData((MemUnit_T *) &numMemUnits, sizeof(numMemUnits)) !=
    45 XIL_DATA_STREAM_SUCCESS) {
    46 for (;;) ;
    47 }
    48
    49 if (codeInstrWriteData((MemUnit_T *) &sectionId, sizeof(uint32_T)) !=
    50 XIL_DATA_STREAM_SUCCESS) {
    51 for (;;) ;
    52 }
    53
    54 if (codeInstrWriteData((MemUnit_T *) pData, numMemUnits) !=
    55 XIL_DATA_STREAM_SUCCESS) {
    56 for (;;) ;
    57 }
    58}
    59
    60XIL_INTERFACE_ERROR_CODE xilGetDataTypeInfo(void)
    61{
    62 return XIL_INTERFACE_SUCCESS;
    63}
    64
    65XIL_INTERFACE_ERROR_CODE xilInitialize(uint32_T xilFcnId)
    66{
    67 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    68
    69 /* initialize output storage owned by In-the-Loop */
    70 /* Single In-the-Loop Component */
    71 if (xilFcnId == 0) {
    72 taskTimeStart_0c6401e40e940cc4(1U);
    73 FCC_Sys_New_harness_initialize();
    74 taskTimeEnd_FCC_Sys_New_harness(1U);
    75 } else {
    76 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    77 }
    78
    79 return errorCode;
    80}
    81
    82XIL_INTERFACE_ERROR_CODE xilPause(uint32_T xilFcnId)
    83{
    84 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    85 if (xilFcnId == 0) {
    86 /* Nothing to do */
    87 } else {
    88 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    89 } /* if */
    90
    91 return errorCode;
    92}
    93
    94XIL_INTERFACE_ERROR_CODE xilSystemInitialize(uint32_T xilFcnId)
    95{
    96 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    97
    98 /* Single In-the-Loop Component */
    99 if (xilFcnId == 0) {
    100 /* No Function to Call */
    101 } else {
    102 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    103 }
    104
    105 return errorCode;
    106}
    107
    108XIL_INTERFACE_ERROR_CODE xilSystemReset(uint32_T xilFcnId)
    109{
    110 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    111
    112 /* Single In-the-Loop Component */
    113 if (xilFcnId == 0) {
    114 /* No Function to Call */
    115 } else {
    116 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    117 }
    118
    119 return errorCode;
    120}
    121
    122XIL_INTERFACE_ERROR_CODE xilGetHostToTargetData(uint32_T xilFcnId,
    123 XIL_COMMAND_TYPE_ENUM xilCommandType, uint32_T xilCommandIdx, XILIOData
    124 ** xilIOData)
    125{
    126 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    127 *xilIOData = 0;
    128
    129 /* Single In-the-Loop Component */
    130 if (xilFcnId != 0) {
    131 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    132 return errorCode;
    133 }
    134
    135 errorCode = XIL_INTERFACE_UNKNOWN_TID;
    136 UNUSED_PARAMETER(xilCommandType);
    137 UNUSED_PARAMETER(xilCommandIdx);
    138 return errorCode;
    139}
    140
    141XIL_INTERFACE_ERROR_CODE xilGetTargetToHostPreData(uint32_T xilFcnId,
    142 XIL_COMMAND_TYPE_ENUM xilCommandType, uint32_T xilCommandIdx, XILIOData
    143 ** xilIOData, MemUnit_T responseId, uint32_T serverFcnId)
    144{
    145 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    146 *xilIOData = 0;
    147 if (xilFcnId != 0) {
    148 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    149 return errorCode;
    150 } /* if */
    151
    152 errorCode = XIL_INTERFACE_UNKNOWN_TID;
    153 UNUSED_PARAMETER(xilCommandType);
    154 UNUSED_PARAMETER(xilCommandIdx);
    155 UNUSED_PARAMETER(responseId);
    156 UNUSED_PARAMETER(serverFcnId);
    157 return errorCode;
    158}
    159
    160XIL_INTERFACE_ERROR_CODE xilOutput(uint32_T xilFcnId, uint32_T xilTID)
    161{
    162 /* Single In-the-Loop Component */
    163 if (xilFcnId != 0) {
    164 return XIL_INTERFACE_UNKNOWN_FCNID;
    165 }
    166
    167 switch (xilTID) {
    168 case 1:
    169 taskTimeStart_0c6401e40e940cc4(2U);
    170 FCC_Sys_New_harness_step0();
    171 taskTimeEnd_FCC_Sys_New_harness(2U);
    172 break;
    173
    174 case 2:
    175 taskTimeStart_0c6401e40e940cc4(3U);
    176 FCC_Sys_New_harness_step2();
    177 taskTimeEnd_FCC_Sys_New_harness(3U);
    178 break;
    179
    180 default:
    181 return XIL_INTERFACE_UNKNOWN_TID;
    182 }
    183
    184 return XIL_INTERFACE_SUCCESS;
    185}
    186
    187XIL_INTERFACE_ERROR_CODE xilUpdate(uint32_T xilFcnId, uint32_T xilTID)
    188{
    189 /* Single In-the-Loop Component */
    190 if (xilFcnId != 0) {
    191 return XIL_INTERFACE_UNKNOWN_FCNID;
    192 }
    193
    194 /* No Update Function */
    195 UNUSED_PARAMETER(xilTID);
    196 return XIL_INTERFACE_SUCCESS;
    197}
    198
    199XIL_INTERFACE_ERROR_CODE xilGetTargetToHostData(uint32_T xilFcnId,
    200 XIL_COMMAND_TYPE_ENUM xilCommandType, uint32_T xilCommandIdx, XILIOData
    201 ** xilIOData, MemUnit_T responseId, uint32_T serverFcnId)
    202{
    203 XIL_INTERFACE_ERROR_CODE errorCode = XIL_INTERFACE_SUCCESS;
    204
    205 /* Single In-the-Loop Component */
    206 *xilIOData = 0;
    207 if (xilFcnId != 0) {
    208 errorCode = XIL_INTERFACE_UNKNOWN_FCNID;
    209 return errorCode;
    210 }
    211
    212 switch (xilCommandType) {
    213 case XIL_INITIALIZE_COMMAND:
    214 {
    215 static int initComplete = 0;
    216 if (!initComplete) {
    217 uint32_T tableIdx = 0;
    218
    219 {
    220 void * dataAddress = (void *) &(FCC_Sys_New_harness_Y.Actuator1);
    221 xil_fcnid0_init_y[tableIdx].memUnitLength = 1 * sizeof(int16_T);
    222 xil_fcnid0_init_y[tableIdx++].address = (MemUnit_T *) dataAddress;
    223 }
    224
    225 {
    226 void * dataAddress = (void *) &(FCC_Sys_New_harness_Y.Actuator2);
    227 xil_fcnid0_init_y[tableIdx].memUnitLength = 1 * sizeof(int16_T);
    228 xil_fcnid0_init_y[tableIdx++].address = (MemUnit_T *) dataAddress;
    229 }
    230
    231 {
    232 void * dataAddress = (void *) &(FCC_Sys_New_harness_Y.Actuator3);
    233 xil_fcnid0_init_y[tableIdx].memUnitLength = 1 * sizeof(int16_T);
    234 xil_fcnid0_init_y[tableIdx++].address = (MemUnit_T *) dataAddress;
    235 }
    236
    237 xil_fcnid0_init_y[tableIdx].memUnitLength = 0;
    238 xil_fcnid0_init_y[tableIdx++].address = (MemUnit_T *) 0;
    239 initComplete = 1;
    240 } /* if */
    241
    242 {
    243 if (xilWriteData(&responseId, sizeof(responseId)) !=
    244 XIL_DATA_STREAM_SUCCESS) {
    245 return XIL_INTERFACE_COMMS_FAILURE;
    246 } /* if */
    247
    248 if (responseId == XIL_RESPONSE_CS_REQUEST_SERVICE) {
    249 if (xilWriteData((MemUnit_T *) &serverFcnId, sizeof(serverFcnId)) !=
    250 XIL_DATA_STREAM_SUCCESS) {
    251 return XIL_INTERFACE_COMMS_FAILURE;
    252 } /* if */
    253 } /* if */
    254 }
    255
    256 *xilIOData = &xil_fcnid0_init_y[0];
    257 break;
    258 }
    259
    260 case XIL_OUTPUT_COMMAND:
    261 {
    262 switch (xilCommandIdx) {
    263 case 1:
    264 {
    265 static int initComplete = 0;
    266 if (!initComplete) {
    267 uint32_T tableIdx = 0;
    268
    269 {
    270 void * dataAddress = (void *) &(FCC_Sys_New_harness_Y.Actuator1);
    271 xil_fcnid0_task1_y[tableIdx].memUnitLength = 1 * sizeof(int16_T);
    272 xil_fcnid0_task1_y[tableIdx++].address = (MemUnit_T *) dataAddress;
    273 }
    274
    275 {
    276 void * dataAddress = (void *) &(FCC_Sys_New_harness_Y.Actuator2);
    277 xil_fcnid0_task1_y[tableIdx].memUnitLength = 1 * sizeof(int16_T);
    278 xil_fcnid0_task1_y[tableIdx++].address = (MemUnit_T *) dataAddress;
    279 }
    280
    281 {
    282 void * dataAddress = (void *) &(FCC_Sys_New_harness_Y.Actuator3);
    283 xil_fcnid0_task1_y[tableIdx].memUnitLength = 1 * sizeof(int16_T);
    284 xil_fcnid0_task1_y[tableIdx++].address = (MemUnit_T *) dataAddress;
    285 }
    286
    287 xil_fcnid0_task1_y[tableIdx].memUnitLength = 0;
    288 xil_fcnid0_task1_y[tableIdx++].address = (MemUnit_T *) 0;
    289 initComplete = 1;
    290 } /* if */
    291
    292 {
    293 if (xilWriteData(&responseId, sizeof(responseId)) !=
    294 XIL_DATA_STREAM_SUCCESS) {
    295 return XIL_INTERFACE_COMMS_FAILURE;
    296 } /* if */
    297
    298 if (responseId == XIL_RESPONSE_CS_REQUEST_SERVICE) {
    299 if (xilWriteData((MemUnit_T *) &serverFcnId, sizeof(serverFcnId))
    300 != XIL_DATA_STREAM_SUCCESS) {
    301 return XIL_INTERFACE_COMMS_FAILURE;
    302 } /* if */
    303 } /* if */
    304 }
    305
    306 *xilIOData = &xil_fcnid0_task1_y[0];
    307 break;
    308 }
    309
    310 default:
    311 errorCode = XIL_INTERFACE_UNKNOWN_TID;
    312 break;
    313 }
    314 break;
    315 }
    316
    317 default:
    318 errorCode = XIL_INTERFACE_UNKNOWN_TID;
    319 break;
    320 }
    321
    322 return errorCode;
    323}
    324
    325XIL_INTERFACE_ERROR_CODE xilTerminate(uint32_T xilFcnId)
    326{
    327 if (xilFcnId != 0) {
    328 return XIL_INTERFACE_UNKNOWN_FCNID;
    329 } /* if */
    330
    331 /* Invoke any terminate Function */
    332 /* No Function to Call */
    333 return XIL_INTERFACE_SUCCESS;
    334}
    335
    336XIL_INTERFACE_ERROR_CODE xilEnable(uint32_T xilFcnId, uint32_T xilTID)
    337{
    338 /* Single In-the-Loop Component */
    339 if (xilFcnId != 0) {
    340 return XIL_INTERFACE_UNKNOWN_FCNID;
    341 }
    342
    343 UNUSED_PARAMETER(xilTID);
    344
    345 /* No Enable Function - this function should never be called */
    346 return XIL_INTERFACE_UNKNOWN_TID;
    347}
    348
    349XIL_INTERFACE_ERROR_CODE xilDisable(uint32_T xilFcnId, uint32_T xilTID)
    350{
    351 /* Single In-the-Loop Component */
    352 if (xilFcnId != 0) {
    353 return XIL_INTERFACE_UNKNOWN_FCNID;
    354 }
    355
    356 UNUSED_PARAMETER(xilTID);
    357
    358 /* No Disable Function - this function should never be called */
    359 return XIL_INTERFACE_UNKNOWN_TID;
    360}
    361
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_common_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_common_h.html new file mode 100644 index 0000000..b5b0fb3 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_common_h.html @@ -0,0 +1,172 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2006-2019 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_interface_common.h
    5 *
    6 * SIL/PIL common definitions
    7 */
    8
    9#ifndef __XIL_INTERFACE_COMMON_H__
    10#define __XIL_INTERFACE_COMMON_H__
    11
    12#include "xil_common.h"
    13
    14/* define some error codes */
    15typedef enum {XIL_INTERFACE_SUCCESS=0,
    16 XIL_INTERFACE_UNKNOWN_TID,
    17 XIL_INTERFACE_UNKNOWN_FCNID,
    18 XIL_INTERFACE_COMMS_FAILURE,
    19 XIL_INTERFACE_MEMORY_ALLOCATION_ERROR,
    20 XIL_INTERFACE_OFFLOADED_PROCESSING} XIL_INTERFACE_ERROR_CODE;
    21
    22typedef enum {XIL_INIT_COMMAND = 0,
    23 XIL_INITIALIZE_COMMAND,
    24 XIL_SYSTEM_INITIALIZE_COMMAND,
    25 XIL_OUTPUT_COMMAND,
    26 XIL_TERMINATE_COMMAND,
    27 XIL_ENABLE_COMMAND,
    28 XIL_DISABLE_COMMAND,
    29 XIL_CONST_OUTPUT_COMMAND,
    30 XIL_PROCESS_PARAMS_COMMAND,
    31 XIL_CLIENT_SERVER_COMMAND,
    32 XIL_SHUTDOWN_COMMAND,
    33 XIL_UPDATE_COMMAND,
    34 XIL_SYSTEM_RESET_COMMAND,
    35 XIL_PAUSE_COMMAND} XIL_COMMAND_TYPE_ENUM;
    36
    37/* define response ids */
    38typedef enum {XIL_RESPONSE_ERROR=0,
    39 XIL_RESPONSE_OUTPUT_PRE_DATA,
    40 XIL_RESPONSE_OUTPUT_DATA,
    41 XIL_RESPONSE_PRINTF,
    42 XIL_RESPONSE_FOPEN,
    43 XIL_RESPONSE_FPRINTF,
    44 XIL_RESPONSE_SIGNAL_RAISED,
    45 XIL_RESPONSE_TYPE_SIZE,
    46 XIL_RESPONSE_CS_REQUEST_SERVICE
    47 } XIL_RESPONSE_ID;
    48
    49/* define receive states */
    50typedef enum {XIL_INVALID_STATE=-1,
    51 XIL_READ_COMMAND_CODE,
    52 XIL_READ_FCNID,
    53 XIL_READ_XILTID,
    54 XIL_PROCESS_TARGET_TO_HOST_PRE_DATA,
    55 XIL_PROCESS_HOST_TO_TARGET_DATA,
    56 XIL_CALL_XILINTERFACE,
    57 XIL_PROCESS_TARGET_TO_HOST_DATA,
    58 XIL_COMPLETE} XIL_HANDLE_RECV_STATE;
    59
    60/* Defines what states we need to save to make xilProcessMsg re-entrant.
    61 * This is used by client/server commands which could happen in the middle
    62 * of a step */
    63typedef struct xilProcessMsgContextSwitch {
    64 XIL_HANDLE_RECV_STATE state;
    65 XIL_COMMAND_TYPE_ENUM command;
    66 uint32_T commandIdx;
    67 uint32_T fcnId;
    68} XIL_PROCESS_MSG_CONTEXT_SWITCH;
    69
    70/* XILIOData is defined as a start address
    71 * and length in MemUnits */
    72typedef struct xilIOData {
    73 uint32_T memUnitLength;
    74 MemUnit_T * address;
    75} XILIOData;
    76
    77#endif
    78
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_h.html new file mode 100644 index 0000000..55c418f --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_h.html @@ -0,0 +1,158 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2006-2019 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_interface.h
    5 *
    6 * SIL/PIL interface functions
    7 */
    8
    9#ifndef __XIL_INTERFACE_H__
    10#define __XIL_INTERFACE_H__
    11
    12/* include rtwtypes.h & XILIOData */
    13#include "xil_interface_common.h"
    14
    15/* Generated xil_interface.c may use xilCommandDispatchAndResponse for client/server */
    16#include "xil_interface_lib.h"
    17
    18/* xil_interface.c|cpp always presents a C
    19 * function-call interface for xil_interface_lib.c */
    20#ifdef __cplusplus
    21extern "C" { /* sbcheck:ok:extern_c needed to ensure correct linking*/
    22#endif
    23
    24/* Get data type information - called from mdlStart */
    25extern XIL_INTERFACE_ERROR_CODE xilGetDataTypeInfo(void);
    26
    27/* Process Parameters - called from mdlProcessParameters / mdlStart */
    28extern XIL_INTERFACE_ERROR_CODE xilProcessParams(uint32_T);
    29
    30/* Initialize - called from mdlStart */
    31extern XIL_INTERFACE_ERROR_CODE xilInitialize(uint32_T);
    32
    33/* System Initialize - called from mdlSystemInitialize (or mdlInitializeConditions) */
    34extern XIL_INTERFACE_ERROR_CODE xilSystemInitialize(uint32_T);
    35
    36/* System Reset - called from mdlSystemReset */
    37extern XIL_INTERFACE_ERROR_CODE xilSystemReset(uint32_T);
    38
    39/* Initialize input XILIOData pointer */
    40extern XIL_INTERFACE_ERROR_CODE xilGetHostToTargetData(uint32_T, XIL_COMMAND_TYPE_ENUM, uint32_T, XILIOData **);
    41
    42/* Output - called from mdlOutputs */
    43extern XIL_INTERFACE_ERROR_CODE xilOutput(uint32_T, uint32_T);
    44
    45/* Update - called from mdlOutputs (not mdlUpdate) */
    46extern XIL_INTERFACE_ERROR_CODE xilUpdate(uint32_T, uint32_T);
    47
    48/* Initialize output XILIOData pointer */
    49extern XIL_INTERFACE_ERROR_CODE xilGetTargetToHostData(uint32_T, XIL_COMMAND_TYPE_ENUM, uint32_T, XILIOData **, MemUnit_T responseId, uint32_T serverFcnId);
    50
    51/* Initialize state output XILIOData pointer */
    52extern XIL_INTERFACE_ERROR_CODE xilGetTargetToHostPreData(uint32_T, XIL_COMMAND_TYPE_ENUM, uint32_T, XILIOData **, MemUnit_T responseId, uint32_T serverFcnId);
    53
    54/* Terminate - called from mdlTerminate */
    55extern XIL_INTERFACE_ERROR_CODE xilTerminate(uint32_T);
    56
    57/* Enable - called from mdlEnable */
    58extern XIL_INTERFACE_ERROR_CODE xilEnable(uint32_T, uint32_T);
    59
    60/* Disable - called from mdlDisable */
    61extern XIL_INTERFACE_ERROR_CODE xilDisable(uint32_T, uint32_T);
    62
    63/* Pause - called from mdlSimStatusChange */
    64extern XIL_INTERFACE_ERROR_CODE xilPause(uint32_T);
    65
    66#ifdef __cplusplus
    67}
    68#endif
    69
    70#endif
    71
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_c.html new file mode 100644 index 0000000..0515658 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_c.html @@ -0,0 +1,1458 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2006-2019 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_interface_lib.c
    5 *
    6 * SIL/PIL support library
    7 *
    8 */
    9
    10#include "xil_interface_lib.h"
    11#include "xil_interface_lib_private.h"
    12#include "xil_data_stream.h"
    13#include "codeinstr_data_stream.h"
    14#include "xil_interface.h"
    15#include "coder_assumptions_app.h"
    16#include "XILTgtAppSvc_CInterface.h"
    17
    18#ifdef LDRA_ENABLED
    19#include "code_coverage_utils.h"
    20#endif /* LDRA_ENABLED */
    21
    22#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    23 void swapBytes(MemUnit_T * const buffer, uint32_T size);
    24 static XIL_DATA_STREAM_ERROR_CODE xilReadDataAndSwapBytes(MemUnit_T * dst, uint32_T size);
    25#endif /* HOST_BIG_ENDIAN_PROTOCOL_TESTING */
    26
    27/* Internal state variable holding information about the
    28 * XILIOData currently being processed.
    29 *
    30 * Note: this variable is shared by UDATA processing code
    31 * and YDATA processing code and used for all IO.
    32 *
    33 */
    34static XILIOData * xilIODataPtr;
    35static int isShutdownCommand = 0;
    36static int processMsgSuccess = 1;
    37
    38/* xilProcessMsg current context (cc)*/
    39static XIL_PROCESS_MSG_CONTEXT_SWITCH cc = {XIL_READ_COMMAND_CODE, XIL_INIT_COMMAND, 0, 0};
    40
    41/* static functions */
    42static void restoreProcessMsgContext(XIL_PROCESS_MSG_CONTEXT_SWITCH cachedCtx) {
    43 cc.state = cachedCtx.state;
    44 cc.command = cachedCtx.command;
    45 cc.commandIdx = cachedCtx.commandIdx;
    46 cc.fcnId = cachedCtx.fcnId;
    47}
    48
    49static void getNextXILIOData(void) {
    50 /* increment xilIOData ptr if we have not reached the end */
    51 if (xilIODataPtr->memUnitLength!=0) {
    52 xilIODataPtr++;
    53 }
    54}
    55
    56static XIL_PROCESSDATA_ERROR_CODE processHostToTargetData(uint32_T fcnId,
    57 XIL_COMMAND_TYPE_ENUM command,
    58 uint32_T commandIdx) {
    59
    60 /* this function receives some arbitrary data size that needs to be
    61 * into the appropriate memory addresses. Since it is not guaranteed
    62 * that we will copy all the required data in one go, we need to keep
    63 * track of which address (and size) in xilIODataPtr we last copied
    64 * to so we can continue copying the remaining data the next time we
    65 * receive them.
    66 */
    67 static MemUnit_T * uDataAddress = NULL;
    68 static uint32_T uDataLength = 0;
    69 int processingComplete = 0;
    70
    71 /* initialize uDataAddress and uDataLength if necessary*/
    72 if (uDataAddress == NULL) {
    73 /* initialise xilIODataPtr before beginning to process data */
    74 if (xilGetHostToTargetData(fcnId, command, commandIdx, &xilIODataPtr)) {
    75 /* no udata processing to be done - we're complete */
    76 processingComplete = 1;
    77 return XIL_PROCESSDATA_SUCCESS;
    78 }
    79
    80 uDataAddress = xilIODataPtr->address;
    81 uDataLength = xilIODataPtr->memUnitLength;
    82 }
    83
    84 while(!(processingComplete)) {
    85 xilReadData(uDataAddress, uDataLength);
    86 getNextXILIOData();
    87
    88 if (xilIODataPtr->memUnitLength == 0) {
    89 /* done processing all xilIOData */
    90 processingComplete = 1;
    91 uDataAddress = NULL;
    92 } else {
    93 /* reset our pointer to next xilIOData */
    94 uDataAddress = xilIODataPtr->address;
    95 uDataLength = xilIODataPtr->memUnitLength;
    96 }
    97 }
    98
    99 return XIL_PROCESSDATA_SUCCESS;
    100}
    101
    102static XIL_PROCESSDATA_ERROR_CODE processTargetToHostData(uint32_T fcnId,
    103 MemUnit_T responseId,
    104 XIL_COMMAND_TYPE_ENUM command,
    105 uint32_T commandIdx,
    106 uint32_T serverFcnId) {
    107
    108 int moreXILData = 1;
    109
    110 /* initialise before beginning to process data */
    111 if (xilGetTargetToHostData(fcnId, command, commandIdx, &xilIODataPtr, responseId, serverFcnId)) {
    112 /* no ydata processing to be done - we're complete */
    113 return XIL_PROCESSDATA_SUCCESS;
    114 }
    115
    116 while(moreXILData) {
    117 if (xilWriteData(xilIODataPtr->address, xilIODataPtr->memUnitLength) != XIL_DATA_STREAM_SUCCESS) {
    118 return XIL_PROCESSDATA_DATA_STREAM_ERROR;
    119 }
    120 /* get next xilIOData */
    121 getNextXILIOData();
    122 if (xilIODataPtr->memUnitLength == 0) {
    123 moreXILData = 0;
    124 }
    125 }
    126 return XIL_PROCESSDATA_SUCCESS;
    127}
    128
    129static XIL_PROCESSDATA_ERROR_CODE processTargetToHostPreData(uint32_T fcnId,
    130 MemUnit_T responseId,
    131 XIL_COMMAND_TYPE_ENUM command,
    132 uint32_T commandIdx) {
    133
    134 int moreXILData = 1;
    135 uint32_T serverFcnId = 0; /*Default server function ID*/
    136
    137 /* initialise before beginning to process data */
    138 if (xilGetTargetToHostPreData(fcnId, command, commandIdx, &xilIODataPtr, responseId, serverFcnId)) {
    139 /* no ydata processing to be done - we're complete */
    140 return XIL_PROCESSDATA_SUCCESS;
    141 }
    142
    143 while(moreXILData) {
    144 if (xilWriteData(xilIODataPtr->address, xilIODataPtr->memUnitLength) != XIL_DATA_STREAM_SUCCESS) {
    145 return XIL_PROCESSDATA_DATA_STREAM_ERROR;
    146 }
    147 /* get next xilIOData */
    148 getNextXILIOData();
    149 if (xilIODataPtr->memUnitLength == 0) {
    150 moreXILData = 0;
    151 }
    152 }
    153 return XIL_PROCESSDATA_SUCCESS;
    154}
    155
    156static XIL_INTERFACE_LIB_ERROR_CODE finalizeCommandResponse(XIL_RESPONSE_ERROR_ID errorId, MemUnit_T isEndOfXILStep) {
    157
    158#ifdef CODE_INSTRUMENTATION_ENABLED
    159 /* flush the output stream
    160 * before beginning next command */
    161 if (codeInstrDataFlush() != XIL_DATA_STREAM_SUCCESS) {
    162 return XIL_INTERFACE_LIB_ERROR;
    163 }
    164#endif
    165
    166 /* only send the error id if necessary */
    167 if (errorId != XIL_RESPONSE_ERROR_SUCCESS) {
    168 /* send response id code */
    169 MemUnit_T memUnitData = XIL_RESPONSE_ERROR;
    170 if (xilWriteData(&memUnitData, sizeof(memUnitData)) != XIL_DATA_STREAM_SUCCESS) {
    171 return XIL_INTERFACE_LIB_ERROR;
    172 }
    173 /* send error id */
    174 memUnitData = (MemUnit_T) errorId;
    175 if (xilWriteData(&memUnitData, sizeof(memUnitData)) != XIL_DATA_STREAM_SUCCESS) {
    176 return XIL_INTERFACE_LIB_ERROR;
    177 }
    178 }
    179 /* flush the output stream
    180 * before beginning next command */
    181 if (xilDataFlush(isEndOfXILStep) != XIL_DATA_STREAM_SUCCESS) {
    182 return XIL_INTERFACE_LIB_ERROR;
    183 }
    184 return XIL_INTERFACE_LIB_SUCCESS;
    185}
    186
    187/* Given current state and command, compute the next state for handleReceive */
    188static XIL_HANDLE_RECV_STATE computeNextState(XIL_HANDLE_RECV_STATE state, XIL_COMMAND_TYPE_ENUM command) {
    189
    190 XIL_HANDLE_RECV_STATE nextState;
    191
    192 switch(state) {
    193 case XIL_READ_COMMAND_CODE:
    194 switch(command) {
    195 case XIL_INIT_COMMAND:
    196 case XIL_CONST_OUTPUT_COMMAND:
    197 case XIL_INITIALIZE_COMMAND:
    198 case XIL_SYSTEM_INITIALIZE_COMMAND:
    199 case XIL_TERMINATE_COMMAND:
    200 case XIL_PROCESS_PARAMS_COMMAND:
    201 case XIL_ENABLE_COMMAND:
    202 case XIL_DISABLE_COMMAND:
    203 case XIL_CLIENT_SERVER_COMMAND:
    204 case XIL_UPDATE_COMMAND:
    205 case XIL_OUTPUT_COMMAND:
    206 case XIL_SYSTEM_RESET_COMMAND:
    207 case XIL_PAUSE_COMMAND:
    208 nextState = XIL_READ_FCNID;
    209 break;
    210 case XIL_SHUTDOWN_COMMAND:
    211 nextState = XIL_READ_FCNID;
    212 break;
    213 default:
    214 nextState = XIL_INVALID_STATE;
    215 break;
    216 }
    217 break;
    218 case XIL_READ_FCNID:
    219 switch(command) {
    220 case XIL_INIT_COMMAND:
    221 case XIL_PAUSE_COMMAND:
    222 nextState = XIL_CALL_XILINTERFACE;
    223 break;
    224 case XIL_CONST_OUTPUT_COMMAND:
    225 nextState = XIL_PROCESS_TARGET_TO_HOST_DATA;
    226 break;
    227 case XIL_INITIALIZE_COMMAND:
    228 case XIL_SYSTEM_INITIALIZE_COMMAND:
    229 case XIL_TERMINATE_COMMAND:
    230 case XIL_PROCESS_PARAMS_COMMAND:
    231 case XIL_SYSTEM_RESET_COMMAND:
    232 nextState = XIL_PROCESS_HOST_TO_TARGET_DATA;
    233 break;
    234 case XIL_ENABLE_COMMAND:
    235 case XIL_DISABLE_COMMAND:
    236 case XIL_CLIENT_SERVER_COMMAND:
    237 case XIL_UPDATE_COMMAND:
    238 case XIL_OUTPUT_COMMAND:
    239 nextState = XIL_READ_XILTID;
    240 break;
    241 default:
    242 nextState = XIL_INVALID_STATE;
    243 break;
    244 }
    245 break;
    246 case XIL_READ_XILTID:
    247 switch(command) {
    248 case XIL_ENABLE_COMMAND:
    249 case XIL_DISABLE_COMMAND:
    250 case XIL_CLIENT_SERVER_COMMAND:
    251 case XIL_OUTPUT_COMMAND:
    252 case XIL_UPDATE_COMMAND:
    253 nextState = XIL_PROCESS_HOST_TO_TARGET_DATA;
    254 break;
    255 default:
    256 nextState = XIL_INVALID_STATE;
    257 break;
    258 }
    259 break;
    260 case XIL_PROCESS_HOST_TO_TARGET_DATA:
    261 switch(command) {
    262 case XIL_INITIALIZE_COMMAND:
    263 case XIL_SYSTEM_INITIALIZE_COMMAND:
    264 case XIL_ENABLE_COMMAND:
    265 case XIL_DISABLE_COMMAND:
    266 case XIL_TERMINATE_COMMAND:
    267 case XIL_PROCESS_PARAMS_COMMAND:
    268 case XIL_UPDATE_COMMAND:
    269 case XIL_SYSTEM_RESET_COMMAND:
    270 case XIL_PAUSE_COMMAND:
    271 nextState = XIL_CALL_XILINTERFACE;
    272 break;
    273 case XIL_OUTPUT_COMMAND:
    274 nextState = XIL_PROCESS_TARGET_TO_HOST_PRE_DATA;
    275 break;
    276 case XIL_CLIENT_SERVER_COMMAND:
    277 nextState = XIL_COMPLETE;
    278 break;
    279 default:
    280 nextState = XIL_INVALID_STATE;
    281 break;
    282 }
    283 break;
    284 case XIL_PROCESS_TARGET_TO_HOST_PRE_DATA:
    285 switch(command) {
    286 case XIL_OUTPUT_COMMAND:
    287 nextState = XIL_CALL_XILINTERFACE;
    288 break;
    289 default:
    290 nextState = XIL_INVALID_STATE;
    291 break;
    292 }
    293 break;
    294 case XIL_CALL_XILINTERFACE:
    295 switch(command) {
    296 case XIL_UPDATE_COMMAND:
    297 case XIL_INIT_COMMAND:
    298 case XIL_PROCESS_PARAMS_COMMAND:
    299 nextState = XIL_COMPLETE;
    300 break;
    301 case XIL_INITIALIZE_COMMAND:
    302 case XIL_SYSTEM_INITIALIZE_COMMAND:
    303 case XIL_CONST_OUTPUT_COMMAND:
    304 case XIL_ENABLE_COMMAND:
    305 case XIL_DISABLE_COMMAND:
    306 case XIL_OUTPUT_COMMAND:
    307 case XIL_SYSTEM_RESET_COMMAND:
    308 case XIL_PAUSE_COMMAND:
    309 case XIL_TERMINATE_COMMAND:
    310 nextState = XIL_PROCESS_TARGET_TO_HOST_DATA;
    311 break;
    312 default:
    313 nextState = XIL_INVALID_STATE;
    314 break;
    315 }
    316 break;
    317 case XIL_PROCESS_TARGET_TO_HOST_DATA:
    318 /* done */
    319 nextState = XIL_COMPLETE;
    320 break;
    321 default:
    322 nextState = XIL_INVALID_STATE;
    323 break;
    324 }
    325 return nextState;
    326}
    327
    328#define XIL_COMMAND_TYPE_SIZE sizeof(MemUnit_T)
    329#define XIL_COMMAND_CODE_IDX 0
    330#define XIL_COMMAND_FCNID_IDX (XIL_COMMAND_CODE_IDX + XIL_COMMAND_TYPE_SIZE)
    331#define XIL_COMMAND_FCNID_SIZE sizeof(uint32_T)
    332#define XIL_COMMAND_XILTID_IDX (XIL_COMMAND_FCNID_IDX + XIL_COMMAND_FCNID_SIZE)
    333#define XIL_COMMAND_XILTID_SIZE sizeof(uint32_T)
    334#define XIL_COMMAND_ERROR_STATUS_SIZE sizeof(MemUnit_T)
    335
    336#define XIL_RUN_EXIT_ERROR processMsgSuccess = 0; \
    337 return
    338#define XIL_RUN_EXIT return
    339
    340#define XIL_EXIT_ERROR_IF_INVALID_STATE if (cc.state == XIL_INVALID_STATE) { \
    341 XIL_RUN_EXIT_ERROR; \
    342 }
    343
    344static void xilReadCommandCode(void) {
    345 MemUnit_T commandCode;
    346 if (cc.state==XIL_READ_COMMAND_CODE) {
    347 /* read commandCode */
    348
    349 xilReadData(&(commandCode), XIL_COMMAND_TYPE_SIZE);
    350
    351 /* cast from the MemUnit commandCode to the enumeration commandCode */
    352 cc.command = (XIL_COMMAND_TYPE_ENUM) commandCode;
    353
    354 if (cc.command == XIL_SHUTDOWN_COMMAND) {
    355 /* Terminate this process when XIL simulation is complete */
    356 isShutdownCommand = 1;
    357 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_TERMINATE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    358 XIL_RUN_EXIT_ERROR;
    359 }
    360 else {
    361 XIL_RUN_EXIT;
    362 }
    363 } else {
    364 /* compute next state */
    365 cc.state = computeNextState(cc.state, cc.command);
    366 XIL_EXIT_ERROR_IF_INVALID_STATE;
    367 }
    368 }
    369}
    370
    371void xilProcessMsg(void) {
    372 /* read commandCode */
    373 xilReadCommandCode();
    374
    375 if (cc.state==XIL_READ_FCNID) {
    376 /* read fcnId */
    377#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    378 xilReadDataAndSwapBytes(((MemUnit_T*)&(cc.fcnId)), XIL_COMMAND_FCNID_SIZE);
    379#else
    380 xilReadData(((MemUnit_T*)&(cc.fcnId)), XIL_COMMAND_FCNID_SIZE);
    381#endif /*HOST_BIG_ENDIAN_PROTOCOL_TESTING*/
    382
    383
    384
    385 /* compute next state */
    386 cc.state = computeNextState(cc.state, cc.command);
    387 XIL_EXIT_ERROR_IF_INVALID_STATE;
    388 }
    389
    390
    391 if (cc.state==XIL_READ_XILTID) {
    392 /* read commandIdx */
    393
    394#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    395 xilReadDataAndSwapBytes(((MemUnit_T*)&(cc.commandIdx)), XIL_COMMAND_XILTID_SIZE);
    396#else
    397 xilReadData(((MemUnit_T*)&(cc.commandIdx)), XIL_COMMAND_XILTID_SIZE);
    398#endif /*HOST_BIG_ENDIAN_PROTOCOL_TESTING*/
    399
    400 /* compute next state */
    401 cc.state = computeNextState(cc.state, cc.command);
    402 XIL_EXIT_ERROR_IF_INVALID_STATE;
    403 }
    404
    405 if (cc.state == XIL_PROCESS_HOST_TO_TARGET_DATA) {
    406 /* process inputs if required by command */
    407 XIL_PROCESSDATA_ERROR_CODE processDataError;
    408 /* process data from host */
    409 processDataError = processHostToTargetData(cc.fcnId, cc.command, cc.commandIdx);
    410 if (processDataError == XIL_PROCESSDATA_DATA_STREAM_ERROR) {
    411 XIL_RUN_EXIT_ERROR;
    412 } else if (processDataError != XIL_PROCESSDATA_SUCCESS) {
    413 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_PROCESS_UDATA, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    414 XIL_RUN_EXIT_ERROR;
    415 }
    416 else {
    417 XIL_RUN_EXIT;
    418 }
    419 }
    420
    421 /* compute next state */
    422 cc.state = computeNextState(cc.state, cc.command);
    423 XIL_EXIT_ERROR_IF_INVALID_STATE
    424 }
    425
    426 if (cc.state == XIL_PROCESS_TARGET_TO_HOST_PRE_DATA) {
    427 XIL_PROCESSDATA_ERROR_CODE processDataError;
    428 /* process data from target */
    429 processDataError = processTargetToHostPreData(cc.fcnId, XIL_RESPONSE_OUTPUT_PRE_DATA, cc.command, cc.commandIdx);
    430 if (processDataError == XIL_PROCESSDATA_DATA_STREAM_ERROR) {
    431 XIL_RUN_EXIT_ERROR;
    432 } else if (processDataError != XIL_PROCESSDATA_SUCCESS) {
    433 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_PROCESS_YDATA, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    434 XIL_RUN_EXIT_ERROR;
    435 }
    436 else {
    437 XIL_RUN_EXIT;
    438 }
    439 }
    440 /* compute next state */
    441 cc.state = computeNextState(cc.state, cc.command);
    442 XIL_EXIT_ERROR_IF_INVALID_STATE;
    443 }
    444
    445 if (cc.state == XIL_CALL_XILINTERFACE) {
    446 /* call xilInterface function */
    447 switch(cc.command) {
    448#ifndef OUT_OF_PROCESS_EXEC
    449 case XIL_INIT_COMMAND:
    450 {
    451#if CODER_ASSUMPTIONS_ENABLED == 1
    452 /* run validation of coder assumptions */
    453 if (coderAssumptionsRun() != XIL_INTERFACE_LIB_SUCCESS) {
    454 XIL_RUN_EXIT_ERROR;
    455 }
    456#endif
    457 if (xilGetDataTypeInfo() != XIL_INTERFACE_SUCCESS) {
    458 XIL_RUN_EXIT_ERROR;
    459 }
    460 break;
    461 }
    462 case XIL_CONST_OUTPUT_COMMAND:
    463 /* no function */
    464 break;
    465 case XIL_PROCESS_PARAMS_COMMAND:
    466 if (xilProcessParams(cc.fcnId) != XIL_INTERFACE_SUCCESS) {
    467 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_PROCESS_PARAMS, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    468 XIL_RUN_EXIT_ERROR;
    469 }
    470 else {
    471 XIL_RUN_EXIT;
    472 }
    473 }
    474 break;
    475 case XIL_INITIALIZE_COMMAND:
    476 if (xilInitialize(cc.fcnId) != XIL_INTERFACE_SUCCESS) {
    477 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_INITIALIZE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    478 XIL_RUN_EXIT_ERROR;
    479 }
    480 else {
    481 XIL_RUN_EXIT;
    482 }
    483 }
    484 break;
    485 case XIL_PAUSE_COMMAND:
    486 if (xilPause(cc.fcnId) != XIL_INTERFACE_SUCCESS) {
    487 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_INITIALIZE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    488 XIL_RUN_EXIT_ERROR;
    489 }
    490 else {
    491 XIL_RUN_EXIT;
    492 }
    493 }
    494 break;
    495 case XIL_SYSTEM_INITIALIZE_COMMAND:
    496 if (xilSystemInitialize(cc.fcnId) != XIL_INTERFACE_SUCCESS) {
    497 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_SYSTEM_INITIALIZE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    498 XIL_RUN_EXIT_ERROR;
    499 }
    500 else {
    501 XIL_RUN_EXIT;
    502 }
    503 }
    504 break;
    505 case XIL_TERMINATE_COMMAND:
    506 if (xilTerminate(cc.fcnId) != XIL_INTERFACE_SUCCESS) {
    507 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_TERMINATE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    508 XIL_RUN_EXIT_ERROR;
    509 }
    510 else {
    511 XIL_RUN_EXIT;
    512 }
    513 }
    514 break;
    515 case XIL_ENABLE_COMMAND:
    516 if (xilEnable(cc.fcnId, cc.commandIdx) != XIL_INTERFACE_SUCCESS) {
    517 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_ENABLE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    518 XIL_RUN_EXIT_ERROR;
    519 }
    520 else {
    521 XIL_RUN_EXIT;
    522 }
    523 }
    524 break;
    525 case XIL_DISABLE_COMMAND:
    526 if (xilDisable(cc.fcnId, cc.commandIdx) != XIL_INTERFACE_SUCCESS) {
    527 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_DISABLE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    528 XIL_RUN_EXIT_ERROR;
    529 }
    530 else {
    531 XIL_RUN_EXIT;
    532 }
    533 }
    534 break;
    535 case XIL_UPDATE_COMMAND:
    536 if (xilUpdate(cc.fcnId, cc.commandIdx) != XIL_INTERFACE_SUCCESS) {
    537 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_UPDATE, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    538 XIL_RUN_EXIT_ERROR;
    539 } else {
    540 XIL_RUN_EXIT;
    541 }
    542 }
    543 break;
    544#endif
    545 case XIL_OUTPUT_COMMAND:
    546 if (xilOutput(cc.fcnId, cc.commandIdx) != XIL_INTERFACE_SUCCESS) {
    547 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_OUTPUT, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    548 XIL_RUN_EXIT_ERROR;
    549 }
    550 else {
    551 XIL_RUN_EXIT;
    552 }
    553 }
    554 break;
    555#ifndef OUT_OF_PROCESS_EXEC
    556 case XIL_SYSTEM_RESET_COMMAND:
    557 if (xilSystemReset(cc.fcnId) != XIL_INTERFACE_SUCCESS) {
    558 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_SYSTEM_RESET, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    559 XIL_RUN_EXIT_ERROR;
    560 }
    561 else {
    562 XIL_RUN_EXIT;
    563 }
    564 }
    565 break;
    566#endif
    567 default:
    568 XIL_RUN_EXIT_ERROR;
    569 }
    570 /* compute next state */
    571 cc.state = computeNextState(cc.state, cc.command);
    572 XIL_EXIT_ERROR_IF_INVALID_STATE;
    573 }
    574 if (cc.state == XIL_PROCESS_TARGET_TO_HOST_DATA) {
    575 XIL_PROCESSDATA_ERROR_CODE processDataError;
    576 uint32_T serverFcnId = 0; /* Default server function ID */
    577 /* process data from target */
    578 processDataError = processTargetToHostData(cc.fcnId, XIL_RESPONSE_OUTPUT_DATA, cc.command, cc.commandIdx, serverFcnId);
    579 if (processDataError == XIL_PROCESSDATA_DATA_STREAM_ERROR) {
    580 XIL_RUN_EXIT_ERROR;
    581 } else if (processDataError != XIL_PROCESSDATA_SUCCESS) {
    582 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_PROCESS_YDATA, 1) != XIL_INTERFACE_LIB_SUCCESS) {
    583 XIL_RUN_EXIT_ERROR;
    584 }
    585 else {
    586 XIL_RUN_EXIT;
    587 }
    588 }
    589 /* compute next state */
    590 cc.state = computeNextState(cc.state, cc.command);
    591 XIL_EXIT_ERROR_IF_INVALID_STATE;
    592 /*break;*/
    593 }
    594
    595
    596#ifdef LDRA_ENABLED
    597 /* upload code coverage execution history from target*/
    598 if (cc.command == XIL_TERMINATE_COMMAND) {
    599 callTargetUploadFcns();
    600 }
    601#endif /* LDRA_ENABLED */
    602
    603 /* client/server commands could be executed in the middle of a step */
    604 if ((cc.state == XIL_COMPLETE) && (cc.command != XIL_CLIENT_SERVER_COMMAND)) {
    605 /* finalize the response */
    606 MemUnit_T isEndOfXILStep = 1;
    607 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_SUCCESS, isEndOfXILStep) != XIL_INTERFACE_LIB_SUCCESS) {
    608 XIL_RUN_EXIT_ERROR;
    609 }
    610
    611 /* reset state */
    612 cc.state = XIL_READ_COMMAND_CODE;
    613 }
    614
    615 XIL_RUN_EXIT;
    616
    617}
    618
    619XIL_INTERFACE_LIB_ERROR_CODE xilRun(void) {
    620 XIL_INTERFACE_LIB_ERROR_CODE errorCode = XIL_INTERFACE_LIB_SUCCESS;
    621
    622 /* read one msg and pass to owning application */
    623 xilProcessMsg();
    624
    625 if (processMsgSuccess) {
    626 if (isShutdownCommand) {
    627 errorCode = XIL_INTERFACE_LIB_TERMINATE;
    628 } else {
    629 errorCode = XIL_INTERFACE_LIB_SUCCESS;
    630 }
    631
    632 } else {
    633 errorCode = XIL_INTERFACE_LIB_ERROR;
    634 }
    635 return errorCode;
    636}
    637
    638/* Dispatch and receive client/server commands within a step */
    639void xilCommandDispatchAndResponse(XIL_COMMAND_TYPE_ENUM xilCommandType,
    640 uint32_T xilCommandIdx, uint32_T xilFcnId,
    641 uint32_T svrFcnId, MemUnit_T xilResponseId,
    642 XIL_PROCESS_MSG_CONTEXT_SWITCH callerCtx) {
    643
    644 /* define a binary flag, each CS command needs to process a response */
    645 int needToProcessCSResponse = 1;
    646
    647 /* send input data to the host */
    648 if (processTargetToHostData(xilFcnId, xilResponseId, xilCommandType,
    649 xilCommandIdx, svrFcnId) == XIL_PROCESSDATA_DATA_STREAM_ERROR) {
    650 restoreProcessMsgContext(callerCtx);
    651 XIL_RUN_EXIT_ERROR;
    652 }
    653
    654 /* finalize the response */
    655 {
    656 MemUnit_T isEndOfXILStep = 0;
    657 if (finalizeCommandResponse(XIL_RESPONSE_ERROR_SUCCESS, isEndOfXILStep) !=
    658 XIL_INTERFACE_LIB_SUCCESS) {
    659 restoreProcessMsgContext(callerCtx);
    660 XIL_RUN_EXIT_ERROR;
    661 }
    662 }
    663
    664 /* reset state for new context, recursive calls are safe because all
    665 * the caller contexts (callerCtx) are cached in the stack */
    666 cc.state = XIL_READ_COMMAND_CODE;
    667
    668 while(needToProcessCSResponse) {
    669 /* read next command requested by the host */
    670 xilReadCommandCode();
    671 if (cc.command == XIL_CLIENT_SERVER_COMMAND) {
    672 /* if the host sent a response to the server call, process it
    673 * and then exit the loop. Otherwise, process the current
    674 * command and read the next one */
    675 needToProcessCSResponse = 0;
    676 }
    677 /* process response data sent by host */
    678 if (xilRun() != XIL_INTERFACE_LIB_SUCCESS) {
    679 restoreProcessMsgContext(callerCtx);
    680 XIL_RUN_EXIT_ERROR;
    681 }
    682 }
    683
    684 restoreProcessMsgContext(callerCtx);
    685
    686}
    687
    688XIL_PROCESS_MSG_CONTEXT_SWITCH xilGetCurrentProcessMsgContext(void) {
    689 /* return the current context (cc) */
    690 return cc;
    691}
    692
    693
    694#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    695
    696void swapBytes(MemUnit_T * const buffer, uint32_T size) {
    697 MemUnit_T tmp;
    698 MemUnit_T *headPtr;
    699 MemUnit_T *tailPtr;
    700 uint32_T idx;
    701
    702 for(idx = 0; idx < size/2; idx ++) {
    703 headPtr = buffer + idx;
    704 tailPtr = buffer + size -1 - idx;
    705 tmp = *headPtr;
    706 *headPtr = *tailPtr;
    707 *tailPtr = tmp;
    708 }
    709}
    710
    711static XIL_DATA_STREAM_ERROR_CODE xilReadDataAndSwapBytes(MemUnit_T * dst, uint32_T size) {
    712 XIL_DATA_STREAM_ERROR_CODE readDataVal = xilReadData(dst, size);
    713
    714 if (readDataVal == XIL_DATA_STREAM_SUCCESS) {
    715 swapBytes(dst, size);
    716 }
    717 return readDataVal;
    718}
    719
    720#endif /*HOST_BIG_ENDIAN_PROTOCOL_TESTING*/
    721
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_h.html new file mode 100644 index 0000000..3a3ea53 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_h.html @@ -0,0 +1,100 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2006-2018 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_interface_lib.h
    5 *
    6 * SIL/PIL support library
    7 */
    8
    9#ifndef __XIL_INTERFACE_LIB_H__
    10#define __XIL_INTERFACE_LIB_H__
    11
    12#include "xil_error_codes.h"
    13#include "xil_common.h"
    14#include "xil_interface_common.h"
    15
    16/* always present a C function-call interface for xil_interface_lib.c */
    17#ifdef __cplusplus
    18extern "C" {
    19#endif
    20
    21/* xil interface functions to be called from main */
    22extern XIL_INTERFACE_LIB_ERROR_CODE xilInit(const int argc,
    23 void *argv[]);
    24extern XIL_INTERFACE_LIB_ERROR_CODE xilRun(void);
    25
    26/* terminate XIL communications */
    27extern XIL_INTERFACE_LIB_ERROR_CODE xilTerminateComms(void);
    28
    29/* Dispatch and receive client/server commands within a step */
    30extern void xilCommandDispatchAndResponse(XIL_COMMAND_TYPE_ENUM xilCommandType,
    31 uint32_T xilCommandIdx, uint32_T xilFcnId,
    32 uint32_T serverFcnId, MemUnit_T xilResponseId,
    33 XIL_PROCESS_MSG_CONTEXT_SWITCH callerCtx);
    34
    35/* return the current context (cc) */
    36extern XIL_PROCESS_MSG_CONTEXT_SWITCH xilGetCurrentProcessMsgContext(void);
    37#ifdef __cplusplus
    38}
    39#endif
    40
    41#endif
    42
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_private_h.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_private_h.html new file mode 100644 index 0000000..f5f8bb9 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_interface_lib_private_h.html @@ -0,0 +1,106 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2006-2017 The MathWorks, Inc. */
    2
    3/*
    4 * File: xil_interface_lib_private.h
    5 *
    6 * SIL/PIL support library
    7 */
    8
    9#ifndef __XIL_INTERFACE_LIB_PRIVATE_H__
    10#define __XIL_INTERFACE_LIB_PRIVATE_H__
    11
    12#include "xil_interface_common.h"
    13
    14/* Enumeration to denote UDATA or YDATA processing */
    15typedef enum {XIL_UDATA_IO = 0, XIL_YDATA_IO} XIL_IO_TYPE;
    16
    17/* define some error codes */
    18typedef enum {XIL_PROCESSDATA_SUCCESS=0,
    19 XIL_PROCESSDATA_DATA_STREAM_ERROR,
    20 XIL_PROCESSDATA_IO_TYPE_ERROR} XIL_PROCESSDATA_ERROR_CODE;
    21
    22/* define error response error ids */
    23typedef enum {XIL_RESPONSE_ERROR_SUCCESS=0,
    24 XIL_RESPONSE_ERROR_PROCESS_UDATA,
    25 XIL_RESPONSE_ERROR_PROCESS_YDATA,
    26 XIL_RESPONSE_ERROR_PROCESS_PARAMS,
    27 XIL_RESPONSE_ERROR_INITIALIZE,
    28 XIL_RESPONSE_ERROR_SYSTEM_INITIALIZE,
    29 XIL_RESPONSE_ERROR_OUTPUT,
    30 XIL_RESPONSE_ERROR_UPDATE,
    31 XIL_RESPONSE_ERROR_TERMINATE,
    32 XIL_RESPONSE_ERROR_ENABLE,
    33 XIL_RESPONSE_ERROR_DISABLE,
    34 XIL_RESPONSE_ERROR_SYSTEM_RESET} XIL_RESPONSE_ERROR_ID;
    35
    36/* static functions */
    37static void getNextXILIOData(void);
    38
    39static XIL_HANDLE_RECV_STATE computeNextState(
    40 XIL_HANDLE_RECV_STATE currentState,
    41 XIL_COMMAND_TYPE_ENUM command);
    42
    43
    44#endif
    45
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_rtiostream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_rtiostream_c.html new file mode 100644 index 0000000..5124000 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_rtiostream_c.html @@ -0,0 +1,114 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2015 The MathWorks, Inc. */
    2
    3#include "rx_tx_buffer_sizes.h"
    4#include "xil_common.h"
    5#include "XILTgtAppSvc_CInterface.h"
    6
    7/* XIL buffer is statically allocated for rtiostream-based implementation */
    8static IOUnit_T xilWriteBuffer[XIL_TX_BUFFER_MEMUNIT_SIZE];
    9
    10extern uint8_T xilTgtAppSvcCreate(void) {
    11 return XILTGTAPPSVC_SUCCESS;
    12}
    13
    14extern void xilTgtAppSvcDestroy(void) {
    15}
    16
    17/* Allocation method simply returns the statically allocated buffer */
    18extern uint8_T xilTgtAppSvcAllocBuffer(
    19 void** ppBuf,
    20 const uint16_T dataSize) {
    21
    22 /* buffer is already statically allocated */
    23 *ppBuf = &xilWriteBuffer[APPLICATION_ID_IDX];
    24
    25 UNUSED_PARAMETER(dataSize);
    26
    27 /* nothing to do as buffer is already statically allocated */
    28 return XILTGTAPPSVC_SUCCESS;
    29}
    30
    31/* return pointer to XIL buffer data */
    32extern IOUnit_T * xilTgtAppSvcGetBufferDataPtr(
    33 void* const pBuf) {
    34
    35 /* buffer is already statically allocated */
    36 UNUSED_PARAMETER(pBuf);
    37
    38 return &xilWriteBuffer[PAYLOAD_IDX];
    39}
    40
    41/* send data over rtiostream */
    42extern uint8_T xilTgtAppSvcSend(
    43 void* const pBuf,
    44 const uint16_T dataSize) {
    45
    46 return (uint8_T)commsEnqueueBuffer(pBuf, XIL_RTIOSTREAM_BASED_SERVICE_ID, dataSize);
    47}
    48
    49
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_services_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_services_c.html new file mode 100644 index 0000000..dbe32e2 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xil_services_c.html @@ -0,0 +1,332 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2015-2018 The MathWorks, Inc. */
    2
    3#ifdef XIL_SIGNAL_HANDLER
    4#include <signal.h>
    5#include <stdio.h>
    6#if defined(__GNUC__) && (defined(__linux__) || defined(__APPLE__))
    7 #include <execinfo.h>
    8 #define MAX_STACKTRACE 12
    9 #endif
    10#endif
    11
    12#ifdef SIL_DISABLE_SUBNORMAL_SUPPORT
    13 #if SIL_DISABLE_SUBNORMAL_SUPPORT >= 1
    14#include <immintrin.h>
    15 #endif
    16#endif
    17
    18#include "xil_error_codes.h"
    19#include "xil_interface_lib.h"
    20#include "xil_data_stream.h"
    21#include "comms_interface.h"
    22
    23#ifdef CODE_INSTRUMENTATION_ENABLED
    24#include "codeinstr_data_stream.h"
    25#endif
    26
    27#ifndef CODER_ASSUMPTIONS_ENABLED
    28 #error "CODER_ASSUMPTIONS_ENABLED should always be defined!"
    29#endif
    30
    31#if CODER_ASSUMPTIONS_ENABLED == 1
    32#include "coder_assumptions_data_stream.h"
    33#endif
    34
    35#ifdef XIL_SIGNAL_HANDLER
    36/* define signal handler codes */
    37typedef enum {XIL_SIGNAL_SIGFPE=0,
    38 XIL_SIGNAL_SIGILL,
    39 XIL_SIGNAL_ABRT,
    40 XIL_SIGNAL_SEGV,
    41 XIL_SIGNAL_UNKNOWN} XIL_SIGNAL_RAISED;
    42
    43static void XILSigHandler(int32_T sigNo)
    44{
    45 MemUnit_T memUnitData = XIL_RESPONSE_SIGNAL_RAISED;
    46
    47 fflush(stderr);
    48
    49 xilWriteData(&memUnitData, sizeof(memUnitData));
    50 switch (sigNo)
    51 {
    52 case SIGFPE:
    53 {
    54 /* Erroneous arithmetic operation, such as division by zero */
    55 memUnitData = XIL_SIGNAL_SIGFPE;
    56 break;
    57 }
    58 case SIGILL:
    59 {
    60 /* Illegal, malformed, unknown or privileged instruction */
    61 memUnitData = XIL_SIGNAL_SIGILL;
    62 break;
    63 }
    64 case SIGABRT:
    65 {
    66 /* Signal abort */
    67 memUnitData = XIL_SIGNAL_ABRT;
    68 break;
    69 }
    70 case SIGSEGV:
    71 {
    72 /* Segmentation violation */
    73 #if defined(__GNUC__) && (defined(__linux__) || defined(__APPLE__))
    74 void *array[MAX_STACKTRACE];
    75 int bt_size = 0;
    76 #endif
    77
    78 memUnitData = XIL_SIGNAL_SEGV;
    79
    80 #if defined(__GNUC__) && (defined(__linux__) || defined(__APPLE__))
    81 bt_size = backtrace(array, MAX_STACKTRACE);
    82 backtrace_symbols_fd(array, bt_size, 2);
    83 #endif
    84 break;
    85 }
    86 default:
    87 {
    88 memUnitData = XIL_SIGNAL_UNKNOWN;
    89 break;
    90 }
    91 }
    92 xilWriteData(&memUnitData, sizeof(memUnitData));
    93
    94 xilDataFlush((MemUnit_T)1);
    95 xilTerminateComms();
    96}
    97#endif
    98
    99/* Entry point (called from sil_main.c & pil_main.c) to initialize services */
    100XIL_INTERFACE_LIB_ERROR_CODE xilInit(const int argc, void *argv[]) {
    101
    102 if (commsInit(argc, argv) != COMMS_SUCCESS) {
    103 return XIL_INTERFACE_LIB_ERROR;
    104 }
    105
    106 if (silpilInit()!=XIL_INTERFACE_LIB_SUCCESS) {
    107 return XIL_INTERFACE_LIB_ERROR;
    108 }
    109
    110#ifdef CODE_INSTRUMENTATION_ENABLED
    111 if (codeInstrInit()!=XIL_INTERFACE_LIB_SUCCESS) {
    112 return XIL_INTERFACE_LIB_ERROR;
    113 }
    114#endif
    115
    116#if CODER_ASSUMPTIONS_ENABLED == 1
    117 if (coderAssumptionsInit()!=XIL_INTERFACE_LIB_SUCCESS) {
    118 return XIL_INTERFACE_LIB_ERROR;
    119 }
    120#endif
    121
    122#ifdef XIL_SIGNAL_HANDLER
    123 /* register signals to catch */
    124 signal(SIGFPE, XILSigHandler); /* Erroneous arithmetic operation */
    125 signal(SIGILL, XILSigHandler); /* Illegal operation */
    126 signal(SIGABRT, XILSigHandler); /* Abort signal */
    127 signal(SIGSEGV, XILSigHandler); /* Segmentation violation */
    128#endif
    129
    130#ifdef SIL_DISABLE_SUBNORMAL_SUPPORT
    131 #if SIL_DISABLE_SUBNORMAL_SUPPORT == 1
    132 _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
    133 #elif SIL_DISABLE_SUBNORMAL_SUPPORT == 2
    134 _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
    135 #endif
    136#endif
    137 return XIL_INTERFACE_LIB_SUCCESS;
    138}
    139
    140/* Entry point (called from sil_main.c & pil_main.c) to terminate services */
    141XIL_INTERFACE_LIB_ERROR_CODE xilTerminateComms(void) {
    142
    143 silpilTerminate();
    144
    145#ifdef CODE_INSTRUMENTATION_ENABLED
    146 codeInstrTerminate();
    147#endif
    148
    149#if CODER_ASSUMPTIONS_ENABLED == 1
    150 coderAssumptionsTerminate();
    151#endif
    152
    153 commsTerminate();
    154
    155 return XIL_INTERFACE_LIB_SUCCESS;
    156}
    157
    158
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/html/xilcomms_rtiostream_c.html b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xilcomms_rtiostream_c.html new file mode 100644 index 0000000..0892c0f --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/html/xilcomms_rtiostream_c.html @@ -0,0 +1,334 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/* Copyright 2013-2017 The MathWorks, Inc. */
    2#include "xilcomms_rtiostream.h"
    3#include "comms_interface.h"
    4#include "rtiostream.h"
    5#include "rtiostream_utils.h"
    6#include "rx_tx_buffer_sizes.h"
    7#include "xil_common.h"
    8#include "XILTgtAppSvc.h"
    9#ifdef HOST_WORD_ADDRESSABLE_TESTING
    10 #include <stdio.h>
    11 #include <stdlib.h>
    12 #include "xil_data_stream.h"
    13#endif
    14#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    15 extern void swapBytes(MemUnit_T * const buffer, uint32_T size);
    16#endif /* HOST_BIG_ENDIAN_PROTOCOL_TESTING */
    17
    18/* call xilProcessMsg */
    19extern void xilProcessMsg(void);
    20
    21/* store stream handle */
    22static int streamID;
    23
    24/* allocate the buffers */
    25static IOUnit_T xilCommsBuffer[RTIOSTREAM_RX_BUFFER_SIZE];
    26
    27
    28/* open rtiostream */
    29int commsInit(const int argc, void * argv[]){
    30
    31 streamID = rtIOStreamOpen(argc, argv);
    32 if (streamID == RTIOSTREAM_ERROR) {
    33 return COMMS_ERROR;
    34 }
    35 return COMMS_SUCCESS;
    36}
    37
    38/* close rtiostream */
    39int commsTerminate(void) {
    40 if (rtIOStreamClose(streamID) == RTIOSTREAM_NO_ERROR) {
    41 return COMMS_SUCCESS;
    42 } else {
    43 return COMMS_ERROR;
    44 }
    45}
    46
    47/* call rtIOStreamBlockingSend to send data*/
    48int commsEnqueueBuffer(
    49 void* const pBuf,
    50 const uint8_T appId,
    51 const uint16_T dataSize) {
    52
    53 int rtIOStreamErrorStatus;
    54 IOUnit_T* appBuffer;
    55 MemUnit_T appIdMemUnit = (MemUnit_T)appId;
    56 uint32_T writeDataAvail = (uint32_T)dataSize;
    57 uint32_T transferSize = writeDataAvail + BUFFER_HEADER_SIZE;
    58
    59 /* write size and application id before sending the buffer */
    60#ifdef HOST_WORD_ADDRESSABLE_TESTING
    61 /* writeDataAvail is in terms of IOUnit_T (uint8_T) - convert to MemUnit_T's
    62 * abort if writeDataAvail does not divide exactly */
    63 uint32_T writeDataAvailMemUnits = writeDataAvail / MEM_UNIT_BYTES;
    64 uint32_T memUnitsRemainder = writeDataAvail % MEM_UNIT_BYTES;
    65 if (memUnitsRemainder != 0) {
    66 fprintf(stderr,"Target application aborted: the number of available Bytes in the " \
    67 "TargetToHost TX Buffer (%d B) does not divide exactly by the number of " \
    68 "Bytes per MemUnit (%d B).\n", writeDataAvail, MEM_UNIT_BYTES);
    69 /* this condition can happen only when the buffer is full with the first
    70 * chunk of outgoing data, at this point the host will not be midway through
    71 * receiving a response. Therefore, it is ok to drop the pending data. */
    72 resetXILWriteBuffer();
    73 /* send the abort message */
    74 abort();
    75 }
    76
    77#else
    78 uint32_T writeDataAvailMemUnits = writeDataAvail;
    79#endif
    80
    81 /* get the pointer for the application buffer of the given app id */
    82 appBuffer = (IOUnit_T*) pBuf;
    83 if (appBuffer == NULL) {
    84 /* early return */
    85 return COMMS_ERROR;
    86 }
    87
    88 UNUSED_PARAMETER(pBuf);
    89
    90 memcpy((void *) &appBuffer[APPLICATION_ID_IDX], &appIdMemUnit, sizeof(appIdMemUnit));
    91
    92#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    93 /* swap the bytes of the playload size that will be sent to the host */
    94 swapBytes((MemUnit_T*)(&writeDataAvailMemUnits), sizeof(writeDataAvailMemUnits));
    95#endif /*HOST_BIG_ENDIAN_PROTOCOL_TESTING*/
    96
    97 memcpy((void *) &appBuffer[PAYLOAD_SIZE_IDX], &writeDataAvailMemUnits, sizeof(writeDataAvailMemUnits));
    98
    99 /* Blocks until all requested outgoing data is sent */
    100 rtIOStreamErrorStatus = rtIOStreamBlockingSend(streamID,
    101 (const void *) appBuffer,
    102 transferSize);
    103
    104 if (rtIOStreamErrorStatus == RTIOSTREAM_ERROR)
    105 return COMMS_ERROR;
    106
    107 return COMMS_SUCCESS;
    108}
    109
    110int rtiostreamReadMessage(IOUnit_T ** currentBufferPosition, uint16_T *currentBufSize) {
    111
    112 int rtIOStreamErrorStatus;
    113 uint32_T dataSize = 0;
    114 MemUnit_T appId;
    115
    116
    117 rtIOStreamErrorStatus = rtIOStreamBlockingRecv(streamID,
    118 (void *) &appId,
    119 sizeof(appId));
    120
    121 if (rtIOStreamErrorStatus == RTIOSTREAM_ERROR)
    122 return COMMS_ERROR;
    123
    124
    125 /* receive size of data contained in the buffer */
    126 rtIOStreamErrorStatus = rtIOStreamBlockingRecv(streamID,
    127 (void *) &dataSize,
    128 sizeof(dataSize));
    129
    130#ifdef HOST_BIG_ENDIAN_PROTOCOL_TESTING
    131 /* swap the bytes of the dataSize sent from the host */
    132 swapBytes((MemUnit_T*)(&dataSize), sizeof(dataSize));
    133#endif /*HOST_BIG_ENDIAN_PROTOCOL_TESTING*/
    134
    135 if (rtIOStreamErrorStatus == RTIOSTREAM_ERROR)
    136 return COMMS_ERROR;
    137
    138
    139#ifdef HOST_WORD_ADDRESSABLE_TESTING
    140 /* dataSize is in terms of MemUnit_T - convert to IOUnit_T (uint8_T). Note
    141 * that dataSize will not overflow since the host already divided dataSize
    142 * by memUnit_T before transmission, so this multiplication should be safe
    143 * and won't overflow.
    144 */
    145 dataSize *= MEM_UNIT_BYTES;
    146#endif
    147
    148 /* receive the data */
    149 rtIOStreamErrorStatus = rtIOStreamBlockingRecv(streamID,
    150 (void *) &(xilCommsBuffer[0]),
    151 dataSize);
    152
    153 *currentBufferPosition = &(xilCommsBuffer[0]);
    154 *currentBufSize = (uint16_T)dataSize;
    155
    156 return COMMS_SUCCESS;
    157}
    158
    159
    +
    + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.bat b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.bat new file mode 100644 index 0000000..8deb753 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.bat @@ -0,0 +1,15 @@ +@if not "%MINGW_ROOT%" == "" (@set "PATH=%PATH%;%MINGW_ROOT%") + + +call "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a\bin\win64\checkMATLABRootForDriveMap.exe" "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a" > mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.c b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.c new file mode 100644 index 0000000..e2dc3de --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.c @@ -0,0 +1,569 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_Sys_New_harness.c + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "FCC_Sys_New_harness.h" + +/* Private macros used by the generated code to access rtModel */ +#ifndef rtmIsMajorTimeStep +# define rtmIsMajorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MAJOR_TIME_STEP) +#endif + +#ifndef rtmIsMinorTimeStep +# define rtmIsMinorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MINOR_TIME_STEP) +#endif + +#ifndef rtmSetTPtr +# define rtmSetTPtr(rtm, val) ((rtm)->Timing.t = (val)) +#endif + +/* Used by FromWorkspace Block: '/FromWs' */ +#ifndef rtInterpolate +# define rtInterpolate(v1,v2,f1,f2) (((v1)==(v2))?((double)(v1)): (((f1)*((double)(v1)))+((f2)*((double)(v2))))) +#endif + +#ifndef rtRound +# define rtRound(v) ( ((v) >= 0) ? floor((v) + 0.5) : ceil((v) - 0.5) ) +#endif + +rtTimingBridge FCC_Sys_New_harness_TimingBrdg; + +/* Block signals and states (default storage) */ +DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW; + +/* External outputs (root outports fed by signals with default storage) */ +ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y; + +/* Real-time model */ +RT_MODEL_FCC_Sys_New_harness_T FCC_Sys_New_harness_M_; +RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M = + &FCC_Sys_New_harness_M_; + +/* Model step function for TID0 */ +void FCC_Sys_New_harness_step0(void) /* Sample time: [0.0s, 0.0s] */ +{ + real_T v; + + /* Update the flag to indicate when data transfers from + * Sample time: [0.001s, 0.0s] to Sample time: [0.01s, 0.0s] */ + FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2 = + (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 0); + (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2)++; + if ((FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2) > 9) { + FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 = 0; + } + + /* FromWorkspace: '/FromWs' */ + { + real_T *pDataValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr; + real_T *pTimeValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr; + int_T currTimeIndex = FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex; + real_T t = FCC_Sys_New_harness_M->Timing.t[0]; + + /* Get index */ + if (t <= pTimeValues[0]) { + currTimeIndex = 0; + } else if (t >= pTimeValues[11]) { + currTimeIndex = 10; + } else { + if (t < pTimeValues[currTimeIndex]) { + while (t < pTimeValues[currTimeIndex]) { + currTimeIndex--; + } + } else { + while (t >= pTimeValues[currTimeIndex + 1]) { + currTimeIndex++; + } + } + } + + FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = currTimeIndex; + + /* Post output */ + { + real_T t1 = pTimeValues[currTimeIndex]; + real_T t2 = pTimeValues[currTimeIndex + 1]; + if (t1 == t2) { + if (t < t1) { + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = + pDataValues[currTimeIndex]; + pDataValues += 12; + } + } + } else { + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = + pDataValues[currTimeIndex + 1]; + pDataValues += 12; + } + } + } + } else { + real_T f1 = (t2 - t) / (t2 - t1); + real_T f2 = 1.0 - f1; + real_T d1; + real_T d2; + int_T TimeIndex= currTimeIndex; + + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + d1 = pDataValues[TimeIndex]; + d2 = pDataValues[TimeIndex + 1]; + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = (real_T) rtInterpolate + (d1, d2, f1, f2); + pDataValues += 12; + } + } + } + } + } + + /* DataTypeConversion: '/Cast1' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[0]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[0] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[0]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast1 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast1 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast1 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast1' */ + + /* DataTypeConversion: '/Cast2' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[1]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[1] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[1]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast2 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast2 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast2 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast2' */ + + /* DataTypeConversion: '/Cast3' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[2]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[2] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[2]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast3 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast3 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast3 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast3' */ + + /* ModelReference: '/FCC_New' incorporates: + * Outport: '/Actuator1' + * Outport: '/Actuator2' + * Outport: '/Actuator3' + */ + profileStart_F_02840e440c240744(1U); /* original_line:221 */FCC_NewTID0(&FCC_Sys_New_harness_DW.Cast1, &FCC_Sys_New_harness_DW.Cast2, + &FCC_Sys_New_harness_DW.Cast3, &FCC_Sys_New_harness_Y.Actuator1, + &FCC_Sys_New_harness_Y.Actuator2, &FCC_Sys_New_harness_Y.Actuator3);profileEnd_FCC_Sys_New_harness(1U); /* original_line:223 */ + + /* RateTransition: '/Sync4' incorporates: + * RateTransition: '/Sync10' + * RateTransition: '/Sync14' + * RateTransition: '/Sync21' + * RateTransition: '/Sync5' + * RateTransition: '/Sync6' + */ + if (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 1) { + /* DataTypeConversion: '/Cast4' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[3]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[3] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[3]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync4_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync4_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync4_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast4' */ + + /* DataTypeConversion: '/Cast5' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[4]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[4] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[4]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync5_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync5_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync5_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast5' */ + + /* DataTypeConversion: '/Cast6' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[5]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[5] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[5]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync6_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync6_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync6_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast6' */ + FCC_Sys_New_harness_DW.Sync10_Buffer = FCC_Sys_New_harness_DW.FromWs[9]; + + /* RateTransition: '/Sync11' */ + FCC_Sys_New_harness_DW.Sync11_Buffer = FCC_Sys_New_harness_DW.FromWs[10]; + + /* RateTransition: '/Sync12' */ + FCC_Sys_New_harness_DW.Sync12_Buffer = FCC_Sys_New_harness_DW.FromWs[11]; + + /* RateTransition: '/Sync13' incorporates: + * DataTypeConversion: '/Cast13' + */ + FCC_Sys_New_harness_DW.Sync13_Buffer = (FCC_Sys_New_harness_DW.FromWs[12] != + 0.0); + + /* RateTransition: '/Sync7' */ + FCC_Sys_New_harness_DW.Sync7_Buffer = FCC_Sys_New_harness_DW.FromWs[6]; + + /* RateTransition: '/Sync8' */ + FCC_Sys_New_harness_DW.Sync8_Buffer = FCC_Sys_New_harness_DW.FromWs[7]; + + /* RateTransition: '/Sync9' */ + FCC_Sys_New_harness_DW.Sync9_Buffer = FCC_Sys_New_harness_DW.FromWs[8]; + FCC_Sys_New_harness_DW.Sync14_Buffer = FCC_Sys_New_harness_DW.FromWs[13]; + + /* RateTransition: '/Sync15' */ + FCC_Sys_New_harness_DW.Sync15_Buffer = FCC_Sys_New_harness_DW.FromWs[14]; + + /* RateTransition: '/Sync16' */ + FCC_Sys_New_harness_DW.Sync16_Buffer = FCC_Sys_New_harness_DW.FromWs[15]; + + /* RateTransition: '/Sync17' */ + FCC_Sys_New_harness_DW.Sync17_Buffer = FCC_Sys_New_harness_DW.FromWs[16]; + + /* RateTransition: '/Sync18' */ + FCC_Sys_New_harness_DW.Sync18_Buffer = FCC_Sys_New_harness_DW.FromWs[17]; + + /* RateTransition: '/Sync19' */ + FCC_Sys_New_harness_DW.Sync19_Buffer = FCC_Sys_New_harness_DW.FromWs[18]; + + /* RateTransition: '/Sync20' incorporates: + * DataTypeConversion: '/Cast20' + */ + FCC_Sys_New_harness_DW.Sync20_Buffer = (FCC_Sys_New_harness_DW.FromWs[19] != + 0.0); + FCC_Sys_New_harness_DW.Sync21_Buffer = FCC_Sys_New_harness_DW.FromWs[20]; + + /* RateTransition: '/Sync22' */ + FCC_Sys_New_harness_DW.Sync22_Buffer = FCC_Sys_New_harness_DW.FromWs[21]; + + /* RateTransition: '/Sync23' */ + FCC_Sys_New_harness_DW.Sync23_Buffer = FCC_Sys_New_harness_DW.FromWs[22]; + + /* RateTransition: '/Sync24' */ + FCC_Sys_New_harness_DW.Sync24_Buffer = FCC_Sys_New_harness_DW.FromWs[23]; + + /* RateTransition: '/Sync25' */ + FCC_Sys_New_harness_DW.Sync25_Buffer = FCC_Sys_New_harness_DW.FromWs[24]; + + /* RateTransition: '/Sync26' */ + FCC_Sys_New_harness_DW.Sync26_Buffer = FCC_Sys_New_harness_DW.FromWs[25]; + + /* RateTransition: '/Sync27' incorporates: + * DataTypeConversion: '/Cast27' + */ + FCC_Sys_New_harness_DW.Sync27_Buffer = (FCC_Sys_New_harness_DW.FromWs[26] != + 0.0); + } + + /* End of RateTransition: '/Sync4' */ + + /* Update absolute time */ + /* The "clockTick0" counts the number of times the code of this task has + * been executed. The absolute time is the multiplication of "clockTick0" + * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not + * overflow during the application lifespan selected. + */ + FCC_Sys_New_harness_M->Timing.t[0] = + ((time_T)(++FCC_Sys_New_harness_M->Timing.clockTick0)) * + FCC_Sys_New_harness_M->Timing.stepSize0; + + /* Update absolute time */ + /* The "clockTick1" counts the number of times the code of this task has + * been executed. The resolution of this integer timer is 0.001, which is the step size + * of the task. Size of "clockTick1" ensures timer will not overflow during the + * application lifespan selected. + */ + FCC_Sys_New_harness_M->Timing.clockTick1++; +} + +/* Model step function for TID2 */ +void FCC_Sys_New_harness_step2(void) /* Sample time: [0.01s, 0.0s] */ +{ + /* local block i/o variables */ + AHRS_Bus rtb_AHRS11; + AHRS_Bus rtb_AHRS21; + AHRS_Bus rtb_AHRS31; + int16_T rtb_Sync4; + int16_T rtb_Sync5; + int16_T rtb_Sync6; + + /* RateTransition: '/Sync4' */ + rtb_Sync4 = FCC_Sys_New_harness_DW.Sync4_Buffer; + + /* RateTransition: '/Sync5' */ + rtb_Sync5 = FCC_Sys_New_harness_DW.Sync5_Buffer; + + /* RateTransition: '/Sync6' */ + rtb_Sync6 = FCC_Sys_New_harness_DW.Sync6_Buffer; + + /* BusCreator: '/AHRS1(1)' incorporates: + * RateTransition: '/Sync10' + * RateTransition: '/Sync11' + * RateTransition: '/Sync12' + * RateTransition: '/Sync13' + * RateTransition: '/Sync7' + * RateTransition: '/Sync8' + * RateTransition: '/Sync9' + */ + rtb_AHRS11.theta = FCC_Sys_New_harness_DW.Sync7_Buffer; + rtb_AHRS11.phi = FCC_Sys_New_harness_DW.Sync8_Buffer; + rtb_AHRS11.psi = FCC_Sys_New_harness_DW.Sync9_Buffer; + rtb_AHRS11.q = FCC_Sys_New_harness_DW.Sync10_Buffer; + rtb_AHRS11.p = FCC_Sys_New_harness_DW.Sync11_Buffer; + rtb_AHRS11.r = FCC_Sys_New_harness_DW.Sync12_Buffer; + rtb_AHRS11.valid = FCC_Sys_New_harness_DW.Sync13_Buffer; + + /* BusCreator: '/AHRS2(1)' incorporates: + * RateTransition: '/Sync14' + * RateTransition: '/Sync15' + * RateTransition: '/Sync16' + * RateTransition: '/Sync17' + * RateTransition: '/Sync18' + * RateTransition: '/Sync19' + * RateTransition: '/Sync20' + */ + rtb_AHRS21.theta = FCC_Sys_New_harness_DW.Sync14_Buffer; + rtb_AHRS21.phi = FCC_Sys_New_harness_DW.Sync15_Buffer; + rtb_AHRS21.psi = FCC_Sys_New_harness_DW.Sync16_Buffer; + rtb_AHRS21.q = FCC_Sys_New_harness_DW.Sync17_Buffer; + rtb_AHRS21.p = FCC_Sys_New_harness_DW.Sync18_Buffer; + rtb_AHRS21.r = FCC_Sys_New_harness_DW.Sync19_Buffer; + rtb_AHRS21.valid = FCC_Sys_New_harness_DW.Sync20_Buffer; + + /* BusCreator: '/AHRS3(1)' incorporates: + * RateTransition: '/Sync21' + * RateTransition: '/Sync22' + * RateTransition: '/Sync23' + * RateTransition: '/Sync24' + * RateTransition: '/Sync25' + * RateTransition: '/Sync26' + * RateTransition: '/Sync27' + */ + rtb_AHRS31.theta = FCC_Sys_New_harness_DW.Sync21_Buffer; + rtb_AHRS31.phi = FCC_Sys_New_harness_DW.Sync22_Buffer; + rtb_AHRS31.psi = FCC_Sys_New_harness_DW.Sync23_Buffer; + rtb_AHRS31.q = FCC_Sys_New_harness_DW.Sync24_Buffer; + rtb_AHRS31.p = FCC_Sys_New_harness_DW.Sync25_Buffer; + rtb_AHRS31.r = FCC_Sys_New_harness_DW.Sync26_Buffer; + rtb_AHRS31.valid = FCC_Sys_New_harness_DW.Sync27_Buffer; + + /* ModelReference: '/FCC_New' incorporates: + * Outport: '/Actuator1' + * Outport: '/Actuator2' + * Outport: '/Actuator3' + */ + profileStart_F_02840e440c240744(2U); /* original_line:469 */FCC_NewTID1(&rtb_Sync4, &rtb_Sync5, &rtb_Sync6, &rtb_AHRS11, &rtb_AHRS21, + &rtb_AHRS31);profileEnd_FCC_Sys_New_harness(2U); /* original_line:470 */ +} + +/* Model initialize function */ +void FCC_Sys_New_harness_initialize(void) +{ + /* Registration code */ + { + /* Setup solver object */ + rtsiSetSimTimeStepPtr(&FCC_Sys_New_harness_M->solverInfo, + &FCC_Sys_New_harness_M->Timing.simTimeStep); + rtsiSetTPtr(&FCC_Sys_New_harness_M->solverInfo, &rtmGetTPtr + (FCC_Sys_New_harness_M)); + rtsiSetStepSizePtr(&FCC_Sys_New_harness_M->solverInfo, + &FCC_Sys_New_harness_M->Timing.stepSize0); + rtsiSetErrorStatusPtr(&FCC_Sys_New_harness_M->solverInfo, + (&rtmGetErrorStatus(FCC_Sys_New_harness_M))); + rtsiSetRTModelPtr(&FCC_Sys_New_harness_M->solverInfo, FCC_Sys_New_harness_M); + } + + rtsiSetSimTimeStep(&FCC_Sys_New_harness_M->solverInfo, MAJOR_TIME_STEP); + rtsiSetSolverName(&FCC_Sys_New_harness_M->solverInfo,"FixedStepDiscrete"); + rtmSetTPtr(FCC_Sys_New_harness_M, &FCC_Sys_New_harness_M->Timing.tArray[0]); + FCC_Sys_New_harness_M->Timing.stepSize0 = 0.001; + + { + static uint32_T *clockTickPtrs[3]; + static real_T *taskTimePtrs[3]; + static boolean_T *rateTransitionPtrs[(3 * 3)]; + FCC_Sys_New_harness_TimingBrdg.nTasks = 3; + clockTickPtrs[0] = &(FCC_Sys_New_harness_M->Timing.clockTick0); + clockTickPtrs[1] = &(FCC_Sys_New_harness_M->Timing.clockTick1); + clockTickPtrs[2] = (NULL); + FCC_Sys_New_harness_TimingBrdg.clockTick = clockTickPtrs; + FCC_Sys_New_harness_TimingBrdg.clockTickH = (NULL); + rateTransitionPtrs[1*3 + 2] = + &(FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2); + FCC_Sys_New_harness_TimingBrdg.rateTransition = rateTransitionPtrs; + taskTimePtrs[0] = &(FCC_Sys_New_harness_M->Timing.t[0]); + taskTimePtrs[1] = (NULL); + taskTimePtrs[2] = (NULL); + FCC_Sys_New_harness_TimingBrdg.taskTime = taskTimePtrs; + } + + /* Model Initialize function for ModelReference Block: '/FCC_New' */ + FCC_New_initialize(rtmGetErrorStatusPointer(FCC_Sys_New_harness_M), + &FCC_Sys_New_harness_TimingBrdg, 1, 2); + + /* Start for FromWorkspace: '/FromWs' */ + { + static real_T pTimeValues0[] = { 0.0, 0.15, 0.15, 0.18, 0.18, 0.192, 0.192, + 0.26, 0.26, 0.27, 0.27, 0.271 } ; + + static real_T pDataValues0[] = { -32722.0, -32722.0, 0.0, 0.0, 0.0, 0.0, + -32728.0, -32728.0, 0.0, 0.0, 0.0, 0.0, -32671.0, -32671.0, 0.0, 0.0, 0.0, + 0.0, -32721.0, -32721.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, 0.0, 0.0, + 0.0, 0.0, -32720.0, -32720.0, 0.0, 0.0, 0.0, 0.0, -32722.0, -32722.0, 0.0, + 0.0, 0.0, 0.0, -32684.0, -32684.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, + 0.0, 0.0, 0.0, 0.0, -32710.0, -32710.0, 0.0, 0.0, 0.0, 0.0, -32686.0, + -32686.0, 0.0, 0.0, 0.0, 0.0, -32768.0, -32768.0, 0.0, 0.0, 0.0, 0.0, + -118.15138, -118.15138, -180.0, -180.0, -180.0, -180.0, 17.01541, 17.01541, + -180.0, -180.0, -180.0, -180.0, 25.9801, 25.9801, -180.0, -180.0, -180.0, + -180.0, 26.06345, 26.06345, -180.0, -180.0, -180.0, -180.0, 67.51613, + 67.51613, 0.0, 0.0, 0.0, 0.0, 305.78971, 305.78971, 0.0, 0.0, 0.0, 0.0, + 107.78888, 107.78888, -180.0, -180.0, -180.0, -180.0, -169.80836, + -169.80836, -180.0, -180.0, -180.0, -180.0, 171.2196, 171.2196, -180.0, + -180.0, -180.0, -180.0, -32.26304, -32.26304, -180.0, -180.0, 180.0, 180.0, + -3.5854, -3.5854, -180.0, -180.0, -180.0, -180.0, -55.81231, -55.81231, + -180.0, -180.0, -180.0, -180.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.0, 1.0, 1.0, 1.0, 179.94728, 179.94728, -180.0, -180.0, -180.0, -180.0, + 42.21022, 42.21022, -180.0, -180.0, -180.0, -180.0, -12.15585, -12.15585, + -180.0, -180.0, -180.0, -180.0, 65.16104, 65.16104, -180.0, -180.0, -180.0, + -180.0, 331.47544, 331.47544, 0.0, 0.0, 0.0, 0.0, 63.30298, 63.30298, 0.0, + 0.0, 0.0, 0.0, 158.38363, 158.38363, -180.0, -180.0, -180.0, -180.0, + -139.48832, -139.48832, -180.0, -180.0, -180.0, -180.0, -170.3775, + -170.3775, -180.0, -180.0, -180.0, -180.0, -150.40707, -150.40707, -180.0, + -180.0, 180.0, 180.0, -61.13408, -61.13408, -180.0, -180.0, -180.0, -180.0, + 141.8528, 141.8528, -180.0, -180.0, -180.0, -180.0, 1.0, 1.0, 1.0, 1.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 60.68156, 60.68156, -180.0, -180.0, + -180.0, -180.0, -93.63384, -93.63384, -180.0, -180.0, -180.0, -180.0, + 165.74818, 165.74818, -180.0, -180.0, -180.0, -180.0, 73.13588, 73.13588, + -180.0, -180.0, -180.0, -180.0, 42.57845, 42.57845, 0.0, 0.0, 0.0, 0.0, + 339.30663, 339.30663, 0.0, 0.0, 0.0, 0.0, 73.76652, 73.76652, -180.0, + -180.0, -180.0, -180.0, -75.80978, -75.80978, -180.0, -180.0, -180.0, + -180.0, -81.62332, -81.62332, -180.0, -180.0, -180.0, -180.0, 48.62002, + 48.62002, -180.0, -180.0, -180.0, -180.0, -31.30247, -31.30247, -180.0, + -180.0, -180.0, -180.0, 99.35286, 99.35286, -180.0, -180.0, -180.0, -180.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; + + FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr = (void *) pTimeValues0; + FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr = (void *) pDataValues0; + FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = 0; + } +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.h b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.h new file mode 100644 index 0000000..603ae66 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.h @@ -0,0 +1,223 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_Sys_New_harness.h + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#ifndef RTW_HEADER_FCC_Sys_New_harness_h_ +#define RTW_HEADER_FCC_Sys_New_harness_h_ +#include +#include +#include "AHRS_Bus.h" +#ifndef FCC_Sys_New_harness_COMMON_INCLUDES_ +# define FCC_Sys_New_harness_COMMON_INCLUDES_ +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" +#endif /* FCC_Sys_New_harness_COMMON_INCLUDES_ */ + +/* Shared type includes */ +#include "model_reference_types.h" + +/* Child system includes */ +#define FCC_New_MDLREF_HIDE_CHILD_ +#include "FCC_New.h" + +/* Model Code Variants */ + +/* Macros for accessing real-time model data structure */ +#ifndef rtmGetErrorStatus +# define rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef rtmSetErrorStatus +# define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef rtmGetErrorStatusPointer +# define rtmGetErrorStatusPointer(rtm) ((const char_T **)(&((rtm)->errorStatus))) +#endif + +#ifndef rtmGetT +# define rtmGetT(rtm) (rtmGetTPtr((rtm))[0]) +#endif + +#ifndef rtmGetTPtr +# define rtmGetTPtr(rtm) ((rtm)->Timing.t) +#endif + +/* Forward declaration for rtModel */ +typedef struct tag_RTM_FCC_Sys_New_harness_T RT_MODEL_FCC_Sys_New_harness_T; + +/* Block signals and states (default storage) for system '' */ +typedef struct { + real_T FromWs[27]; /* '/FromWs' */ + real_T Sync10_Buffer; /* '/Sync10' */ + real_T Sync11_Buffer; /* '/Sync11' */ + real_T Sync12_Buffer; /* '/Sync12' */ + real_T Sync7_Buffer; /* '/Sync7' */ + real_T Sync8_Buffer; /* '/Sync8' */ + real_T Sync9_Buffer; /* '/Sync9' */ + real_T Sync14_Buffer; /* '/Sync14' */ + real_T Sync15_Buffer; /* '/Sync15' */ + real_T Sync16_Buffer; /* '/Sync16' */ + real_T Sync17_Buffer; /* '/Sync17' */ + real_T Sync18_Buffer; /* '/Sync18' */ + real_T Sync19_Buffer; /* '/Sync19' */ + real_T Sync21_Buffer; /* '/Sync21' */ + real_T Sync22_Buffer; /* '/Sync22' */ + real_T Sync23_Buffer; /* '/Sync23' */ + real_T Sync24_Buffer; /* '/Sync24' */ + real_T Sync25_Buffer; /* '/Sync25' */ + real_T Sync26_Buffer; /* '/Sync26' */ + struct { + int_T PrevIndex; + } FromWs_IWORK; /* '/FromWs' */ + + struct { + void *TimePtr; + void *DataPtr; + void *RSimInfoPtr; + } FromWs_PWORK; /* '/FromWs' */ + + int16_T Cast1; /* '/Cast1' */ + int16_T Cast2; /* '/Cast2' */ + int16_T Cast3; /* '/Cast3' */ + int16_T Sync4_Buffer; /* '/Sync4' */ + int16_T Sync5_Buffer; /* '/Sync5' */ + int16_T Sync6_Buffer; /* '/Sync6' */ + boolean_T Sync13_Buffer; /* '/Sync13' */ + boolean_T Sync20_Buffer; /* '/Sync20' */ + boolean_T Sync27_Buffer; /* '/Sync27' */ +} DW_FCC_Sys_New_harness_T; + +/* External outputs (root outports fed by signals with default storage) */ +typedef struct { + int16_T Actuator1; /* '/Actuator1' */ + int16_T Actuator2; /* '/Actuator2' */ + int16_T Actuator3; /* '/Actuator3' */ +} ExtY_FCC_Sys_New_harness_T; + + + +/* Declare global externs for instrumentation */ +extern void profileStart_F_02840e440c240744(uint32_T); +extern void profileEnd_FCC_Sys_New_harness(uint32_T); +/* Code_Instrumentation_Declarations_Placeholder */ + +/* Real-time Model Data Structure */ +struct tag_RTM_FCC_Sys_New_harness_T { + const char_T *errorStatus; + RTWSolverInfo solverInfo; + + /* + * Timing: + * The following substructure contains information regarding + * the timing information for the model. + */ + struct { + uint32_T clockTick0; + time_T stepSize0; + uint32_T clockTick1; + struct { + uint32_T TID1_2; + boolean_T b_TID1_2; + } RateInteraction; + + SimTimeStep simTimeStep; + time_T *t; + time_T tArray[3]; + } Timing; +}; + +extern rtTimingBridge FCC_Sys_New_harness_TimingBrdg; + +/* Block signals and states (default storage) */ +extern DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW; + +/* External outputs (root outports fed by signals with default storage) */ +extern ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y; + +/* Model entry point functions */ +extern void FCC_Sys_New_harness_initialize(void); +extern void FCC_Sys_New_harness_step0(void); +extern void FCC_Sys_New_harness_step2(void); + +/* Real-time Model object */ +extern RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M; + +/*- + * These blocks were eliminated from the model due to optimizations: + * + * Block '/Cast10' : Eliminate redundant data type conversion + * Block '/Cast11' : Eliminate redundant data type conversion + * Block '/Cast12' : Eliminate redundant data type conversion + * Block '/Cast14' : Eliminate redundant data type conversion + * Block '/Cast15' : Eliminate redundant data type conversion + * Block '/Cast16' : Eliminate redundant data type conversion + * Block '/Cast17' : Eliminate redundant data type conversion + * Block '/Cast18' : Eliminate redundant data type conversion + * Block '/Cast19' : Eliminate redundant data type conversion + * Block '/Cast21' : Eliminate redundant data type conversion + * Block '/Cast22' : Eliminate redundant data type conversion + * Block '/Cast23' : Eliminate redundant data type conversion + * Block '/Cast24' : Eliminate redundant data type conversion + * Block '/Cast25' : Eliminate redundant data type conversion + * Block '/Cast26' : Eliminate redundant data type conversion + * Block '/Cast7' : Eliminate redundant data type conversion + * Block '/Cast8' : Eliminate redundant data type conversion + * Block '/Cast9' : Eliminate redundant data type conversion + * Block '/Sync1' : Eliminated since input and output rates are identical + * Block '/Sync2' : Eliminated since input and output rates are identical + * Block '/Sync3' : Eliminated since input and output rates are identical + */ + +/*- + * The generated code includes comments that allow you to trace directly + * back to the appropriate location in the model. The basic format + * is /block_name, where system is the system number (uniquely + * assigned by Simulink) and block_name is the name of the block. + * + * Use the MATLAB hilite_system command to trace the generated code back + * to the model. For example, + * + * hilite_system('') - opens system 3 + * hilite_system('/Kp') - opens and selects block Kp which resides in S3 + * + * Here is the system hierarchy for this model + * + * '' : 'FCC_Sys_New_harness' + * '' : 'FCC_Sys_New_harness/Inputs' + * '' : 'FCC_Sys_New_harness/Size-Type' + * '' : 'FCC_Sys_New_harness/Test Case Explanation' + * '' : 'FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus7' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus8' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus9' + */ + +/*- + * Requirements for '': FCC_Sys_New_harness + */ +#endif /* RTW_HEADER_FCC_Sys_New_harness_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.mk b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.mk new file mode 100644 index 0000000..67834a8 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.mk @@ -0,0 +1,427 @@ +########################################################################### +## Makefile generated for Simulink model 'FCC_Sys_New_harness'. +## +## Makefile : FCC_Sys_New_harness.mk +## Generated on : Thu Jul 16 18:51:44 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: $(RELATIVE_PATH_TO_ANCHOR)/FCC_Sys_New_harness.exe +## Product type : executable +## Build type : Top-Level Standalone Executable +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# MODELREF_LINK_RSPFILE Linker command listing model reference link objects +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file + +PRODUCT_NAME = FCC_Sys_New_harness +MAKEFILE = FCC_Sys_New_harness.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../.. +MODELREF_LINK_RSPFILE = FCC_Sys_New_harness_ref.rsp +COMPILER_COMMAND_FILE = FCC_Sys_New_harness_comp.rsp +CMD_FILE = FCC_Sys_New_harness.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/FCC_Sys_New_harness.exe +PRODUCT_TYPE = "executable" +BUILD_TYPE = "Top-Level Standalone Executable" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=1 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=FCC_Sys_New_harness -DNUMST=3 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.c coder_profile_timer.c + +MAIN_SRC = $(START_DIR)/FCC_Sys_New_harness_ert_rtw/instrumented/ert_main.c + +ALL_SRCS = $(SRCS) $(MAIN_SRC) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = FCC_Sys_New_harness.obj coder_profile_timer.obj + +MAIN_OBJ = ert_main.obj + +ALL_OBJS = $(OBJS) $(MAIN_OBJ) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +MODELREF_LIBS = D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_rtwlib.lib + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build buildobj clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +buildobj : prebuild $(OBJS) $(PREBUILT_OBJS) + @echo "### Successfully generated all binary outputs." + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + @echo "### Invoking postbuild tool "Execute" ..." + $(EXECUTE) $(EXECUTE_FLAGS) + @echo "### Done invoking postbuild tool." + + +########################################################################### +## FINAL TARGET +########################################################################### + +#------------------------------------------- +# Create a standalone executable +#------------------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) $(MODELREF_LIBS) $(MAIN_OBJ) + @echo "### Creating standalone executable "$(PRODUCT)" ..." + $(LD) $(LDFLAGS) -o $(PRODUCT) @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) $(SYSTEM_LIBS) $(TOOLCHAIN_LIBS) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : %.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : %.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/instrumented/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/instrumented/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +FCC_Sys_New_harness.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +ert_main.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/instrumented/ert_main.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.rsp b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.rsp new file mode 100644 index 0000000..02f1799 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness.rsp @@ -0,0 +1,3 @@ +FCC_Sys_New_harness.obj +coder_profile_timer.obj +ert_main.obj diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_comp.rsp b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_comp.rsp new file mode 100644 index 0000000..7c57f62 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_comp.rsp @@ -0,0 +1,11 @@ +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New +-ID:/Documents/SCHOOL/McSCert/do178/src/validation +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented +-ID:/Program\ Files/MATLAB/R2020a/extern/include +-ID:/Program\ Files/MATLAB/R2020a/simulink/include +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src/ext_mode/common +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/ert +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/_sharedutils diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_ref.rsp b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_ref.rsp new file mode 100644 index 0000000..f979e9f --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/FCC_Sys_New_harness_ref.rsp @@ -0,0 +1,3 @@ +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_rtwlib.lib +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_rtwlib.lib +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_rtwlib.lib diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/buildInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..b8df6680d6b547261e35b475fc4a51e796eb337f GIT binary patch literal 18973 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.c b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.c new file mode 100644 index 0000000..ff16877 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.c @@ -0,0 +1,63 @@ +/* + * File: coder_profile_timer.c + * + * Code generated for instrumentation. + * + * This file contains stub implementations of the instrumentation utility + * functions. These stubs allow instrumented code to be compiled + * into an executable that does not support collection of execution + * instrumentation data. + * + */ + +#include "coder_profile_timer.h" + +/* Code instrumentation offset(s) for model FCC_Sys_New_harness */ +#define profileStart_F_02840e440c240744_offset 0 +#define profileEnd_FCC_Sys_New_harness_offset 0 + +/* A function parameter may be intentionally unused */ +#ifndef UNUSED_PARAMETER +# if defined(__LCC__) +# define UNUSED_PARAMETER(x) +# else +# define UNUSED_PARAMETER(x) (void) (x) +# endif +#endif + +void xilProfilingTimerFreezeInternal(void) +{ +} + +void xilProfilingTimerFreeze(void) +{ +} + +void xilProfilingTimerUnFreezeInternal(void) +{ +} + +void xilProfilingTimerUnFreeze(void) +{ +} + +void profileStart(uint32_T sectionId) +{ + UNUSED_PARAMETER(sectionId); +} + +void profileEnd(uint32_T sectionId) +{ + UNUSED_PARAMETER(sectionId); +} + +/* Code instrumentation method(s) for model FCC_Sys_New_harness */ +void profileStart_F_02840e440c240744(uint32_T sectionId) +{ + profileStart(profileStart_F_02840e440c240744_offset + sectionId); +} + +void profileEnd_FCC_Sys_New_harness(uint32_T sectionId) +{ + profileEnd(profileEnd_FCC_Sys_New_harness_offset + sectionId); +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.h b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.h new file mode 100644 index 0000000..9df0512 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/coder_profile_timer.h @@ -0,0 +1,24 @@ +/* + * File: coder_profile_timer.h + * + * Code generated for instrumentation. + * + */ + +#include "rtwtypes.h" + +/* Called before starting a profiled section of code */ +void profileStart(uint32_T); + +/* Called on finishing a profiled section of code */ +void profileEnd(uint32_T); + +/* Pause the timer while running code associated with storing and uploading the data. */ +void xilProfilingTimerFreeze(void); + +/* Restart the timer after a pause */ +void xilProfilingTimerUnFreeze(void); + +/* Code instrumentation method(s) for model FCC_Sys_New_harness */ +void profileStart_F_02840e440c240744(uint32_T sectionId); +void profileEnd_FCC_Sys_New_harness(uint32_T sectionId); diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/compileInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..a362ebf1025b2a7e9b3de45a4bb8abf8e1bdf2a1 GIT binary patch literal 2440 zcma)8dpHwpAKrnPEUa>>Xhle)F@zM0y2ejVkx_EaVTmMCZwa9- z!kEyjH!7dlN+-;#!_aH>e*XCW`kw20uIu^dcVEBzetyq=KkgWBH_Tpyl^F`*j`237 zP*0GN2#*tirzjCoC+!d(PKR9Z)|NQq1L=J#tjSvG!nh+>4X;z2jtL-WU)zcZ_ z7>0kCe`)|J+~m>@z~wXa=nS=5WX4yVX{HE^?8cdzK?=Zt_?@fw$?=+3@O;|^ZEcVW zTc-9?1+b5C37nHxYN@3zGa~a0b03h!6_1DNQISrQ8Z7P2eDy0=y;hMEosVs|NXMm> zM#177KejXLauw5C#y!?6C|rx%86x>M);%86IyC$3f}pHW#g7kjPBh9HetYySh(9W0TG* ztoNrhmr-Jtjd8T#@!DzcX6ToM+q8k9b-bKx{GUaOKfm`$Q~_}>0q*xcZ;NmYZ?f|_ zLZo)0%h@77j?DVwhXq33SA&azu4Na(V5f54v~eRg#0_nl(&&9Qv#+BJkwV#)h5Qfh zbzSnXb&PfZd^2^*td8V_?-{$B_VBs^ncY)X+}XjUUlSdf4CBX~`pTS1jdD;9eVN{+ z@`+IVq~)}I<&4a}CQTB%A>;Hy>4GPQxvCwi3l!hCRGHW#5pG2KOx8$1) z>Zx6Ay_0H+?HCSVEfyYn-FR&90J=mlY;AYEM;3jz_Q*58WL4O!EAflCo$S`1G8eA% z5<2kc0f_BatBu2BM0?7@S?hOAU&1*h!=F@tgdA{ti0(+7a4!t^ED4HyW@O2@$f*cY zENbB7e+i0Obu+5}5%42BNJXyq+m)F?5lKWMcwnO=EI0wUJx2r;2tD#uIEhkRI@jx! z1>G}n%D3$-X4c*jmZgjnZc8#A1C!Js?C(flp;poW0s)w8vfb6GbV##P#=FuPVxT$6 z)71K~buG16AwL$uh%5~vl-^HCpGkshoZFZ0ehX-);3JyCH z9&9CFK6_5w#H)-I7v%F|WlfjK+6Qf4z61e0R@- zZYdYM24|6G%Q~T0=bD6W5IN9-iCE}F)mdC$7D(7#t@ zvkR56AdR^Q-`fgiZ`oBcLQANY%!QsOh(eh;m6Kcs6_ep5kjU}Egd{+baj=WV zIpA}&R!%IPZ-(D!Q-7wS?j$IwoVzE!An2q;N9p^KKkQ6FAq3kEwRxW)GA$@5`Ne!g zaPHCUwt^VZ-_LjFSWOfbXd105ywS}&7QX~&$?)DN7ua&;#v=bUNW38gC3nay)FySA zA*J&AvX>&DaTT_x*q3t1>Y$;|7aom3g8+AY;#8(e0^-a&hsM{gVk4pqm}jP zb{~*0svZ2s&sa}9Z!#K`d{`Zlqa13w_aRuS70thRf5?jJ^34u3;4YT8-xJzo>`b{`dI zo}cHz+ohk+d)lWi+JJolP62WWoL1!fZ@w7*%9lVUoD<7>(RlZPfy1y7ddG;vHkFzT z#TqRG5m*qOXIlk>1*Y2as)+Fb^G(VJ9$p<<`3$*ww)Nj-crw=5a!IG7-9LRPKr&Bw&&fgx!b?6(`KmFjRGQ z=4_EGn(k>oD{V;E8564?F9s}o)W^aS?o@Gp?%^C?ZeEEb4`k5^>e|Raicwqg_$nF_ zVRX^ZU)5qL05Yiom3QR0(h>B368x&Js|xT}f>ZF-A^wLMzF`C!g`wx%0`M;474K_i zvEX2Uc7XCZInMkF4vI+mms!^`Gmky`96pT4Vk&os5a;F;&A&5kSjwd(%IOU4WKIKf zQoA%Pu4pkaP>e<7=|c~Spp|}YVVF37M0AhPW%UkMq%qbsEi+}RwVl(SS*P|m1VdNC zERVhm)eKmwz8rGp9&Sc}aSC zW^2ju=Hu*}^iWQDcII}lPaAszax86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include +#include /* This ert_main.c example uses printf/fflush */ +#include "FCC_Sys_New_harness.h" /* Model's header file */ +#include "rtwtypes.h" +#include "model_reference_types.h" + +/* + * Associating rt_OneStep with a real-time clock or interrupt service routine + * is what makes the generated code "real-time". The function rt_OneStep is + * always associated with the base rate of the model. Subrates are managed + * by the base rate from inside the generated code. Enabling/disabling + * interrupts and floating point context switches are target specific. This + * example code indicates where these should take place relative to executing + * the generated code step function. Overrun behavior should be tailored to + * your application needs. This example simply sets an error status in the + * real-time model and returns from rt_OneStep. + */ +void rt_OneStep(void); +void rt_OneStep(void) +{ + static boolean_T OverrunFlags[3] = { 0, 0, 0 }; + + static boolean_T eventFlags[3] = { 0, 0, 0 };/* Model has 3 rates */ + + static int_T taskCounter[3] = { 0, 0, 0 }; + + /* Disable interrupts here */ + + /* Check base rate for overrun */ + if (OverrunFlags[0]) { + rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun"); + return; + } + + OverrunFlags[0] = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + + /* + * For a bare-board target (i.e., no operating system), the + * following code checks whether any subrate overruns, + * and also sets the rates that need to run this time step. + */ + if (taskCounter[2] == 0) { + if (eventFlags[2]) { + OverrunFlags[0] = false; + OverrunFlags[2] = true; + + /* Sampling too fast */ + rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun"); + return; + } + + eventFlags[2] = true; + } + + taskCounter[1]++; + if (taskCounter[1] == 1) { + taskCounter[1]= 0; + } + + taskCounter[2]++; + if (taskCounter[2] == 10) { + taskCounter[2]= 0; + } + + /* Set model inputs associated with base rate here */ + + /* Step the model for base rate */ + FCC_Sys_New_harness_step0(); + + /* Get model outputs here */ + + /* Indicate task for base rate complete */ + OverrunFlags[0] = false; + + /* If task 1 is running, don't run any lower priority task */ + if (OverrunFlags[1]) { + return; + } + + /* Step the model for subrate */ + if (eventFlags[2]) { + OverrunFlags[2] = true; + + /* Set model inputs associated with subrates here */ + + /* Step the model for subrate 2 */ + FCC_Sys_New_harness_step2(); + + /* Get model outputs here */ + + /* Indicate task complete for subrate */ + OverrunFlags[2] = false; + eventFlags[2] = false; + } + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ +} + +/* + * The example "main" function illustrates what is required by your + * application code to initialize, execute, and terminate the generated code. + * Attaching rt_OneStep to a real-time clock is target specific. This example + * illustrates how you do this relative to initializing the model. + */ +int_T main(int_T argc, const char *argv[]) +{ + /* Unused arguments */ + (void)(argc); + (void)(argv); + + /* Initialize model */ + FCC_Sys_New_harness_initialize(); + + /* Attach rt_OneStep to a timer or interrupt service routine with + * period 0.001 seconds (the model's base sample time) here. The + * call syntax for rt_OneStep is + * + * rt_OneStep(); + */ + printf("Warning: The simulation will run forever. " + "Generated ERT main won't simulate model step behavior. " + "To change this behavior select the 'MAT-file logging' option.\n"); + fflush((NULL)); + while (rtmGetErrorStatus(FCC_Sys_New_harness_M) == (NULL)) { + /* Perform other application tasks here */ + } + + /* Disable rt_OneStep() here */ + return 0; +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/instrumentationInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..134275589b63dccebd6600018d6db67ef360d5ed GIT binary patch literal 785 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSRlav$}07(-R*wuA0p7=+U1` zi=KpRKQre_Qd^43(i#VwX2wK$Zn58!7MO5wIQ-NLGt~Qea_P>Mm8wS#51y0z_s`C7 z-^qjLR=TPhYW{3{CT4il^`v2Hr{zq|PSu$|D-H9`o%?uj>d}vNE1!Op>~yVMdGzQ< zhoc`|RiEB?@@10Zx5hi-4NvUMblxR97Rjp%Xg5Ui{`c+5w`Ov_To!je);%C#m4z+q zCGJNdMfWY5&b(E4@V>yLzCHN%eFZCXLu39Ik)QsaRCrvMD|aEDzijUITE0)u?+BmX z&XmdeaH;e>Yrb1Q&Mq*i6ZJ|f+RyOw^P_w5?;Ss$*=6)uOhaay?)~ov1R1(#ERg^O zoEs2B0?vaW$xPuHLy{UBM?&kT#0J3*)&>iUtxHsl_4nSeR5rETy~AYs)W+6EVJ&@@ zBXU1~-mL4~xsu0#HQ+D99U0zkkZDeE(>S1})qzcuoVbBS!20>}CA*eCTPmhHE#=ws z%4JKQO-)&rx=ie&)79d%-F~lfLW@}#Jm2s#gG>sCn{)zfQo|*M16)synGCt7h_NO; z@452i&7(^(-xnR(b7{_zMQ0{?{kK_Q0SroqE$cpI#XLB1V8eovjVGNI&K8t1-A+_^ z`{3)sKTXOE+a8G+gN%>FV>~lfYyC0SJ{}%!FY(znESGq~)i=np SUE+(AKc#QM#Bl6|$Rq&Y+d!BA literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/profiling_info.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..bcf92faa8714c37737453eea91bffb25d011d027 GIT binary patch literal 3057 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/rtw_proj.tmw b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/rtw_proj.tmw new file mode 100644 index 0000000..d4c8a63 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/instrumented/rtw_proj.tmw @@ -0,0 +1,4 @@ +Simulink Coder project for FCC_Sys_New_harness using . MATLAB root = D:\Program Files\MATLAB\R2020a. SimStruct date: 18-Nov-2019 20:54:47 +This file is generated by Simulink Coder for use by the make utility +to determine when to rebuild objects when the name of the current Simulink Coder project changes. +The rtwinfomat located at: ..\..\slprj\ert\FCC_Sys_New_harness\tmwinternal\binfo.mat diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/modelsources.txt b/src/validation/FCC_Sys_New_harness_ert_rtw/modelsources.txt new file mode 100644 index 0000000..05dd0f4 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/modelsources.txt @@ -0,0 +1,2 @@ + FCC_Sys_New_harness.c + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/profilingTraceability.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/profilingTraceability.mat new file mode 100644 index 0000000000000000000000000000000000000000..f5deee541b449907d364eed8cbab73e2c115b11a GIT binary patch literal 2242 zcma)-`9BkmAIHft5_2RaX;L9JMup|rq~usgnR~9>l5Ay;O$QM=NOI&%t}^}v@d=Cf$!__ct75+$Mf-eynlK<9&aS#vK_(#bPA#eLLx4M1A@b@ z>VO==d@unKH^N~chqEZ_i>FWOfX?2y>VvuJ4~n=316>Znf^4v1An0ij)ChJ83NtVU z>Feq1f&Nd)0fhc1VQVCC+nH`pbpDK=x3`3l?`aTS$QLgz;ho4i@T3+b%P?Y;zice0 zm+d?D%%9G{y@HQ$Ek>dOnl3WKu0)9n0mXOA?;Nod-#PNzrR~}fTy|1aLs(P|jEqGj zt4})|10%J{FC-;{F36>HK*x{Ik7mrIkJc2mv!tTc4mEEN1 z(q=L_xUlhWF&6Vwe96pH#FN$*pQb+}dBnrUNT zsh-3M4qG&_xn8R|LOg=~bXQa5{Kwv$q0r2+j|yMHei&s&)707ePCu@y(*nEE&p6rT z4B8@qtqf(?*s$**pHCe09a_C38fkVdAKe%ErhO$?_58QB^?n@I^24UmSD~>Glsv!;VZ`IQFzS@JgMo% zY>c_8<^qu~$x5v|JTwqGw-FMEs=OF0$&wmCY0cHg#h0yadf6wS)5tbf#PfUp2zWjl zJhg{{#(PSu>(p1a-}>Lx*`81 z7nV-UbQkea6R6^3jnwT&0%)T=`H5k}!kp8=L*1`0f@v0y77)LfImOk1Ni_rkVb%}R z!$BWNG)h+|c;23k-Tf0M*~Mij>(I`C?4^_Mj_OJc&#uCBXt5yspe?rtxN9Pj{Tm1@ zZX1g{4ixU<=J^%?;41I%kGCM0Izw-snF!8;|2xySplS^*Q$Yb1LC^^%#r!2VS8!kI zDlKBW$O6G{RG;lZ#QqmyH^*E;)9$>guY5mMd|9F`?^k8&CE$5m3;RTDdS<{xgLac7 z)7nIm8oNwwDFLnPYKkFEZKVDPQ}drY8ba4+B++s=r_~Mq;nHKdIh*c3pxk753!1i$~7~UF_X5Ls8|0FHH zM(c9l0ZITYPln0KZ4lf{#$8%N11l)>qe&A0EJ9$OpI`!n7ic9g{Fq}>OnqqLG;Htq zhN8Jo1N3qE3EUr48N{^+btobL^_E}$*qdshyXq8Ms zBKthp|CThg7%zQDHEAKY>-M@jsJ;rl)Jr;NXFPIs(N%E*8=%tSYb;hkBI}oi@$m2f zUflbh5vi4}Jjz#F6vd!7!!sy`R~(Y9{eH;oT&QW&Qo|!^g@<%oJs;lyT;$xMC^vni zB0Q>TZropn9KF>N=xZ%7qqx~IUUA>XspU}aAO6P54V7&>@5BmynuwR)+Q4j9z3nFo zhKP*6U0N9Q4A}*h1+cz<9vO8GFZ>OS5ifH%{Mw?7m|IgPI{NxIU|4(k=*OqGf=2^R zIXiyK)@PyjXV~c*)NXcM%HY={O>!&p8uSO=@>&Z_HG=px&N_J~uwI{Wx8LwF%w{R< zXFkIqifI*jKAdhw#e z<(u2J4-*YViL9Q^dGO!F_>t&Dl$qDWUlw}*Z|-BMfW09yZAuH-`6ZRYJHKSX8DaAY zzW0TH#!2hE%WY8?29Vjl>EF%;58Rndta`GqBgp}A3*y z*vs#ftKKbQMEv5m)W#@oKYDqgO&gP%(1?Ujsug*u7cIV>WmL3pZv_XUfI>6^fQBT(yU0 mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.exe b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.exe new file mode 100644 index 0000000000000000000000000000000000000000..7a68e533193f104a4c15baeb336d547a452df932 GIT binary patch literal 128987 zcmeFa33yaR)<4{x5oZGGh=LmT8#`)5)W{(H|D98HZ{KbL==;9k^L)?q zef=a|Ri{p!txoNAZ&zH|S zj-NDVZk=aQ?ZRtnXUzA^nz3NPLceEbwWl_)z%zG&r}W~9p7{%BSC7id>YFP`SNa@| z*|!|w`1w8eG{-4U$N$N6IJz7sJNl)i4R$;Sr2Y7R%;|7sBXm*a8G7%a+Cl!;h@4I=Q`(j5ExiKzH?I_~XjPait&=}L3t^?>4jGtCi^ zBKDB&80D{C>PJTNYJ8E1q&roL?K9m`IepaZ8U7i7EhQP-@ZTT*FW}$y@j9kQM%4<$ z%43kxj{jrvzaIa#5AeLB7709|BkWA{cG-{+^*Zvsqm~N1t$hG+1CMNC^nf?Bu8yD& zJpvpL{(Jb;lYDapJ+?J$&U|+#BZF^b)c8v$5p)iHwF3`->=TrhAFsn38RehHd>IdQ zz<7>i{$!Wa&lH6!Ie@Pay|h%k%5kR`6fs7}Py}w^9fvR@70*5H^w9;3cRFR|OL`~t zfOqCujCTU@^9mnzMZp<)!DkTkUADuC;&FDHEK@H%Afi<{XPoPT%l=z2AfIYBV4y! ziiFpQ$u$h1c|tK&YicrDcfE{Sh zLI`~pv?vcNe>}qJP{Y}O;vnlG1kg-b%1PyV3bfK(5AZj&I~=8Yrt$V)9gZfbS-8P9 ztRAc!B~>MpsxH55qPnv4UL*@5YqJoj;Ylc_z4M*=w5k^y?Nr$1gEpaOVDxHL&lsLh zX!_934^ikVRbP}@t`C2_CCw2VpcZX*H4F#dS_A%85`Rn8j4svn_t9!768Kov&uZl| zdaq!&)75Yk5cOWrw_yfiQRT%fCwqy^?gL=xD_27Q@)M7Rz=Gb2M!CpBDVc=|7p>LJdZot{2?(dp*lPFVR{{f?dw~y(g5oN?T)}*0_e1 zI)EP-5IeTU@_(SN=qHOIuM7NsdMXX(?2S71AM-E4R;qZk%MWsBATvglTxc=I3YKliz>|Oi>Rh#;v0U_unxrZ?A`s4+8*d< zj087bi6N=3+(?dg)z#CcmP{#`x&i*s3@$HIs}pq|`U(}bb{NveekdY=KLQ9*wz5Q7 z|3F~0A~*C^v==#nEA#;nYMRidZcXplPI0aeRofQNUh_(tqvL$e2Z<+9Hrk8$se0D! zL}&#Fb?C_V6@1mvwLc!$T8zn*c|s0vP;^BdHl`$^=U4$^{HnCW}-N1!y41KO51SsB#tp;Om@*Har<* z!8VwD4IL=!2(7TqFBvLE4dhM1TL2s~xM!+W*0n}?yN}aBZE{T;xU5Ekgj`M}K@lXO z1NtCGEZaB=Bw;+6Rt^-!t7;W)ttuz#+ec+p-RD*{UsuN?NPyFIAYN1aml=UU#!Vol z`St~u?Q{4ub>F^@I|Pafly!fZ;c$#tueH@^zOP+td|#jI%c%uY4qA3Bg8(4f4q=ZX zVf6|`tGddxR+78^ac0{-!j}W??b>><-IIy#5X6)iA_P^PzAiZNTUN47)s)Rh1()TZ z74Yce+Xq8=6NUo2=Yg@=;WQ%f?qGMiX&1X4*eR%9xY|YOCP{=$Ln@JAZunn-*lTVZ zCRq=jHUk+p##T9Ko>QWU4jXE_jc=-;ELUg384;6ykYFiq8IgJ&b#;QCu z?8{+aVOPY=F{u`G)B>by^!*2T|FQ7C%uL`ZsI6Fy?i-kjv?&#-1T;JrjmJ{6Pe68_ zm3?b!b~^Y#xqQnK`I~+JaVCj1F}2Jf<0P9#ENPEqlq53!ZDcaZ7s;`~3~kwFgU@>> zY`|D|0}Ebp+&eItx3E#Eo&(pVR){X(3dD`)Z6#QiS*{n9vB+tN_{X8-o_}*m*9)yk zykjP)74Ai%M0>47YZC-9>o}RZRM}vd*dSw!P40u}DjVVf${b@8jg=V%!NGV2N#PI@ z`DB~~x*{PE6a;3b@q6_3ra(+0ChbARycvRq(@YSNfk>#jH`A^enruZXp}z=1Z@*21 zG6kV#GeLx2M*@W0k`Rqu+>i2`Xq(Y-sA^h{`J%W=y@L zp||x)RQ+KMo$R8kl|)gt(wV~0-EWa{X9}@)nh6r?Yb2oD94S^`Db~q0vFzsl8<%wp zLU)@9BJ`*rInh7Fwwjkt{gwQsb&_Wv_%SwBlHAy%ani`O?0>+YX=w$ia& z_B280=WV1c5=6)?2u+rRXlH};E3*-@tn?Na%okMFmo( zcgzG4`VtA~w^R~xNkS*u2(dELfcq>LtQ1u4G807Q5vEdKkJ6HmTM~Nj$Am;oXpr%h zP1}PQ3ZqCbW9&_sieGCJgqzu)K-hR76{->R`qWBUY(!JNd6sdat$SnkmB!hr-FdN5 zmO2QYl2l{k!OyHQCeqIsB-BcsOL&Zv&ABWP9I>Q1oSZ*-c{*mB%|?A)gMqAKCaP*a z12fCJr#msPg{^&t>TFZb^>r=ok0F-^B$_3usDx{Pg88XYrU9)A)8Q6l*Mm&N;K}L5 z$mhxF`HYx-4hMpsri?&J$Zng8uJe!-;j9c~8gMz=IwKbxznVt#$`<22!qSw_k;FRU zGXy=Z9-zkS$P?55zss_J18!paPx@f`Pjhyj{&U)HGHWGLK;?*$eI-(ga>=U>V<1rE zN<_?8ZL{Em&6j;FTMzT)0%TaTM30#D(mdOoFZ0Mw^W|4BghdWIUv|3+uvXEk_Mkeu zfaadMK}@TwCSo-?Sq(pvTMx0d3gC2?YCcD~R*@O?Z3PT<)TPeCDxytoX-`*2h#;K( z+|{TGIELnnfM~?ruJc9os&1_^gJAFptuj-@99pGY#PYSu{vzhpD)U85)hf@Vm>Tuw z5lGbL^N=uZJ8&5T2Ze#stns zV#rsu@oWbc5feXC%u@YTZ5;*Bt%(ZFvK4YB7s{~d zMq8n-hI$Bv^bB)wl>Hp@wA$sNy!&*o^jMwA?F; zK<9V$mXwoe@R&$F&@{-Hc*cmj|^~~rR zlTn}#3Q-Rd>l^g#b7BXnV0kMwoIuXHGXRFSoJ$JUtRk1dw1PUbF>4nR9<9s>i@g3 z(Zm7o%m+?F$vdcIfhdQIyJxTIFt^*N>PRSkh@@T_TgO#0&s9%%Av8sjXyinCvWg;loLT&`5 zS~v$mG}K9sf{&_)C|lO@c{0hhL?ewB+QIeA0e5bG?9wqQF=p#bse^XBqrTNdQTMG5 zc8^_hG{SJDQ>$7{-E>HZQu=nY9wGsP-9P(}40gu@1!^?ZE@g?8MMDu8kA^lP=02J9 zVIV{yyx4F-Kx3f5Vm*?unj}Z;-lA6v`&O&^Dk{z0UJ2?K6aQu|M#3rOPg19)h28>6 z@MZdr2l@&dQ7aK3XTTkNnavjH&5jgP(3;qSWLeEEOo1Z^ss*d(s5B?b<(khUDiDo` zZA*Kt_=isn#`GO=Pn1v7O{`Kh2*%KP07AXffP`AnD?F-Jo(nP+m~fZpdW1@#1Z9>y z!OHkLgUdSO)F*IDj}0P9dQ~S6ZkY1X0uxID(F0Uk;(AG3+3T2ch-rY6>}PfYHu>3g z(pL;d%em(Tw45KC?A=Sp8*Cy{)tia)Ltm%R2wH@Bo(KI|yDrcPSMH-+G5(@E=#TDT zfbQ$04mE2U5q}EAO(9^7q<*KWGq~QVRhs<=rdJ;DcEm2S3RDgOv7+^U%)>|wGH4z) zKd_s~97YlcH6cDu8%?CjA%b@5l7r2qVktzmi)nA3G@aR7tX$?n)vj353zR%qOu?I0 zXg-=qQ^$&_f={x@(JKJ0%8|~=d-kZzzdR-?lgwvZcmqctvgoP4ebiEY zhVTu>q`J6QbuyToh@|jm5flTZ?#n~ZE{4^_3NfiMit6Ga9q6=j?NWQLFLo9vz^jPQ zghNZ`$-sISrA3OT%ha!!5IC3{blZ_`r%D)&^*zTE?T1UEEzscy@X$z(_7m$${4Yp{hH0WOZV+k*_?s`d`g;gd6)%j*U9?3*lsp5Xqhn>&nWVB zx+b8>aYH5H;F-|Bsw>4aJ&)Ku)AEp|q`ELwV$Q%*f=lQ~Yxza^PG4aq6D?| zV<-xidEm+|@{{M#B44;YVNks?hZ|x}aQ?oG9;!Ogk>%U_U0cfpi@c<9*PEl#K-7m1 zj)r6RRSLmiR|C#k8G@Ptn*S7*R?W1K!d2baL$YmR_|a6z(|e=QplM<}?1pM}qxCL%a4d%Ut|D*PGkc`=myUHGZ|ZV6rYa)F#yW@KsX^N_xmUR zg>YCdxlrLggLrT?iqXM&02WzMOkZ$OgU*LH)@wArROMkQpI@p~6k`40W<_42mKF9z zpsg7C;L;wPjMYSaSn{EVqZ$I!#!@j4d?53a)-!!C0O1xL+9>jX|9KsJ!RUq zl4gq7Ryo&6Y4!w{?TH6+L250LIuE3%s4&&PA7X>bzK`XuX5Rj*qrQW)qB>tEH}RpC z;{a9*h}AZ10VY^om&yve71)Eoo(%PAmqVq(15`>`xZTSnFt%7KjUqmCllY`3@kvnk z9zZ>1SvTeY>fP80Gx{Y_fAmjwg9++W^oo}teuNm{Qj4&xpAk)2$-%Guqi}FI)SZpc zn_K^j#G;v!R-KGHkcF!uniB!o(Ku3-=38u#LFx!tq6E9{yh!A!DV^a1{lX~*oB(I@Z3oOM90Z;_6SMn z1ZIVfKDeyi5x{g?nVyhi)vd&h{>Gw<&^t5Lm1%O61Ks=B#mh{-o%0J z!gP72=?Y=AhPuj~3ECTPA+b%`zd4Zh>ymc5jdrZeuGxKT3D=q(p#1X#>|enMj>@QZ zj*+D|5gT3kz{)1kA^>umEfbD7j+}_EbO|3UWWuHoQWtPP$QeaU%j^Q)6e3HD69sH| z)?alsrpt7x4V7tIZdG`qzFlqtN&Kj94^rd;9t>*qpUFc_senud#OKjf+Pn0W>T13S zF=Ma_@UABp#?%?}eCTxlpr3i+F^}F9x{UQEsaHcbl(na@RA{D#PVB4*x^QthbTwKQkN5NG3Uty{vLgeLps0~n`;|l$psw|HM zcZ%{R3v8Eit7%Ih(@Y%#!IapT62lAc?NxY;HM>~>?$gdr5|e3QUm|XLjv*MMV?T~|Z7Y@3N>Bz|Bc?_o8 z;ene-Y|zS~y(^~N6~s)31#vaJ*PAo3{h9s6)1*m@vH51)q>BWq(R$AHx&2eA6&*+j z%EAdXH_;LpbYKv!ga(3Dl=#wY3WY@$*_)*hSshm=cn2i!3z@eo^s*=l{;r01EmU$)|)(Yas({`dd&Wo7M@+2kH~frt61P3tleax+lWN&A$Bqk)`)2 zmPE%(`t9|O!7add%7Bd8X&*BPtuID%UAzrEq^wSccj&}J}#_Q$-G^m?`&54;*eHr z{_ndVc+U}?5Ms@+K&6yo%QCir3*btD(9ukDRDm^0Vm*?C<%EL2+VY_xlI(XkkqzBwqotn(y}DvfG`0 ztMkFN)5N&=%e$M{C@e6Ym_ESfc=Q0%k3Hbxdcje+9`ih^2wsSN3ZQX1_{#3*_AXqL zp?!mu8{44}Z62@eoQ|%;cJ|PPCaJCJ#&@X}qKCt9^pJ@l8rljNbvDt^F2v}AGk`V; zRP`{GG+KYa#E(&fFLMD`!ykaDGe`?P51g84Xf*i*l<|Dh&Wdu-Z4)Pdk*Dx3^n*N3mG^;2u>-w3J(MD!O--6Mx#AxK<7%hcHR0UF_l4f50@Z|Z=cbYTniLNzV6=wZJIfri5;9RCe z+g7fJx`;+N`}@Bjz*ObYrAZ1Bp76sV4@0WQDOZ>f{zqOX{I8z+j>Op)J@yw3?SuX4 zg8~G=JY5UXj;~B(PJbSy!c|WY7v3t$BLI!!VJcz#HAap|bkH82z=oW^Pw-_X>u)uw zt|F4yqSXc7%8euoq@w4a#N$tMs7p5Q$%H+W(pKeBkT~)}ly{XtD;jzp6pDQmTa6ff zqM>K3*b`Rl5yWu9fX4I?!Ey8^hGinwWW{!IjAdv;lpNQ%=_69N z70KYs^c@dm!@*>(&asZ&kh?t0BC6qV1eq`dD-&Kt)ajIM4qStHQhYk%BnibQBhI}% z;+2S#)C5-%C;ceyMVu@_@j}E&M~deoPMT9Z4{@>##XS{T3olpK>ug#h_d8O8q(jfl;k{)J5>+EfyP6U10 z7BZwyYvHx=`ciG1(b+*e4arogk0bK8J6W5OTUm-PwG^^@%VCYe zQf*!?_N+^D^T;+8+D9c?Hw-lK-4uuLA0f%GIUXN5Ca#Y8XO0GN2NA7DHTqptDLW)a983 zADmGI-|-bq2ogE|(sDi^z&<_BcPPhf0xiaX&!8*LAC5mb%GaMVieO6zFDnqmVwcYw z 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%0D0Q&+jDG;o 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 DFGHBM literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.mk b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.mk new file mode 100644 index 0000000..c5b1ed5 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.mk @@ -0,0 +1,483 @@ +########################################################################### +## Makefile generated for Simulink model 'FCC_Sys_New_harness'. +## +## Makefile : FCC_Sys_New_harness.mk +## Generated on : Thu Jul 16 18:55:52 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./FCC_Sys_New_harness.exe +## Product type : executable +## Build type : Top-Level Standalone Executable +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# MODELREF_LINK_RSPFILE Linker command listing model reference link objects +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file + +PRODUCT_NAME = FCC_Sys_New_harness +MAKEFILE = FCC_Sys_New_harness.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../.. +MODELREF_LINK_RSPFILE = FCC_Sys_New_harness_ref.rsp +COMPILER_COMMAND_FILE = FCC_Sys_New_harness_comp.rsp +CMD_FILE = FCC_Sys_New_harness.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./FCC_Sys_New_harness.exe +PRODUCT_TYPE = "executable" +BUILD_TYPE = "Top-Level Standalone Executable" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=1 -DPORTABLE_WORDSIZES -DXIL_SIGNAL_HANDLER=1 -DCODER_ASSUMPTIONS_ENABLED=1 -DRTIOSTREAM_RX_BUFFER_BYTE_SIZE=50000 -DRTIOSTREAM_TX_BUFFER_BYTE_SIZE=50000 -DCODE_INSTRUMENTATION_ENABLED=1 -DMEM_UNIT_BYTES=1 -DMemUnit_T=uint8_T +DEFINES_STANDARD = -DMODEL=FCC_Sys_New_harness -DNUMST=3 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_interface_lib.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_data_stream.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_services.c $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/xil_interface.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xilcomms_rtiostream.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_rtiostream.c $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/utils/rtiostream_utils.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_app.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_data_stream.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_rtiostream.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/sil_main.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/target_io.c $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/codeinstr_data_stream.c $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/codeinstr_rtiostream.c $(MATLAB_ROOT)/toolbox/coder/profile/src/host_timer_x86.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = xil_interface_lib.obj xil_data_stream.obj xil_services.obj xil_interface.obj xilcomms_rtiostream.obj xil_rtiostream.obj rtiostream_utils.obj coder_assumptions_app.obj coder_assumptions_data_stream.obj coder_assumptions_rtiostream.obj sil_main.obj target_io.obj rtiostream_tcpip.obj xil_instrumentation.obj codeinstr_data_stream.obj codeinstr_rtiostream.obj host_timer_x86.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +MODELREF_LIBS = hostobj/instrumented/FCC_Sys_New_harness.obj D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib + +LIBS = $(START_DIR)/FCC_Sys_New_harness_ert_rtw/coderassumptions/pwslib/FCC_Sys_New_harness_ca.lib + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build buildobj clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +buildobj : prebuild $(OBJS) $(PREBUILT_OBJS) $(LIBS) + @echo "### Successfully generated all binary outputs." + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + @echo "### Invoking postbuild tool "Execute" ..." + $(EXECUTE) $(EXECUTE_FLAGS) + @echo "### Done invoking postbuild tool." + + +########################################################################### +## FINAL TARGET +########################################################################### + +#------------------------------------------- +# Create a standalone executable +#------------------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) $(MODELREF_LIBS) $(LIBS) + @echo "### Creating standalone executable "$(PRODUCT)" ..." + $(LD) $(LDFLAGS) -o $(PRODUCT) @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) -Wl,--start-group $(LIBS) -Wl,--end-group $(SYSTEM_LIBS) $(TOOLCHAIN_LIBS) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : %.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : %.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/utils/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/utils/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/rtiostreamtcpip/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/rtiostreamtcpip/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/coder/profile/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/toolbox/coder/profile/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +xil_interface_lib.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_interface_lib.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +xil_data_stream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_data_stream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +xil_services.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_services.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +xil_interface.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/xil_interface.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +xilcomms_rtiostream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xilcomms_rtiostream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +xil_rtiostream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/xil_rtiostream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +rtiostream_utils.obj : $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/utils/rtiostream_utils.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +coder_assumptions_app.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_app.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +coder_assumptions_data_stream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_data_stream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +coder_assumptions_rtiostream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/coder_assumptions_rtiostream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +sil_main.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/sil_main.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +target_io.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/target_io.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +rtiostream_tcpip.obj : $(MATLAB_ROOT)/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +xil_instrumentation.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +codeinstr_data_stream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/codeinstr_data_stream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +codeinstr_rtiostream.obj : $(MATLAB_ROOT)/toolbox/rtw/targets/pil/c/codeinstr_rtiostream.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +host_timer_x86.obj : $(MATLAB_ROOT)/toolbox/coder/profile/src/host_timer_x86.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.rsp b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.rsp new file mode 100644 index 0000000..5281c5c --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness.rsp @@ -0,0 +1,17 @@ +codeinstr_data_stream.obj +codeinstr_rtiostream.obj +coder_assumptions_app.obj +coder_assumptions_data_stream.obj +coder_assumptions_rtiostream.obj +host_timer_x86.obj +rtiostream_tcpip.obj +rtiostream_utils.obj +sil_main.obj +target_io.obj +xil_data_stream.obj +xil_instrumentation.obj +xil_interface.obj +xil_interface_lib.obj +xil_rtiostream.obj +xil_services.obj +xilcomms_rtiostream.obj diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_comp.rsp b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_comp.rsp new file mode 100644 index 0000000..344bafb --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_comp.rsp @@ -0,0 +1,20 @@ +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New +-ID:/Documents/SCHOOL/McSCert/do178/src/validation +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented +-ID:/Program\ Files/MATLAB/R2020a/extern/include +-ID:/Program\ Files/MATLAB/R2020a/simulink/include +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src/ext_mode/common +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/ert +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/_sharedutils +-ID:/Program\ Files/MATLAB/R2020a/toolbox/rtw/targets/pil/c +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/FCC_Sys_New_harness_ert_rtw/sil +-ID:/Program\ Files/MATLAB/R2020a/extern/include/coder/connectivity/XILTgtAppSvc +-ID:/Program\ Files/MATLAB/R2020a/toolbox/coder/rtiostream/src/utils +-ID:/Program\ Files/MATLAB/R2020a/toolbox/coder/rtiostream/src +-ID:/Program\ Files/MATLAB/R2020a/extern/include/coder/connectivity/CoderAssumpTgtAppSvc +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/FCC_Sys_New_harness_ert_rtw/coderassumptions +-ID:/Program\ Files/MATLAB/R2020a/extern/include/coder/connectivity/CodeInstrTgtAppSvc +-ID:/Program\ Files/MATLAB/R2020a/toolbox/coder/profile/src diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_ref.rsp b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_ref.rsp new file mode 100644 index 0000000..005186d --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_ref.rsp @@ -0,0 +1,4 @@ +hostobj/instrumented/FCC_Sys_New_harness.obj +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New_rtwlib.lib +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_sbs.c b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_sbs.c new file mode 100644 index 0000000..f320917 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/FCC_Sys_New_harness_sbs.c @@ -0,0 +1,2727 @@ +/* + * FCC_Sys_New_harness_sbs.c + * + * Automatically generated s-function with I/O interface for: + * Component: FCC_Sys_New_harness + * Component Simulink Path: FCC_Sys_New_harness + * Simulation Mode: SIL + * + */ + +#define S_FUNCTION_NAME FCC_Sys_New_harness_sbs +#define S_FUNCTION_LEVEL 2 +#if !defined(RTW_GENERATED_S_FUNCTION) +#define RTW_GENERATED_S_FUNCTION +#endif + +#include +#include +#include "simstruc.h" +#include "simtarget/slMdlrefSimTargetCoreHeaders.h" +#include "simtarget/slMdlrefSimTargetInstrumentationHeaders.h" +#include "fixedpoint.h" +#include "coder/connectivity_core/xilutils/xilutils.h" +#include "coder/simulinkcoder/xilutils_sl/xilutils_sl.h" +#include "rtiostream_utils.h" +#include "coder/connectivity/xilcomms_rtiostream/xilcomms_rtiostream.h" +#include "coder/connectivity/XILHostAppSvc/XILHostAppSvc_CInterface.h" +#include "messages/slMessagesSfcnBridge.h" +#include "strings/slStringSfcnAPI.h" +#include "mwstringutil.h" +#include "coder/connectivity/CodeInstrHostAppSvc/CodeInstrHostAppSvc_CInterface.h" +#include "coder/connectivity/CoderAssumpHostAppSvc/CoderAssumpHostAppSvc_CInterface.h" + +/* Response case labels */ +enum ResponseIDs { + RESPONSE_ERROR = 0, + RESPONSE_OUTPUT_PRE_DATA = 1, + RESPONSE_OUTPUT_DATA = 2, + RESPONSE_PRINTF = 3, + RESPONSE_FOPEN = 4, + RESPONSE_FPRINTF = 5, + RESPONSE_SIGNAL_RAISED = 6 +}; + +typedef struct { + FILE ** Fd; + mwSize size; + int32_T fidOffset; +} targetIOFd_T; + +typedef enum { + XIL_INIT_COMMAND = 0, + XIL_INITIALIZE_COMMAND, + XIL_SYSTEM_INITIALIZE_COMMAND, + XIL_OUTPUT_COMMAND, + XIL_TERMINATE_COMMAND, + XIL_ENABLE_COMMAND, + XIL_DISABLE_COMMAND, + XIL_CONST_OUTPUT_COMMAND, + XIL_PROCESS_PARAMS_COMMAND, + XIL_CLIENT_SERVER_COMMAND, + XIL_SHUTDOWN_COMMAND, + XIL_UPDATE_COMMAND, + XIL_SYSTEM_RESET_COMMAND, + XIL_PAUSE_COMMAND +} + XIL_COMMAND_TYPE_ENUM; + +static void callStopHookAndFreeSFcnMemory(SimStruct *S); +static void mdlTerminate(SimStruct *S); + +/* grow the buffer for target I/O Fd array + * targetIOFd->Fd is NULL on failure */ +static void growTargetIOFd(SimStruct *S, targetIOFd_T * IOFd, mwSize + requiredSize) +{ + if (IOFd->size < requiredSize) { + IOFd->Fd = mxRealloc(IOFd->Fd, requiredSize * sizeof(FILE*)); + if (IOFd->Fd == NULL) { + ssSetErrorStatus( S,"growTargetIOFd: mxRealloc failed."); + } else { + mexMakeMemoryPersistent(IOFd->Fd); + IOFd->size = requiredSize; + } /* if */ + } /* if */ +} + +static void closeAndFreeTargetIOFd(SimStruct *S) +{ + int i; + if (ssGetPWork(S) != NULL) { + targetIOFd_T * targetIOFdPtr = (targetIOFd_T *) ssGetPWorkValue(S, 3); + if (targetIOFdPtr != NULL) { + if (targetIOFdPtr->Fd != NULL) { + for (i=0; isize; i++) { + if (targetIOFdPtr->Fd[i] != NULL) { + fclose(targetIOFdPtr->Fd[i]); + } /* if */ + } /* for */ + + mxFree(targetIOFdPtr->Fd); + } /* if */ + + mxFree(targetIOFdPtr); + } /* if */ + + ssSetPWorkValue(S, 3, NULL); + } /* if */ +} + +/* receive one packet of data and dispatch to owning application */ +static boolean_T recvData(SimStruct *S, void* pComms) +{ + int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4); + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (pCommErrorOccurred == NULL) { + ssSetErrorStatus( S,"pCommErrorOccurred is NULL."); + return XILHOSTAPPSVC_ERROR; + } /* if */ + + if (pXILUtils == NULL) { + ssSetErrorStatus( S,"pXILUtils is NULL."); + return XILHOSTAPPSVC_ERROR; + } /* if */ + + *pCommErrorOccurred = (xilCommsRun(pComms, pXILUtils) != + XILCOMMS_RTIOSTREAM_SUCCESS); + return (*pCommErrorOccurred?XILHOSTAPPSVC_ERROR:XILHOSTAPPSVC_SUCCESS); +} + +/* send data via xil comms */ +static boolean_T sendData(SimStruct *S, void* pXILService, XIL_IOBuffer_T + * IOBuffer, mwSize sendSize) +{ + int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4); + if (pCommErrorOccurred == NULL) { + ssSetErrorStatus( S,"pCommErrorOccurred is NULL."); + return XILHOSTAPPSVC_ERROR; + } /* if */ + + *pCommErrorOccurred = (xilHostAppSvcSend(pXILService, IOBuffer->data, sendSize) + != XILHOSTAPPSVC_SUCCESS); + return (*pCommErrorOccurred?XILHOSTAPPSVC_ERROR:XILHOSTAPPSVC_SUCCESS); +} + +/* implements command dispatch */ +static boolean_T commandDispatch(SimStruct *S, XIL_IOBuffer_T* IOBuffer, mwSize + dataOutSize) +{ + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService == NULL) { + ssSetErrorStatus( S,"pXILService is NULL!"); + return XILHOSTAPPSVC_ERROR; + } /* if */ + + /* send the data */ + if (sendData(S, pXILService, IOBuffer, dataOutSize) != XILHOSTAPPSVC_SUCCESS) + { + return XILHOSTAPPSVC_ERROR; + } /* if */ + + return XILHOSTAPPSVC_SUCCESS; +} + +/* implements command response */ +static boolean_T commandResponse(SimStruct *S, mwSize* dataInSize, + XILCommandResponseType* commandType) +{ + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService == NULL) { + ssSetErrorStatus( S,"pXILService is NULL!"); + return XILHOSTAPPSVC_ERROR; + } /* if */ + + { + /* receive the response data */ + uint8_T COMMAND_COMPLETE = 0; + void * pComms = (void *) ssGetPWorkValue(S, 7); + if (pComms == NULL) { + ssSetErrorStatus( S,"pComms is NULL!"); + return XILHOSTAPPSVC_ERROR; + } /* if */ + + while (!COMMAND_COMPLETE) { + xilHostAppSvcSetIsResponseComplete(pXILService, 0); + if (recvData(S, pComms) != XILHOSTAPPSVC_SUCCESS) { + return XILHOSTAPPSVC_ERROR; + } /* if */ + + COMMAND_COMPLETE = xilHostAppSvcGetIsResponseComplete(pXILService); + } /* while */ + + /* determine command response type */ + *commandType = (XILCommandResponseType) COMMAND_COMPLETE; + *dataInSize = xilHostAppSvcGetPayloadSizeForOneStep(pXILService); + return XILHOSTAPPSVC_SUCCESS; + } +} + +static void copyIOData(void * const dstPtr, void * const srcPtr, uint8_T ** + const tgtPtrPtr, size_t numElements, size_t cTypeSize) +{ + size_t maxBytesConsumed = numElements * cTypeSize; + memcpy(dstPtr, srcPtr, maxBytesConsumed); + (*tgtPtrPtr)+=(maxBytesConsumed/sizeof(**tgtPtrPtr)); +} + +static void copyStringIOData(void * const dstPtr, void * const srcPtr, uint8_T ** + const tgtPtrPtr, size_t numElements, size_t cTypeSize, uint8_T isInput) +{ + size_t maxBytesConsumed = numElements * cTypeSize; + if (isInput) { + suWriteSILStringInput(dstPtr, (int32_T)numElements, srcPtr); + } else { + suWriteSILStringOutput(dstPtr, srcPtr, (int32_T)numElements); + } /* if */ + + (*tgtPtrPtr)+=(maxBytesConsumed/sizeof(**tgtPtrPtr)); +} + +/* returns data needed by code instrumentation service */ +static CodeInstrServiceData_T* codeInstrServiceData(SimStruct *S, uint8_T + memUnitSizeBytes) +{ + CodeInstrServiceData_T* pCodeInstrServiceData = (CodeInstrServiceData_T*) + mxCalloc(1, sizeof(CodeInstrServiceData_T)); + const char * simulinkBlockPath = ssGetPath(S); + if (pCodeInstrServiceData == NULL) { + ssSetErrorStatus( S, + "Error in allocating memory for code instrumentation data through mxCalloc."); + return NULL; + } /* if */ + + pCodeInstrServiceData->infoPath = + "D:/Documents/SCHOOL/McSCert/do178/src/validation/FCC_Sys_New_harness_ert_rtw/sil"; + pCodeInstrServiceData->blockPath = simulinkBlockPath; + pCodeInstrServiceData->rootModel = ssGetPath(ssGetRootSS(S)); + pCodeInstrServiceData->memUnitSize = memUnitSizeBytes; + pCodeInstrServiceData->isProfilingEnabled = true; + pCodeInstrServiceData->inTheLoopType = 0; + pCodeInstrServiceData->silPilInterfaceFcn = + "@coder.connectivity.SimulinkInterface.getSILPILInterface"; + return pCodeInstrServiceData; +} + +static void callStopHookAndFreeSFcnMemory(SimStruct *S) +{ + closeAndFreeTargetIOFd(S); + if (ssGetPWork(S) != NULL) { + int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4); + int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5); + if ((pIsXILApplicationStarted != NULL) && (*pIsXILApplicationStarted == 1)) + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (pXILUtils) { + mxArray *rhs[3]; + const char * simulinkBlockPath = ssGetPath(S); + rhs[ 0 ] = mxCreateString( + "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + rhs[ 1 ] = mxCreateDoubleScalar( 0 ); + rhs[ 2 ] = mxCreateString(simulinkBlockPath); + if (xilUtilsCallMATLAB(pXILUtils, 0, NULL, 3, rhs, + "rtw.pil.SILPILInterface.sfunctionPILStopHook") + != XIL_UTILS_SUCCESS) { + } /* if */ + } /* if */ + } + } /* if */ + + if (pIsXILApplicationStarted != NULL) { + *pIsXILApplicationStarted = 0; + } /* if */ + } /* if */ + + if (ssGetPWork(S) != NULL) { + XIL_IOBuffer_T* IOBufferPtr; + XIL_RtIOStreamData_T * rtIOStreamDataPtr = (XIL_RtIOStreamData_T *) + ssGetPWorkValue(S, 0); + SIL_DEBUGGING_DATA_T * silDebuggingDataPtr = (SIL_DEBUGGING_DATA_T *) + ssGetPWorkValue(S, 2); + if (rtIOStreamDataPtr != NULL) { + { + int errorStatus = rtIOStreamUnloadLib(&rtIOStreamDataPtr->libH); + if (errorStatus) { + ssSetErrorStatus( S,"rtIOStreamUnloadLib failed."); + } /* if */ + } + + mxFree(rtIOStreamDataPtr->lib); + mxDestroyArray(rtIOStreamDataPtr->MATLABObject); + mxFree(rtIOStreamDataPtr); + ssSetPWorkValue(S, 0, NULL); + } /* if */ + + if (silDebuggingDataPtr != NULL) { + mxFree(silDebuggingDataPtr->componentBlockPath); + mxFree(silDebuggingDataPtr->SILPILInterfaceFcnStr); + mxFree(silDebuggingDataPtr); + ssSetPWorkValue(S, 2, NULL); + } /* if */ + + IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + mxFree(IOBufferPtr->data); + mxFree(IOBufferPtr); + ssSetPWorkValue(S, 1, NULL); + } /* if */ + + closeAndFreeTargetIOFd(S); + if (ssGetPWork(S) != NULL) { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + void * pComms = (void *) ssGetPWorkValue(S, 7); + void * pXILService = (void *) ssGetPWorkValue(S, 9); + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + void * pCoderAssumptionsApp = (void *) ssGetPWorkValue(S, 12); + if (pCodeInstrService != NULL) { + uint8_T memUnitSizeBytes = 1; + CodeInstrServiceData_T* pCodeInstrServiceData = codeInstrServiceData(S, + memUnitSizeBytes); + codeInstrHostAppSvcDestroy(pCodeInstrService, pCodeInstrServiceData); + mxFree(pCodeInstrServiceData); + } /* if */ + + ssSetPWorkValue(S, 10, NULL); + if (pCoderAssumptionsApp != NULL) { + coderAssumpHostAppSvcDestroy(pCoderAssumptionsApp); + ssSetPWorkValue(S, 12, NULL); + } /* if */ + + if (pXILService != NULL) { + xilHostAppSvcDestroy(pXILService); + ssSetPWorkValue(S, 9, NULL); + } /* if */ + + if (pComms != NULL) { + xilCommsDestroy(pComms); + ssSetPWorkValue(S, 7, NULL); + } /* if */ + } /* if */ + } /* if */ +} + +static boolean_T processResponseError(SimStruct * S, uint8_T ** mxMemUnitPtrPtr) +{ + uint8_T errorId = **mxMemUnitPtrPtr; + (*mxMemUnitPtrPtr)++; + if (errorId) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pilverification:PILError"); + rhs[1] = mxCreateDoubleScalar(errorId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return XILHOSTAPPSVC_ERROR; + } + } /* if */ + + return XILHOSTAPPSVC_SUCCESS; +} + +static boolean_T processResponsePrintf(SimStruct * S, uint8_T ** mxMemUnitPtrPtr) +{ + const int TARGET_IO_SUCCESS = 0; + uint8_T PRINTF_ERROR; + uint16_T PRINTF_SIZE; + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &PRINTF_ERROR; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint8_T)); + } + } + } + } + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &PRINTF_SIZE; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint16_T)); + } + } + } + } + + if (PRINTF_ERROR != TARGET_IO_SUCCESS) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pil:TargetIOError"); + rhs[1] = mxCreateDoubleScalar(PRINTF_ERROR); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return XILHOSTAPPSVC_ERROR; + } + } else { + uint8_T *pPrintBuff; + pPrintBuff = *mxMemUnitPtrPtr; + if (pPrintBuff[PRINTF_SIZE-1] == '\0') { + mexPrintf("%s", pPrintBuff); + } /* if */ + } /* if */ + + (*mxMemUnitPtrPtr) = (*mxMemUnitPtrPtr) + PRINTF_SIZE; + return XILHOSTAPPSVC_SUCCESS; +} + +static boolean_T processResponseFopen(SimStruct * S, uint8_T ** mxMemUnitPtrPtr) +{ + uint16_T FOPEN_FID; + uint16_T FOPEN_NAME_SIZE; + targetIOFd_T *targetIOFdPtr; + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &FOPEN_FID; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint16_T)); + } + } + } + } + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &FOPEN_NAME_SIZE; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint16_T)); + } + } + } + } + + targetIOFdPtr = (targetIOFd_T *) ssGetPWorkValue(S, 3); + if (targetIOFdPtr != NULL) { + /* check fid increments by 1 */ + if (targetIOFdPtr->fidOffset + 1 == FOPEN_FID) { + targetIOFdPtr->fidOffset = FOPEN_FID; + growTargetIOFd(S, targetIOFdPtr, targetIOFdPtr->fidOffset + 1); + if (targetIOFdPtr->Fd != NULL) { + uint8_T *pFopenBuff; + targetIOFdPtr->Fd[targetIOFdPtr->fidOffset] = NULL; + pFopenBuff = (*mxMemUnitPtrPtr); + if (pFopenBuff[FOPEN_NAME_SIZE-1] == '\0') { + FILE * tmpFd = NULL; + tmpFd = fopen((char *) pFopenBuff,"w"); + if (tmpFd != NULL) { + /* save the file descriptor */ + targetIOFdPtr->Fd[targetIOFdPtr->fidOffset] = tmpFd; + } else { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pil:TargetIOFopenError"); + rhs[1] = mxCreateString((char *) pFopenBuff); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return XILHOSTAPPSVC_ERROR; + } + } /* if */ + } /* if */ + } /* if */ + } else { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pil:TargetIOFopenFidError"); + rhs[1] = mxCreateDoubleScalar(FOPEN_FID); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return XILHOSTAPPSVC_ERROR; + } + } /* if */ + } /* if */ + + (*mxMemUnitPtrPtr) = (*mxMemUnitPtrPtr) + FOPEN_NAME_SIZE; + return XILHOSTAPPSVC_SUCCESS; +} + +static boolean_T processResponseFprintf(SimStruct * S, uint8_T + ** mxMemUnitPtrPtr) +{ + const int TARGET_IO_SUCCESS = 0; + uint8_T FPRINTF_ERROR; + uint16_T FPRINTF_FID; + uint16_T FPRINTF_SIZE; + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &FPRINTF_ERROR; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint8_T)); + } + } + } + } + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &FPRINTF_FID; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint16_T)); + } + } + } + } + + { + { + uint8_T * simDataMemUnitPtr; + simDataMemUnitPtr = (uint8_T *) &FPRINTF_SIZE; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, *mxMemUnitPtrPtr, &*mxMemUnitPtrPtr, + num_elements, sizeof(uint16_T)); + } + } + } + } + + if (FPRINTF_ERROR != TARGET_IO_SUCCESS) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pil:TargetIOError"); + rhs[1] = mxCreateDoubleScalar(FPRINTF_ERROR); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return XILHOSTAPPSVC_ERROR; + } + } else { + targetIOFd_T * targetIOFdPtr = (targetIOFd_T *) ssGetPWorkValue(S, 3); + if (targetIOFdPtr != NULL) { + if (targetIOFdPtr->size > FPRINTF_FID) { + if (targetIOFdPtr->Fd[FPRINTF_FID] != NULL) { + uint8_T *pFprintfBuff; + pFprintfBuff = (*mxMemUnitPtrPtr); + if (pFprintfBuff[FPRINTF_SIZE-1] == '\0') { + fprintf(targetIOFdPtr->Fd[FPRINTF_FID], "%s", pFprintfBuff); + } /* if */ + } /* if */ + } /* if */ + } /* if */ + } /* if */ + + (*mxMemUnitPtrPtr) = (*mxMemUnitPtrPtr) + FPRINTF_SIZE ; + return XILHOSTAPPSVC_SUCCESS; +} + +static boolean_T processResponseSignalRaised(SimStruct * S, uint8_T + ** mxMemUnitPtrPtr) +{ + const char *signalStr[5] = { "SIGFPE", "SIGILL", "SIGABRT", "SIGSEGV", + "Unknown Signal" }; + + uint8_T errorId = **mxMemUnitPtrPtr; + (*mxMemUnitPtrPtr)++; + + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 3 ]; + rhs[0] = mxCreateString("Connectivity:target:CaughtTargetSignalWithStderr"); + rhs[1] = mxCreateString(signalStr[errorId]); + rhs[2] = mxCreateDoubleScalar(ssGetT(S)); + xilUtilsHandleError(pXILUtils, 3 , rhs ); + return XILHOSTAPPSVC_ERROR; + } +} + +static boolean_T processErrorAndTargetIOResponseCases(SimStruct * S, const int + responseId, uint8_T ** mxMemUnitPtrPtr) +{ + switch (responseId) { + case RESPONSE_ERROR: + { + return processResponseError(S, mxMemUnitPtrPtr); + } + + case RESPONSE_PRINTF: + { + return processResponsePrintf(S, mxMemUnitPtrPtr); + } + + case RESPONSE_FOPEN: + { + return processResponseFopen(S, mxMemUnitPtrPtr); + } + + case RESPONSE_FPRINTF: + { + return processResponseFprintf(S, mxMemUnitPtrPtr); + } + + case RESPONSE_SIGNAL_RAISED: + { + return processResponseSignalRaised(S, mxMemUnitPtrPtr); + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return XILHOSTAPPSVC_ERROR; + } + } + } /* switch */ +} + +static size_t getBusElementDimension(SimStruct * S, DTypeId dType, int_T + offsetIdx, const int_T ** dimsOut, int_T * numDims) +{ + int_T numDimensions = ssGetBusElementNumDimensions(S, dType, offsetIdx); + const int_T *dims = ssGetBusElementDimensions(S, dType, offsetIdx); + size_t numElements = 1; + int j = 0; + for (j = 0; j< numDimensions; j++) { + numElements *= dims[j]; + } /* for */ + + *dimsOut = dims; + *numDims = numDimensions; + return numElements; +} + +/* Process params function shared between mdlStart and mdlProcessParams */ +static boolean_T processParams(SimStruct * S) +{ + if (ssGetPWork(S) != NULL) { + int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5); + if ((pIsXILApplicationStarted!=NULL) && (*pIsXILApplicationStarted==1)) { + /* update run time params */ + ssUpdateAllTunableParamsAsRunTimeParams(S); + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!= + XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_PROCESS_PARAMS_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnid = 0; + simDataMemUnitPtr = (uint8_T *) &commandDataFcnid; + + { + size_t num_elements = 1; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + time_T simTime = ssGetT(S); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, simTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + { + XILCommandResponseType commandResponseType = + XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return false; + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return false; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } + } /* if */ + } /* if */ + + return true; +} + +static boolean_T startAndSetupApplication(SimStruct *S) +{ + { + { + mxArray *rhs[4]; + const char * simulinkBlockPath = ssGetPath(S); + rhs[ 0 ] = mxCreateString( + "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + rhs[ 1 ] = mxCreateDoubleScalar( 0 ); + rhs[ 2 ] = mxCreateString(simulinkBlockPath); + rhs[3] = mxCreateString("uint8"); + + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (xilUtilsCallMATLAB(pXILUtils, 0, 0, 4, rhs, + "rtw.pil.SILPILInterface.sfunctionPILStartHook") + !=XIL_UTILS_SUCCESS) { + return false; + } /* if */ + } + } + + { /* record that the XIL application has started */ + int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5); + *pIsXILApplicationStarted = 1; + ssSetPWorkValue(S, 5, pIsXILApplicationStarted); + } + } + + { + mxArray *rhs[3]; + mxArray *lhs[5]; + const char * simulinkBlockPath = ssGetPath(S); + rhs[ 0 ] = mxCreateString( + "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + rhs[ 1 ] = mxCreateDoubleScalar( 0 ); + rhs[ 2 ] = mxCreateString(simulinkBlockPath); + + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (xilUtilsCallMATLAB(pXILUtils, 5, lhs, 3, rhs, + "rtw.pil.SILPILInterface.sfunctionGetRtIOStreamInfoHook") + !=XIL_UTILS_SUCCESS) { + return false; + } /* if */ + } + + { + XIL_RtIOStreamData_T* rtIOStreamDataPtr = (XIL_RtIOStreamData_T*) mxCalloc + (1, sizeof(XIL_RtIOStreamData_T)); + if (rtIOStreamDataPtr == NULL) { + ssSetErrorStatus( S,"Error in allocating memory through mxCalloc."); + return false; + } /* if */ + + rtIOStreamDataPtr->lib = mxArrayToString(lhs[0]); + rtIOStreamDataPtr->MATLABObject = mxDuplicateArray(lhs[1]); + mexMakeMemoryPersistent(rtIOStreamDataPtr); + mexMakeMemoryPersistent(rtIOStreamDataPtr->lib); + mexMakeArrayPersistent(rtIOStreamDataPtr->MATLABObject); + rtIOStreamDataPtr->streamID = *mxGetPr(lhs[2]); + rtIOStreamDataPtr->recvTimeout = *mxGetPr(lhs[3]); + rtIOStreamDataPtr->sendTimeout = *mxGetPr(lhs[4]); + rtIOStreamDataPtr->isRtIOStreamCCall = 1; + rtIOStreamDataPtr->ioMxClassID = mxUINT8_CLASS; + rtIOStreamDataPtr->ioDataSize = sizeof(uint8_T); + rtIOStreamDataPtr->targetRecvBufferSizeBytes = 50000; + rtIOStreamDataPtr->targetSendBufferSizeBytes = 50000; + + { + int errorStatus = rtIOStreamLoadLib(&rtIOStreamDataPtr->libH, + rtIOStreamDataPtr->lib); + if (errorStatus) { + ssSetErrorStatus( S,"rtIOStreamLoadLib failed."); + return false; + } /* if */ + } + + ssSetPWorkValue(S, 0, rtIOStreamDataPtr); + } + + { + int i; + for (i=0; i<5; i++) { + mxDestroyArray(lhs[i]); + } /* for */ + } + } + + { + XIL_IOBuffer_T* IOBufferPtr = (XIL_IOBuffer_T *) mxCalloc(1, sizeof + (XIL_IOBuffer_T)); + if (IOBufferPtr == NULL) { + ssSetErrorStatus( S,"Error in allocating memory through mxCalloc."); + return false; + } /* if */ + + mexMakeMemoryPersistent(IOBufferPtr); + ssSetPWorkValue(S, 1, IOBufferPtr); + } + + { + SIL_DEBUGGING_DATA_T* silDebuggingDataPtr = (SIL_DEBUGGING_DATA_T*) mxCalloc + (1, sizeof(SIL_DEBUGGING_DATA_T)); + const char * simulinkBlockPath = ssGetPath(S); + if (silDebuggingDataPtr == NULL) { + ssSetErrorStatus( S, + "Error in allocating memory through mxCalloc for SIL_DEBUGGING_DATA_T."); + return false; + } /* if */ + + silDebuggingDataPtr->componentBlockPath = strcpy((char *) mxCalloc(strlen + (simulinkBlockPath)+1, sizeof(char)), simulinkBlockPath); + silDebuggingDataPtr->SILPILInterfaceFcnStr = strcpy((char*) mxCalloc(57, + sizeof(char)), "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + silDebuggingDataPtr->inTheLoopType = 0; + mexMakeMemoryPersistent(silDebuggingDataPtr); + mexMakeMemoryPersistent(silDebuggingDataPtr->componentBlockPath); + mexMakeMemoryPersistent(silDebuggingDataPtr->SILPILInterfaceFcnStr); + ssSetPWorkValue(S, 2, silDebuggingDataPtr); + } + + { + targetIOFd_T * targetIOFdPtr = (targetIOFd_T *) mxCalloc(1, sizeof + (targetIOFd_T)); + if (targetIOFdPtr == NULL) { + return false; + } /* if */ + + mexMakeMemoryPersistent(targetIOFdPtr); + targetIOFdPtr->size = 0; + targetIOFdPtr->Fd = NULL; + targetIOFdPtr->fidOffset = -1; + ssSetPWorkValue(S, 3, targetIOFdPtr); + } + + { + void* pConnectionOptions = NULL; + void* pComms = NULL; + void* pXILService = NULL; + void* pMemUnitTransformer = NULL; + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + uint8_T memUnitSizeBytes = 1; + uint8_T ioDataTypeSizeBytes = sizeof(uint8_T); + XIL_RtIOStreamData_T * rtIOStreamDataPtr = (XIL_RtIOStreamData_T *) + ssGetPWorkValue(S, 0); + SIL_DEBUGGING_DATA_T * silDebuggingDataPtr = (SIL_DEBUGGING_DATA_T *) + ssGetPWorkValue(S, 2); + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + void* pCodeInstrService = NULL; + CodeInstrServiceData_T* pCodeInstrServiceData = codeInstrServiceData(S, + memUnitSizeBytes); + void * pCoderAssumptionsApp = NULL; + if (xilCommsCreate(&pComms, rtIOStreamDataPtr, silDebuggingDataPtr, + memUnitSizeBytes, pMemUnitTransformer, pXILUtils, 0) != + XILCOMMS_RTIOSTREAM_SUCCESS) { + return false; + } /* if */ + + if (xilHostAppSvcCreate(&pXILService, pComms, pXILUtils, IOBufferPtr, + memUnitSizeBytes, ioDataTypeSizeBytes, 0) != + XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + { + void * pCodeInstrMultiRunData = NULL; + pCodeInstrMultiRunData = (void *) ssGetPWorkValue(S, 11); + if (codeInstrHostAppSvcCreate(&pCodeInstrService, pCodeInstrServiceData, + pComms, pMemUnitTransformer, 32, pXILUtils, memUnitSizeBytes, 0, + pCodeInstrMultiRunData) != CODEINSTRHOSTAPPSVC_SUCCESS) { + mxFree(pCodeInstrServiceData); + return false; + } /* if */ + + mxFree(pCodeInstrServiceData); + } + + { + mxArray * codeGenComponent = mxCreateString("FCC_Sys_New_harness"); + mxArray *rhs[3]; + const char * simulinkBlockPath = ssGetPath(S); + rhs[ 0 ] = mxCreateString( + "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + rhs[ 1 ] = mxCreateDoubleScalar( 0 ); + rhs[ 2 ] = mxCreateString(simulinkBlockPath); + if (coderAssumpHostAppSvcCreate(&pCoderAssumptionsApp, pComms, pXILUtils, + 0, 1, codeGenComponent, rhs[0], rhs[1], rhs[2], 1, 0, 1) != + CODERASSUMPHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + } + + xilCommsRegisterApplication(pComms, pXILService); + xilCommsRegisterApplication(pComms, pCodeInstrService); + xilCommsRegisterApplication(pComms, pCoderAssumptionsApp); + ssSetPWorkValue(S, 9, pXILService); + ssSetPWorkValue(S, 7, pComms); + ssSetPWorkValue(S, 6, pXILUtils); + ssSetPWorkValue(S, 10, pCodeInstrService); + ssSetPWorkValue(S, 12, pCoderAssumptionsApp); + } + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!= + XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_INIT_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnid = 0; + simDataMemUnitPtr = (uint8_T *) &commandDataFcnid; + + { + size_t num_elements = 1; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + time_T simTime = ssGetT(S); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, simTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + { + XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + return false; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + +#define RESPONSE_TYPE_SIZE 7 + + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return false; + } /* if */ + break; + } + + case RESPONSE_TYPE_SIZE: + { + uint8_T typeBytes; + uint8_T typeId = *mxMemUnitPtr; + mxMemUnitPtr++; + typeBytes = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (typeId) { + case SS_SINGLE: + { + if (typeBytes != 4) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 3 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:SingleUnsupported"); + rhs[1] = mxCreateDoubleScalar(4); + rhs[2] = mxCreateDoubleScalar(typeBytes); + xilUtilsHandleError(pXILUtils, 3 , rhs ); + return false; + } + } /* if */ + break; + } + + case SS_DOUBLE: + { + if (typeBytes != 8) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 3 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:DoubleUnsupported"); + rhs[1] = mxCreateDoubleScalar(8); + rhs[2] = mxCreateDoubleScalar(typeBytes); + xilUtilsHandleError(pXILUtils, 3 , rhs ); + return false; + } + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownTypeId"); + rhs[1] = mxCreateDoubleScalar(typeId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return false; + } + break; + } + } /* switch */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return false; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } + + /* initialize parameters */ + if (!processParams(S)) { + return false; + } /* if */ + + { + /* DataInterface: output, 1 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, 0); + } + + { + /* DataInterface: output, 2 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, 1); + } + + { + /* DataInterface: output, 3 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, 2); + } + + return true; +} + +static void sendInitializeCommand(SimStruct *S) +{ + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!= + XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_INITIALIZE_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnid = 0; + simDataMemUnitPtr = (uint8_T *) &commandDataFcnid; + + { + size_t num_elements = 1; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + time_T simTime = ssGetT(S); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, simTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + { + XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return; + } /* if */ + break; + } + + case RESPONSE_OUTPUT_PRE_DATA: + { + break; + } + + case RESPONSE_OUTPUT_DATA: + { + { + /* DataInterface: output, 1 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, + 0); + + { + uint8_T * simDataMemUnitPtr; + + /* DataInterface: output, 1 */ + simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, mxMemUnitPtr, + &mxMemUnitPtr, num_elements, sizeof(int16_T)); + } + } + } + } + + { + /* DataInterface: output, 2 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, + 1); + + { + uint8_T * simDataMemUnitPtr; + + /* DataInterface: output, 2 */ + simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, mxMemUnitPtr, + &mxMemUnitPtr, num_elements, sizeof(int16_T)); + } + } + } + } + + { + /* DataInterface: output, 3 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, + 2); + + { + uint8_T * simDataMemUnitPtr; + + /* DataInterface: output, 3 */ + simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, mxMemUnitPtr, + &mxMemUnitPtr, num_elements, sizeof(int16_T)); + } + } + } + } + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } +} + +/* This function checks the attributes of tunable parameters. */ +#define MDL_CHECK_PARAMETERS +#if defined(MDL_CHECK_PARAMETERS) && defined(MATLAB_MEX_FILE) + +static void mdlCheckParameters(SimStruct *S) +{ +} + +#endif /* MDL_CHECK_PARAMETERS */ + +static void mdlInitializeSizes(SimStruct *S) +{ + ssSetNumSFcnParams(S, 0); /* Number of expected parameters */ + if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) { + +#if defined(MDL_CHECK_PARAMETERS) + + mdlCheckParameters(S); + +#endif + + if (ssGetErrorStatus(S) != (NULL)) + return; + } else { + /* Parameter mismatch will be reported by Simulink */ + return; + } + + ssSetNumContStates(S, 0); + ssSetNumDiscStates(S, 0); + + /* no support for SimState */ + ssSetSimStateCompliance(S, DISALLOW_SIM_STATE); + + /* Allow signal dimensions greater than 2 */ + ssAllowSignalsWithMoreThan2D(S); + + /* Allow fixed-point data types with 33 or more bits */ + ssFxpSetU32BitRegionCompliant(S,1); + ssSetRTWGeneratedSFcn(S, 4); + if (!ssSetNumInputPorts(S, 0)) + return; + if (!ssSetNumOutputPorts(S, 3)) + return; + + /* Output Port 0 */ + if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) { + DTypeId dataTypeId = INVALID_DTYPE_ID; + + /* set datatype */ + dataTypeId = 4; + ssSetOutputPortDataType(S, 0, dataTypeId); + } + + /* dimensions */ + { + DECL_AND_INIT_DIMSINFO(di); + int_T dims[ 1 ] = { 1 }; + + di.numDims = 1; + di.dims = dims; + di.width = 1; + ssSetOutputPortDimensionInfo(S, 0, &di); + } + + ssSetOutputPortDimensionsMode(S, 0, FIXED_DIMS_MODE); + + /* complexity */ + ssSetOutputPortComplexSignal(S, 0, COMPLEX_NO); + + /* using hybrid block and port based sample times */ + ssSetOutputPortSampleTime(S, 0, 0.001); + ssSetOutputPortOffsetTime(S, 0, 0); + + /* sampling mode */ + ssSetOutputPortFrameData(S, 0, FRAME_NO); + + /* units */ + if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) { + +#if defined (MATLAB_MEX_FILE) + + UnitId unitIdReg; + ssRegisterUnitFromExpr( + S, + "", + &unitIdReg); + if (unitIdReg == INVALID_UNIT_ID) + return; + ssSetOutputPortUnit(S, 0, unitIdReg); + +#endif + + } /* Output Port 1 */ + + if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) { + DTypeId dataTypeId = INVALID_DTYPE_ID; + + /* set datatype */ + dataTypeId = 4; + ssSetOutputPortDataType(S, 1, dataTypeId); + } + + /* dimensions */ + { + DECL_AND_INIT_DIMSINFO(di); + int_T dims[ 1 ] = { 1 }; + + di.numDims = 1; + di.dims = dims; + di.width = 1; + ssSetOutputPortDimensionInfo(S, 1, &di); + } + + ssSetOutputPortDimensionsMode(S, 1, FIXED_DIMS_MODE); + + /* complexity */ + ssSetOutputPortComplexSignal(S, 1, COMPLEX_NO); + + /* using hybrid block and port based sample times */ + ssSetOutputPortSampleTime(S, 1, 0.001); + ssSetOutputPortOffsetTime(S, 1, 0); + + /* sampling mode */ + ssSetOutputPortFrameData(S, 1, FRAME_NO); + + /* units */ + if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) { + +#if defined (MATLAB_MEX_FILE) + + UnitId unitIdReg; + ssRegisterUnitFromExpr( + S, + "", + &unitIdReg); + if (unitIdReg == INVALID_UNIT_ID) + return; + ssSetOutputPortUnit(S, 1, unitIdReg); + +#endif + + } /* Output Port 2 */ + + if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) { + DTypeId dataTypeId = INVALID_DTYPE_ID; + + /* set datatype */ + dataTypeId = 4; + ssSetOutputPortDataType(S, 2, dataTypeId); + } + + /* dimensions */ + { + DECL_AND_INIT_DIMSINFO(di); + int_T dims[ 1 ] = { 1 }; + + di.numDims = 1; + di.dims = dims; + di.width = 1; + ssSetOutputPortDimensionInfo(S, 2, &di); + } + + ssSetOutputPortDimensionsMode(S, 2, FIXED_DIMS_MODE); + + /* complexity */ + ssSetOutputPortComplexSignal(S, 2, COMPLEX_NO); + + /* using hybrid block and port based sample times */ + ssSetOutputPortSampleTime(S, 2, 0.001); + ssSetOutputPortOffsetTime(S, 2, 0); + + /* sampling mode */ + ssSetOutputPortFrameData(S, 2, FRAME_NO); + + /* units */ + if (ssGetSimMode(S) != SS_SIMMODE_SIZES_CALL_ONLY) { + +#if defined (MATLAB_MEX_FILE) + + UnitId unitIdReg; + ssRegisterUnitFromExpr( + S, + "", + &unitIdReg); + if (unitIdReg == INVALID_UNIT_ID) + return; + ssSetOutputPortUnit(S, 2, unitIdReg); + +#endif + + } /* using hybrid block and port based sample times */ + + ssSetNumSampleTimes(S, 2); + + /* this s-function is sample time dependent: do not allow sub-models containing it to inherit sample times */ + ssSetModelReferenceSampleTimeInheritanceRule(S, + DISALLOW_SAMPLE_TIME_INHERITANCE); + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S) ) { + ssSetNumPWork(S, 0); + } else { + ssSetNumPWork(S, 13); + } /* if */ + + ssSetNumRWork(S, 0); + ssSetNumIWork(S, 0); + ssSetNumModes(S, 0); + ssSetNumNonsampledZCs(S, 0); + + { + uint_T options = 0; + + /* using hybrid block and port based sample times */ + options |= SS_OPTION_PORT_SAMPLE_TIMES_ASSIGNED; + + /* do not allow (including inheritance of) constant block-based sample times*/ + options |= SS_OPTION_DISALLOW_CONSTANT_SAMPLE_TIME; + options |= SS_OPTION_SUPPORTS_ALIAS_DATA_TYPES; + options |= SS_OPTION_CALL_TERMINATE_ON_EXIT; + ssSetOptions(S, options); + } + + ssSetModelReferenceNormalModeSupport(S, MDL_START_AND_MDL_PROCESS_PARAMS_OK); +} + +#define MDL_SET_INPUT_PORT_SAMPLE_TIME /* Change to #undef to remove function */ +#if defined(MDL_SET_INPUT_PORT_SAMPLE_TIME) && defined(MATLAB_MEX_FILE) + +static void mdlSetInputPortSampleTime(SimStruct *S, int_T portIdx, real_T + sampleTime, real_T offsetTime) +{ + /* sample times are fully specified */ +} + +#endif /* MDL_SET_INPUT_PORT_SAMPLE_TIME */ + +#define MDL_SET_OUTPUT_PORT_SAMPLE_TIME /* Change to #undef to remove function */ +#if defined(MDL_SET_OUTPUT_PORT_SAMPLE_TIME) && defined(MATLAB_MEX_FILE) + +static void mdlSetOutputPortSampleTime(SimStruct *S, int_T portIdx, real_T + sampleTime, real_T offsetTime) +{ + /* sample times are fully specified */ +} + +#endif /* MDL_SET_OUTPUT_PORT_SAMPLE_TIME */ + +static void mdlInitializeSampleTimes(SimStruct *S) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + /* using hybrid block and port based sample times */ + ssSetSampleTime(S, 0, 0.001); + ssSetOffsetTime(S, 0, 0); + ssSetSampleTime(S, 1, 0.01); + ssSetOffsetTime(S, 1, 0); +} + +#define MDL_SETUP_RUNTIME_RESOURCES /* Change to #undef to remove function */ +#if defined(MDL_SETUP_RUNTIME_RESOURCES) + +static void mdlSetupRuntimeResources(SimStruct *S) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + { + mxArray * error = NULL; + error = mexCallMATLABWithTrap( 0, NULL, 0, NULL, + "rtw.pil.checkEmbeddedCoderInstalled"); + if (error != NULL) { + mexCallMATLAB( 0, NULL, 1, &error, "throw"); + } /* if */ + } + + { + mxArray * lhs[1]; + mxArray * error = NULL; + char * installVersion; + error = mexCallMATLABWithTrap(1, lhs, 0, NULL, "rtw.pil.getPILVersion"); + if (error != NULL) { + mxDestroyArray(error); + ssSetErrorStatus( S, + "Failed to determine the installed In-the-Loop version for comparison against the In-the-Loop s-function version (release 9.8 (R2020a)_13). To avoid this error, remove the In-the-Loop s-function from your MATLAB path (e.g. delete it or move to a clean working directory)."); + return; + } /* if */ + + if (mxIsEmpty(lhs[0])) { + ssSetErrorStatus( S,"rtw.pil.getPILVersion returned empty!"); + return; + } /* if */ + + installVersion = mxArrayToString(lhs[0]); + mxDestroyArray(lhs[0]); + if (installVersion == NULL) { + ssSetErrorStatus( S,"Failed to determine installed In-the-Loop version."); + return; + } /* if */ + + if (strcmp(installVersion, "9.8 (R2020a)_13") != 0) { + ssSetErrorStatus( S, + "The In-the-Loop s-function is incompatible with the installed In-the-Loop version (see ver('matlab')); it was generated for release 9.8 (R2020a)_13. To avoid this error, remove the In-the-Loop s-function from your MATLAB path (e.g. delete it or move to a clean working directory)"); + return; + } /* if */ + + mxFree(installVersion); + } + + { + int retValXILUtils = XIL_UTILS_SUCCESS; + void* pXILUtils = NULL; + retValXILUtils = xilSimulinkUtilsCreate(&pXILUtils, S); + if (retValXILUtils!=XIL_UTILS_SUCCESS) { + ssSetErrorStatus( S,"Error instantiating XIL Utils!"); + return; + } /* if */ + + ssSetPWorkValue(S, 6, pXILUtils); + } + + { + int * pCommErrorOccurred = (int *) mxCalloc(1, sizeof(int)); + if (pCommErrorOccurred == NULL) { + ssSetErrorStatus( S, + "Error in allocating memory for pCommErrorOccurred through mxCalloc."); + return; + } /* if */ + + *pCommErrorOccurred = 0; + mexMakeMemoryPersistent(pCommErrorOccurred); + ssSetPWorkValue(S, 4, pCommErrorOccurred); + } + + { + int * pIsXILApplicationStarted = (int *) mxCalloc(1, sizeof(int)); + if (pIsXILApplicationStarted == NULL) { + ssSetErrorStatus( S, + "Error in allocating memory for pIsXILApplicationStarted through mxCalloc."); + return; + } /* if */ + + *pIsXILApplicationStarted = 0; + mexMakeMemoryPersistent(pIsXILApplicationStarted); + ssSetPWorkValue(S, 5, pIsXILApplicationStarted); + } + + { + mxArray *rhs[4]; + mxArray *lhs[1]; + char * rootLoggingPath; + const char * simulinkBlockPath = ssGetPath(S); + rhs[ 0 ] = mxCreateString( + "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + rhs[ 1 ] = mxCreateDoubleScalar( 0 ); + rhs[ 2 ] = mxCreateString(simulinkBlockPath); + rhs[3] = mxCreateString(ssGetPath(ssGetRootSS(S))); + + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (xilUtilsCallMATLAB(pXILUtils, 1, lhs, 4, rhs, + "rtw.pil.SILPILInterface.sfunctionInitializeHook") + !=XIL_UTILS_SUCCESS) { + return; + } /* if */ + } + + rootLoggingPath = mxArrayToString(lhs[0]); + mxDestroyArray(lhs[0]); + mxFree(rootLoggingPath); + } + + { + void * multiRunDataPtr = xilSimulinkUtilsStaticInitMultiRunInstrData(); + ssSetPWorkValue(S, 11, multiRunDataPtr); + } +} + +#endif /* MDL_SETUP_RUNTIME_RESOURCES */ + +#define MDL_SIM_STATUS_CHANGE /* Change to #undef to remove function */ +#if defined(MDL_SIM_STATUS_CHANGE) + +static void mdlSimStatusChange(SimStruct *S, ssSimStatusChangeType simStatus) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + if (simStatus == SIM_PAUSE) { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!= + XILHOSTAPPSVC_SUCCESS) { + return ; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_PAUSE_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnid = 0; + simDataMemUnitPtr = (uint8_T *) &commandDataFcnid; + + { + size_t num_elements = 1; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + time_T simTime = ssGetT(S); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, simTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) { + return ; + } /* if */ + + { + XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + return ; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return ; + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return ; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } + + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (pXILUtils) { + mxArray *rhs[3]; + const char * simulinkBlockPath = ssGetPath(S); + rhs[ 0 ] = mxCreateString( + "@coder.connectivity.SimulinkInterface.getSILPILInterface"); + rhs[ 1 ] = mxCreateDoubleScalar( 0 ); + rhs[ 2 ] = mxCreateString(simulinkBlockPath); + if (xilUtilsCallMATLAB(pXILUtils, 0, NULL, 3, rhs, + "rtw.pil.SILPILInterface.sfunctionPILPauseHook") + != XIL_UTILS_SUCCESS) { + return ; + } /* if */ + } /* if */ + } + } /* if */ +} + +#endif /* MDL_SIM_STATUS_CHANGE */ + +#define MDL_START /* Change to #undef to remove function */ +#if defined(MDL_START) + +static void mdlStart(SimStruct *S) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + /* no solver check required for multitasking scheduling */ + /* Check current start time is consistent with the generated code */ + if (ssGetTStart(S) != 0) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pil:XILBlockStartTimeError"); + rhs[1] = mxCreateString("0"); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + } /* if */ + + { + int * pIsXILApplicationStartedLocal = (int *) ssGetPWorkValue(S, 5); + if (pIsXILApplicationStartedLocal != NULL && (*pIsXILApplicationStartedLocal) + != 0) { + ssSetErrorStatus( S, + "Failed to start the application: another instance is already running."); + return ; + } /* if */ + } + + { + boolean_T applicationStarted = startAndSetupApplication(S); + if (!applicationStarted) { + return; + } /* if */ + } + + sendInitializeCommand(S); +} + +#endif /* MDL_START */ + +static void XILoutputTID01(SimStruct *S, int tid) +{ + time_T taskTime = ssGetTaskTime(S, 0); + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 9, 0)!= + XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_OUTPUT_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnidTID[2] = { 0, 1 }; + + simDataMemUnitPtr = (uint8_T *) &commandDataFcnidTID[0]; + + { + size_t num_elements = 2; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, taskTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 9)!=XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + { + XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return; + } /* if */ + break; + } + + case RESPONSE_OUTPUT_PRE_DATA: + { + break; + } + + case RESPONSE_OUTPUT_DATA: + { + { + /* DataInterface: output, 1 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, + 0); + + { + uint8_T * simDataMemUnitPtr; + + /* DataInterface: output, 1 */ + simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, mxMemUnitPtr, + &mxMemUnitPtr, num_elements, sizeof(int16_T)); + } + } + } + } + + { + /* DataInterface: output, 2 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, + 1); + + { + uint8_T * simDataMemUnitPtr; + + /* DataInterface: output, 2 */ + simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, mxMemUnitPtr, + &mxMemUnitPtr, num_elements, sizeof(int16_T)); + } + } + } + } + + { + /* DataInterface: output, 3 */ + void * dataInterfacePtr = (void *) ssGetOutputPortSignal(S, + 2); + + { + uint8_T * simDataMemUnitPtr; + + /* DataInterface: output, 3 */ + simDataMemUnitPtr = ( uint8_T *) dataInterfacePtr; + + { + size_t num_elements = 1; + + { + copyIOData(simDataMemUnitPtr, mxMemUnitPtr, + &mxMemUnitPtr, num_elements, sizeof(int16_T)); + } + } + } + } + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return; + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } +} + +static void XILoutputTID02(SimStruct *S, int tid) +{ + time_T taskTime = ssGetTaskTime(S, 1); + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 9, 0)!= + XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_OUTPUT_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnidTID[2] = { 0, 2 }; + + simDataMemUnitPtr = (uint8_T *) &commandDataFcnidTID[0]; + + { + size_t num_elements = 2; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, taskTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 9)!=XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + { + XILCommandResponseType commandResponseType = XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + return; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return; + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + return; + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } +} + +#define MDL_PROCESS_PARAMETERS +#if defined(MDL_PROCESS_PARAMETERS) + +static void mdlProcessParameters(SimStruct *S) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + processParams(S); +} + +#endif /* MDL_PROCESS_PARAMETERS */ + +#define MDL_INITIALIZE_CONDITIONS /* Change to #undef to remove function */ +#if defined(MDL_INITIALIZE_CONDITIONS) + +static void mdlInitializeConditions(SimStruct *S) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + if (!ssIsFirstInitCond(S)) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString("PIL:pil:NoInitConditionsToInvoke"); + rhs[1] = mxCreateString(ssGetPath(S)); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + return; + } + } /* if */ +} + +#endif /* MDL_INITIALIZE_CONDITIONS */ + +#define MDL_SET_WORK_WIDTHS /* Change to #undef to remove function */ +#if defined(MDL_SET_WORK_WIDTHS) + +static void mdlSetWorkWidths(SimStruct *S) +{ +} + +#endif /* MDL_SET_WORK_WIDTHS */ + +static void mdlOutputs(SimStruct *S, int_T tid) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + /* Multirate, multitasking scheduling */ + /* check for sample time hit associated with task 1 */ + if (ssIsSampleHit(S, 0, tid)) { + XILoutputTID01(S, tid); + } /* if */ + + /* Multirate, multitasking scheduling */ + /* check for sample time hit associated with task 2 */ + if (ssIsSampleHit(S, 1, tid)) { + XILoutputTID02(S, tid); + } /* if */ +} + +#define MDL_UPDATE +#if defined(MDL_UPDATE) + +static void mdlUpdate(SimStruct *S, int_T tid) +{ +} + +#endif + +static void mdlTerminate(SimStruct *S) +{ + int commErrorOccurred = 0; + int isXILApplicationStarted = 0; + + { + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + if (ssGetPWork(S) != NULL) { + int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4); + int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5); + if (pCommErrorOccurred != NULL) { + commErrorOccurred = *pCommErrorOccurred; + } /* if */ + + if (pIsXILApplicationStarted != NULL) { + isXILApplicationStarted = *pIsXILApplicationStarted; + } /* if */ + } /* if */ + } + + if (isXILApplicationStarted) { + if (!commErrorOccurred) { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 5, 0)!= + XILHOSTAPPSVC_SUCCESS) { + callStopHookAndFreeSFcnMemory(S); + return; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_TERMINATE_COMMAND; + mxMemUnitPtr++; + + { + { + uint8_T * simDataMemUnitPtr; + uint32_T commandDataFcnid = 0; + simDataMemUnitPtr = (uint8_T *) &commandDataFcnid; + + { + size_t num_elements = 1; + + { + copyIOData(mxMemUnitPtr, simDataMemUnitPtr, &mxMemUnitPtr, + num_elements, sizeof(uint32_T)); + } + } + } + } + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + time_T simTime = ssGetT(S); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, simTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 5)!=XILHOSTAPPSVC_SUCCESS) { + callStopHookAndFreeSFcnMemory(S); + return; + } /* if */ + + { + XILCommandResponseType commandResponseType = + XIL_COMMAND_NOT_COMPLETE; + while (commandResponseType != XIL_STEP_COMPLETE) { + /* receive command from the target */ + mwSize dataInSize = 0; + if (commandResponse(S, &dataInSize, &commandResponseType) != + XILHOSTAPPSVC_SUCCESS) { + callStopHookAndFreeSFcnMemory(S); + return; + } /* if */ + + if (dataInSize>0) { + size_t dataInMemUnitSize = dataInSize; + uint8_T responseId = 0; + uint8_T * mxMemUnitPtrEnd; + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + mxMemUnitPtrEnd = mxMemUnitPtr + dataInMemUnitSize - 1; + while (mxMemUnitPtr <= mxMemUnitPtrEnd) { + /* read response id */ + responseId = *mxMemUnitPtr; + mxMemUnitPtr++; + switch (responseId) { + case RESPONSE_ERROR: + case RESPONSE_PRINTF: + case RESPONSE_FOPEN: + case RESPONSE_FPRINTF: + case RESPONSE_SIGNAL_RAISED: + { + if (processErrorAndTargetIOResponseCases(S, responseId, + &mxMemUnitPtr)== XILHOSTAPPSVC_ERROR) { + callStopHookAndFreeSFcnMemory(S); + return; + } /* if */ + break; + } + + default: + { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 2 ]; + rhs[0] = mxCreateString( + "PIL:pilverification:UnknownResponseId"); + rhs[1] = mxCreateDoubleScalar(responseId); + xilUtilsHandleError(pXILUtils, 2 , rhs ); + callStopHookAndFreeSFcnMemory(S); + return; + } + break; + } + } /* switch */ + } /* while */ + } /* if */ + } /* while */ + } + } + } + + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + if (IOBufferPtr != NULL) { + void * pXILService = (void *) ssGetPWorkValue(S, 9); + if (pXILService != NULL) { + if (xilHostAppSvcGrowIOBuffer(pXILService, IOBufferPtr, 1, 0)!= + XILHOSTAPPSVC_SUCCESS) { + callStopHookAndFreeSFcnMemory(S); + return; + } /* if */ + + if (IOBufferPtr->data != NULL) { + mxMemUnitPtr = (uint8_T *) IOBufferPtr->data; + + /* write command id */ + *mxMemUnitPtr = (uint8_T) XIL_SHUTDOWN_COMMAND; + mxMemUnitPtr++; + } /* if */ + } /* if */ + } /* if */ + } + + { + { + uint8_T * mxMemUnitPtr; + mwSize dataInSize = 0; + XIL_IOBuffer_T * IOBufferPtr = (XIL_IOBuffer_T *) ssGetPWorkValue(S, 1); + + /* provide the time information to the code instrumentation service */ + { + void * pCodeInstrService = (void *) ssGetPWorkValue(S, 10); + time_T simTime = ssGetT(S); + if (pCodeInstrService != NULL) { + codeInstrHostAppSvcSetTime(pCodeInstrService, simTime); + } /* if */ + } + + /* dispatch command to the target */ + if (commandDispatch(S, IOBufferPtr, 1)!=XILHOSTAPPSVC_SUCCESS) { + callStopHookAndFreeSFcnMemory(S); + return; + } /* if */ + } + } + } /* if */ + } /* if */ + + callStopHookAndFreeSFcnMemory(S); +} + +#define MDL_CLEANUP_RUNTIME_RESOURCES /* Change to #undef to remove function */ +#if defined(MDL_CLEANUP_RUNTIME_RESOURCES) + +static void mdlCleanupRuntimeResources(SimStruct *S) +{ + if (ssRTWGenIsCodeGen(S) || ssIsExternalSim(S)) { + return; + } /* if */ + + { + void * pCodeInstrMultiRunData = NULL; + pCodeInstrMultiRunData = (void *) ssGetPWorkValue(S, 11); + xilSimulinkUtilsStaticFreeMultiRunInstrData(pCodeInstrMultiRunData); + } + + if (ssGetPWork(S) != NULL) { + int * pIsXILApplicationStarted = (int *) ssGetPWorkValue(S, 5); + int * pCommErrorOccurred = (int *) ssGetPWorkValue(S, 4); + if (pIsXILApplicationStarted != NULL) { + mxFree(pIsXILApplicationStarted); + ssSetPWorkValue(S, 5, NULL); + } /* if */ + + if (pCommErrorOccurred != NULL) { + mxFree(pCommErrorOccurred); + ssSetPWorkValue(S, 4, NULL); + } /* if */ + } /* if */ + + if (ssGetPWork(S) != NULL) { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + if (pXILUtils != NULL) { + xilUtilsDestroy(pXILUtils); + ssSetPWorkValue(S, 6, NULL); + } /* if */ + } /* if */ +} + +#endif /* MDL_CLEANUP_RUNTIME_RESOURCES */ + +#define MDL_ENABLE +#if defined(MDL_ENABLE) + +static void mdlEnable(SimStruct *S) +{ + if (ssGetT(S) != ssGetTStart(S)) { + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 3 ]; + rhs[0] = mxCreateString("PIL:pil:EnableDisableCallbackError"); + rhs[1] = mxCreateString("enable"); + rhs[2] = mxCreateString("enable"); + xilUtilsHandleError(pXILUtils, 3 , rhs ); + return; + } + } /* if */ +} + +#endif /* MDL_ENABLE */ + +#define MDL_DISABLE +#if defined(MDL_DISABLE) + +static void mdlDisable(SimStruct *S) +{ + { + void * pXILUtils = (void *) ssGetPWorkValue(S, 6); + mxArray * rhs[ 3 ]; + rhs[0] = mxCreateString("PIL:pil:EnableDisableCallbackError"); + rhs[1] = mxCreateString("disable"); + rhs[2] = mxCreateString("disable"); + xilUtilsHandleError(pXILUtils, 3 , rhs ); + return; + } +} + +#endif /* MDL_DISABLE */ + +/* Required S-function trailer */ +#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ +#include "simulink.c" /* MEX-file interface mechanism */ +#include "fixedpoint.c" +#else +#error Assertion failed: file must be compiled as a MEX-file +#endif diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/buildInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..c12c7074a0528270eee06705034adf8ef28a6db5 GIT binary patch literal 22184 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 EoSjmmHZ@9!J!+(O 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%0DK;(^>b+Nb4PiWx}5EbB>(=Xh@w4#c<0(o7TB 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�FZi7)VJEy*fL_+~jzu!UQ5y&zo+2E&)@f+qQW{25> zbg#vTeExw%9y>NiA<_3B8276N61Mc6&|B6S?iYjs?{nO{yxp>4tld?kkNLEZx!%Xz?qYIg zE?Hb}$0E-^KriYa+t}D($wJD^EOYMIw4U&V9|3uVpJ^o2}m|1?Z5o2okle9#djx))JX4_*^cLPels3V%D@x zW|<|^j&!-`^*f)>*d2e1rj^U&6F6Ej^Qr$%q;rZA_#nGly4u?sp84Vxd!|^7uO(-) l*+Q~6zSPc{w$SwzDNQ2iE>e>{k&0OpZ7Zw~(8N&&`xo&yzG(me literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/codeinstr_rtiostream.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/codeinstr_rtiostream.obj new file mode 100644 index 0000000000000000000000000000000000000000..05d1e4e6c1ec10b660cd3285689d35fb32bc3f23 GIT binary patch literal 1540 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 x6)43FRs%8-705!lp!CViXpbrh*1ORV!SVjN< literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.bat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.bat new file mode 100644 index 0000000..8deb753 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.bat @@ -0,0 +1,15 @@ +@if not "%MINGW_ROOT%" == "" (@set "PATH=%PATH%;%MINGW_ROOT%") + + +call "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a\bin\win64\checkMATLABRootForDriveMap.exe" "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a" > mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_Sys_New_harness.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.c b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.c new file mode 100644 index 0000000..e2dc3de --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.c @@ -0,0 +1,569 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_Sys_New_harness.c + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "FCC_Sys_New_harness.h" + +/* Private macros used by the generated code to access rtModel */ +#ifndef rtmIsMajorTimeStep +# define rtmIsMajorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MAJOR_TIME_STEP) +#endif + +#ifndef rtmIsMinorTimeStep +# define rtmIsMinorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MINOR_TIME_STEP) +#endif + +#ifndef rtmSetTPtr +# define rtmSetTPtr(rtm, val) ((rtm)->Timing.t = (val)) +#endif + +/* Used by FromWorkspace Block: '/FromWs' */ +#ifndef rtInterpolate +# define rtInterpolate(v1,v2,f1,f2) (((v1)==(v2))?((double)(v1)): (((f1)*((double)(v1)))+((f2)*((double)(v2))))) +#endif + +#ifndef rtRound +# define rtRound(v) ( ((v) >= 0) ? floor((v) + 0.5) : ceil((v) - 0.5) ) +#endif + +rtTimingBridge FCC_Sys_New_harness_TimingBrdg; + +/* Block signals and states (default storage) */ +DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW; + +/* External outputs (root outports fed by signals with default storage) */ +ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y; + +/* Real-time model */ +RT_MODEL_FCC_Sys_New_harness_T FCC_Sys_New_harness_M_; +RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M = + &FCC_Sys_New_harness_M_; + +/* Model step function for TID0 */ +void FCC_Sys_New_harness_step0(void) /* Sample time: [0.0s, 0.0s] */ +{ + real_T v; + + /* Update the flag to indicate when data transfers from + * Sample time: [0.001s, 0.0s] to Sample time: [0.01s, 0.0s] */ + FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2 = + (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 0); + (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2)++; + if ((FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2) > 9) { + FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 = 0; + } + + /* FromWorkspace: '/FromWs' */ + { + real_T *pDataValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr; + real_T *pTimeValues = (real_T *) FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr; + int_T currTimeIndex = FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex; + real_T t = FCC_Sys_New_harness_M->Timing.t[0]; + + /* Get index */ + if (t <= pTimeValues[0]) { + currTimeIndex = 0; + } else if (t >= pTimeValues[11]) { + currTimeIndex = 10; + } else { + if (t < pTimeValues[currTimeIndex]) { + while (t < pTimeValues[currTimeIndex]) { + currTimeIndex--; + } + } else { + while (t >= pTimeValues[currTimeIndex + 1]) { + currTimeIndex++; + } + } + } + + FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = currTimeIndex; + + /* Post output */ + { + real_T t1 = pTimeValues[currTimeIndex]; + real_T t2 = pTimeValues[currTimeIndex + 1]; + if (t1 == t2) { + if (t < t1) { + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = + pDataValues[currTimeIndex]; + pDataValues += 12; + } + } + } else { + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = + pDataValues[currTimeIndex + 1]; + pDataValues += 12; + } + } + } + } else { + real_T f1 = (t2 - t) / (t2 - t1); + real_T f2 = 1.0 - f1; + real_T d1; + real_T d2; + int_T TimeIndex= currTimeIndex; + + { + int_T elIdx; + for (elIdx = 0; elIdx < 27; ++elIdx) { + d1 = pDataValues[TimeIndex]; + d2 = pDataValues[TimeIndex + 1]; + (&FCC_Sys_New_harness_DW.FromWs[0])[elIdx] = (real_T) rtInterpolate + (d1, d2, f1, f2); + pDataValues += 12; + } + } + } + } + } + + /* DataTypeConversion: '/Cast1' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[0]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[0] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[0]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast1 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast1 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast1 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast1' */ + + /* DataTypeConversion: '/Cast2' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[1]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[1] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[1]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast2 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast2 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast2 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast2' */ + + /* DataTypeConversion: '/Cast3' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[2]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[2] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[2]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Cast3 = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Cast3 = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Cast3 = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast3' */ + + /* ModelReference: '/FCC_New' incorporates: + * Outport: '/Actuator1' + * Outport: '/Actuator2' + * Outport: '/Actuator3' + */ + profileStart_F_02840e440c240744(1U); /* original_line:221 */FCC_NewTID0(&FCC_Sys_New_harness_DW.Cast1, &FCC_Sys_New_harness_DW.Cast2, + &FCC_Sys_New_harness_DW.Cast3, &FCC_Sys_New_harness_Y.Actuator1, + &FCC_Sys_New_harness_Y.Actuator2, &FCC_Sys_New_harness_Y.Actuator3);profileEnd_FCC_Sys_New_harness(1U); /* original_line:223 */ + + /* RateTransition: '/Sync4' incorporates: + * RateTransition: '/Sync10' + * RateTransition: '/Sync14' + * RateTransition: '/Sync21' + * RateTransition: '/Sync5' + * RateTransition: '/Sync6' + */ + if (FCC_Sys_New_harness_M->Timing.RateInteraction.TID1_2 == 1) { + /* DataTypeConversion: '/Cast4' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[3]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[3] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[3]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync4_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync4_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync4_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast4' */ + + /* DataTypeConversion: '/Cast5' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[4]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[4] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[4]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync5_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync5_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync5_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast5' */ + + /* DataTypeConversion: '/Cast6' */ + v = fabs(FCC_Sys_New_harness_DW.FromWs[5]); + if (v < 4.503599627370496E+15) { + if (v >= 0.5) { + v = floor(FCC_Sys_New_harness_DW.FromWs[5] + 0.5); + } else { + v = 0.0; + } + } else { + v = FCC_Sys_New_harness_DW.FromWs[5]; + } + + if (v < 32768.0) { + if (v >= -32768.0) { + FCC_Sys_New_harness_DW.Sync6_Buffer = (int16_T)v; + } else { + FCC_Sys_New_harness_DW.Sync6_Buffer = MIN_int16_T; + } + } else { + FCC_Sys_New_harness_DW.Sync6_Buffer = MAX_int16_T; + } + + /* End of DataTypeConversion: '/Cast6' */ + FCC_Sys_New_harness_DW.Sync10_Buffer = FCC_Sys_New_harness_DW.FromWs[9]; + + /* RateTransition: '/Sync11' */ + FCC_Sys_New_harness_DW.Sync11_Buffer = FCC_Sys_New_harness_DW.FromWs[10]; + + /* RateTransition: '/Sync12' */ + FCC_Sys_New_harness_DW.Sync12_Buffer = FCC_Sys_New_harness_DW.FromWs[11]; + + /* RateTransition: '/Sync13' incorporates: + * DataTypeConversion: '/Cast13' + */ + FCC_Sys_New_harness_DW.Sync13_Buffer = (FCC_Sys_New_harness_DW.FromWs[12] != + 0.0); + + /* RateTransition: '/Sync7' */ + FCC_Sys_New_harness_DW.Sync7_Buffer = FCC_Sys_New_harness_DW.FromWs[6]; + + /* RateTransition: '/Sync8' */ + FCC_Sys_New_harness_DW.Sync8_Buffer = FCC_Sys_New_harness_DW.FromWs[7]; + + /* RateTransition: '/Sync9' */ + FCC_Sys_New_harness_DW.Sync9_Buffer = FCC_Sys_New_harness_DW.FromWs[8]; + FCC_Sys_New_harness_DW.Sync14_Buffer = FCC_Sys_New_harness_DW.FromWs[13]; + + /* RateTransition: '/Sync15' */ + FCC_Sys_New_harness_DW.Sync15_Buffer = FCC_Sys_New_harness_DW.FromWs[14]; + + /* RateTransition: '/Sync16' */ + FCC_Sys_New_harness_DW.Sync16_Buffer = FCC_Sys_New_harness_DW.FromWs[15]; + + /* RateTransition: '/Sync17' */ + FCC_Sys_New_harness_DW.Sync17_Buffer = FCC_Sys_New_harness_DW.FromWs[16]; + + /* RateTransition: '/Sync18' */ + FCC_Sys_New_harness_DW.Sync18_Buffer = FCC_Sys_New_harness_DW.FromWs[17]; + + /* RateTransition: '/Sync19' */ + FCC_Sys_New_harness_DW.Sync19_Buffer = FCC_Sys_New_harness_DW.FromWs[18]; + + /* RateTransition: '/Sync20' incorporates: + * DataTypeConversion: '/Cast20' + */ + FCC_Sys_New_harness_DW.Sync20_Buffer = (FCC_Sys_New_harness_DW.FromWs[19] != + 0.0); + FCC_Sys_New_harness_DW.Sync21_Buffer = FCC_Sys_New_harness_DW.FromWs[20]; + + /* RateTransition: '/Sync22' */ + FCC_Sys_New_harness_DW.Sync22_Buffer = FCC_Sys_New_harness_DW.FromWs[21]; + + /* RateTransition: '/Sync23' */ + FCC_Sys_New_harness_DW.Sync23_Buffer = FCC_Sys_New_harness_DW.FromWs[22]; + + /* RateTransition: '/Sync24' */ + FCC_Sys_New_harness_DW.Sync24_Buffer = FCC_Sys_New_harness_DW.FromWs[23]; + + /* RateTransition: '/Sync25' */ + FCC_Sys_New_harness_DW.Sync25_Buffer = FCC_Sys_New_harness_DW.FromWs[24]; + + /* RateTransition: '/Sync26' */ + FCC_Sys_New_harness_DW.Sync26_Buffer = FCC_Sys_New_harness_DW.FromWs[25]; + + /* RateTransition: '/Sync27' incorporates: + * DataTypeConversion: '/Cast27' + */ + FCC_Sys_New_harness_DW.Sync27_Buffer = (FCC_Sys_New_harness_DW.FromWs[26] != + 0.0); + } + + /* End of RateTransition: '/Sync4' */ + + /* Update absolute time */ + /* The "clockTick0" counts the number of times the code of this task has + * been executed. The absolute time is the multiplication of "clockTick0" + * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not + * overflow during the application lifespan selected. + */ + FCC_Sys_New_harness_M->Timing.t[0] = + ((time_T)(++FCC_Sys_New_harness_M->Timing.clockTick0)) * + FCC_Sys_New_harness_M->Timing.stepSize0; + + /* Update absolute time */ + /* The "clockTick1" counts the number of times the code of this task has + * been executed. The resolution of this integer timer is 0.001, which is the step size + * of the task. Size of "clockTick1" ensures timer will not overflow during the + * application lifespan selected. + */ + FCC_Sys_New_harness_M->Timing.clockTick1++; +} + +/* Model step function for TID2 */ +void FCC_Sys_New_harness_step2(void) /* Sample time: [0.01s, 0.0s] */ +{ + /* local block i/o variables */ + AHRS_Bus rtb_AHRS11; + AHRS_Bus rtb_AHRS21; + AHRS_Bus rtb_AHRS31; + int16_T rtb_Sync4; + int16_T rtb_Sync5; + int16_T rtb_Sync6; + + /* RateTransition: '/Sync4' */ + rtb_Sync4 = FCC_Sys_New_harness_DW.Sync4_Buffer; + + /* RateTransition: '/Sync5' */ + rtb_Sync5 = FCC_Sys_New_harness_DW.Sync5_Buffer; + + /* RateTransition: '/Sync6' */ + rtb_Sync6 = FCC_Sys_New_harness_DW.Sync6_Buffer; + + /* BusCreator: '/AHRS1(1)' incorporates: + * RateTransition: '/Sync10' + * RateTransition: '/Sync11' + * RateTransition: '/Sync12' + * RateTransition: '/Sync13' + * RateTransition: '/Sync7' + * RateTransition: '/Sync8' + * RateTransition: '/Sync9' + */ + rtb_AHRS11.theta = FCC_Sys_New_harness_DW.Sync7_Buffer; + rtb_AHRS11.phi = FCC_Sys_New_harness_DW.Sync8_Buffer; + rtb_AHRS11.psi = FCC_Sys_New_harness_DW.Sync9_Buffer; + rtb_AHRS11.q = FCC_Sys_New_harness_DW.Sync10_Buffer; + rtb_AHRS11.p = FCC_Sys_New_harness_DW.Sync11_Buffer; + rtb_AHRS11.r = FCC_Sys_New_harness_DW.Sync12_Buffer; + rtb_AHRS11.valid = FCC_Sys_New_harness_DW.Sync13_Buffer; + + /* BusCreator: '/AHRS2(1)' incorporates: + * RateTransition: '/Sync14' + * RateTransition: '/Sync15' + * RateTransition: '/Sync16' + * RateTransition: '/Sync17' + * RateTransition: '/Sync18' + * RateTransition: '/Sync19' + * RateTransition: '/Sync20' + */ + rtb_AHRS21.theta = FCC_Sys_New_harness_DW.Sync14_Buffer; + rtb_AHRS21.phi = FCC_Sys_New_harness_DW.Sync15_Buffer; + rtb_AHRS21.psi = FCC_Sys_New_harness_DW.Sync16_Buffer; + rtb_AHRS21.q = FCC_Sys_New_harness_DW.Sync17_Buffer; + rtb_AHRS21.p = FCC_Sys_New_harness_DW.Sync18_Buffer; + rtb_AHRS21.r = FCC_Sys_New_harness_DW.Sync19_Buffer; + rtb_AHRS21.valid = FCC_Sys_New_harness_DW.Sync20_Buffer; + + /* BusCreator: '/AHRS3(1)' incorporates: + * RateTransition: '/Sync21' + * RateTransition: '/Sync22' + * RateTransition: '/Sync23' + * RateTransition: '/Sync24' + * RateTransition: '/Sync25' + * RateTransition: '/Sync26' + * RateTransition: '/Sync27' + */ + rtb_AHRS31.theta = FCC_Sys_New_harness_DW.Sync21_Buffer; + rtb_AHRS31.phi = FCC_Sys_New_harness_DW.Sync22_Buffer; + rtb_AHRS31.psi = FCC_Sys_New_harness_DW.Sync23_Buffer; + rtb_AHRS31.q = FCC_Sys_New_harness_DW.Sync24_Buffer; + rtb_AHRS31.p = FCC_Sys_New_harness_DW.Sync25_Buffer; + rtb_AHRS31.r = FCC_Sys_New_harness_DW.Sync26_Buffer; + rtb_AHRS31.valid = FCC_Sys_New_harness_DW.Sync27_Buffer; + + /* ModelReference: '/FCC_New' incorporates: + * Outport: '/Actuator1' + * Outport: '/Actuator2' + * Outport: '/Actuator3' + */ + profileStart_F_02840e440c240744(2U); /* original_line:469 */FCC_NewTID1(&rtb_Sync4, &rtb_Sync5, &rtb_Sync6, &rtb_AHRS11, &rtb_AHRS21, + &rtb_AHRS31);profileEnd_FCC_Sys_New_harness(2U); /* original_line:470 */ +} + +/* Model initialize function */ +void FCC_Sys_New_harness_initialize(void) +{ + /* Registration code */ + { + /* Setup solver object */ + rtsiSetSimTimeStepPtr(&FCC_Sys_New_harness_M->solverInfo, + &FCC_Sys_New_harness_M->Timing.simTimeStep); + rtsiSetTPtr(&FCC_Sys_New_harness_M->solverInfo, &rtmGetTPtr + (FCC_Sys_New_harness_M)); + rtsiSetStepSizePtr(&FCC_Sys_New_harness_M->solverInfo, + &FCC_Sys_New_harness_M->Timing.stepSize0); + rtsiSetErrorStatusPtr(&FCC_Sys_New_harness_M->solverInfo, + (&rtmGetErrorStatus(FCC_Sys_New_harness_M))); + rtsiSetRTModelPtr(&FCC_Sys_New_harness_M->solverInfo, FCC_Sys_New_harness_M); + } + + rtsiSetSimTimeStep(&FCC_Sys_New_harness_M->solverInfo, MAJOR_TIME_STEP); + rtsiSetSolverName(&FCC_Sys_New_harness_M->solverInfo,"FixedStepDiscrete"); + rtmSetTPtr(FCC_Sys_New_harness_M, &FCC_Sys_New_harness_M->Timing.tArray[0]); + FCC_Sys_New_harness_M->Timing.stepSize0 = 0.001; + + { + static uint32_T *clockTickPtrs[3]; + static real_T *taskTimePtrs[3]; + static boolean_T *rateTransitionPtrs[(3 * 3)]; + FCC_Sys_New_harness_TimingBrdg.nTasks = 3; + clockTickPtrs[0] = &(FCC_Sys_New_harness_M->Timing.clockTick0); + clockTickPtrs[1] = &(FCC_Sys_New_harness_M->Timing.clockTick1); + clockTickPtrs[2] = (NULL); + FCC_Sys_New_harness_TimingBrdg.clockTick = clockTickPtrs; + FCC_Sys_New_harness_TimingBrdg.clockTickH = (NULL); + rateTransitionPtrs[1*3 + 2] = + &(FCC_Sys_New_harness_M->Timing.RateInteraction.b_TID1_2); + FCC_Sys_New_harness_TimingBrdg.rateTransition = rateTransitionPtrs; + taskTimePtrs[0] = &(FCC_Sys_New_harness_M->Timing.t[0]); + taskTimePtrs[1] = (NULL); + taskTimePtrs[2] = (NULL); + FCC_Sys_New_harness_TimingBrdg.taskTime = taskTimePtrs; + } + + /* Model Initialize function for ModelReference Block: '/FCC_New' */ + FCC_New_initialize(rtmGetErrorStatusPointer(FCC_Sys_New_harness_M), + &FCC_Sys_New_harness_TimingBrdg, 1, 2); + + /* Start for FromWorkspace: '/FromWs' */ + { + static real_T pTimeValues0[] = { 0.0, 0.15, 0.15, 0.18, 0.18, 0.192, 0.192, + 0.26, 0.26, 0.27, 0.27, 0.271 } ; + + static real_T pDataValues0[] = { -32722.0, -32722.0, 0.0, 0.0, 0.0, 0.0, + -32728.0, -32728.0, 0.0, 0.0, 0.0, 0.0, -32671.0, -32671.0, 0.0, 0.0, 0.0, + 0.0, -32721.0, -32721.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, 0.0, 0.0, + 0.0, 0.0, -32720.0, -32720.0, 0.0, 0.0, 0.0, 0.0, -32722.0, -32722.0, 0.0, + 0.0, 0.0, 0.0, -32684.0, -32684.0, 0.0, 0.0, 0.0, 0.0, -32711.0, -32711.0, + 0.0, 0.0, 0.0, 0.0, -32710.0, -32710.0, 0.0, 0.0, 0.0, 0.0, -32686.0, + -32686.0, 0.0, 0.0, 0.0, 0.0, -32768.0, -32768.0, 0.0, 0.0, 0.0, 0.0, + -118.15138, -118.15138, -180.0, -180.0, -180.0, -180.0, 17.01541, 17.01541, + -180.0, -180.0, -180.0, -180.0, 25.9801, 25.9801, -180.0, -180.0, -180.0, + -180.0, 26.06345, 26.06345, -180.0, -180.0, -180.0, -180.0, 67.51613, + 67.51613, 0.0, 0.0, 0.0, 0.0, 305.78971, 305.78971, 0.0, 0.0, 0.0, 0.0, + 107.78888, 107.78888, -180.0, -180.0, -180.0, -180.0, -169.80836, + -169.80836, -180.0, -180.0, -180.0, -180.0, 171.2196, 171.2196, -180.0, + -180.0, -180.0, -180.0, -32.26304, -32.26304, -180.0, -180.0, 180.0, 180.0, + -3.5854, -3.5854, -180.0, -180.0, -180.0, -180.0, -55.81231, -55.81231, + -180.0, -180.0, -180.0, -180.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.0, 1.0, 1.0, 1.0, 179.94728, 179.94728, -180.0, -180.0, -180.0, -180.0, + 42.21022, 42.21022, -180.0, -180.0, -180.0, -180.0, -12.15585, -12.15585, + -180.0, -180.0, -180.0, -180.0, 65.16104, 65.16104, -180.0, -180.0, -180.0, + -180.0, 331.47544, 331.47544, 0.0, 0.0, 0.0, 0.0, 63.30298, 63.30298, 0.0, + 0.0, 0.0, 0.0, 158.38363, 158.38363, -180.0, -180.0, -180.0, -180.0, + -139.48832, -139.48832, -180.0, -180.0, -180.0, -180.0, -170.3775, + -170.3775, -180.0, -180.0, -180.0, -180.0, -150.40707, -150.40707, -180.0, + -180.0, 180.0, 180.0, -61.13408, -61.13408, -180.0, -180.0, -180.0, -180.0, + 141.8528, 141.8528, -180.0, -180.0, -180.0, -180.0, 1.0, 1.0, 1.0, 1.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 60.68156, 60.68156, -180.0, -180.0, + -180.0, -180.0, -93.63384, -93.63384, -180.0, -180.0, -180.0, -180.0, + 165.74818, 165.74818, -180.0, -180.0, -180.0, -180.0, 73.13588, 73.13588, + -180.0, -180.0, -180.0, -180.0, 42.57845, 42.57845, 0.0, 0.0, 0.0, 0.0, + 339.30663, 339.30663, 0.0, 0.0, 0.0, 0.0, 73.76652, 73.76652, -180.0, + -180.0, -180.0, -180.0, -75.80978, -75.80978, -180.0, -180.0, -180.0, + -180.0, -81.62332, -81.62332, -180.0, -180.0, -180.0, -180.0, 48.62002, + 48.62002, -180.0, -180.0, -180.0, -180.0, -31.30247, -31.30247, -180.0, + -180.0, -180.0, -180.0, 99.35286, 99.35286, -180.0, -180.0, -180.0, -180.0, + 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; + + FCC_Sys_New_harness_DW.FromWs_PWORK.TimePtr = (void *) pTimeValues0; + FCC_Sys_New_harness_DW.FromWs_PWORK.DataPtr = (void *) pDataValues0; + FCC_Sys_New_harness_DW.FromWs_IWORK.PrevIndex = 0; + } +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.h b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.h new file mode 100644 index 0000000..603ae66 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.h @@ -0,0 +1,223 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_Sys_New_harness.h + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#ifndef RTW_HEADER_FCC_Sys_New_harness_h_ +#define RTW_HEADER_FCC_Sys_New_harness_h_ +#include +#include +#include "AHRS_Bus.h" +#ifndef FCC_Sys_New_harness_COMMON_INCLUDES_ +# define FCC_Sys_New_harness_COMMON_INCLUDES_ +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" +#endif /* FCC_Sys_New_harness_COMMON_INCLUDES_ */ + +/* Shared type includes */ +#include "model_reference_types.h" + +/* Child system includes */ +#define FCC_New_MDLREF_HIDE_CHILD_ +#include "FCC_New.h" + +/* Model Code Variants */ + +/* Macros for accessing real-time model data structure */ +#ifndef rtmGetErrorStatus +# define rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef rtmSetErrorStatus +# define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef rtmGetErrorStatusPointer +# define rtmGetErrorStatusPointer(rtm) ((const char_T **)(&((rtm)->errorStatus))) +#endif + +#ifndef rtmGetT +# define rtmGetT(rtm) (rtmGetTPtr((rtm))[0]) +#endif + +#ifndef rtmGetTPtr +# define rtmGetTPtr(rtm) ((rtm)->Timing.t) +#endif + +/* Forward declaration for rtModel */ +typedef struct tag_RTM_FCC_Sys_New_harness_T RT_MODEL_FCC_Sys_New_harness_T; + +/* Block signals and states (default storage) for system '' */ +typedef struct { + real_T FromWs[27]; /* '/FromWs' */ + real_T Sync10_Buffer; /* '/Sync10' */ + real_T Sync11_Buffer; /* '/Sync11' */ + real_T Sync12_Buffer; /* '/Sync12' */ + real_T Sync7_Buffer; /* '/Sync7' */ + real_T Sync8_Buffer; /* '/Sync8' */ + real_T Sync9_Buffer; /* '/Sync9' */ + real_T Sync14_Buffer; /* '/Sync14' */ + real_T Sync15_Buffer; /* '/Sync15' */ + real_T Sync16_Buffer; /* '/Sync16' */ + real_T Sync17_Buffer; /* '/Sync17' */ + real_T Sync18_Buffer; /* '/Sync18' */ + real_T Sync19_Buffer; /* '/Sync19' */ + real_T Sync21_Buffer; /* '/Sync21' */ + real_T Sync22_Buffer; /* '/Sync22' */ + real_T Sync23_Buffer; /* '/Sync23' */ + real_T Sync24_Buffer; /* '/Sync24' */ + real_T Sync25_Buffer; /* '/Sync25' */ + real_T Sync26_Buffer; /* '/Sync26' */ + struct { + int_T PrevIndex; + } FromWs_IWORK; /* '/FromWs' */ + + struct { + void *TimePtr; + void *DataPtr; + void *RSimInfoPtr; + } FromWs_PWORK; /* '/FromWs' */ + + int16_T Cast1; /* '/Cast1' */ + int16_T Cast2; /* '/Cast2' */ + int16_T Cast3; /* '/Cast3' */ + int16_T Sync4_Buffer; /* '/Sync4' */ + int16_T Sync5_Buffer; /* '/Sync5' */ + int16_T Sync6_Buffer; /* '/Sync6' */ + boolean_T Sync13_Buffer; /* '/Sync13' */ + boolean_T Sync20_Buffer; /* '/Sync20' */ + boolean_T Sync27_Buffer; /* '/Sync27' */ +} DW_FCC_Sys_New_harness_T; + +/* External outputs (root outports fed by signals with default storage) */ +typedef struct { + int16_T Actuator1; /* '/Actuator1' */ + int16_T Actuator2; /* '/Actuator2' */ + int16_T Actuator3; /* '/Actuator3' */ +} ExtY_FCC_Sys_New_harness_T; + + + +/* Declare global externs for instrumentation */ +extern void profileStart_F_02840e440c240744(uint32_T); +extern void profileEnd_FCC_Sys_New_harness(uint32_T); +/* Code_Instrumentation_Declarations_Placeholder */ + +/* Real-time Model Data Structure */ +struct tag_RTM_FCC_Sys_New_harness_T { + const char_T *errorStatus; + RTWSolverInfo solverInfo; + + /* + * Timing: + * The following substructure contains information regarding + * the timing information for the model. + */ + struct { + uint32_T clockTick0; + time_T stepSize0; + uint32_T clockTick1; + struct { + uint32_T TID1_2; + boolean_T b_TID1_2; + } RateInteraction; + + SimTimeStep simTimeStep; + time_T *t; + time_T tArray[3]; + } Timing; +}; + +extern rtTimingBridge FCC_Sys_New_harness_TimingBrdg; + +/* Block signals and states (default storage) */ +extern DW_FCC_Sys_New_harness_T FCC_Sys_New_harness_DW; + +/* External outputs (root outports fed by signals with default storage) */ +extern ExtY_FCC_Sys_New_harness_T FCC_Sys_New_harness_Y; + +/* Model entry point functions */ +extern void FCC_Sys_New_harness_initialize(void); +extern void FCC_Sys_New_harness_step0(void); +extern void FCC_Sys_New_harness_step2(void); + +/* Real-time Model object */ +extern RT_MODEL_FCC_Sys_New_harness_T *const FCC_Sys_New_harness_M; + +/*- + * These blocks were eliminated from the model due to optimizations: + * + * Block '/Cast10' : Eliminate redundant data type conversion + * Block '/Cast11' : Eliminate redundant data type conversion + * Block '/Cast12' : Eliminate redundant data type conversion + * Block '/Cast14' : Eliminate redundant data type conversion + * Block '/Cast15' : Eliminate redundant data type conversion + * Block '/Cast16' : Eliminate redundant data type conversion + * Block '/Cast17' : Eliminate redundant data type conversion + * Block '/Cast18' : Eliminate redundant data type conversion + * Block '/Cast19' : Eliminate redundant data type conversion + * Block '/Cast21' : Eliminate redundant data type conversion + * Block '/Cast22' : Eliminate redundant data type conversion + * Block '/Cast23' : Eliminate redundant data type conversion + * Block '/Cast24' : Eliminate redundant data type conversion + * Block '/Cast25' : Eliminate redundant data type conversion + * Block '/Cast26' : Eliminate redundant data type conversion + * Block '/Cast7' : Eliminate redundant data type conversion + * Block '/Cast8' : Eliminate redundant data type conversion + * Block '/Cast9' : Eliminate redundant data type conversion + * Block '/Sync1' : Eliminated since input and output rates are identical + * Block '/Sync2' : Eliminated since input and output rates are identical + * Block '/Sync3' : Eliminated since input and output rates are identical + */ + +/*- + * The generated code includes comments that allow you to trace directly + * back to the appropriate location in the model. The basic format + * is /block_name, where system is the system number (uniquely + * assigned by Simulink) and block_name is the name of the block. + * + * Use the MATLAB hilite_system command to trace the generated code back + * to the model. For example, + * + * hilite_system('') - opens system 3 + * hilite_system('/Kp') - opens and selects block Kp which resides in S3 + * + * Here is the system hierarchy for this model + * + * '' : 'FCC_Sys_New_harness' + * '' : 'FCC_Sys_New_harness/Inputs' + * '' : 'FCC_Sys_New_harness/Size-Type' + * '' : 'FCC_Sys_New_harness/Test Case Explanation' + * '' : 'FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus7' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus8' + * '' : 'FCC_Sys_New_harness/Size-Type/Bus9' + */ + +/*- + * Requirements for '': FCC_Sys_New_harness + */ +#endif /* RTW_HEADER_FCC_Sys_New_harness_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.mk b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.mk new file mode 100644 index 0000000..bedd63b --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.mk @@ -0,0 +1,419 @@ +########################################################################### +## Makefile generated for Simulink model 'FCC_Sys_New_harness'. +## +## Makefile : FCC_Sys_New_harness.mk +## Generated on : Thu Jul 16 18:55:30 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: $(RELATIVE_PATH_TO_ANCHOR)/FCC_Sys_New_harness.exe +## Product type : executable +## Build type : Top-Level Standalone Executable +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# MODELREF_LINK_RSPFILE Linker command listing model reference link objects +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file + +PRODUCT_NAME = FCC_Sys_New_harness +MAKEFILE = FCC_Sys_New_harness.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../.. +MODELREF_LINK_RSPFILE = FCC_Sys_New_harness_ref.rsp +COMPILER_COMMAND_FILE = FCC_Sys_New_harness_comp.rsp +CMD_FILE = FCC_Sys_New_harness.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/FCC_Sys_New_harness.exe +PRODUCT_TYPE = "executable" +BUILD_TYPE = "Top-Level Standalone Executable" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=1 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=FCC_Sys_New_harness -DNUMST=3 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = FCC_Sys_New_harness.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +MODELREF_LIBS = D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build buildobj clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +buildobj : prebuild $(OBJS) $(PREBUILT_OBJS) + @echo "### Successfully generated all binary outputs." + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + @echo "### Invoking postbuild tool "Execute" ..." + $(EXECUTE) $(EXECUTE_FLAGS) + @echo "### Done invoking postbuild tool." + + +########################################################################### +## FINAL TARGET +########################################################################### + +#------------------------------------------- +# Create a standalone executable +#------------------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) $(MODELREF_LIBS) + @echo "### Creating standalone executable "$(PRODUCT)" ..." + $(LD) $(LDFLAGS) -o $(PRODUCT) @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) $(SYSTEM_LIBS) $(TOOLCHAIN_LIBS) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : %.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : %.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +FCC_Sys_New_harness.obj : $(START_DIR)/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/FCC_Sys_New_harness.obj new file mode 100644 index 0000000000000000000000000000000000000000..ff97a6519cd8f481a7b5d8f286f5e04d1214c5af GIT binary patch literal 11137 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 a#viU3zZmB`x~`s+-i4L*qvQ|ViYdzy4nFVz literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/compileInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..9cd24a9d727e24514575e1062d40b6e61e0e66dd GIT binary patch literal 2398 zcma);c{G&!AIE0~W9(bDo8<{v$}-l_5GlbKXs#kzl$~ipwK&Bq(+Rv28bg{eI>1$}6j6tM!FIqwE_ZjDl z!|@C&SaCW);3_9eRmnLB{(EWF=#1ne4%0Q)Tn0)mZ&VRi^_6Rvq}UY)WtImXCx)T) zUDM;leD!$Ry=1h%q}q_g#c9j0nT68{2h*lEUHYaCCDWE&($fA|&U!#MaD?8ED>k(RXF6wNGK-^whM^vTGNAFFK*eKp`u_kTd zlw=v9EDRD>LWhN+r^0pXb!?MJONLGP2S${{a$6px=pehs&c$sqPrs@69C0*cb&Q#q z2llN;*537a>Ygkr{Q7$ACi+lf%lCB@8fA}m$!YwA6$!|LTBSJZ|$JWB~eifMvP76|*A)dVT@*w7c$#j>WUJXO%WHc1Pvp8Jm!jaZ}E@ICyWVKwF^3(&oXqb3}%OH*YydoNGG zAt0+_MG|4ZI@PAw5i-+lgz7VoA37?u4@IJGtVCUrINHLKsB)O~DlEQoe%1e?^Ppek z(Cb&-^W+SCgRT>W{CTjxPc_8l(>;G(tSO9er#$~aT{wLhn_zd^v(S0+a$`+b#tkFFa^`$}r#p1uK}C+c5801wO$B zUB&NS{c5fQ@pCrYdpBdtvW;h$1u`0f%<|qc&)6+c zQ@X1Hcfdxwu?hVfP8fA4oJ*&xaAomzb>i(?gt^jW4H^DxbNX;Nm|ztSqOzbc?zg9Q zmNUH#w%peC)>de#87(&j48a!1*aF1l;TWqA1-Uu7Mfp=%c{z)$Y(AIn_Ex@YvS9rD z#(4Zj<7lHKbQ@Enc&HrcT?EeRIXk{niL5CCfjBjnoN%h9P`yyjRMBxJ)OO<|;iv)s zjHQVti=S?N7mtIXIa&_;UwUr%f1ElIk>h0v2dw6z#Nj6({R-j}YJlkrxZcFS4AjO) zs-IYlXtdt|UO#7;&hB19;Na;%;_Ry+OjWP=!9&yB)ihcW}YdW!{8uJ zO0liz>rVt9%`k>L7#k{BW;`dljdsLRULKj|cyw!zEhPtjs{z+$8(Ak0^_}Hc3zQ{X zPby8?zyHz533C z{tW4-%soYf?1k%}oFyc#@d|5z;;#A_?;e(RUO7 zLBo9yBIW>(4Hl0f9l#ce(G_?2U@5l4hnDhEMDq>JBj|f-j}(aM{9wv98Nf@MO)K^W zHOm~4vo45-o+?sJ1}hKRhquWfazTc}HIce&V(8ym3mIdp39Sel=&|oV2=1w&eFMUj zfG=o{1L4P#`QFd-;Q676_1gY(@vC9hJ7ra9XGn2DEU(n0$xqIS2Nr?yqk#`h7Gt3( zKj%y~mXXJr&x06rLwXdb+H-J~JhqVZJSVbn^hMR&=~EE>406BzI2W0{3QLc6H!5;@^GT^P`XHY~ivv znn14~ZgrJU{~OITPN0}2kVchDrq|GB<%$Dh3O5tH=a4|2D(uuC?6!MrfOU))5V;L% z5j{I?O{7k0#-)XpHu_LTwOG5KHH9C!35AYtk*!V+@=E(8Pw{FhE3#=PNkoht7Vk{N zdkNTtQ|$t-dXe#wmD~RmBwd?OdI>A7B%_5D*ch02hvH8!$;vp$tYgP1m`{&a|w#=ZgaQTvb@TQ{h*AWsgPe9CZn#i%zlVXrBQUw@m K5U7l#uJ{+4#s=g7 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/defines.txt b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/defines.txt new file mode 100644 index 0000000..b5ab630 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=FCC_Sys_New_harness +NUMST=3 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=1 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/ert_main.c b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/ert_main.c new file mode 100644 index 0000000..7917912 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/ert_main.c @@ -0,0 +1,162 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: ert_main.c + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include +#include /* This ert_main.c example uses printf/fflush */ +#include "FCC_Sys_New_harness.h" /* Model's header file */ +#include "rtwtypes.h" +#include "model_reference_types.h" + +/* + * Associating rt_OneStep with a real-time clock or interrupt service routine + * is what makes the generated code "real-time". The function rt_OneStep is + * always associated with the base rate of the model. Subrates are managed + * by the base rate from inside the generated code. Enabling/disabling + * interrupts and floating point context switches are target specific. This + * example code indicates where these should take place relative to executing + * the generated code step function. Overrun behavior should be tailored to + * your application needs. This example simply sets an error status in the + * real-time model and returns from rt_OneStep. + */ +void rt_OneStep(void); +void rt_OneStep(void) +{ + static boolean_T OverrunFlags[3] = { 0, 0, 0 }; + + static boolean_T eventFlags[3] = { 0, 0, 0 };/* Model has 3 rates */ + + static int_T taskCounter[3] = { 0, 0, 0 }; + + /* Disable interrupts here */ + + /* Check base rate for overrun */ + if (OverrunFlags[0]) { + rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun"); + return; + } + + OverrunFlags[0] = true; + + /* Save FPU context here (if necessary) */ + /* Re-enable timer or interrupt here */ + + /* + * For a bare-board target (i.e., no operating system), the + * following code checks whether any subrate overruns, + * and also sets the rates that need to run this time step. + */ + if (taskCounter[2] == 0) { + if (eventFlags[2]) { + OverrunFlags[0] = false; + OverrunFlags[2] = true; + + /* Sampling too fast */ + rtmSetErrorStatus(FCC_Sys_New_harness_M, "Overrun"); + return; + } + + eventFlags[2] = true; + } + + taskCounter[1]++; + if (taskCounter[1] == 1) { + taskCounter[1]= 0; + } + + taskCounter[2]++; + if (taskCounter[2] == 10) { + taskCounter[2]= 0; + } + + /* Set model inputs associated with base rate here */ + + /* Step the model for base rate */ + FCC_Sys_New_harness_step0(); + + /* Get model outputs here */ + + /* Indicate task for base rate complete */ + OverrunFlags[0] = false; + + /* If task 1 is running, don't run any lower priority task */ + if (OverrunFlags[1]) { + return; + } + + /* Step the model for subrate */ + if (eventFlags[2]) { + OverrunFlags[2] = true; + + /* Set model inputs associated with subrates here */ + + /* Step the model for subrate 2 */ + FCC_Sys_New_harness_step2(); + + /* Get model outputs here */ + + /* Indicate task complete for subrate */ + OverrunFlags[2] = false; + eventFlags[2] = false; + } + + /* Disable interrupts here */ + /* Restore FPU context here (if necessary) */ + /* Enable interrupts here */ +} + +/* + * The example "main" function illustrates what is required by your + * application code to initialize, execute, and terminate the generated code. + * Attaching rt_OneStep to a real-time clock is target specific. This example + * illustrates how you do this relative to initializing the model. + */ +int_T main(int_T argc, const char *argv[]) +{ + /* Unused arguments */ + (void)(argc); + (void)(argv); + + /* Initialize model */ + FCC_Sys_New_harness_initialize(); + + /* Attach rt_OneStep to a timer or interrupt service routine with + * period 0.001 seconds (the model's base sample time) here. The + * call syntax for rt_OneStep is + * + * rt_OneStep(); + */ + printf("Warning: The simulation will run forever. " + "Generated ERT main won't simulate model step behavior. " + "To change this behavior select the 'MAT-file logging' option.\n"); + fflush((NULL)); + while (rtmGetErrorStatus(FCC_Sys_New_harness_M) == (NULL)) { + /* Perform other application tasks here */ + } + + /* Disable rt_OneStep() here */ + return 0; +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/instrumentationInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..1747cf70415b0a5f0f4507fef6b3229a5880c1f9 GIT binary patch literal 785 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSRlav$}07(-R*wuA0p7=+U1` zi=KpRKQre_Qd^43(i#VwX2wK$Zn58!7MO5wIQ-NLGt~Qea_P>Mm8wS#51y0z_s`C7 z-^qjLR=TPhYW{3{CT4il^`v2Hr{zq|PSu$|D-H9`o%?uj>d}vNE1!Op>~yVMdGzQ< zhoc`|RiEB?@@10Zx5hi-4NvUMblxR97Rjp%Xg5Ui{`c+5w`Ov_To!je);%C#m4z+q zCGJNdMfWY5&b(E4@V>yLzCHN%eFZCXLu39Ik)QsaRCrvMD|aEDzijUITE0)u?+BmX z&XmdeaH;e>Yrb1Q&Mq*i6ZJ|f+RyOw^P_w5?;Ss$*=6)uOhaay?)~ov1R1(#ERg^O zoEs2B0?vaW$xPuHLy{UBM?&kT#0J3*)&>iUtxHsl_4nSeR5rETy~AYs)W+6EVJ&@@ zBXU1~-mL4~xsu0#HQ+D99U0zkkZDeE(>S1})qzcuoVbBS!20>}CA*eCTPmhHE#=ws z%4JKQO-)&rx=ie&)79d%-F~lfLW@}#Jm2s#gG>sCn{)zfQo|*M16)synGCt7h_NO; z@452i&7(^(-xnR(b7{_zMQ0{?{kK_Q0SroqE$cpI#XLB1V8eovjVGNI&K8t1-A+_^ z`{3)sKTXOE+a8G+gN%>FV>~lfYyC0SJ{}%!FY(znESGq~)i=np SUE+(AKc#QM#Bl6|$Rq&W8$g!; literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/mlEnv.txt b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/mlEnv.txt new file mode 100644 index 0000000..4dd92c5 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/mlEnv.txt @@ -0,0 +1,4 @@ +MATLAB_ROOT=E: +ALT_MATLAB_ROOT=E: +MATLAB_BIN=E:\bin +ALT_MATLAB_BIN=E:\bin diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/profiling_info.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..aec86947259dfa0f3dbf53f40a5fcbc2a472e219 GIT binary patch literal 2944 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 J0Bch}`ai%auYLdk literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/rtw_proj.tmw b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/rtw_proj.tmw new file mode 100644 index 0000000..606012a --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/hostobj/instrumented/rtw_proj.tmw @@ -0,0 +1,4 @@ +Simulink Coder project for FCC_Sys_New_harness using . MATLAB root = D:\Program Files\MATLAB\R2020a. SimStruct date: 18-Nov-2019 20:54:47 +This file is generated by Simulink Coder for use by the make utility +to determine when to rebuild objects when the name of the current Simulink Coder project changes. +The rtwinfomat located at: ..\..\..\..\slprj\ert\FCC_Sys_New_harness\tmwinternal\binfo.mat diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/mlEnv.txt b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/mlEnv.txt new file mode 100644 index 0000000..4dd92c5 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/mlEnv.txt @@ -0,0 +1,4 @@ +MATLAB_ROOT=E: +ALT_MATLAB_ROOT=E: +MATLAB_BIN=E:\bin +ALT_MATLAB_BIN=E:\bin diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/profiling_info.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..797ec2a2990cef859b3fb3e6b553a5ab01ab4e1b GIT binary patch literal 6540 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 P?@&{?yRm77n*s5EEHxnc literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtiostream_utils.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtiostream_utils.obj new file mode 100644 index 0000000000000000000000000000000000000000..4cabb0e39ebad6f771b33e7950cb2fcebdf54bb7 GIT binary patch literal 1168 zcmd5*L2DCH5T5NO5>RZ^9&&sK5ev;)YzVC&E^XJofWgHQa*~=R+qyMP!tSQTKtYHo zk3}e+{1yHNi9+$_!9z~cix8-X{D5Gbd7Feyo7^3EGvChl&FsFnZ%Xg30NKwufLjtp zK=Z7ICvo873P1$cThx$IU|_z`N(HYVGqarz<`-?(b!RIA<_+l@lMNF{Eezi|s@Gvz z*J_t_OQ`!a)Y6VfcP}-n3Zjl-^HM)k&vEgaxBi$S8|NaI*c1jkHTqP;eIvnz(c`B^ zcYt>O#LqEIcKKSH&p&P>cg8CoKO@6i-^}M<|C7%+IZd@5D8XTN@h> z*xklzdMBMq)~c@ENV?X`q+=c3Ut;TZyX>*u*DPySw(`k*I>l;E^}s56i!80JXv+Y3 z>~RBE1b(5vDG@q|;!-g?LNP>FWscq&u<Uxes6bWd3?{Escq)idr*sZaggQ$Tng%)pRiSy9 zwD2Uz^N^ZgqQlCE!v|ti4<1joxf-IhnXUal5j W*_Himt5TYher6SqrWal)kivg9VB`}3 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtw_proj.tmw b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtw_proj.tmw new file mode 100644 index 0000000..603d0f3 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/rtw_proj.tmw @@ -0,0 +1 @@ +This file is generated by the Real-Time Workshop \ No newline at end of file diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/sil_main.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/sil_main.obj new file mode 100644 index 0000000000000000000000000000000000000000..a8c8b72f88e25f7e82ac2b28d5cdeb231d8d47c4 GIT binary patch literal 966 zcmZ`&%}U%*6h86BI!M83bs@9L!a@t?cFr#?>*T+e*uJrF@PDVRN$`dyHZEg z$4ylLZgCM*TpCn9^8K1ylb+|vfXXG`b)4rjqR0v5`RRr)G4yrx&A8rxyusU#^S)u; z44#3&a8cg-f;1n>%j*oT%1I`S*24CL2RZ6Qxfg(TmYNv79kkU^f5ihmMy8x`Tt zJ-}zh5%p@LCYpRN@&b?*YXvkI`|s8%mYgyQGlkAcU;BsTgwf-&r}`wOi(dZ8oWx|w z^C&c1X(Xp=979azP{%Z;Mkf6?Oj%6_(W=V3h~0R0@I`&2DdInBj~4o&)8x7$rh?6+li8lqWq?NY1JaNsZ5ZAQdTahd)k-J6y zemzUvmXkymLzE!hx66Kr#qi_|Q9>cgC&c<3CXF&v`rNcX9n(7v8kDK%Go?~oHWgn) z_-C4`=;daIUqJR$ZB{m@&(Mn}^$wx;ca&c{Ojz&pfsbv8dLo^=1o;_REBMD++0(3G zB4q{H&hfz1#)FA&Yn6LevsTT{bnr(y_|poWgG}wRwYBn6`}#%P7N*dQsr*v$&%Cd$ zH)$FlN7*s=)g5z>tTnUK3d}=9J4^@L$zMt*a1K6elnb;Anpf$3<4Kz55lcK^%c@8KFloTKv+|*~_=)p6c^wPhhj}cscvY>{ zL8Nr+Q`5`Ujxu4|f!c_|E zcZh*=<|=2o(m2<*>7de7=>6mWQ|NzT)l}%e1o2Mp=&c|cm9K!{f}dXbhmh7Qzuwf8 z7B$(@pHP(y(FyFu_}eiY@hBPbcg2lo2c5rXp1W~rI-~hH@FifLAL6R?0pA=O8`iqZ zLxZ`&f!<=F*Lr&7v!2(C*aO-i{!LfS1+kCbxFgp_|o0u4#2?znjyD{j>q(LKeV_U_q! z&MoM(f(}Rin{iV}BNh8Rt%*N3?~uFW&V@=wxDqVU6|DHgLqC{_(&&8d%<$iU=q@_n zf(A1KhVOu2;x7ZIqAGkhxPpxqe-+s4X*tJVgfM4iwBaB^@z;RQO;zgmwxJq-3GjeL zI`xV*^okMWw@y_?8iE-5UgCN+ersY%zL&Qb>J;nzj)m^=TXbo8d6||<3q{Xe@EsBd zdB>k~3!{sUV|x)Z>AAlBCG;mit3u~@m>ccok- KVA;(}-}D~@4#4UF literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/wrapperInfo.mat b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/wrapperInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..ad927ced53b905ae1b99090924e2020780e5a05e GIT binary patch literal 7661 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_data_stream.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_data_stream.obj new file mode 100644 index 0000000000000000000000000000000000000000..a2877f32aa92505258d240a02865cfa45810d29f GIT binary patch literal 3134 zcmai0Uu;uV7(bV`FbGTcz(_?+ZX$|9RtDl+RANVW-CbOzt{WI58Kt|0lCEuTZ%Mbf z1SuG9DoBj_Ob8D~UyKPEnJ)zu@NN38;l*TZ1Q#F79;Ws8opXEcz1tE`a_;$kf6n*s zeD~fn@$nW$<1;LKISR6y~bu?vlB~<^~ClcTI++c zpp$D$LVm||`wzYLSe^R{S?gEYNwz?bi;c>b+b9rQdPlGGjkqnjWcPuasa z(v_VHAHtNat=48%nblU;Rv%q;RpxG>W?gsf`K+xy3D0UzUe_Wflp^8T#!`?NF!~U| zQaSW`0&r}3$bKLTS=SzRX%TpTXy0|*Dlo<~C9bY$%X+<2Y$tMF7qzX;L|FLJ2x3D> zC{#=q)Xi)KPTAT7Z;9w%#FD+#2w%M5(g>R34CW-J*~$1z&-im8Dlnt{{UeoqW@kc2eUe zZS8Sw=5e#tgY6>YexC7)FJskya9Qg(Khwdi?TAx_g?nt%(l&{eh1q|a&Du(!)gT)* zgvy;>6Fqm$GhmHTcZvs=wm_)uU@)L0{|B2M9WUNsFPX2>1B2GO^i{oXk}>gH?YvU15*bajK^P7U##}^j`tqwE)~nUYIoT<(`_2(4(?NrRC0Ms zJvF5!a)rU;-N$`*2q|0YH#%AC=7SN##5LA02mUl_iB~d?+u&hg7N}~5AIwR3#i9VI+b0F&TAp1q~ev@b`POghf@!(YtK(mF~ zfS$z+@Xnw!3Gg!#Xor+iuL#~V5~)&3XC|Z+hd}$Jl=?~V=;t9&pOjLE30_PhI%yFV z^_-9nOO%w-Xf~HOK+*WO$=GS7n#+&VpKQErnMQgtn&GlAe^P~bGvoO*CQ&YjYDCp= zITYDe$tfMFWV40|TG&8YG2X?bT|^1aNg(QSms0{o^>aBFK&d{?m!N1U;BP|rY&5=exWX+wuR9#!{U=cLPP;n4f}%Iv<@^o~os%2SU!dreTuwW7&^N%{wTq&Hg5Y@X zJzSvB7lPg|FKfkd(eKVvr79 zo^ne5{rpUYX-&&N7_- zZjl3ci;|YfymbG$bS}>_#mUKZVPeE6mx_h5F*;Q;m}!&^3+BC+%DH?gmmezRELJuO z6JC+mD0vt$(i7y6Wh$m=6fDG&%1s;5gS`h1czAgKlKAIXxnhAtJ+zg!y_K(&&oJR{ z)G#M=g|uaOs|3B#(^h|}lscE`&*zI7H(ALaG{`Mncrus5IKCz@>9vzWPRv9s;!{H@ SB#d%7ecG=!U_f4+V*dew<|>x} literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.c b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.c new file mode 100644 index 0000000..3b67615 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.c @@ -0,0 +1,125 @@ +/* + * File: xil_instrumentation.c + * + * Code generated for instrumentation. + * + */ + +#include "xil_instrumentation.h" + +/* Code instrumentation offset(s) for model FCC_Sys_New_harness */ +#define profileStart_F_02840e440c240744_offset 3 +#define profileEnd_FCC_Sys_New_harness_offset 3 + +/* Code instrumentation offset(s) for model FCC_Sys_New_harness */ +#define taskTimeStart_0c6401e40e940cc4_offset 0 +#define taskTimeEnd_FCC_Sys_New_harness_offset 0 + +/* A function parameter may be intentionally unused */ +#ifndef UNUSED_PARAMETER +# if defined(__LCC__) +# define UNUSED_PARAMETER(x) +# else +# define UNUSED_PARAMETER(x) (void) (x) +# endif +#endif + +#define SIZEOF_SECTION_ID_CONTAINER sizeof(uint64_T) +#define SIZEOF_TIMER_TYPE sizeof(uint64_T) + +static uint64_T xsd_xil_timer_corrected = 0; +static uint64_T xsd_xil_timer_unfreeze = 0; +static uint32_T xsd_xil_freezing_busy = 0; +void xilUploadProfilingData(uint32_T sectionId) +{ + xilUploadCodeInstrData((void *)(&xsd_xil_timer_corrected), (uint32_T) + (SIZEOF_TIMER_TYPE), sectionId); +} + +/* The internal freeze and unfreeze methods cannot be nested. The customer-visible implementation avoids nesting problems */ +void xilProfilingTimerFreezeInternal(void) +{ + /* Update the value of the corrected timer to exclude time spent in the + * instrumentation code. + * + * Using a timer that increments on each tick. + */ + xsd_xil_timer_corrected = xsd_xil_timer_corrected + (((uint64_T)(timestamp_x86 + ())) - xsd_xil_timer_unfreeze); +} + +void xilProfilingTimerUnFreezeInternal(void) +{ + xsd_xil_timer_unfreeze = ( uint64_T ) (timestamp_x86()); +} + +void xilProfilingTimerFreeze(void) +{ + if (xsd_xil_freezing_busy == 0) { + xilProfilingTimerFreezeInternal(); + } /* if */ +} + +void xilProfilingTimerUnFreeze(void) +{ + if (xsd_xil_freezing_busy == 0) { + xilProfilingTimerUnFreezeInternal(); + } /* if */ +} + +void taskTimeStart(uint32_T sectionId) +{ + /* Send execution profiling data to host */ + xilUploadProfilingData(sectionId); + xilProfilingTimerUnFreezeInternal(); +} + +void taskTimeEnd(uint32_T sectionId) +{ + uint32_T sectionIdNeg = ~sectionId; + xilProfilingTimerFreezeInternal(); + + /* Send execution profiling data to host */ + xilUploadProfilingData(sectionIdNeg); +} + +void profileStart(uint32_T sectionId) +{ + xilProfilingTimerFreezeInternal(); + + /* Send execution profiling data to host */ + xilUploadProfilingData(sectionId); + xilProfilingTimerUnFreezeInternal(); +} + +void profileEnd(uint32_T sectionId) +{ + uint32_T sectionIdNeg = ~sectionId; + xilProfilingTimerFreezeInternal(); + + /* Send execution profiling data to host */ + xilUploadProfilingData(sectionIdNeg); + xilProfilingTimerUnFreezeInternal(); +} + +/* Code instrumentation method(s) for model FCC_Sys_New_harness */ +void profileStart_F_02840e440c240744(uint32_T sectionId) +{ + profileStart(profileStart_F_02840e440c240744_offset + sectionId); +} + +void profileEnd_FCC_Sys_New_harness(uint32_T sectionId) +{ + profileEnd(profileEnd_FCC_Sys_New_harness_offset + sectionId); +} + +/* Code instrumentation method(s) for model FCC_Sys_New_harness */ +void taskTimeStart_0c6401e40e940cc4(uint32_T sectionId) +{ + taskTimeStart(taskTimeStart_0c6401e40e940cc4_offset + sectionId); +} + +void taskTimeEnd_FCC_Sys_New_harness(uint32_T sectionId) +{ + taskTimeEnd(taskTimeEnd_FCC_Sys_New_harness_offset + sectionId); +} diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.h b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.h new file mode 100644 index 0000000..ba9fb18 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.h @@ -0,0 +1,54 @@ +/* + * File: xil_instrumentation.h + * + * Code generated for instrumentation. + * + */ + +/* Functions with a C call interface */ +#ifdef __cplusplus + +extern "C" { + +#endif + +#include "host_timer_x86.h" +#ifdef __cplusplus + +} +#endif + +#include "rtwtypes.h" + +/* Upload code instrumentation data point */ +void xilUploadCodeInstrData( + void* pData, uint32_T numMemUnits, uint32_T sectionId); + +/* Called before starting a profiled section of code */ +void taskTimeStart(uint32_T); + +/* Called on finishing a profiled section of code */ +void taskTimeEnd(uint32_T); + +/* Uploads data */ +void xilUploadProfilingData(uint32_T sectionId); + +/* Pause the timer while running code associated with storing and uploading the data. */ +void xilProfilingTimerFreeze(void); + +/* Restart the timer after a pause */ +void xilProfilingTimerUnFreeze(void); + +/* Called before starting a profiled section of code */ +void profileStart(uint32_T); + +/* Called on finishing a profiled section of code */ +void profileEnd(uint32_T); + +/* Code instrumentation method(s) for model FCC_Sys_New_harness */ +void profileStart_F_02840e440c240744(uint32_T sectionId); +void profileEnd_FCC_Sys_New_harness(uint32_T sectionId); + +/* Code instrumentation method(s) for model FCC_Sys_New_harness */ +void taskTimeStart_0c6401e40e940cc4(uint32_T sectionId); +void taskTimeEnd_FCC_Sys_New_harness(uint32_T sectionId); diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_instrumentation.obj new file mode 100644 index 0000000000000000000000000000000000000000..46083341c3097f88940591ef2c6a394dc5795b55 GIT binary patch literal 2637 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 literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_interface_lib.obj b/src/validation/FCC_Sys_New_harness_ert_rtw/sil/xil_interface_lib.obj new file mode 100644 index 0000000000000000000000000000000000000000..27e4432e883c23f65a189219b861fee9983910dd GIT binary patch literal 9222 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 px;lTb6+trNpn>! z3QH;U8NBksJ1-Ow3DgJBhY)({~ zL)(@4wu>w-0WgFfK7B4NIa zI`sR+(c$ZVe#wm5_xs&Pzhm@!J-NpM>KRC8Zl%N%2m^>se5MvUcTIDCeWr8Pk4QY^ zOmm76=SR!QN45QYL_4@lA(|5rJjq2n2!*^*ZSS`-i(B}Vk7k|m7fP+|7bC}RhQ05~ z`q80CaN>?qFc1pLl71==%c1ZRc~C-tbDX*S0?J`r#P8suw=2j%5eJW997jemO-ovOux`7OraOYO4lw;RCN%5>P4_ovk`c`-> z7B-2c_VX;uo>grbZH5}rpT7WG($HwvOxx&Lw#n)pwZUz48zQQm<^te4E^5>axl1q- z*|`tBGLeMu8#vKbZUK0X0#)VuxL^l&>emc;gBo>hhP*?KvU5b7WI9HcsHeOJ6kHOg zm_B-WPCeoTySI?u*C*i~6Q|d`yF}UiBu*|(gDg=${3K5888pcf&F%D^XTBdNBK^N) z>A}n(NZ&je-x+?Q#;c5tMk9Fk=y9b`$?AIfX|9$pm7bLRPFNjFIcA53D#3<2g}x4z;e~5Y+IO`F0}g=P*p5_4m|v17REziVtLvpR>D59 z{IL@4ph{ZK%^kgM6N783lzh5v`Er9l+u%pUjc!l9Uf=RsO9S!m00_7;MlC@6Mxw_- zd`F_)A~pdKD3(7gmM+s^9I|S)iZNKSH5f13;*E1G69XRcP%}pD3o`(p zZFI#(qc)lZbb;!o0Pz&f0=h`iBS4oZ0zUS1 zh$8Fsy`skWG)F;(Z`WX)JquH?48CpbRENXauQ10^YdL!r)_bJJ(WmGx7(5;KaP}x{ z6D-s37J%pMPp!5FyOMiEOcy&f%iMNPn%y?6S6GQPzoB?+b5?afYfTu^GI* z#;`Pai`~p~i?E|!xfo4eR8m=svhuvM2s`R)6Z5l)*>f@YHjICX{CA|bkk;l#^vZU;; zjN)Q2h!zi9)1Gt8rPrPkA00c;9!<}^G$atP557eO)8xGwX|!wk!OVW|d*8f$^L8|v z{rLz%d)iOPmjd+@GhmHCU^)Gv5i$(p7hU>8@GwaBo;h0#iV@vm&?4Cl^Srx=u?a`$yv(~FS3wt;Rdqw*chDB1=bHr)BGVX45 z5=aq$Dc1e80aDa}6j#KgmIE*2+c)^;DoxJuf-&@*CRgds&_a8mZ!YhvL?tC_rPuKT94`AdEVQID&9|MklSWJ_HYiDl zCqmldn?ONh5}hum?r#0oF<45lv2udPpgu5owO`k=hhQ(l=Oo6ZX`I0DS%!gU2A`NS z*?#^G_&neV+y2J5*tkA6Gd4O>tNLzZ#AgpiJhpgs*ch+7<-oZA#K^dni8~{A#zu{r zSAEDz!6jqNyk^27J`Fj}!00Ci%*O@#N}-zy33+Qvfoq}rQ+OGk9AvjBM z-z)B+;sS+!R8g)tNI*V=p+j9AGzjRV;IJPuno#J3ieiUk6zi49P*Loe^TDM5( zstEtBL>=aJ5A$D)NkBj3-p(&AEs=&>E>#y6{24EBtMcobC1OuyGWi*r%T49lIA5@B zn$MFTCT~qoOsBKi{B64}h*2FK63O*3!7trP<$U0QiuXLZ)r zb}PxT;%tWbesP{fYxaW4sk}IdQ#Dp0UDqyGeHQV@%hl2&w=$n+mDxk+94jr7k83+s AZ~y=R literal 0 HcmV?d00001 diff --git a/src/validation/FCC_Sys_New_harness_ert_rtw/tmwinternal/simulink_cache.xml b/src/validation/FCC_Sys_New_harness_ert_rtw/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..9318e32 --- /dev/null +++ b/src/validation/FCC_Sys_New_harness_ert_rtw/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + sfdyHzBTQG0a+B822/uHBg== + + \ No newline at end of file diff --git a/src/validation/FCC_Sys_New_harness_sbs.mexw64 b/src/validation/FCC_Sys_New_harness_sbs.mexw64 new file mode 100644 index 0000000000000000000000000000000000000000..37e60db4baf3d6c87f5b650f882b354af45db5d4 GIT binary patch literal 50688 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 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "AHRSControl.h" + +/* Macros for accessing real-time model data structure */ +#ifndef rtmGetErrorStatus +# define rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) +#endif + +#ifndef rtmSetErrorStatus +# define rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) +#endif + +#ifndef rtmGetErrorStatusPointer +# define rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus +#endif + +#ifndef rtmSetErrorStatusPointer +# define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +MdlrefDW_AHRSControl_T AHRSControl_MdlrefDW; + +/* Block states (default storage) */ +DW_AHRSControl_f_T AHRSControl_DW; +extern void AHRSControl_Filter(real_T rtu_Signal, real_T rtu_prev_FeedbackSum, + real_T *rty_filtered_Signal, real_T *rty_FeedbackSum); +extern void AHRSControl_pitch_feedback(real_T rtu_theta_cmd, const real_T + rtu_voted_fb[5], real_T *rty_ds); +extern void AHRSControl_roll_feedback(real_T rtu_phi_cmd, const real_T + rtu_voted_fb[5], real_T *rty_dc); +extern void AHRSControl_yaw_feedback(real_T rtu_r_cmd, const real_T + rtu_voted_fb[5], real_T *rty_dT); +extern void AHRSControl_Heli_inner_loop(real_T rtu_theta_cmd, real_T rtu_phi_cmd, + real_T rtu_r_cmd, const real_T rtu_voted_fb[5], real_T rty_actuator_commands[3]); +extern void AHRSControl_Pitch_loop_Disable(void); +extern void AHRSControl_Pitch_loop(real_T rtu_Pilot_theta_cmd, real_T rtu_theta, + real_T *rty_theta_cmd); +extern void AHRSControl_Roll_loop_Disable(void); +extern void AHRSControl_Roll_loop(real_T rtu_Pilot_phi_cmd, real_T rtu_phi, + real_T *rty_phi_cmd); +extern void AHRSControl_Yaw_loop_Disable(void); +extern void AHRSControl_Yaw_loop(real_T rtu_Pilot_r_cmd, real_T rtu_r, real_T + *rty_r_cmd); +extern void AHRSCon_Heli_outer_loop_Disable(void); +extern void AHRSControl_Heli_outer_loop(int16_T rtu_Pilot_theta_cmd, int16_T + rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5], + real_T *rty_theta_cmd, real_T *rty_phi_cmd, real_T *rty_r_cmd); +extern void AHRSContro_AHRSLoopCtrl_Disable(void); +extern void AHRSControl_AHRSLoopCtrl(int16_T rtu_Pilot_theta_cmd, int16_T + rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5], + real_T rty_actuator_commands[3]); +extern void AHRSControl_Avg_Value(const real_T rtu_AHRS1[5], const real_T + rtu_AHRS2[5], const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T + rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Avg_Value[5]); +extern void AHRSControl_Mid_Value(const real_T rtu_AHRS1[5], const real_T + rtu_AHRS2[5], const real_T rtu_AHRS3[5], real_T rty_Mid_Value[5]); +extern void AHRSControl_Single_Value(const real_T rtu_AHRS1[5], const real_T + rtu_AHRS2[5], const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T + rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Single_Value[5]); +extern void AHRSControl_AHRS_voter(const AHRS_Bus *rtu_AHRS1, const AHRS_Bus + *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T rty_voted_fb[5]); + +/* Output and update for Simulink Function: '/Filter' */ +void AHRSControl_Filter(real_T rtu_Signal, real_T rtu_prev_FeedbackSum, real_T + *rty_filtered_Signal, real_T *rty_FeedbackSum) +{ + real_T rtb_SumB21; + + /* Sum: '/SumA21' incorporates: + * Gain: '/a_2_1' + * Gain: '/s_1' + * SignalConversion generated from: '/Signal' + * SignalConversion generated from: '/prev_FeedbackSum' + */ + rtb_SumB21 = (0.16840424129937498 * rtu_Signal) - (-0.66319151740124993 * + rtu_prev_FeedbackSum); + + /* SignalConversion generated from: '/FeedbackSum' */ + *rty_FeedbackSum = rtb_SumB21; + + /* SignalConversion generated from: '/filtered_Signal' incorporates: + * SignalConversion generated from: '/prev_FeedbackSum' + * Sum: '/SumB21' + */ + *rty_filtered_Signal = rtb_SumB21 + rtu_prev_FeedbackSum; +} + +/* Output and update for Simulink Function: '/pitch_feedback' */ +void AHRSControl_pitch_feedback(real_T rtu_theta_cmd, const real_T rtu_voted_fb + [5], real_T *rty_ds) +{ + real_T rtb_ds; + real_T rtb_Filter_caller_o2; + int32_T i; + + /* Gain: '/Gain' incorporates: + * SignalConversion generated from: '/voted_fb' + */ + rtb_ds = 0.0; + for (i = 0; i < 5; i++) { + rtb_ds += AHRSControl_ConstP.Gain_Gain[i] * rtu_voted_fb[i]; + } + + /* Sum: '/Sum5' incorporates: + * Gain: '/Gain' + * SignalConversion generated from: '/theta_cmd' + */ + rtb_ds = rtu_theta_cmd - rtb_ds; + + /* FunctionCaller: '/Filter_caller' incorporates: + * UnitDelay: '/Unit Delay' + */ + AHRSControl_Filter(rtb_ds, AHRSControl_DW.UnitDelay_DSTATE_j, &rtb_ds, + &rtb_Filter_caller_o2); + + /* SignalConversion generated from: '/ds' */ + *rty_ds = rtb_ds; + + /* Update for UnitDelay: '/Unit Delay' */ + AHRSControl_DW.UnitDelay_DSTATE_j = rtb_Filter_caller_o2; +} + +/* Output and update for Simulink Function: '/roll_feedback' */ +void AHRSControl_roll_feedback(real_T rtu_phi_cmd, const real_T rtu_voted_fb[5], + real_T *rty_dc) +{ + real_T rtb_dc; + real_T rtb_Filter_caller_o2; + int32_T i; + + /* Gain: '/Gain' incorporates: + * SignalConversion generated from: '/voted_fb' + */ + rtb_dc = 0.0; + for (i = 0; i < 5; i++) { + rtb_dc += AHRSControl_ConstP.Gain_Gain_d[i] * rtu_voted_fb[i]; + } + + /* Sum: '/Sum5' incorporates: + * Gain: '/Gain' + * SignalConversion generated from: '/phi_cmd' + */ + rtb_dc = rtu_phi_cmd - rtb_dc; + + /* FunctionCaller: '/Filter_caller' incorporates: + * UnitDelay: '/Unit Delay' + */ + AHRSControl_Filter(rtb_dc, AHRSControl_DW.UnitDelay_DSTATE_f, &rtb_dc, + &rtb_Filter_caller_o2); + + /* SignalConversion generated from: '/dc' */ + *rty_dc = rtb_dc; + + /* Update for UnitDelay: '/Unit Delay' */ + AHRSControl_DW.UnitDelay_DSTATE_f = rtb_Filter_caller_o2; +} + +/* Output and update for Simulink Function: '/yaw_feedback' */ +void AHRSControl_yaw_feedback(real_T rtu_r_cmd, const real_T rtu_voted_fb[5], + real_T *rty_dT) +{ + real_T rtb_dT; + real_T rtb_Filter_caller_o2; + int32_T i; + + /* Gain: '/Gain' incorporates: + * SignalConversion generated from: '/voted_fb' + */ + rtb_dT = 0.0; + for (i = 0; i < 5; i++) { + rtb_dT += AHRSControl_ConstP.Gain_Gain_b[i] * rtu_voted_fb[i]; + } + + /* Sum: '/Sum5' incorporates: + * Gain: '/Gain' + * SignalConversion generated from: '/r_cmd' + */ + rtb_dT = rtu_r_cmd - rtb_dT; + + /* FunctionCaller: '/Filter_caller' incorporates: + * UnitDelay: '/Unit Delay' + */ + AHRSControl_Filter(rtb_dT, AHRSControl_DW.UnitDelay_DSTATE, &rtb_dT, + &rtb_Filter_caller_o2); + + /* SignalConversion generated from: '/dT' */ + *rty_dT = rtb_dT; + + /* Update for UnitDelay: '/Unit Delay' */ + AHRSControl_DW.UnitDelay_DSTATE = rtb_Filter_caller_o2; +} + +/* Output and update for Simulink Function: '/Heli_inner_loop' */ +void AHRSControl_Heli_inner_loop(real_T rtu_theta_cmd, real_T rtu_phi_cmd, + real_T rtu_r_cmd, const real_T rtu_voted_fb[5], real_T rty_actuator_commands[3]) +{ + real_T rtb_pitch_feedback_caller; + real_T rtb_TmpSignalConversionAtvote_o[5]; + real_T rtb_roll_feedback_caller; + real_T rtb_yaw_feedback_caller; + int32_T i; + + /* SignalConversion generated from: '/theta_cmd' */ + rtb_pitch_feedback_caller = rtu_theta_cmd; + + /* SignalConversion generated from: '/voted_fb' */ + for (i = 0; i < 5; i++) { + rtb_TmpSignalConversionAtvote_o[i] = rtu_voted_fb[i]; + } + + /* End of SignalConversion generated from: '/voted_fb' */ + + /* FunctionCaller: '/pitch_feedback_caller' incorporates: + * SignalConversion generated from: '/theta_cmd' + */ + AHRSControl_pitch_feedback(rtu_theta_cmd, rtb_TmpSignalConversionAtvote_o, + &rtb_pitch_feedback_caller); + + /* SignalConversion generated from: '/phi_cmd' */ + rtb_roll_feedback_caller = rtu_phi_cmd; + + /* FunctionCaller: '/roll_feedback_caller' incorporates: + * SignalConversion generated from: '/phi_cmd' + */ + AHRSControl_roll_feedback(rtu_phi_cmd, rtb_TmpSignalConversionAtvote_o, + &rtb_roll_feedback_caller); + + /* SignalConversion generated from: '/r_cmd' */ + rtb_yaw_feedback_caller = rtu_r_cmd; + + /* FunctionCaller: '/yaw_feedback_caller' incorporates: + * SignalConversion generated from: '/r_cmd' + */ + AHRSControl_yaw_feedback(rtu_r_cmd, rtb_TmpSignalConversionAtvote_o, + &rtb_yaw_feedback_caller); + + /* Gain: '/Gain' */ + rtb_pitch_feedback_caller *= 0.0033333333333333335; + + /* Saturate: '/Saturation' */ + if (rtb_pitch_feedback_caller > 0.1) { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[0] = 0.1; + } else if (rtb_pitch_feedback_caller < -0.1) { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[0] = -0.1; + } else { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[0] = rtb_pitch_feedback_caller; + } + + /* Gain: '/Gain' */ + rtb_pitch_feedback_caller = 0.0033333333333333335 * rtb_roll_feedback_caller; + + /* Saturate: '/Saturation' */ + if (rtb_pitch_feedback_caller > 0.1) { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[1] = 0.1; + } else if (rtb_pitch_feedback_caller < -0.1) { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[1] = -0.1; + } else { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[1] = rtb_pitch_feedback_caller; + } + + /* Gain: '/Gain' */ + rtb_pitch_feedback_caller = 0.0033333333333333335 * rtb_yaw_feedback_caller; + + /* Saturate: '/Saturation' */ + if (rtb_pitch_feedback_caller > 0.1) { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[2] = 0.1; + } else if (rtb_pitch_feedback_caller < -0.1) { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[2] = -0.1; + } else { + /* SignalConversion generated from: '/actuator_commands' */ + rty_actuator_commands[2] = rtb_pitch_feedback_caller; + } +} + +/* Disable for Simulink Function: '/Pitch_loop' */ +void AHRSControl_Pitch_loop_Disable(void) +{ + /* Disable for DiscreteIntegrator: '/Integrator' */ + AHRSControl_DW.Integrator_DSTATE = AHRSControl_DW.Integrator; +} + +/* Output and update for Simulink Function: '/Pitch_loop' */ +void AHRSControl_Pitch_loop(real_T rtu_Pilot_theta_cmd, real_T rtu_theta, real_T + *rty_theta_cmd) +{ + real_T rtb_Sum; + + /* DiscreteIntegrator: '/Integrator' */ + AHRSControl_DW.Integrator = AHRSControl_DW.Integrator_DSTATE; + + /* Sum: '/Sum' incorporates: + * SignalConversion generated from: '/Pilot_theta_cmd' + * SignalConversion generated from: '/theta' + */ + rtb_Sum = rtu_Pilot_theta_cmd - rtu_theta; + + /* SignalConversion generated from: '/theta_cmd' incorporates: + * Gain: '/Gain' + * Gain: '/Gain1' + * Sum: '/Sum3' + */ + *rty_theta_cmd = (0.01 * AHRSControl_DW.Integrator) + (1.13 * rtb_Sum); + + /* Update for DiscreteIntegrator: '/Integrator' incorporates: + * Gain: '/Gain2' + */ + AHRSControl_DW.Integrator_DSTATE += 2.25 * rtb_Sum; + if (AHRSControl_DW.Integrator_DSTATE >= 10.0) { + AHRSControl_DW.Integrator_DSTATE = 10.0; + } else { + if (AHRSControl_DW.Integrator_DSTATE <= -10.0) { + AHRSControl_DW.Integrator_DSTATE = -10.0; + } + } + + /* End of Update for DiscreteIntegrator: '/Integrator' */ +} + +/* Disable for Simulink Function: '/Roll_loop' */ +void AHRSControl_Roll_loop_Disable(void) +{ + /* Disable for DiscreteIntegrator: '/Integrator1' */ + AHRSControl_DW.Integrator1_DSTATE = AHRSControl_DW.Integrator1; +} + +/* Output and update for Simulink Function: '/Roll_loop' */ +void AHRSControl_Roll_loop(real_T rtu_Pilot_phi_cmd, real_T rtu_phi, real_T + *rty_phi_cmd) +{ + real_T rtb_Sum; + + /* DiscreteIntegrator: '/Integrator1' */ + AHRSControl_DW.Integrator1 = AHRSControl_DW.Integrator1_DSTATE; + + /* Sum: '/Sum' incorporates: + * SignalConversion generated from: '/Pilot_phi_cmd' + * SignalConversion generated from: '/phi' + */ + rtb_Sum = rtu_Pilot_phi_cmd - rtu_phi; + + /* SignalConversion generated from: '/phi_cmd' incorporates: + * Gain: '/Gain1' + * Gain: '/Gain2' + * Sum: '/Sum4' + */ + *rty_phi_cmd = (0.01 * AHRSControl_DW.Integrator1) + (-0.086 * rtb_Sum); + + /* Update for DiscreteIntegrator: '/Integrator1' incorporates: + * Gain: '/Gain3' + */ + AHRSControl_DW.Integrator1_DSTATE += -1.19 * rtb_Sum; + if (AHRSControl_DW.Integrator1_DSTATE >= 10.0) { + AHRSControl_DW.Integrator1_DSTATE = 10.0; + } else { + if (AHRSControl_DW.Integrator1_DSTATE <= -10.0) { + AHRSControl_DW.Integrator1_DSTATE = -10.0; + } + } + + /* End of Update for DiscreteIntegrator: '/Integrator1' */ +} + +/* Disable for Simulink Function: '/Yaw_loop' */ +void AHRSControl_Yaw_loop_Disable(void) +{ + /* Disable for DiscreteIntegrator: '/Integrator2' */ + AHRSControl_DW.Integrator2_DSTATE = AHRSControl_DW.Integrator2; +} + +/* Output and update for Simulink Function: '/Yaw_loop' */ +void AHRSControl_Yaw_loop(real_T rtu_Pilot_r_cmd, real_T rtu_r, real_T + *rty_r_cmd) +{ + real_T rtb_Sum; + + /* DiscreteIntegrator: '/Integrator2' */ + AHRSControl_DW.Integrator2 = AHRSControl_DW.Integrator2_DSTATE; + + /* Sum: '/Sum' incorporates: + * SignalConversion generated from: '/Pilot_r_cmd' + * SignalConversion generated from: '/r' + */ + rtb_Sum = rtu_Pilot_r_cmd - rtu_r; + + /* SignalConversion generated from: '/r_cmd' incorporates: + * Gain: '/Gain1' + * Gain: '/Gain4' + * Sum: '/Sum5' + */ + *rty_r_cmd = (0.01 * AHRSControl_DW.Integrator2) + (1.33 * rtb_Sum); + + /* Update for DiscreteIntegrator: '/Integrator2' incorporates: + * Gain: '/Gain5' + */ + AHRSControl_DW.Integrator2_DSTATE += -2.33 * rtb_Sum; + if (AHRSControl_DW.Integrator2_DSTATE >= 10.0) { + AHRSControl_DW.Integrator2_DSTATE = 10.0; + } else { + if (AHRSControl_DW.Integrator2_DSTATE <= -10.0) { + AHRSControl_DW.Integrator2_DSTATE = -10.0; + } + } + + /* End of Update for DiscreteIntegrator: '/Integrator2' */ +} + +/* Disable for Simulink Function: '/Heli_outer_loop' */ +void AHRSCon_Heli_outer_loop_Disable(void) +{ + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Roll_loop' incorporates: + * SubSystem: '/Roll_loop' + */ + AHRSControl_Roll_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Roll_loop' */ + + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Yaw_loop' incorporates: + * SubSystem: '/Yaw_loop' + */ + AHRSControl_Yaw_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Yaw_loop' */ + + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Pitch_loop' incorporates: + * SubSystem: '/Pitch_loop' + */ + AHRSControl_Pitch_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Pitch_loop' */ +} + +/* Output and update for Simulink Function: '/Heli_outer_loop' */ +void AHRSControl_Heli_outer_loop(int16_T rtu_Pilot_theta_cmd, int16_T + rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5], + real_T *rty_theta_cmd, real_T *rty_phi_cmd, real_T *rty_r_cmd) +{ + real_T rtb_Saturation_f; + + /* Gain: '/Scaling1' incorporates: + * DataTypeConversion: '/TypeConversion1' + * SignalConversion generated from: '/Pilot_phi_cmd' + */ + rtb_Saturation_f = 0.00091555528427991577 * ((real_T)rtu_Pilot_phi_cmd); + + /* FunctionCaller: '/Roll_loop_caller' incorporates: + * SignalConversion generated from: '/voted_fb' + */ + AHRSControl_Roll_loop(rtb_Saturation_f, rtu_voted_fb[1], &rtb_Saturation_f); + + /* Saturate: '/Saturation1' */ + if (rtb_Saturation_f > 30.0) { + /* SignalConversion generated from: '/phi_cmd' */ + *rty_phi_cmd = 30.0; + } else if (rtb_Saturation_f < -30.0) { + /* SignalConversion generated from: '/phi_cmd' */ + *rty_phi_cmd = -30.0; + } else { + /* SignalConversion generated from: '/phi_cmd' */ + *rty_phi_cmd = rtb_Saturation_f; + } + + /* End of Saturate: '/Saturation1' */ + + /* Gain: '/Scaling2' incorporates: + * DataTypeConversion: '/TypeConversion2' + * SignalConversion generated from: '/Pilot_r_cmd' + */ + rtb_Saturation_f = 0.00045777764213995788 * ((real_T)rtu_Pilot_r_cmd); + + /* FunctionCaller: '/Yaw_loop_caller' incorporates: + * SignalConversion generated from: '/voted_fb' + */ + AHRSControl_Yaw_loop(rtb_Saturation_f, rtu_voted_fb[2], &rtb_Saturation_f); + + /* Saturate: '/Saturation2' */ + if (rtb_Saturation_f > 30.0) { + /* SignalConversion generated from: '/r_cmd' */ + *rty_r_cmd = 30.0; + } else if (rtb_Saturation_f < -30.0) { + /* SignalConversion generated from: '/r_cmd' */ + *rty_r_cmd = -30.0; + } else { + /* SignalConversion generated from: '/r_cmd' */ + *rty_r_cmd = rtb_Saturation_f; + } + + /* End of Saturate: '/Saturation2' */ + + /* Gain: '/Scaling' incorporates: + * DataTypeConversion: '/TypeConversion' + * SignalConversion generated from: '/Pilot_theta_cmd' + */ + rtb_Saturation_f = 0.00091555528427991577 * ((real_T)rtu_Pilot_theta_cmd); + + /* FunctionCaller: '/Pitch_loop_caller' incorporates: + * SignalConversion generated from: '/voted_fb' + */ + AHRSControl_Pitch_loop(rtb_Saturation_f, rtu_voted_fb[0], &rtb_Saturation_f); + + /* Saturate: '/Saturation' */ + if (rtb_Saturation_f > 30.0) { + /* SignalConversion generated from: '/theta_cmd' */ + *rty_theta_cmd = 30.0; + } else if (rtb_Saturation_f < -30.0) { + /* SignalConversion generated from: '/theta_cmd' */ + *rty_theta_cmd = -30.0; + } else { + /* SignalConversion generated from: '/theta_cmd' */ + *rty_theta_cmd = rtb_Saturation_f; + } + + /* End of Saturate: '/Saturation' */ +} + +/* Disable for Simulink Function: '/AHRSLoopCtrl' */ +void AHRSContro_AHRSLoopCtrl_Disable(void) +{ + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Heli_outer_loop' incorporates: + * SubSystem: '/Heli_outer_loop' + */ + AHRSCon_Heli_outer_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Heli_outer_loop' */ +} + +/* Output and update for Simulink Function: '/AHRSLoopCtrl' */ +void AHRSControl_AHRSLoopCtrl(int16_T rtu_Pilot_theta_cmd, int16_T + rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5], + real_T rty_actuator_commands[3]) +{ + real_T rtb_TmpSignalConversionAtvote_g[5]; + real_T rtb_Heli_outer_loop_caller_o1; + real_T rtb_Heli_outer_loop_caller_o2; + real_T rtb_Heli_outer_loop_caller_o3; + int32_T i; + + /* SignalConversion generated from: '/voted_fb' */ + for (i = 0; i < 5; i++) { + rtb_TmpSignalConversionAtvote_g[i] = rtu_voted_fb[i]; + } + + /* End of SignalConversion generated from: '/voted_fb' */ + + /* FunctionCaller: '/Heli_outer_loop_caller' incorporates: + * SignalConversion generated from: '/Pilot_phi_cmd' + * SignalConversion generated from: '/Pilot_r_cmd' + * SignalConversion generated from: '/Pilot_theta_cmd' + */ + AHRSControl_Heli_outer_loop(rtu_Pilot_theta_cmd, rtu_Pilot_phi_cmd, + rtu_Pilot_r_cmd, rtb_TmpSignalConversionAtvote_g, + &rtb_Heli_outer_loop_caller_o1, &rtb_Heli_outer_loop_caller_o2, + &rtb_Heli_outer_loop_caller_o3); + + /* SignalConversion generated from: '/actuator_commands' incorporates: + * FunctionCaller: '/Heli_inner_loop_caller' + */ + AHRSControl_Heli_inner_loop(rtb_Heli_outer_loop_caller_o1, + rtb_Heli_outer_loop_caller_o2, rtb_Heli_outer_loop_caller_o3, + rtb_TmpSignalConversionAtvote_g, rty_actuator_commands); +} + +/* Output and update for Simulink Function: '/Avg_Value' */ +void AHRSControl_Avg_Value(const real_T rtu_AHRS1[5], const real_T rtu_AHRS2[5], + const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T + rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Avg_Value[5]) +{ + int32_T i; + real_T rtu_AHRS2_Valid_0; + real_T rtu_AHRS3_Valid_0; + for (i = 0; i < 5; i++) { + /* Switch: '/Switch' incorporates: + * SignalConversion generated from: '/AHRS1' + * SignalConversion generated from: '/AHRS1_Valid' + */ + if (rtu_AHRS1_Valid) { + rty_Avg_Value[i] = rtu_AHRS1[i]; + } else { + rty_Avg_Value[i] = 0.0; + } + + /* End of Switch: '/Switch' */ + + /* Switch: '/Switch1' incorporates: + * SignalConversion generated from: '/AHRS2' + * SignalConversion generated from: '/AHRS2_Valid' + */ + if (rtu_AHRS2_Valid) { + rtu_AHRS2_Valid_0 = rtu_AHRS2[i]; + } else { + rtu_AHRS2_Valid_0 = 0.0; + } + + /* End of Switch: '/Switch1' */ + + /* Switch: '/Switch2' incorporates: + * SignalConversion generated from: '/AHRS3' + * SignalConversion generated from: '/AHRS3_Valid' + */ + if (rtu_AHRS3_Valid) { + rtu_AHRS3_Valid_0 = rtu_AHRS3[i]; + } else { + rtu_AHRS3_Valid_0 = 0.0; + } + + /* End of Switch: '/Switch2' */ + + /* SignalConversion generated from: '/Avg_Value' incorporates: + * Gain: '/Gain' + * Sum: '/Sum' + */ + rty_Avg_Value[i] = ((rty_Avg_Value[i] + rtu_AHRS2_Valid_0) + + rtu_AHRS3_Valid_0) * 0.5; + } +} + +/* Output and update for Simulink Function: '/Mid_Value' */ +void AHRSControl_Mid_Value(const real_T rtu_AHRS1[5], const real_T rtu_AHRS2[5], + const real_T rtu_AHRS3[5], real_T rty_Mid_Value[5]) +{ + int32_T i; + + /* SignalConversion generated from: '/Mid_Value' incorporates: + * MinMax: '/MinMax' + * MinMax: '/MinMax1' + * MinMax: '/MinMax2' + * MinMax: '/MinMax3' + * SignalConversion generated from: '/AHRS1' + * SignalConversion generated from: '/AHRS2' + * SignalConversion generated from: '/AHRS3' + */ + for (i = 0; i < 5; i++) { + rty_Mid_Value[i] = fmax(fmax(fmin(rtu_AHRS1[i], rtu_AHRS2[i]), fmin + (rtu_AHRS2[i], rtu_AHRS3[i])), fmin(rtu_AHRS3[i], rtu_AHRS1[i])); + } + + /* End of SignalConversion generated from: '/Mid_Value' */ +} + +/* Output and update for Simulink Function: '/Single_Value' */ +void AHRSControl_Single_Value(const real_T rtu_AHRS1[5], const real_T rtu_AHRS2 + [5], const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T + rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Single_Value[5]) +{ + int32_T i; + real_T rtu_AHRS2_Valid_0; + real_T rtu_AHRS3_Valid_0; + for (i = 0; i < 5; i++) { + /* Switch: '/Switch' incorporates: + * SignalConversion generated from: '/AHRS1' + * SignalConversion generated from: '/AHRS1_Valid' + */ + if (rtu_AHRS1_Valid) { + rty_Single_Value[i] = rtu_AHRS1[i]; + } else { + rty_Single_Value[i] = 0.0; + } + + /* End of Switch: '/Switch' */ + + /* Switch: '/Switch1' incorporates: + * SignalConversion generated from: '/AHRS2' + * SignalConversion generated from: '/AHRS2_Valid' + */ + if (rtu_AHRS2_Valid) { + rtu_AHRS2_Valid_0 = rtu_AHRS2[i]; + } else { + rtu_AHRS2_Valid_0 = 0.0; + } + + /* End of Switch: '/Switch1' */ + + /* Switch: '/Switch2' incorporates: + * SignalConversion generated from: '/AHRS3' + * SignalConversion generated from: '/AHRS3_Valid' + */ + if (rtu_AHRS3_Valid) { + rtu_AHRS3_Valid_0 = rtu_AHRS3[i]; + } else { + rtu_AHRS3_Valid_0 = 0.0; + } + + /* End of Switch: '/Switch2' */ + + /* SignalConversion generated from: '/Single_Value' incorporates: + * Sum: '/Sum' + */ + rty_Single_Value[i] = (rty_Single_Value[i] + rtu_AHRS2_Valid_0) + + rtu_AHRS3_Valid_0; + } +} + +/* Output and update for Simulink Function: '/AHRS_voter' */ +void AHRSControl_AHRS_voter(const AHRS_Bus *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, + const AHRS_Bus *rtu_AHRS3, real_T rty_voted_fb[5]) +{ + real_T rtb_TmpSignalConversionAtAvg__o[5]; + real_T rtb_TmpSignalConversionAtAvg__d[5]; + real_T rtb_MultiportSwitch[5]; + real_T rtb_Single_Value_caller[5]; + real_T rtb_Avg_Value_caller[5]; + int32_T i; + + /* SignalConversion generated from: '/Avg_Value_caller' incorporates: + * SignalConversion generated from: '/AHRS1' + */ + rtb_TmpSignalConversionAtAvg__o[0] = rtu_AHRS1->theta; + rtb_TmpSignalConversionAtAvg__o[1] = rtu_AHRS1->phi; + rtb_TmpSignalConversionAtAvg__o[2] = rtu_AHRS1->r; + rtb_TmpSignalConversionAtAvg__o[3] = rtu_AHRS1->q; + rtb_TmpSignalConversionAtAvg__o[4] = rtu_AHRS1->p; + + /* SignalConversion generated from: '/Avg_Value_caller' incorporates: + * SignalConversion generated from: '/AHRS2' + */ + rtb_TmpSignalConversionAtAvg__d[0] = rtu_AHRS2->theta; + rtb_TmpSignalConversionAtAvg__d[1] = rtu_AHRS2->phi; + rtb_TmpSignalConversionAtAvg__d[2] = rtu_AHRS2->r; + rtb_TmpSignalConversionAtAvg__d[3] = rtu_AHRS2->q; + rtb_TmpSignalConversionAtAvg__d[4] = rtu_AHRS2->p; + + /* SignalConversion generated from: '/Avg_Value_caller' incorporates: + * SignalConversion generated from: '/AHRS3' + */ + rtb_MultiportSwitch[0] = rtu_AHRS3->theta; + rtb_MultiportSwitch[1] = rtu_AHRS3->phi; + rtb_MultiportSwitch[2] = rtu_AHRS3->r; + rtb_MultiportSwitch[3] = rtu_AHRS3->q; + rtb_MultiportSwitch[4] = rtu_AHRS3->p; + + /* FunctionCaller: '/Single_Value_caller' incorporates: + * SignalConversion generated from: '/AHRS1' + * SignalConversion generated from: '/AHRS2' + * SignalConversion generated from: '/AHRS3' + */ + AHRSControl_Single_Value(rtb_TmpSignalConversionAtAvg__o, + rtb_TmpSignalConversionAtAvg__d, rtb_MultiportSwitch, rtu_AHRS1->valid, + rtu_AHRS2->valid, rtu_AHRS3->valid, rtb_Single_Value_caller); + + /* FunctionCaller: '/Avg_Value_caller' incorporates: + * SignalConversion generated from: '/AHRS1' + * SignalConversion generated from: '/AHRS2' + * SignalConversion generated from: '/AHRS3' + */ + AHRSControl_Avg_Value(rtb_TmpSignalConversionAtAvg__o, + rtb_TmpSignalConversionAtAvg__d, rtb_MultiportSwitch, + rtu_AHRS1->valid, rtu_AHRS2->valid, rtu_AHRS3->valid, + rtb_Avg_Value_caller); + + /* FunctionCaller: '/Mid_Value_caller' */ + AHRSControl_Mid_Value(rtb_TmpSignalConversionAtAvg__o, + rtb_TmpSignalConversionAtAvg__d, rtb_MultiportSwitch, + rty_voted_fb); + + /* MultiPortSwitch: '/MultiportSwitch' incorporates: + * SignalConversion generated from: '/AHRS1' + * SignalConversion generated from: '/AHRS2' + * SignalConversion generated from: '/AHRS3' + * Sum: '/Sum' + */ + switch ((((uint32_T)(rtu_AHRS1->valid ? 1U : 0U)) + (rtu_AHRS2->valid ? 1U : + 0U)) + (rtu_AHRS3->valid ? 1U : 0U)) { + case 0: + /* SignalConversion generated from: '/voted_fb' */ + for (i = 0; i < 5; i++) { + rty_voted_fb[i] = 0.0; + } + break; + + case 1: + /* SignalConversion generated from: '/voted_fb' */ + for (i = 0; i < 5; i++) { + rty_voted_fb[i] = rtb_Single_Value_caller[i]; + } + break; + + case 2: + /* SignalConversion generated from: '/voted_fb' */ + for (i = 0; i < 5; i++) { + rty_voted_fb[i] = rtb_Avg_Value_caller[i]; + } + break; + + default: + /* no actions */ + break; + } + + /* End of MultiPortSwitch: '/MultiportSwitch' */ +} + +/* Disable for referenced model: 'AHRSControl' */ +void AHRSControl_Disable(void) +{ + /* Disable for S-Function (sfun_private_function_caller) generated from: '/AHRS_Control' incorporates: + * SubSystem: '/AHRS_Control' + */ + /* Disable for S-Function (sfun_private_function_caller) generated from: '/AHRSLoopCtrl' incorporates: + * SubSystem: '/AHRSLoopCtrl' + */ + AHRSContro_AHRSLoopCtrl_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/AHRSLoopCtrl' */ + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/AHRS_Control' */ +} + +/* Output and update for referenced model: 'AHRSControl' */ +void AHRSControl_AHRS_Control(const int16_T rtu_Pilot_theta_cmd, const int16_T + rtu_Pilot_phi_cmd, const int16_T rtu_Pilot_r_cmd, const AHRS_Bus *rtu_AHRS1, + const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T + rty_actuator_commands[3]) +{ + AHRS_Bus rtb_TmpSignalConversionAtAHRS_c; + AHRS_Bus rtb_TmpSignalConversionAtAHRS_i; + AHRS_Bus rtb_TmpSignalConversionAtAHRS_e; + real_T rtb_AHRS_voter_caller[5]; + + /* Outputs for Function Call SubSystem: '/AHRS_Control' */ + /* SignalConversion generated from: '/AHRS1' */ + rtb_TmpSignalConversionAtAHRS_c = *rtu_AHRS1; + + /* SignalConversion generated from: '/AHRS2' */ + rtb_TmpSignalConversionAtAHRS_i = *rtu_AHRS2; + + /* SignalConversion generated from: '/AHRS3' */ + rtb_TmpSignalConversionAtAHRS_e = *rtu_AHRS3; + + /* FunctionCaller: '/AHRS_voter_caller' */ + AHRSControl_AHRS_voter(&rtb_TmpSignalConversionAtAHRS_c, + &rtb_TmpSignalConversionAtAHRS_i, &rtb_TmpSignalConversionAtAHRS_e, + rtb_AHRS_voter_caller); + + /* SignalConversion generated from: '/actuator_commands' incorporates: + * FunctionCaller: '/AHRSLoopCtrl_caller' + * SignalConversion generated from: '/Pilot_phi_cmd' + * SignalConversion generated from: '/Pilot_r_cmd' + * SignalConversion generated from: '/Pilot_theta_cmd' + */ + AHRSControl_AHRSLoopCtrl(rtu_Pilot_theta_cmd, rtu_Pilot_phi_cmd, + rtu_Pilot_r_cmd, rtb_AHRS_voter_caller, rty_actuator_commands); + + /* End of Outputs for SubSystem: '/AHRS_Control' */ +} + +/* Model initialize function */ +void AHRSControl_initialize(const char_T **rt_errorStatus) +{ + RT_MODEL_AHRSControl_T *const AHRSControl_M = &(AHRSControl_MdlrefDW.rtm); + + /* Registration code */ + + /* initialize error status */ + rtmSetErrorStatusPointer(AHRSControl_M, rt_errorStatus); +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/AHRSControl/AHRSControl.h b/src/validation/slprj/ert/AHRSControl/AHRSControl.h new file mode 100644 index 0000000..1934d5f --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/AHRSControl.h @@ -0,0 +1,210 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: AHRSControl.h + * + * Code generated for Simulink model 'AHRSControl'. + * + * Model version : 1.131 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:50:39 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#ifndef RTW_HEADER_AHRSControl_h_ +#define RTW_HEADER_AHRSControl_h_ +#include +#include "AHRS_Bus.h" +#ifndef AHRSControl_COMMON_INCLUDES_ +# define AHRSControl_COMMON_INCLUDES_ +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" +#endif /* AHRSControl_COMMON_INCLUDES_ */ + +/* Child system includes */ +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#include "AHRSControl_AHRS_Control.h" +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +/* Model Code Variants */ + +/* Forward declaration for rtModel */ +typedef struct tag_RTM_AHRSControl_T RT_MODEL_AHRSControl_T; + +/* Block signals and states (default storage) for model 'AHRSControl' */ +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ + +typedef struct { + real_T Integrator2; /* '/Integrator2' */ + real_T Integrator1; /* '/Integrator1' */ + real_T Integrator; /* '/Integrator' */ + real_T Integrator2_DSTATE; /* '/Integrator2' */ + real_T Integrator1_DSTATE; /* '/Integrator1' */ + real_T Integrator_DSTATE; /* '/Integrator' */ + real_T UnitDelay_DSTATE; /* '/Unit Delay' */ + real_T UnitDelay_DSTATE_f; /* '/Unit Delay' */ + real_T UnitDelay_DSTATE_j; /* '/Unit Delay' */ +} DW_AHRSControl_f_T; + +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ + +/* Real-time Model Data Structure */ +struct tag_RTM_AHRSControl_T { + const char_T **errorStatus; +}; + +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +/* Constant parameters (default storage) */ +typedef struct { + /* Expression: [2.395,-0.3609,-0.002145,0.808700,-0.0205;;] + * Referenced by: '/Gain' + */ + real_T Gain_Gain[5]; + + /* Expression: [;-0.1427,-1.115,0.04573,-0.04318,-0.1007;] + * Referenced by: '/Gain' + */ + real_T Gain_Gain_d[5]; + + /* Expression: [;;-0.02792,-0.02229,-2.25,-0.06152,0.03151] + * Referenced by: '/Gain' + */ + real_T Gain_Gain_b[5]; +} ConstP_AHRSControl_T; + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ + +typedef struct { + RT_MODEL_AHRSControl_T rtm; +} MdlrefDW_AHRSControl_T; + +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ + +/* Constant parameters (default storage) */ +extern const ConstP_AHRSControl_T AHRSControl_ConstP; + +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +extern void AHRSControl_Disable(void); +extern void AHRSControl_AHRS_Control(const int16_T rtu_Pilot_theta_cmd, const + int16_T rtu_Pilot_phi_cmd, const int16_T rtu_Pilot_r_cmd, const AHRS_Bus + *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T + rty_actuator_commands[3]); + +/* Model reference registration function */ +extern void AHRSControl_initialize(const char_T **rt_errorStatus); + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ + +extern MdlrefDW_AHRSControl_T AHRSControl_MdlrefDW; + +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +#ifndef AHRSControl_MDLREF_HIDE_CHILD_ + +/* Block states (default storage) */ +extern DW_AHRSControl_f_T AHRSControl_DW; + +#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/ + +/*- + * The generated code includes comments that allow you to trace directly + * back to the appropriate location in the model. The basic format + * is /block_name, where system is the system number (uniquely + * assigned by Simulink) and block_name is the name of the block. + * + * Use the MATLAB hilite_system command to trace the generated code back + * to the model. For example, + * + * hilite_system('') - opens system 3 + * hilite_system('/Kp') - opens and selects block Kp which resides in S3 + * + * Here is the system hierarchy for this model + * + * '' : 'AHRSControl' + * '' : 'AHRSControl/AHRS_Control' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl' + * '' : 'AHRSControl/AHRS_Control/AHRS_voter' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/Filter' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/ModelInfo' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/ModelInfo' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop' + * '' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop' + * '' : 'AHRSControl/AHRS_Control/AHRS_voter/Avg_Value' + * '' : 'AHRSControl/AHRS_Control/AHRS_voter/Mid_Value' + * '' : 'AHRSControl/AHRS_Control/AHRS_voter/ModelInfo' + * '' : 'AHRSControl/AHRS_Control/AHRS_voter/Single_Value' + */ + +/*- + * Requirements for '': AHRSControl + */ +#endif /* RTW_HEADER_AHRSControl_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/AHRSControl/AHRSControl_data.c b/src/validation/slprj/ert/AHRSControl/AHRSControl_data.c new file mode 100644 index 0000000..fc9882f --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/AHRSControl_data.c @@ -0,0 +1,46 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: AHRSControl_data.c + * + * Code generated for Simulink model 'AHRSControl'. + * + * Model version : 1.131 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:50:39 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "AHRSControl.h" + +/* Constant parameters (default storage) */ +const ConstP_AHRSControl_T AHRSControl_ConstP = { + /* Expression: [2.395,-0.3609,-0.002145,0.808700,-0.0205;;] + * Referenced by: '/Gain' + */ + { 2.395, -0.3609, -0.002145, 0.8087, -0.0205 }, + + /* Expression: [;-0.1427,-1.115,0.04573,-0.04318,-0.1007;] + * Referenced by: '/Gain' + */ + { -0.1427, -1.115, 0.04573, -0.04318, -0.1007 }, + + /* Expression: [;;-0.02792,-0.02229,-2.25,-0.06152,0.03151] + * Referenced by: '/Gain' + */ + { -0.02792, -0.02229, -2.25, -0.06152, 0.03151 } +}; + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/AHRSControl/AHRSControl_mr_codeInfo.mat b/src/validation/slprj/ert/AHRSControl/AHRSControl_mr_codeInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..7bf9c4e8c338ad0d8fa9681483f7e7f83fac38af GIT binary patch literal 18124 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/codedescriptor.dmr b/src/validation/slprj/ert/AHRSControl/codedescriptor.dmr new file mode 100644 index 0000000000000000000000000000000000000000..a377f1c68b44d82354c366c360dd3a9e966aab6d GIT binary patch literal 427008 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 + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: AHRSControl.c
    7 *
    8 * Code generated for Simulink model 'AHRSControl'.
    9 *
    10 * Model version : 1.131
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:50:39 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#include "AHRSControl.h"
    23
    24/* Macros for accessing real-time model data structure */
    25#ifndef rtmGetErrorStatus
    26# define rtmGetErrorStatus(rtm) (*((rtm)->errorStatus))
    27#endif
    28
    29#ifndef rtmSetErrorStatus
    30# define rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val))
    31#endif
    32
    33#ifndef rtmGetErrorStatusPointer
    34# define rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus
    35#endif
    36
    37#ifndef rtmSetErrorStatusPointer
    38# define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val))
    39#endif
    40
    41MdlrefDW_AHRSControl_T AHRSControl_MdlrefDW;
    42
    43/* Block states (default storage) */
    44DW_AHRSControl_f_T AHRSControl_DW;
    45extern void AHRSControl_Filter(real_T rtu_Signal, real_T rtu_prev_FeedbackSum,
    46 real_T *rty_filtered_Signal, real_T *rty_FeedbackSum);
    47extern void AHRSControl_pitch_feedback(real_T rtu_theta_cmd, const real_T
    48 rtu_voted_fb[5], real_T *rty_ds);
    49extern void AHRSControl_roll_feedback(real_T rtu_phi_cmd, const real_T
    50 rtu_voted_fb[5], real_T *rty_dc);
    51extern void AHRSControl_yaw_feedback(real_T rtu_r_cmd, const real_T
    52 rtu_voted_fb[5], real_T *rty_dT);
    53extern void AHRSControl_Heli_inner_loop(real_T rtu_theta_cmd, real_T rtu_phi_cmd,
    54 real_T rtu_r_cmd, const real_T rtu_voted_fb[5], real_T rty_actuator_commands[3]);
    55extern void AHRSControl_Pitch_loop_Disable(void);
    56extern void AHRSControl_Pitch_loop(real_T rtu_Pilot_theta_cmd, real_T rtu_theta,
    57 real_T *rty_theta_cmd);
    58extern void AHRSControl_Roll_loop_Disable(void);
    59extern void AHRSControl_Roll_loop(real_T rtu_Pilot_phi_cmd, real_T rtu_phi,
    60 real_T *rty_phi_cmd);
    61extern void AHRSControl_Yaw_loop_Disable(void);
    62extern void AHRSControl_Yaw_loop(real_T rtu_Pilot_r_cmd, real_T rtu_r, real_T
    63 *rty_r_cmd);
    64extern void AHRSCon_Heli_outer_loop_Disable(void);
    65extern void AHRSControl_Heli_outer_loop(int16_T rtu_Pilot_theta_cmd, int16_T
    66 rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5],
    67 real_T *rty_theta_cmd, real_T *rty_phi_cmd, real_T *rty_r_cmd);
    68extern void AHRSContro_AHRSLoopCtrl_Disable(void);
    69extern void AHRSControl_AHRSLoopCtrl(int16_T rtu_Pilot_theta_cmd, int16_T
    70 rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5],
    71 real_T rty_actuator_commands[3]);
    72extern void AHRSControl_Avg_Value(const real_T rtu_AHRS1[5], const real_T
    73 rtu_AHRS2[5], const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T
    74 rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Avg_Value[5]);
    75extern void AHRSControl_Mid_Value(const real_T rtu_AHRS1[5], const real_T
    76 rtu_AHRS2[5], const real_T rtu_AHRS3[5], real_T rty_Mid_Value[5]);
    77extern void AHRSControl_Single_Value(const real_T rtu_AHRS1[5], const real_T
    78 rtu_AHRS2[5], const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T
    79 rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Single_Value[5]);
    80extern void AHRSControl_AHRS_voter(const AHRS_Bus *rtu_AHRS1, const AHRS_Bus
    81 *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T rty_voted_fb[5]);
    82
    83/* Output and update for Simulink Function: '<S4>/Filter' */
    84void AHRSControl_Filter(real_T rtu_Signal, real_T rtu_prev_FeedbackSum, real_T
    85 *rty_filtered_Signal, real_T *rty_FeedbackSum)
    86{
    87 real_T rtb_SumB21;
    88
    89 /* Sum: '<S6>/SumA21' incorporates:
    90 * Gain: '<S6>/a_2_1'
    91 * Gain: '<S6>/s_1'
    92 * SignalConversion generated from: '<S6>/Signal'
    93 * SignalConversion generated from: '<S6>/prev_FeedbackSum'
    94 */
    95 rtb_SumB21 = (0.16840424129937498 * rtu_Signal) - (-0.66319151740124993 *
    96 rtu_prev_FeedbackSum);
    97
    98 /* SignalConversion generated from: '<S6>/FeedbackSum' */
    99 *rty_FeedbackSum = rtb_SumB21;
    100
    101 /* SignalConversion generated from: '<S6>/filtered_Signal' incorporates:
    102 * SignalConversion generated from: '<S6>/prev_FeedbackSum'
    103 * Sum: '<S6>/SumB21'
    104 */
    105 *rty_filtered_Signal = rtb_SumB21 + rtu_prev_FeedbackSum;
    106}
    107
    108/* Output and update for Simulink Function: '<S4>/pitch_feedback' */
    109void AHRSControl_pitch_feedback(real_T rtu_theta_cmd, const real_T rtu_voted_fb
    110 [5], real_T *rty_ds)
    111{
    112 real_T rtb_ds;
    113 real_T rtb_Filter_caller_o2;
    114 int32_T i;
    115
    116 /* Gain: '<S8>/Gain' incorporates:
    117 * SignalConversion generated from: '<S8>/voted_fb'
    118 */
    119 rtb_ds = 0.0;
    120 for (i = 0; i < 5; i++) {
    121 rtb_ds += AHRSControl_ConstP.Gain_Gain[i] * rtu_voted_fb[i];
    122 }
    123
    124 /* Sum: '<S8>/Sum5' incorporates:
    125 * Gain: '<S8>/Gain'
    126 * SignalConversion generated from: '<S8>/theta_cmd'
    127 */
    128 rtb_ds = rtu_theta_cmd - rtb_ds;
    129
    130 /* FunctionCaller: '<S8>/Filter_caller' incorporates:
    131 * UnitDelay: '<S8>/Unit Delay'
    132 */
    133 AHRSControl_Filter(rtb_ds, AHRSControl_DW.UnitDelay_DSTATE_j, &rtb_ds,
    134 &rtb_Filter_caller_o2);
    135
    136 /* SignalConversion generated from: '<S8>/ds' */
    137 *rty_ds = rtb_ds;
    138
    139 /* Update for UnitDelay: '<S8>/Unit Delay' */
    140 AHRSControl_DW.UnitDelay_DSTATE_j = rtb_Filter_caller_o2;
    141}
    142
    143/* Output and update for Simulink Function: '<S4>/roll_feedback' */
    144void AHRSControl_roll_feedback(real_T rtu_phi_cmd, const real_T rtu_voted_fb[5],
    145 real_T *rty_dc)
    146{
    147 real_T rtb_dc;
    148 real_T rtb_Filter_caller_o2;
    149 int32_T i;
    150
    151 /* Gain: '<S9>/Gain' incorporates:
    152 * SignalConversion generated from: '<S9>/voted_fb'
    153 */
    154 rtb_dc = 0.0;
    155 for (i = 0; i < 5; i++) {
    156 rtb_dc += AHRSControl_ConstP.Gain_Gain_d[i] * rtu_voted_fb[i];
    157 }
    158
    159 /* Sum: '<S9>/Sum5' incorporates:
    160 * Gain: '<S9>/Gain'
    161 * SignalConversion generated from: '<S9>/phi_cmd'
    162 */
    163 rtb_dc = rtu_phi_cmd - rtb_dc;
    164
    165 /* FunctionCaller: '<S9>/Filter_caller' incorporates:
    166 * UnitDelay: '<S9>/Unit Delay'
    167 */
    168 AHRSControl_Filter(rtb_dc, AHRSControl_DW.UnitDelay_DSTATE_f, &rtb_dc,
    169 &rtb_Filter_caller_o2);
    170
    171 /* SignalConversion generated from: '<S9>/dc' */
    172 *rty_dc = rtb_dc;
    173
    174 /* Update for UnitDelay: '<S9>/Unit Delay' */
    175 AHRSControl_DW.UnitDelay_DSTATE_f = rtb_Filter_caller_o2;
    176}
    177
    178/* Output and update for Simulink Function: '<S4>/yaw_feedback' */
    179void AHRSControl_yaw_feedback(real_T rtu_r_cmd, const real_T rtu_voted_fb[5],
    180 real_T *rty_dT)
    181{
    182 real_T rtb_dT;
    183 real_T rtb_Filter_caller_o2;
    184 int32_T i;
    185
    186 /* Gain: '<S10>/Gain' incorporates:
    187 * SignalConversion generated from: '<S10>/voted_fb'
    188 */
    189 rtb_dT = 0.0;
    190 for (i = 0; i < 5; i++) {
    191 rtb_dT += AHRSControl_ConstP.Gain_Gain_b[i] * rtu_voted_fb[i];
    192 }
    193
    194 /* Sum: '<S10>/Sum5' incorporates:
    195 * Gain: '<S10>/Gain'
    196 * SignalConversion generated from: '<S10>/r_cmd'
    197 */
    198 rtb_dT = rtu_r_cmd - rtb_dT;
    199
    200 /* FunctionCaller: '<S10>/Filter_caller' incorporates:
    201 * UnitDelay: '<S10>/Unit Delay'
    202 */
    203 AHRSControl_Filter(rtb_dT, AHRSControl_DW.UnitDelay_DSTATE, &rtb_dT,
    204 &rtb_Filter_caller_o2);
    205
    206 /* SignalConversion generated from: '<S10>/dT' */
    207 *rty_dT = rtb_dT;
    208
    209 /* Update for UnitDelay: '<S10>/Unit Delay' */
    210 AHRSControl_DW.UnitDelay_DSTATE = rtb_Filter_caller_o2;
    211}
    212
    213/* Output and update for Simulink Function: '<S2>/Heli_inner_loop' */
    214void AHRSControl_Heli_inner_loop(real_T rtu_theta_cmd, real_T rtu_phi_cmd,
    215 real_T rtu_r_cmd, const real_T rtu_voted_fb[5], real_T rty_actuator_commands[3])
    216{
    217 real_T rtb_pitch_feedback_caller;
    218 real_T rtb_TmpSignalConversionAtvote_o[5];
    219 real_T rtb_roll_feedback_caller;
    220 real_T rtb_yaw_feedback_caller;
    221 int32_T i;
    222
    223 /* SignalConversion generated from: '<S4>/theta_cmd' */
    224 rtb_pitch_feedback_caller = rtu_theta_cmd;
    225
    226 /* SignalConversion generated from: '<S4>/voted_fb' */
    227 for (i = 0; i < 5; i++) {
    228 rtb_TmpSignalConversionAtvote_o[i] = rtu_voted_fb[i];
    229 }
    230
    231 /* End of SignalConversion generated from: '<S4>/voted_fb' */
    232
    233 /* FunctionCaller: '<S4>/pitch_feedback_caller' incorporates:
    234 * SignalConversion generated from: '<S4>/theta_cmd'
    235 */
    236 AHRSControl_pitch_feedback(rtu_theta_cmd, rtb_TmpSignalConversionAtvote_o,
    237 &rtb_pitch_feedback_caller);
    238
    239 /* SignalConversion generated from: '<S4>/phi_cmd' */
    240 rtb_roll_feedback_caller = rtu_phi_cmd;
    241
    242 /* FunctionCaller: '<S4>/roll_feedback_caller' incorporates:
    243 * SignalConversion generated from: '<S4>/phi_cmd'
    244 */
    245 AHRSControl_roll_feedback(rtu_phi_cmd, rtb_TmpSignalConversionAtvote_o,
    246 &rtb_roll_feedback_caller);
    247
    248 /* SignalConversion generated from: '<S4>/r_cmd' */
    249 rtb_yaw_feedback_caller = rtu_r_cmd;
    250
    251 /* FunctionCaller: '<S4>/yaw_feedback_caller' incorporates:
    252 * SignalConversion generated from: '<S4>/r_cmd'
    253 */
    254 AHRSControl_yaw_feedback(rtu_r_cmd, rtb_TmpSignalConversionAtvote_o,
    255 &rtb_yaw_feedback_caller);
    256
    257 /* Gain: '<S4>/Gain' */
    258 rtb_pitch_feedback_caller *= 0.0033333333333333335;
    259
    260 /* Saturate: '<S4>/Saturation' */
    261 if (rtb_pitch_feedback_caller > 0.1) {
    262 /* SignalConversion generated from: '<S4>/actuator_commands' */
    263 rty_actuator_commands[0] = 0.1;
    264 } else if (rtb_pitch_feedback_caller < -0.1) {
    265 /* SignalConversion generated from: '<S4>/actuator_commands' */
    266 rty_actuator_commands[0] = -0.1;
    267 } else {
    268 /* SignalConversion generated from: '<S4>/actuator_commands' */
    269 rty_actuator_commands[0] = rtb_pitch_feedback_caller;
    270 }
    271
    272 /* Gain: '<S4>/Gain' */
    273 rtb_pitch_feedback_caller = 0.0033333333333333335 * rtb_roll_feedback_caller;
    274
    275 /* Saturate: '<S4>/Saturation' */
    276 if (rtb_pitch_feedback_caller > 0.1) {
    277 /* SignalConversion generated from: '<S4>/actuator_commands' */
    278 rty_actuator_commands[1] = 0.1;
    279 } else if (rtb_pitch_feedback_caller < -0.1) {
    280 /* SignalConversion generated from: '<S4>/actuator_commands' */
    281 rty_actuator_commands[1] = -0.1;
    282 } else {
    283 /* SignalConversion generated from: '<S4>/actuator_commands' */
    284 rty_actuator_commands[1] = rtb_pitch_feedback_caller;
    285 }
    286
    287 /* Gain: '<S4>/Gain' */
    288 rtb_pitch_feedback_caller = 0.0033333333333333335 * rtb_yaw_feedback_caller;
    289
    290 /* Saturate: '<S4>/Saturation' */
    291 if (rtb_pitch_feedback_caller > 0.1) {
    292 /* SignalConversion generated from: '<S4>/actuator_commands' */
    293 rty_actuator_commands[2] = 0.1;
    294 } else if (rtb_pitch_feedback_caller < -0.1) {
    295 /* SignalConversion generated from: '<S4>/actuator_commands' */
    296 rty_actuator_commands[2] = -0.1;
    297 } else {
    298 /* SignalConversion generated from: '<S4>/actuator_commands' */
    299 rty_actuator_commands[2] = rtb_pitch_feedback_caller;
    300 }
    301}
    302
    303/* Disable for Simulink Function: '<S5>/Pitch_loop' */
    304void AHRSControl_Pitch_loop_Disable(void)
    305{
    306 /* Disable for DiscreteIntegrator: '<S12>/Integrator' */
    307 AHRSControl_DW.Integrator_DSTATE = AHRSControl_DW.Integrator;
    308}
    309
    310/* Output and update for Simulink Function: '<S5>/Pitch_loop' */
    311void AHRSControl_Pitch_loop(real_T rtu_Pilot_theta_cmd, real_T rtu_theta, real_T
    312 *rty_theta_cmd)
    313{
    314 real_T rtb_Sum;
    315
    316 /* DiscreteIntegrator: '<S12>/Integrator' */
    317 AHRSControl_DW.Integrator = AHRSControl_DW.Integrator_DSTATE;
    318
    319 /* Sum: '<S12>/Sum' incorporates:
    320 * SignalConversion generated from: '<S12>/Pilot_theta_cmd'
    321 * SignalConversion generated from: '<S12>/theta'
    322 */
    323 rtb_Sum = rtu_Pilot_theta_cmd - rtu_theta;
    324
    325 /* SignalConversion generated from: '<S12>/theta_cmd' incorporates:
    326 * Gain: '<S12>/Gain'
    327 * Gain: '<S12>/Gain1'
    328 * Sum: '<S12>/Sum3'
    329 */
    330 *rty_theta_cmd = (0.01 * AHRSControl_DW.Integrator) + (1.13 * rtb_Sum);
    331
    332 /* Update for DiscreteIntegrator: '<S12>/Integrator' incorporates:
    333 * Gain: '<S12>/Gain2'
    334 */
    335 AHRSControl_DW.Integrator_DSTATE += 2.25 * rtb_Sum;
    336 if (AHRSControl_DW.Integrator_DSTATE >= 10.0) {
    337 AHRSControl_DW.Integrator_DSTATE = 10.0;
    338 } else {
    339 if (AHRSControl_DW.Integrator_DSTATE <= -10.0) {
    340 AHRSControl_DW.Integrator_DSTATE = -10.0;
    341 }
    342 }
    343
    344 /* End of Update for DiscreteIntegrator: '<S12>/Integrator' */
    345}
    346
    347/* Disable for Simulink Function: '<S5>/Roll_loop' */
    348void AHRSControl_Roll_loop_Disable(void)
    349{
    350 /* Disable for DiscreteIntegrator: '<S13>/Integrator1' */
    351 AHRSControl_DW.Integrator1_DSTATE = AHRSControl_DW.Integrator1;
    352}
    353
    354/* Output and update for Simulink Function: '<S5>/Roll_loop' */
    355void AHRSControl_Roll_loop(real_T rtu_Pilot_phi_cmd, real_T rtu_phi, real_T
    356 *rty_phi_cmd)
    357{
    358 real_T rtb_Sum;
    359
    360 /* DiscreteIntegrator: '<S13>/Integrator1' */
    361 AHRSControl_DW.Integrator1 = AHRSControl_DW.Integrator1_DSTATE;
    362
    363 /* Sum: '<S13>/Sum' incorporates:
    364 * SignalConversion generated from: '<S13>/Pilot_phi_cmd'
    365 * SignalConversion generated from: '<S13>/phi'
    366 */
    367 rtb_Sum = rtu_Pilot_phi_cmd - rtu_phi;
    368
    369 /* SignalConversion generated from: '<S13>/phi_cmd' incorporates:
    370 * Gain: '<S13>/Gain1'
    371 * Gain: '<S13>/Gain2'
    372 * Sum: '<S13>/Sum4'
    373 */
    374 *rty_phi_cmd = (0.01 * AHRSControl_DW.Integrator1) + (-0.086 * rtb_Sum);
    375
    376 /* Update for DiscreteIntegrator: '<S13>/Integrator1' incorporates:
    377 * Gain: '<S13>/Gain3'
    378 */
    379 AHRSControl_DW.Integrator1_DSTATE += -1.19 * rtb_Sum;
    380 if (AHRSControl_DW.Integrator1_DSTATE >= 10.0) {
    381 AHRSControl_DW.Integrator1_DSTATE = 10.0;
    382 } else {
    383 if (AHRSControl_DW.Integrator1_DSTATE <= -10.0) {
    384 AHRSControl_DW.Integrator1_DSTATE = -10.0;
    385 }
    386 }
    387
    388 /* End of Update for DiscreteIntegrator: '<S13>/Integrator1' */
    389}
    390
    391/* Disable for Simulink Function: '<S5>/Yaw_loop' */
    392void AHRSControl_Yaw_loop_Disable(void)
    393{
    394 /* Disable for DiscreteIntegrator: '<S14>/Integrator2' */
    395 AHRSControl_DW.Integrator2_DSTATE = AHRSControl_DW.Integrator2;
    396}
    397
    398/* Output and update for Simulink Function: '<S5>/Yaw_loop' */
    399void AHRSControl_Yaw_loop(real_T rtu_Pilot_r_cmd, real_T rtu_r, real_T
    400 *rty_r_cmd)
    401{
    402 real_T rtb_Sum;
    403
    404 /* DiscreteIntegrator: '<S14>/Integrator2' */
    405 AHRSControl_DW.Integrator2 = AHRSControl_DW.Integrator2_DSTATE;
    406
    407 /* Sum: '<S14>/Sum' incorporates:
    408 * SignalConversion generated from: '<S14>/Pilot_r_cmd'
    409 * SignalConversion generated from: '<S14>/r'
    410 */
    411 rtb_Sum = rtu_Pilot_r_cmd - rtu_r;
    412
    413 /* SignalConversion generated from: '<S14>/r_cmd' incorporates:
    414 * Gain: '<S14>/Gain1'
    415 * Gain: '<S14>/Gain4'
    416 * Sum: '<S14>/Sum5'
    417 */
    418 *rty_r_cmd = (0.01 * AHRSControl_DW.Integrator2) + (1.33 * rtb_Sum);
    419
    420 /* Update for DiscreteIntegrator: '<S14>/Integrator2' incorporates:
    421 * Gain: '<S14>/Gain5'
    422 */
    423 AHRSControl_DW.Integrator2_DSTATE += -2.33 * rtb_Sum;
    424 if (AHRSControl_DW.Integrator2_DSTATE >= 10.0) {
    425 AHRSControl_DW.Integrator2_DSTATE = 10.0;
    426 } else {
    427 if (AHRSControl_DW.Integrator2_DSTATE <= -10.0) {
    428 AHRSControl_DW.Integrator2_DSTATE = -10.0;
    429 }
    430 }
    431
    432 /* End of Update for DiscreteIntegrator: '<S14>/Integrator2' */
    433}
    434
    435/* Disable for Simulink Function: '<S2>/Heli_outer_loop' */
    436void AHRSCon_Heli_outer_loop_Disable(void)
    437{
    438 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S5>/Roll_loop' incorporates:
    439 * SubSystem: '<S5>/Roll_loop'
    440 */
    441 AHRSControl_Roll_loop_Disable();
    442
    443 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S5>/Roll_loop' */
    444
    445 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S5>/Yaw_loop' incorporates:
    446 * SubSystem: '<S5>/Yaw_loop'
    447 */
    448 AHRSControl_Yaw_loop_Disable();
    449
    450 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S5>/Yaw_loop' */
    451
    452 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S5>/Pitch_loop' incorporates:
    453 * SubSystem: '<S5>/Pitch_loop'
    454 */
    455 AHRSControl_Pitch_loop_Disable();
    456
    457 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S5>/Pitch_loop' */
    458}
    459
    460/* Output and update for Simulink Function: '<S2>/Heli_outer_loop' */
    461void AHRSControl_Heli_outer_loop(int16_T rtu_Pilot_theta_cmd, int16_T
    462 rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5],
    463 real_T *rty_theta_cmd, real_T *rty_phi_cmd, real_T *rty_r_cmd)
    464{
    465 real_T rtb_Saturation_f;
    466
    467 /* Gain: '<S5>/Scaling1' incorporates:
    468 * DataTypeConversion: '<S5>/TypeConversion1'
    469 * SignalConversion generated from: '<S5>/Pilot_phi_cmd'
    470 */
    471 rtb_Saturation_f = 0.00091555528427991577 * ((real_T)rtu_Pilot_phi_cmd);
    472
    473 /* FunctionCaller: '<S5>/Roll_loop_caller' incorporates:
    474 * SignalConversion generated from: '<S5>/voted_fb'
    475 */
    476 AHRSControl_Roll_loop(rtb_Saturation_f, rtu_voted_fb[1], &rtb_Saturation_f);
    477
    478 /* Saturate: '<S5>/Saturation1' */
    479 if (rtb_Saturation_f > 30.0) {
    480 /* SignalConversion generated from: '<S5>/phi_cmd' */
    481 *rty_phi_cmd = 30.0;
    482 } else if (rtb_Saturation_f < -30.0) {
    483 /* SignalConversion generated from: '<S5>/phi_cmd' */
    484 *rty_phi_cmd = -30.0;
    485 } else {
    486 /* SignalConversion generated from: '<S5>/phi_cmd' */
    487 *rty_phi_cmd = rtb_Saturation_f;
    488 }
    489
    490 /* End of Saturate: '<S5>/Saturation1' */
    491
    492 /* Gain: '<S5>/Scaling2' incorporates:
    493 * DataTypeConversion: '<S5>/TypeConversion2'
    494 * SignalConversion generated from: '<S5>/Pilot_r_cmd'
    495 */
    496 rtb_Saturation_f = 0.00045777764213995788 * ((real_T)rtu_Pilot_r_cmd);
    497
    498 /* FunctionCaller: '<S5>/Yaw_loop_caller' incorporates:
    499 * SignalConversion generated from: '<S5>/voted_fb'
    500 */
    501 AHRSControl_Yaw_loop(rtb_Saturation_f, rtu_voted_fb[2], &rtb_Saturation_f);
    502
    503 /* Saturate: '<S5>/Saturation2' */
    504 if (rtb_Saturation_f > 30.0) {
    505 /* SignalConversion generated from: '<S5>/r_cmd' */
    506 *rty_r_cmd = 30.0;
    507 } else if (rtb_Saturation_f < -30.0) {
    508 /* SignalConversion generated from: '<S5>/r_cmd' */
    509 *rty_r_cmd = -30.0;
    510 } else {
    511 /* SignalConversion generated from: '<S5>/r_cmd' */
    512 *rty_r_cmd = rtb_Saturation_f;
    513 }
    514
    515 /* End of Saturate: '<S5>/Saturation2' */
    516
    517 /* Gain: '<S5>/Scaling' incorporates:
    518 * DataTypeConversion: '<S5>/TypeConversion'
    519 * SignalConversion generated from: '<S5>/Pilot_theta_cmd'
    520 */
    521 rtb_Saturation_f = 0.00091555528427991577 * ((real_T)rtu_Pilot_theta_cmd);
    522
    523 /* FunctionCaller: '<S5>/Pitch_loop_caller' incorporates:
    524 * SignalConversion generated from: '<S5>/voted_fb'
    525 */
    526 AHRSControl_Pitch_loop(rtb_Saturation_f, rtu_voted_fb[0], &rtb_Saturation_f);
    527
    528 /* Saturate: '<S5>/Saturation' */
    529 if (rtb_Saturation_f > 30.0) {
    530 /* SignalConversion generated from: '<S5>/theta_cmd' */
    531 *rty_theta_cmd = 30.0;
    532 } else if (rtb_Saturation_f < -30.0) {
    533 /* SignalConversion generated from: '<S5>/theta_cmd' */
    534 *rty_theta_cmd = -30.0;
    535 } else {
    536 /* SignalConversion generated from: '<S5>/theta_cmd' */
    537 *rty_theta_cmd = rtb_Saturation_f;
    538 }
    539
    540 /* End of Saturate: '<S5>/Saturation' */
    541}
    542
    543/* Disable for Simulink Function: '<S1>/AHRSLoopCtrl' */
    544void AHRSContro_AHRSLoopCtrl_Disable(void)
    545{
    546 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S2>/Heli_outer_loop' incorporates:
    547 * SubSystem: '<S2>/Heli_outer_loop'
    548 */
    549 AHRSCon_Heli_outer_loop_Disable();
    550
    551 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S2>/Heli_outer_loop' */
    552}
    553
    554/* Output and update for Simulink Function: '<S1>/AHRSLoopCtrl' */
    555void AHRSControl_AHRSLoopCtrl(int16_T rtu_Pilot_theta_cmd, int16_T
    556 rtu_Pilot_phi_cmd, int16_T rtu_Pilot_r_cmd, const real_T rtu_voted_fb[5],
    557 real_T rty_actuator_commands[3])
    558{
    559 real_T rtb_TmpSignalConversionAtvote_g[5];
    560 real_T rtb_Heli_outer_loop_caller_o1;
    561 real_T rtb_Heli_outer_loop_caller_o2;
    562 real_T rtb_Heli_outer_loop_caller_o3;
    563 int32_T i;
    564
    565 /* SignalConversion generated from: '<S2>/voted_fb' */
    566 for (i = 0; i < 5; i++) {
    567 rtb_TmpSignalConversionAtvote_g[i] = rtu_voted_fb[i];
    568 }
    569
    570 /* End of SignalConversion generated from: '<S2>/voted_fb' */
    571
    572 /* FunctionCaller: '<S2>/Heli_outer_loop_caller' incorporates:
    573 * SignalConversion generated from: '<S2>/Pilot_phi_cmd'
    574 * SignalConversion generated from: '<S2>/Pilot_r_cmd'
    575 * SignalConversion generated from: '<S2>/Pilot_theta_cmd'
    576 */
    577 AHRSControl_Heli_outer_loop(rtu_Pilot_theta_cmd, rtu_Pilot_phi_cmd,
    578 rtu_Pilot_r_cmd, rtb_TmpSignalConversionAtvote_g,
    579 &rtb_Heli_outer_loop_caller_o1, &rtb_Heli_outer_loop_caller_o2,
    580 &rtb_Heli_outer_loop_caller_o3);
    581
    582 /* SignalConversion generated from: '<S2>/actuator_commands' incorporates:
    583 * FunctionCaller: '<S2>/Heli_inner_loop_caller'
    584 */
    585 AHRSControl_Heli_inner_loop(rtb_Heli_outer_loop_caller_o1,
    586 rtb_Heli_outer_loop_caller_o2, rtb_Heli_outer_loop_caller_o3,
    587 rtb_TmpSignalConversionAtvote_g, rty_actuator_commands);
    588}
    589
    590/* Output and update for Simulink Function: '<S3>/Avg_Value' */
    591void AHRSControl_Avg_Value(const real_T rtu_AHRS1[5], const real_T rtu_AHRS2[5],
    592 const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T
    593 rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Avg_Value[5])
    594{
    595 int32_T i;
    596 real_T rtu_AHRS2_Valid_0;
    597 real_T rtu_AHRS3_Valid_0;
    598 for (i = 0; i < 5; i++) {
    599 /* Switch: '<S15>/Switch' incorporates:
    600 * SignalConversion generated from: '<S15>/AHRS1'
    601 * SignalConversion generated from: '<S15>/AHRS1_Valid'
    602 */
    603 if (rtu_AHRS1_Valid) {
    604 rty_Avg_Value[i] = rtu_AHRS1[i];
    605 } else {
    606 rty_Avg_Value[i] = 0.0;
    607 }
    608
    609 /* End of Switch: '<S15>/Switch' */
    610
    611 /* Switch: '<S15>/Switch1' incorporates:
    612 * SignalConversion generated from: '<S15>/AHRS2'
    613 * SignalConversion generated from: '<S15>/AHRS2_Valid'
    614 */
    615 if (rtu_AHRS2_Valid) {
    616 rtu_AHRS2_Valid_0 = rtu_AHRS2[i];
    617 } else {
    618 rtu_AHRS2_Valid_0 = 0.0;
    619 }
    620
    621 /* End of Switch: '<S15>/Switch1' */
    622
    623 /* Switch: '<S15>/Switch2' incorporates:
    624 * SignalConversion generated from: '<S15>/AHRS3'
    625 * SignalConversion generated from: '<S15>/AHRS3_Valid'
    626 */
    627 if (rtu_AHRS3_Valid) {
    628 rtu_AHRS3_Valid_0 = rtu_AHRS3[i];
    629 } else {
    630 rtu_AHRS3_Valid_0 = 0.0;
    631 }
    632
    633 /* End of Switch: '<S15>/Switch2' */
    634
    635 /* SignalConversion generated from: '<S15>/Avg_Value' incorporates:
    636 * Gain: '<S15>/Gain'
    637 * Sum: '<S15>/Sum'
    638 */
    639 rty_Avg_Value[i] = ((rty_Avg_Value[i] + rtu_AHRS2_Valid_0) +
    640 rtu_AHRS3_Valid_0) * 0.5;
    641 }
    642}
    643
    644/* Output and update for Simulink Function: '<S3>/Mid_Value' */
    645void AHRSControl_Mid_Value(const real_T rtu_AHRS1[5], const real_T rtu_AHRS2[5],
    646 const real_T rtu_AHRS3[5], real_T rty_Mid_Value[5])
    647{
    648 int32_T i;
    649
    650 /* SignalConversion generated from: '<S16>/Mid_Value' incorporates:
    651 * MinMax: '<S16>/MinMax'
    652 * MinMax: '<S16>/MinMax1'
    653 * MinMax: '<S16>/MinMax2'
    654 * MinMax: '<S16>/MinMax3'
    655 * SignalConversion generated from: '<S16>/AHRS1'
    656 * SignalConversion generated from: '<S16>/AHRS2'
    657 * SignalConversion generated from: '<S16>/AHRS3'
    658 */
    659 for (i = 0; i < 5; i++) {
    660 rty_Mid_Value[i] = fmax(fmax(fmin(rtu_AHRS1[i], rtu_AHRS2[i]), fmin
    661 (rtu_AHRS2[i], rtu_AHRS3[i])), fmin(rtu_AHRS3[i], rtu_AHRS1[i]));
    662 }
    663
    664 /* End of SignalConversion generated from: '<S16>/Mid_Value' */
    665}
    666
    667/* Output and update for Simulink Function: '<S3>/Single_Value' */
    668void AHRSControl_Single_Value(const real_T rtu_AHRS1[5], const real_T rtu_AHRS2
    669 [5], const real_T rtu_AHRS3[5], boolean_T rtu_AHRS1_Valid, boolean_T
    670 rtu_AHRS2_Valid, boolean_T rtu_AHRS3_Valid, real_T rty_Single_Value[5])
    671{
    672 int32_T i;
    673 real_T rtu_AHRS2_Valid_0;
    674 real_T rtu_AHRS3_Valid_0;
    675 for (i = 0; i < 5; i++) {
    676 /* Switch: '<S18>/Switch' incorporates:
    677 * SignalConversion generated from: '<S18>/AHRS1'
    678 * SignalConversion generated from: '<S18>/AHRS1_Valid'
    679 */
    680 if (rtu_AHRS1_Valid) {
    681 rty_Single_Value[i] = rtu_AHRS1[i];
    682 } else {
    683 rty_Single_Value[i] = 0.0;
    684 }
    685
    686 /* End of Switch: '<S18>/Switch' */
    687
    688 /* Switch: '<S18>/Switch1' incorporates:
    689 * SignalConversion generated from: '<S18>/AHRS2'
    690 * SignalConversion generated from: '<S18>/AHRS2_Valid'
    691 */
    692 if (rtu_AHRS2_Valid) {
    693 rtu_AHRS2_Valid_0 = rtu_AHRS2[i];
    694 } else {
    695 rtu_AHRS2_Valid_0 = 0.0;
    696 }
    697
    698 /* End of Switch: '<S18>/Switch1' */
    699
    700 /* Switch: '<S18>/Switch2' incorporates:
    701 * SignalConversion generated from: '<S18>/AHRS3'
    702 * SignalConversion generated from: '<S18>/AHRS3_Valid'
    703 */
    704 if (rtu_AHRS3_Valid) {
    705 rtu_AHRS3_Valid_0 = rtu_AHRS3[i];
    706 } else {
    707 rtu_AHRS3_Valid_0 = 0.0;
    708 }
    709
    710 /* End of Switch: '<S18>/Switch2' */
    711
    712 /* SignalConversion generated from: '<S18>/Single_Value' incorporates:
    713 * Sum: '<S18>/Sum'
    714 */
    715 rty_Single_Value[i] = (rty_Single_Value[i] + rtu_AHRS2_Valid_0) +
    716 rtu_AHRS3_Valid_0;
    717 }
    718}
    719
    720/* Output and update for Simulink Function: '<S1>/AHRS_voter' */
    721void AHRSControl_AHRS_voter(const AHRS_Bus *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2,
    722 const AHRS_Bus *rtu_AHRS3, real_T rty_voted_fb[5])
    723{
    724 real_T rtb_TmpSignalConversionAtAvg__o[5];
    725 real_T rtb_TmpSignalConversionAtAvg__d[5];
    726 real_T rtb_MultiportSwitch[5];
    727 real_T rtb_Single_Value_caller[5];
    728 real_T rtb_Avg_Value_caller[5];
    729 int32_T i;
    730
    731 /* SignalConversion generated from: '<S3>/Avg_Value_caller' incorporates:
    732 * SignalConversion generated from: '<S3>/AHRS1'
    733 */
    734 rtb_TmpSignalConversionAtAvg__o[0] = rtu_AHRS1->theta;
    735 rtb_TmpSignalConversionAtAvg__o[1] = rtu_AHRS1->phi;
    736 rtb_TmpSignalConversionAtAvg__o[2] = rtu_AHRS1->r;
    737 rtb_TmpSignalConversionAtAvg__o[3] = rtu_AHRS1->q;
    738 rtb_TmpSignalConversionAtAvg__o[4] = rtu_AHRS1->p;
    739
    740 /* SignalConversion generated from: '<S3>/Avg_Value_caller' incorporates:
    741 * SignalConversion generated from: '<S3>/AHRS2'
    742 */
    743 rtb_TmpSignalConversionAtAvg__d[0] = rtu_AHRS2->theta;
    744 rtb_TmpSignalConversionAtAvg__d[1] = rtu_AHRS2->phi;
    745 rtb_TmpSignalConversionAtAvg__d[2] = rtu_AHRS2->r;
    746 rtb_TmpSignalConversionAtAvg__d[3] = rtu_AHRS2->q;
    747 rtb_TmpSignalConversionAtAvg__d[4] = rtu_AHRS2->p;
    748
    749 /* SignalConversion generated from: '<S3>/Avg_Value_caller' incorporates:
    750 * SignalConversion generated from: '<S3>/AHRS3'
    751 */
    752 rtb_MultiportSwitch[0] = rtu_AHRS3->theta;
    753 rtb_MultiportSwitch[1] = rtu_AHRS3->phi;
    754 rtb_MultiportSwitch[2] = rtu_AHRS3->r;
    755 rtb_MultiportSwitch[3] = rtu_AHRS3->q;
    756 rtb_MultiportSwitch[4] = rtu_AHRS3->p;
    757
    758 /* FunctionCaller: '<S3>/Single_Value_caller' incorporates:
    759 * SignalConversion generated from: '<S3>/AHRS1'
    760 * SignalConversion generated from: '<S3>/AHRS2'
    761 * SignalConversion generated from: '<S3>/AHRS3'
    762 */
    763 AHRSControl_Single_Value(rtb_TmpSignalConversionAtAvg__o,
    764 rtb_TmpSignalConversionAtAvg__d, rtb_MultiportSwitch, rtu_AHRS1->valid,
    765 rtu_AHRS2->valid, rtu_AHRS3->valid, rtb_Single_Value_caller);
    766
    767 /* FunctionCaller: '<S3>/Avg_Value_caller' incorporates:
    768 * SignalConversion generated from: '<S3>/AHRS1'
    769 * SignalConversion generated from: '<S3>/AHRS2'
    770 * SignalConversion generated from: '<S3>/AHRS3'
    771 */
    772 AHRSControl_Avg_Value(rtb_TmpSignalConversionAtAvg__o,
    773 rtb_TmpSignalConversionAtAvg__d, rtb_MultiportSwitch,
    774 rtu_AHRS1->valid, rtu_AHRS2->valid, rtu_AHRS3->valid,
    775 rtb_Avg_Value_caller);
    776
    777 /* FunctionCaller: '<S3>/Mid_Value_caller' */
    778 AHRSControl_Mid_Value(rtb_TmpSignalConversionAtAvg__o,
    779 rtb_TmpSignalConversionAtAvg__d, rtb_MultiportSwitch,
    780 rty_voted_fb);
    781
    782 /* MultiPortSwitch: '<S3>/MultiportSwitch' incorporates:
    783 * SignalConversion generated from: '<S3>/AHRS1'
    784 * SignalConversion generated from: '<S3>/AHRS2'
    785 * SignalConversion generated from: '<S3>/AHRS3'
    786 * Sum: '<S3>/Sum'
    787 */
    788 switch ((((uint32_T)(rtu_AHRS1->valid ? 1U : 0U)) + (rtu_AHRS2->valid ? 1U :
    789 0U)) + (rtu_AHRS3->valid ? 1U : 0U)) {
    790 case 0:
    791 /* SignalConversion generated from: '<S3>/voted_fb' */
    792 for (i = 0; i < 5; i++) {
    793 rty_voted_fb[i] = 0.0;
    794 }
    795 break;
    796
    797 case 1:
    798 /* SignalConversion generated from: '<S3>/voted_fb' */
    799 for (i = 0; i < 5; i++) {
    800 rty_voted_fb[i] = rtb_Single_Value_caller[i];
    801 }
    802 break;
    803
    804 case 2:
    805 /* SignalConversion generated from: '<S3>/voted_fb' */
    806 for (i = 0; i < 5; i++) {
    807 rty_voted_fb[i] = rtb_Avg_Value_caller[i];
    808 }
    809 break;
    810
    811 default:
    812 /* no actions */
    813 break;
    814 }
    815
    816 /* End of MultiPortSwitch: '<S3>/MultiportSwitch' */
    817}
    818
    819/* Disable for referenced model: 'AHRSControl' */
    820void AHRSControl_Disable(void)
    821{
    822 /* Disable for S-Function (sfun_private_function_caller) generated from: '<Root>/AHRS_Control' incorporates:
    823 * SubSystem: '<Root>/AHRS_Control'
    824 */
    825 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/AHRSLoopCtrl' incorporates:
    826 * SubSystem: '<S1>/AHRSLoopCtrl'
    827 */
    828 AHRSContro_AHRSLoopCtrl_Disable();
    829
    830 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/AHRSLoopCtrl' */
    831 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<Root>/AHRS_Control' */
    832}
    833
    834/* Output and update for referenced model: 'AHRSControl' */
    835void AHRSControl_AHRS_Control(const int16_T rtu_Pilot_theta_cmd, const int16_T
    836 rtu_Pilot_phi_cmd, const int16_T rtu_Pilot_r_cmd, const AHRS_Bus *rtu_AHRS1,
    837 const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T
    838 rty_actuator_commands[3])
    839{
    840 AHRS_Bus rtb_TmpSignalConversionAtAHRS_c;
    841 AHRS_Bus rtb_TmpSignalConversionAtAHRS_i;
    842 AHRS_Bus rtb_TmpSignalConversionAtAHRS_e;
    843 real_T rtb_AHRS_voter_caller[5];
    844
    845 /* Outputs for Function Call SubSystem: '<Root>/AHRS_Control' */
    846 /* SignalConversion generated from: '<S1>/AHRS1' */
    847 rtb_TmpSignalConversionAtAHRS_c = *rtu_AHRS1;
    848
    849 /* SignalConversion generated from: '<S1>/AHRS2' */
    850 rtb_TmpSignalConversionAtAHRS_i = *rtu_AHRS2;
    851
    852 /* SignalConversion generated from: '<S1>/AHRS3' */
    853 rtb_TmpSignalConversionAtAHRS_e = *rtu_AHRS3;
    854
    855 /* FunctionCaller: '<S1>/AHRS_voter_caller' */
    856 AHRSControl_AHRS_voter(&rtb_TmpSignalConversionAtAHRS_c,
    857 &rtb_TmpSignalConversionAtAHRS_i, &rtb_TmpSignalConversionAtAHRS_e,
    858 rtb_AHRS_voter_caller);
    859
    860 /* SignalConversion generated from: '<S1>/actuator_commands' incorporates:
    861 * FunctionCaller: '<S1>/AHRSLoopCtrl_caller'
    862 * SignalConversion generated from: '<S1>/Pilot_phi_cmd'
    863 * SignalConversion generated from: '<S1>/Pilot_r_cmd'
    864 * SignalConversion generated from: '<S1>/Pilot_theta_cmd'
    865 */
    866 AHRSControl_AHRSLoopCtrl(rtu_Pilot_theta_cmd, rtu_Pilot_phi_cmd,
    867 rtu_Pilot_r_cmd, rtb_AHRS_voter_caller, rty_actuator_commands);
    868
    869 /* End of Outputs for SubSystem: '<Root>/AHRS_Control' */
    870}
    871
    872/* Model initialize function */
    873void AHRSControl_initialize(const char_T **rt_errorStatus)
    874{
    875 RT_MODEL_AHRSControl_T *const AHRSControl_M = &(AHRSControl_MdlrefDW.rtm);
    876
    877 /* Registration code */
    878
    879 /* initialize error status */
    880 rtmSetErrorStatusPointer(AHRSControl_M, rt_errorStatus);
    881}
    882
    883/*
    884 * File trailer for generated code.
    885 *
    886 * [EOF]
    887 */
    888
    +
    + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_codegen_rpt.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_codegen_rpt.html new file mode 100644 index 0000000..c0700ec --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_codegen_rpt.html @@ -0,0 +1,33 @@ + + + +AHRSControl Code Generation Report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_coderassumptions.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_coderassumptions.html new file mode 100644 index 0000000..08731fb --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_coderassumptions.html @@ -0,0 +1,377 @@ + + + +Coder Assumptions for 'AHRSControl' + + + + +

    +Coder Assumptions for 'AHRSControl' +

    +
    +
    + +
    +

    +C Language Configuration for Intel->x86-32 (Windows32) Target Hardware +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +32 +
    +BitPerSizeT + +32 +
    +BitPerPtrDiffT + +32 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Configuration for Development Computer +

    + + + + + + +
    +

    +Expected values are used only if the code has been compiled with PORTABLE_WORDSIZES defined, i.e. when you run a SIL simulation with PortableWordSizes set to 'on'. +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +64 +
    +BitPerSizeT + +64 +
    +BitPerPtrDiffT + +64 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Standard +

    + + + + + + +
    +

    +Zero initialization code has been optimized for model 'AHRSControl'. +

    +

    + + + + + + + +
    +Initial value of a global integer variable is zero + +True +
    + +

    +

    +If the assumption is not correct, remove the optimization through the Configuration Parameters > Code Generation > Optimization settings. Alternatively, configure your target environment to make the assumption hold. +

    + +
    +

    +Floating-Point Numbers +

    + + + + + + +
    +

    +Code generation is configured to support floating-point numbers, therefore your target environment might perform subnormal number calculations. +

    +

    + + + + + + + + + + + + +
    +Flush-to-zero computed subnormal values (FTZ) + +False +
    +Flush-to-zero incoming subnormal values (DAZ) + +False +
    + +

    +

    +If the assumptions are not correct, subnormal numbers might cause mismatches between model and generated code simulation results. For more information see, Subnormal Number Performance. +

    + +
    + + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_contents.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_contents.html new file mode 100644 index 0000000..2ec2745 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_contents.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Contents + + +
    + + +
    + +Summary + + +
    + +Subsystem Report + + +
    + +Traceability Report + + +
    + +Static Code Metrics Report + + +
    + +Code Replacements Report + + +
    + +Coder Assumptions + + +
    +
    + + + + + + + + + + + + + + + + + +
    + +Generated Code + + +
    + + + + + + + + + + + + +
    +[-] + +Model files +
    + + + + + + + + + + + + +
    + +AHRSControl.c + + +
    + +AHRSControl.h + + +
    + +
    + +
    + + + + + + + + + + + + +
    +[-] + +Data files +
    + + + + + + + + +
    + +AHRSControl_data.c + + +
    + +
    + +
    + + + + + + + + + + + + +
    +[+] + +Shared files (3) +
    + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_data_c.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_data_c.html new file mode 100644 index 0000000..e3fe0e3 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_data_c.html @@ -0,0 +1,110 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: AHRSControl_data.c
    7 *
    8 * Code generated for Simulink model 'AHRSControl'.
    9 *
    10 * Model version : 1.131
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:50:39 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#include "AHRSControl.h"
    23
    24/* Constant parameters (default storage) */
    25const ConstP_AHRSControl_T AHRSControl_ConstP = {
    26 /* Expression: [2.395,-0.3609,-0.002145,0.808700,-0.0205;;]
    27 * Referenced by: '<S8>/Gain'
    28 */
    29 { 2.395, -0.3609, -0.002145, 0.8087, -0.0205 },
    30
    31 /* Expression: [;-0.1427,-1.115,0.04573,-0.04318,-0.1007;]
    32 * Referenced by: '<S9>/Gain'
    33 */
    34 { -0.1427, -1.115, 0.04573, -0.04318, -0.1007 },
    35
    36 /* Expression: [;;-0.02792,-0.02229,-2.25,-0.06152,0.03151]
    37 * Referenced by: '<S10>/Gain'
    38 */
    39 { -0.02792, -0.02229, -2.25, -0.06152, 0.03151 }
    40};
    41
    42/*
    43 * File trailer for generated code.
    44 *
    45 * [EOF]
    46 */
    47
    +
    + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_h.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_h.html new file mode 100644 index 0000000..2ef96e8 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_h.html @@ -0,0 +1,438 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: AHRSControl.h
    7 *
    8 * Code generated for Simulink model 'AHRSControl'.
    9 *
    10 * Model version : 1.131
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:50:39 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#ifndef RTW_HEADER_AHRSControl_h_
    23#define RTW_HEADER_AHRSControl_h_
    24#include <math.h>
    25#include "AHRS_Bus.h"
    26#ifndef AHRSControl_COMMON_INCLUDES_
    27# define AHRSControl_COMMON_INCLUDES_
    28#include "rtwtypes.h"
    29#include "rtw_continuous.h"
    30#include "rtw_solver.h"
    31#endif /* AHRSControl_COMMON_INCLUDES_ */
    32
    33/* Child system includes */
    34#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    35#include "AHRSControl_AHRS_Control.h"
    36#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    37
    38#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    39#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    40
    41#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    42#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    43
    44#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    45#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    46
    47#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    48#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    49
    50#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    51#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    52
    53#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    54#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    55
    56#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    57#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    58
    59#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    60#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    61
    62#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    63#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    64
    65#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    66#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    67
    68#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    69#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    70
    71#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    72#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    73
    74#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    75#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    76
    77#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    78#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    79
    80/* Model Code Variants */
    81
    82/* Forward declaration for rtModel */
    83typedef struct tag_RTM_AHRSControl_T RT_MODEL_AHRSControl_T;
    84
    85/* Block signals and states (default storage) for model 'AHRSControl' */
    86#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    87
    88typedef struct {
    89 real_T Integrator2; /* '<S14>/Integrator2' */
    90 real_T Integrator1; /* '<S13>/Integrator1' */
    91 real_T Integrator; /* '<S12>/Integrator' */
    92 real_T Integrator2_DSTATE; /* '<S14>/Integrator2' */
    93 real_T Integrator1_DSTATE; /* '<S13>/Integrator1' */
    94 real_T Integrator_DSTATE; /* '<S12>/Integrator' */
    95 real_T UnitDelay_DSTATE; /* '<S10>/Unit Delay' */
    96 real_T UnitDelay_DSTATE_f; /* '<S9>/Unit Delay' */
    97 real_T UnitDelay_DSTATE_j; /* '<S8>/Unit Delay' */
    98} DW_AHRSControl_f_T;
    99
    100#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    101
    102#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    103
    104/* Real-time Model Data Structure */
    105struct tag_RTM_AHRSControl_T {
    106 const char_T **errorStatus;
    107};
    108
    109#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    110
    111/* Constant parameters (default storage) */
    112typedef struct {
    113 /* Expression: [2.395,-0.3609,-0.002145,0.808700,-0.0205;;]
    114 * Referenced by: '<S8>/Gain'
    115 */
    116 real_T Gain_Gain[5];
    117
    118 /* Expression: [;-0.1427,-1.115,0.04573,-0.04318,-0.1007;]
    119 * Referenced by: '<S9>/Gain'
    120 */
    121 real_T Gain_Gain_d[5];
    122
    123 /* Expression: [;;-0.02792,-0.02229,-2.25,-0.06152,0.03151]
    124 * Referenced by: '<S10>/Gain'
    125 */
    126 real_T Gain_Gain_b[5];
    127} ConstP_AHRSControl_T;
    128
    129#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    130
    131typedef struct {
    132 RT_MODEL_AHRSControl_T rtm;
    133} MdlrefDW_AHRSControl_T;
    134
    135#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    136
    137#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    138
    139/* Constant parameters (default storage) */
    140extern const ConstP_AHRSControl_T AHRSControl_ConstP;
    141
    142#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    143
    144extern void AHRSControl_Disable(void);
    145extern void AHRSControl_AHRS_Control(const int16_T rtu_Pilot_theta_cmd, const
    146 int16_T rtu_Pilot_phi_cmd, const int16_T rtu_Pilot_r_cmd, const AHRS_Bus
    147 *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T
    148 rty_actuator_commands[3]);
    149
    150/* Model reference registration function */
    151extern void AHRSControl_initialize(const char_T **rt_errorStatus);
    152
    153#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    154
    155extern MdlrefDW_AHRSControl_T AHRSControl_MdlrefDW;
    156
    157#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    158
    159#ifndef AHRSControl_MDLREF_HIDE_CHILD_
    160
    161/* Block states (default storage) */
    162extern DW_AHRSControl_f_T AHRSControl_DW;
    163
    164#endif /*AHRSControl_MDLREF_HIDE_CHILD_*/
    165
    166/*-
    167 * The generated code includes comments that allow you to trace directly
    168 * back to the appropriate location in the model. The basic format
    169 * is <system>/block_name, where system is the system number (uniquely
    170 * assigned by Simulink) and block_name is the name of the block.
    171 *
    172 * Use the MATLAB hilite_system command to trace the generated code back
    173 * to the model. For example,
    174 *
    175 * hilite_system('<S3>') - opens system 3
    176 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
    177 *
    178 * Here is the system hierarchy for this model
    179 *
    180 * '<Root>' : 'AHRSControl'
    181 * '<S1>' : 'AHRSControl/AHRS_Control'
    182 * '<S2>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl'
    183 * '<S3>' : 'AHRSControl/AHRS_Control/AHRS_voter'
    184 * '<S4>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop'
    185 * '<S5>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop'
    186 * '<S6>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/Filter'
    187 * '<S7>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/ModelInfo'
    188 * '<S8>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback'
    189 * '<S9>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback'
    190 * '<S10>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback'
    191 * '<S11>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/ModelInfo'
    192 * '<S12>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop'
    193 * '<S13>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop'
    194 * '<S14>' : 'AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop'
    195 * '<S15>' : 'AHRSControl/AHRS_Control/AHRS_voter/Avg_Value'
    196 * '<S16>' : 'AHRSControl/AHRS_Control/AHRS_voter/Mid_Value'
    197 * '<S17>' : 'AHRSControl/AHRS_Control/AHRS_voter/ModelInfo'
    198 * '<S18>' : 'AHRSControl/AHRS_Control/AHRS_voter/Single_Value'
    199 */
    200
    201/*-
    202 * Requirements for '<Root>': AHRSControl
    203 */
    204#endif /* RTW_HEADER_AHRSControl_h_ */
    205
    206/*
    207 * File trailer for generated code.
    208 *
    209 * [EOF]
    210 */
    211
    +
    + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_metrics.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_metrics.html new file mode 100644 index 0000000..7c84f5f --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_metrics.html @@ -0,0 +1,18 @@ + + + +Static Code Metrics Report + + + + +

    +Static Code Metrics Report +

    +
    + +
    +Static Code Metrics report is not generated. On the Configuration Parameters > Code Generation > Report pane, select Generate static code metrics. On the model diagram window, select Code > C/C++ Code > Code Generation Report > Open Model Report or rebuild the model. + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_replacements.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_replacements.html new file mode 100644 index 0000000..ee20b9a --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_replacements.html @@ -0,0 +1,18 @@ + + + +Code replacements in AHRSControl + + + + +

    +Code replacements in AHRSControl +

    +
    + +
    +Code replacements report not generated. Select 'Summarize which blocks triggered code replacements'. + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_subsystems.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_subsystems.html new file mode 100644 index 0000000..97512d2 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_subsystems.html @@ -0,0 +1,339 @@ + + + +Non-virtual subsystems in AHRSControl + + + + +

    +Non-virtual subsystems in AHRSControl +

    +
    + +
    +
    + +
    +

    +1. Code Mapping [hide] +

    + + + + + + + + + + +
    +

    +The following table:

      +
    • +provides a mapping from the non-virtual subsystems in the model to functions or reusable functions in the generated code and +
    • +
    • +notes exceptions that caused some non-virtual subsystems to not reuse code even though they were assigned a function packaging setting ('Function packaging' entry on the Subsystem Block Dialog) of 'Auto' or 'Reusable function'. +
    • + +
    + +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Subsystem + + + + +Reuse Setting + + + + +Reuse Outcome + + + + +Outcome Diagnostic + + +
    +<S6> + +Function + +Function(S6) + +normal +
    +<S8> + +Function + +Function(S8) + +normal +
    +<S9> + +Function + +Function(S9) + +normal +
    +<S10> + +Function + +Function(S10) + +normal +
    +<S4> + +Function + +Function(S4) + +normal +
    +<S12> + +Function + +Function(S12) + +normal +
    +<S13> + +Function + +Function(S13) + +normal +
    +<S14> + +Function + +Function(S14) + +normal +
    +<S5> + +Function + +Function(S5) + +normal +
    +<S2> + +Function + +Function(S2) + +normal +
    +<S15> + +Function + +Function(S15) + +normal +
    +<S16> + +Function + +Function(S16) + +normal +
    +<S18> + +Function + +Function(S18) + +normal +
    +<S3> + +Function + +Function(S3) + +normal +
    +<S1> + +Function + +Function(S1) + +normal +
    + +
    +

    +2. Code Reuse Exceptions [hide] +

    + + + + + + + + + + +
    +

    +The following section provides details on each exception that caused a non-virtual subsystem with a function packaging setting of

      +
    • +'Auto' to become an inlined code segment, +
    • +
    • +'Auto' to become a non-reusable function without arguments, or +
    • +
    • +'Reusable function' to become a non-reusable function without arguments. +
    • + +
    +Note:This section does not report graphically identical non-virtual subsystems marked as 'Auto' that were not reused due to differences in their functional properties (such as dimensions, datatypes, work vectors, parameters, etc.). You may identify reasons for non-reuse in such cases by inspecting the differences in the functional attributes of the subsystems in the model or in the inlined generated code. +

    + +
    +
    No reuse exception in model +
    + + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_survey.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_survey.html new file mode 100644 index 0000000..85efc41 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_survey.html @@ -0,0 +1,177 @@ + + + +Code Generation Report for 'AHRSControl' + + + + +

    +Code Generation Report for 'AHRSControl' +

    +
    + +
    +
    + +
    +

    +Model Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + +
    +Author + +bpotter +
    +Last Modified By + +super +
    +Model Version + +1.131 +
    +
    + +Configuration settings at time of code generation + + +

    + +
    +

    +Code Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +System Target File + +ert.tlc +
    +Hardware Device Type + +Intel->x86-32 (Windows32) +
    +Simulink Coder Version + +9.3 (R2020a) 18-Nov-2019 +
    +Timestamp of Generated Source Code + +Thu Jul 16 18:50:39 2020 +
    + + + +
    +Type of Build + +Exported Model Reference +
    +Objectives Specified + +Execution efficiency, RAM efficiency +
    + +

    + +
    +

    +Additional Information +

    + + + + + + +
    + + + + + + + +
    +Code Generation Advisor + +Not run +
    + +
    + + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_trace.html b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_trace.html new file mode 100644 index 0000000..133978f --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_trace.html @@ -0,0 +1,21 @@ +Traceability Report for AHRSControl + + +

    Eliminated / Virtual Blocks

    Block NameComment
    <S1>/AHRS_Control

    TriggerPort

    <S2>/AHRSLoopCtrl

    TriggerPort

    <S3>/AHRS_voter

    TriggerPort

    <S3>/BusSelector

    BusSelector

    <S3>/BusSelector1

    BusSelector

    <S3>/BusSelector2

    BusSelector

    <S3>/Constant

    Not traceable

    <S3>/ModelInfo

    Masked SubSystem

    <S3>/Mux

    Mux

    <S3>/Mux1

    Mux

    <S3>/Mux2

    Mux

    <S4>/Heli_inner_loop

    TriggerPort

    <S4>/ModelInfo

    Masked SubSystem

    <S4>/Mux3

    Mux

    <S5>/Heli_outer_loop

    TriggerPort

    <S5>/Demux1

    Demux

    <S5>/ModelInfo

    Masked SubSystem

    <S5>/Selector

    Selector

    <S6>/Filter

    TriggerPort

    <S7>/EmptySubsystem

    Empty SubSystem

    <S8>/pitch_feedback

    TriggerPort

    <S9>/roll_feedback

    TriggerPort

    <S10>/yaw_feedback

    TriggerPort

    <S11>/EmptySubsystem

    Empty SubSystem

    <S12>/Pitch_loop

    TriggerPort

    <S13>/Roll_loop

    TriggerPort

    <S14>/Yaw_loop

    TriggerPort

    <S15>/f

    TriggerPort

    <S15>/Constant

    Not traceable

    <S16>/f

    TriggerPort

    <S17>/EmptySubsystem

    Empty SubSystem

    <S18>/f

    TriggerPort

    <S18>/Constant

    Not traceable

    Traceable Simulink Blocks / Stateflow Objects / MATLAB Functions

    Root system: AHRSControl

    Object NameCode Location
    <Root>/AHRS_ControlAHRSControl.c:822, 823, 831, 845, 869

    Subsystem: AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/ModelInfo

    No traceable objects in this Subsystem.

    Subsystem: AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/ModelInfo

    No traceable objects in this Subsystem.

    Subsystem: AHRSControl/AHRS_Control/AHRS_voter/ModelInfo

    No traceable objects in this Subsystem.

    \ No newline at end of file diff --git a/src/validation/slprj/ert/AHRSControl/html/AHRSControl_traceInfo.js b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_traceInfo.js new file mode 100644 index 0000000..fe42388 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/AHRSControl_traceInfo.js @@ -0,0 +1,423 @@ +function RTW_rtwnameSIDMap() { + this.rtwnameHashMap = new Array(); + this.sidHashMap = new Array(); + this.rtwnameHashMap[""] = {sid: "AHRSControl"}; + this.sidHashMap["AHRSControl"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:172"}; + this.sidHashMap["AHRSControl:172"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:226"}; + this.sidHashMap["AHRSControl:226"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:59"}; + this.sidHashMap["AHRSControl:59"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:110"}; + this.sidHashMap["AHRSControl:110"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:130"}; + this.sidHashMap["AHRSControl:130"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:339"}; + this.sidHashMap["AHRSControl:339"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:117"}; + this.sidHashMap["AHRSControl:117"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:352"}; + this.sidHashMap["AHRSControl:352"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:360"}; + this.sidHashMap["AHRSControl:360"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:368"}; + this.sidHashMap["AHRSControl:368"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:145"}; + this.sidHashMap["AHRSControl:145"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:293"}; + this.sidHashMap["AHRSControl:293"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:283"}; + this.sidHashMap["AHRSControl:283"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:286"}; + this.sidHashMap["AHRSControl:286"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:63"}; + this.sidHashMap["AHRSControl:63"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:81"}; + this.sidHashMap["AHRSControl:81"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:90"}; + this.sidHashMap["AHRSControl:90"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "AHRSControl:95"}; + this.sidHashMap["AHRSControl:95"] = {rtwname: ""}; + this.rtwnameHashMap["/AHRS_Control"] = {sid: "AHRSControl:172"}; + this.sidHashMap["AHRSControl:172"] = {rtwname: "/AHRS_Control"}; + this.rtwnameHashMap["/AHRS_Control"] = {sid: "AHRSControl:180"}; + this.sidHashMap["AHRSControl:180"] = {rtwname: "/AHRS_Control"}; + this.rtwnameHashMap["/AHRSLoopCtrl"] = {sid: "AHRSControl:226"}; + this.sidHashMap["AHRSControl:226"] = {rtwname: "/AHRSLoopCtrl"}; + this.rtwnameHashMap["/AHRSLoopCtrl_caller"] = {sid: "AHRSControl:238"}; + this.sidHashMap["AHRSControl:238"] = {rtwname: "/AHRSLoopCtrl_caller"}; + this.rtwnameHashMap["/AHRS_voter"] = {sid: "AHRSControl:59"}; + this.sidHashMap["AHRSControl:59"] = {rtwname: "/AHRS_voter"}; + this.rtwnameHashMap["/AHRS_voter_caller"] = {sid: "AHRSControl:251"}; + this.sidHashMap["AHRSControl:251"] = {rtwname: "/AHRS_voter_caller"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "AHRSControl:181"}; + this.sidHashMap["AHRSControl:181"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "AHRSControl:182"}; + this.sidHashMap["AHRSControl:182"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "AHRSControl:183"}; + this.sidHashMap["AHRSControl:183"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "AHRSControl:184"}; + this.sidHashMap["AHRSControl:184"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "AHRSControl:185"}; + this.sidHashMap["AHRSControl:185"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "AHRSControl:186"}; + this.sidHashMap["AHRSControl:186"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/actuator_commands"] = {sid: "AHRSControl:187"}; + this.sidHashMap["AHRSControl:187"] = {rtwname: "/actuator_commands"}; + this.rtwnameHashMap["/AHRSLoopCtrl"] = {sid: "AHRSControl:232"}; + this.sidHashMap["AHRSControl:232"] = {rtwname: "/AHRSLoopCtrl"}; + this.rtwnameHashMap["/Heli_inner_loop"] = {sid: "AHRSControl:110"}; + this.sidHashMap["AHRSControl:110"] = {rtwname: "/Heli_inner_loop"}; + this.rtwnameHashMap["/Heli_inner_loop_caller"] = {sid: "AHRSControl:214"}; + this.sidHashMap["AHRSControl:214"] = {rtwname: "/Heli_inner_loop_caller"}; + this.rtwnameHashMap["/Heli_outer_loop"] = {sid: "AHRSControl:130"}; + this.sidHashMap["AHRSControl:130"] = {rtwname: "/Heli_outer_loop"}; + this.rtwnameHashMap["/Heli_outer_loop_caller"] = {sid: "AHRSControl:224"}; + this.sidHashMap["AHRSControl:224"] = {rtwname: "/Heli_outer_loop_caller"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "AHRSControl:240"}; + this.sidHashMap["AHRSControl:240"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "AHRSControl:241"}; + this.sidHashMap["AHRSControl:241"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "AHRSControl:242"}; + this.sidHashMap["AHRSControl:242"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:243"}; + this.sidHashMap["AHRSControl:243"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/actuator_commands"] = {sid: "AHRSControl:244"}; + this.sidHashMap["AHRSControl:244"] = {rtwname: "/actuator_commands"}; + this.rtwnameHashMap["/AHRS_voter"] = {sid: "AHRSControl:245"}; + this.sidHashMap["AHRSControl:245"] = {rtwname: "/AHRS_voter"}; + this.rtwnameHashMap["/Avg_Value"] = {sid: "AHRSControl:63"}; + this.sidHashMap["AHRSControl:63"] = {rtwname: "/Avg_Value"}; + this.rtwnameHashMap["/Avg_Value_caller"] = {sid: "AHRSControl:268"}; + this.sidHashMap["AHRSControl:268"] = {rtwname: "/Avg_Value_caller"}; + this.rtwnameHashMap["/BusSelector"] = {sid: "AHRSControl:77"}; + this.sidHashMap["AHRSControl:77"] = {rtwname: "/BusSelector"}; + this.rtwnameHashMap["/BusSelector1"] = {sid: "AHRSControl:78"}; + this.sidHashMap["AHRSControl:78"] = {rtwname: "/BusSelector1"}; + this.rtwnameHashMap["/BusSelector2"] = {sid: "AHRSControl:79"}; + this.sidHashMap["AHRSControl:79"] = {rtwname: "/BusSelector2"}; + this.rtwnameHashMap["/Constant"] = {sid: "AHRSControl:80"}; + this.sidHashMap["AHRSControl:80"] = {rtwname: "/Constant"}; + this.rtwnameHashMap["/Mid_Value"] = {sid: "AHRSControl:81"}; + this.sidHashMap["AHRSControl:81"] = {rtwname: "/Mid_Value"}; + this.rtwnameHashMap["/Mid_Value_caller"] = {sid: "AHRSControl:258"}; + this.sidHashMap["AHRSControl:258"] = {rtwname: "/Mid_Value_caller"}; + this.rtwnameHashMap["/ModelInfo"] = {sid: "AHRSControl:90"}; + this.sidHashMap["AHRSControl:90"] = {rtwname: "/ModelInfo"}; + this.rtwnameHashMap["/MultiportSwitch"] = {sid: "AHRSControl:91"}; + this.sidHashMap["AHRSControl:91"] = {rtwname: "/MultiportSwitch"}; + this.rtwnameHashMap["/Mux"] = {sid: "AHRSControl:92"}; + this.sidHashMap["AHRSControl:92"] = {rtwname: "/Mux"}; + this.rtwnameHashMap["/Mux1"] = {sid: "AHRSControl:93"}; + this.sidHashMap["AHRSControl:93"] = {rtwname: "/Mux1"}; + this.rtwnameHashMap["/Mux2"] = {sid: "AHRSControl:94"}; + this.sidHashMap["AHRSControl:94"] = {rtwname: "/Mux2"}; + this.rtwnameHashMap["/Single_Value"] = {sid: "AHRSControl:95"}; + this.sidHashMap["AHRSControl:95"] = {rtwname: "/Single_Value"}; + this.rtwnameHashMap["/Single_Value_caller"] = {sid: "AHRSControl:278"}; + this.sidHashMap["AHRSControl:278"] = {rtwname: "/Single_Value_caller"}; + this.rtwnameHashMap["/Sum"] = {sid: "AHRSControl:108"}; + this.sidHashMap["AHRSControl:108"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "AHRSControl:246"}; + this.sidHashMap["AHRSControl:246"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "AHRSControl:247"}; + this.sidHashMap["AHRSControl:247"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "AHRSControl:248"}; + this.sidHashMap["AHRSControl:248"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:249"}; + this.sidHashMap["AHRSControl:249"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/Heli_inner_loop"] = {sid: "AHRSControl:208"}; + this.sidHashMap["AHRSControl:208"] = {rtwname: "/Heli_inner_loop"}; + this.rtwnameHashMap["/Filter"] = {sid: "AHRSControl:339"}; + this.sidHashMap["AHRSControl:339"] = {rtwname: "/Filter"}; + this.rtwnameHashMap["/Gain"] = {sid: "AHRSControl:116"}; + this.sidHashMap["AHRSControl:116"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/ModelInfo"] = {sid: "AHRSControl:117"}; + this.sidHashMap["AHRSControl:117"] = {rtwname: "/ModelInfo"}; + this.rtwnameHashMap["/Mux3"] = {sid: "AHRSControl:118"}; + this.sidHashMap["AHRSControl:118"] = {rtwname: "/Mux3"}; + this.rtwnameHashMap["/Saturation"] = {sid: "AHRSControl:123"}; + this.sidHashMap["AHRSControl:123"] = {rtwname: "/Saturation"}; + this.rtwnameHashMap["/pitch_feedback"] = {sid: "AHRSControl:352"}; + this.sidHashMap["AHRSControl:352"] = {rtwname: "/pitch_feedback"}; + this.rtwnameHashMap["/pitch_feedback_caller"] = {sid: "AHRSControl:380"}; + this.sidHashMap["AHRSControl:380"] = {rtwname: "/pitch_feedback_caller"}; + this.rtwnameHashMap["/roll_feedback"] = {sid: "AHRSControl:360"}; + this.sidHashMap["AHRSControl:360"] = {rtwname: "/roll_feedback"}; + this.rtwnameHashMap["/roll_feedback_caller"] = {sid: "AHRSControl:386"}; + this.sidHashMap["AHRSControl:386"] = {rtwname: "/roll_feedback_caller"}; + this.rtwnameHashMap["/yaw_feedback"] = {sid: "AHRSControl:368"}; + this.sidHashMap["AHRSControl:368"] = {rtwname: "/yaw_feedback"}; + this.rtwnameHashMap["/yaw_feedback_caller"] = {sid: "AHRSControl:392"}; + this.sidHashMap["AHRSControl:392"] = {rtwname: "/yaw_feedback_caller"}; + this.rtwnameHashMap["/theta_cmd"] = {sid: "AHRSControl:209"}; + this.sidHashMap["AHRSControl:209"] = {rtwname: "/theta_cmd"}; + this.rtwnameHashMap["/phi_cmd"] = {sid: "AHRSControl:210"}; + this.sidHashMap["AHRSControl:210"] = {rtwname: "/phi_cmd"}; + this.rtwnameHashMap["/r_cmd"] = {sid: "AHRSControl:211"}; + this.sidHashMap["AHRSControl:211"] = {rtwname: "/r_cmd"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:212"}; + this.sidHashMap["AHRSControl:212"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/actuator_commands"] = {sid: "AHRSControl:213"}; + this.sidHashMap["AHRSControl:213"] = {rtwname: "/actuator_commands"}; + this.rtwnameHashMap["/Heli_outer_loop"] = {sid: "AHRSControl:216"}; + this.sidHashMap["AHRSControl:216"] = {rtwname: "/Heli_outer_loop"}; + this.rtwnameHashMap["/Demux1"] = {sid: "AHRSControl:135"}; + this.sidHashMap["AHRSControl:135"] = {rtwname: "/Demux1"}; + this.rtwnameHashMap["/ModelInfo"] = {sid: "AHRSControl:145"}; + this.sidHashMap["AHRSControl:145"] = {rtwname: "/ModelInfo"}; + this.rtwnameHashMap["/Pitch_loop"] = {sid: "AHRSControl:293"}; + this.sidHashMap["AHRSControl:293"] = {rtwname: "/Pitch_loop"}; + this.rtwnameHashMap["/Pitch_loop_caller"] = {sid: "AHRSControl:316"}; + this.sidHashMap["AHRSControl:316"] = {rtwname: "/Pitch_loop_caller"}; + this.rtwnameHashMap["/Roll_loop"] = {sid: "AHRSControl:283"}; + this.sidHashMap["AHRSControl:283"] = {rtwname: "/Roll_loop"}; + this.rtwnameHashMap["/Roll_loop_caller"] = {sid: "AHRSControl:322"}; + this.sidHashMap["AHRSControl:322"] = {rtwname: "/Roll_loop_caller"}; + this.rtwnameHashMap["/Saturation"] = {sid: "AHRSControl:300"}; + this.sidHashMap["AHRSControl:300"] = {rtwname: "/Saturation"}; + this.rtwnameHashMap["/Saturation1"] = {sid: "AHRSControl:147"}; + this.sidHashMap["AHRSControl:147"] = {rtwname: "/Saturation1"}; + this.rtwnameHashMap["/Saturation2"] = {sid: "AHRSControl:148"}; + this.sidHashMap["AHRSControl:148"] = {rtwname: "/Saturation2"}; + this.rtwnameHashMap["/Scaling"] = {sid: "AHRSControl:301"}; + this.sidHashMap["AHRSControl:301"] = {rtwname: "/Scaling"}; + this.rtwnameHashMap["/Scaling1"] = {sid: "AHRSControl:150"}; + this.sidHashMap["AHRSControl:150"] = {rtwname: "/Scaling1"}; + this.rtwnameHashMap["/Scaling2"] = {sid: "AHRSControl:151"}; + this.sidHashMap["AHRSControl:151"] = {rtwname: "/Scaling2"}; + this.rtwnameHashMap["/Selector"] = {sid: "AHRSControl:152"}; + this.sidHashMap["AHRSControl:152"] = {rtwname: "/Selector"}; + this.rtwnameHashMap["/TypeConversion"] = {sid: "AHRSControl:303"}; + this.sidHashMap["AHRSControl:303"] = {rtwname: "/TypeConversion"}; + this.rtwnameHashMap["/TypeConversion1"] = {sid: "AHRSControl:160"}; + this.sidHashMap["AHRSControl:160"] = {rtwname: "/TypeConversion1"}; + this.rtwnameHashMap["/TypeConversion2"] = {sid: "AHRSControl:161"}; + this.sidHashMap["AHRSControl:161"] = {rtwname: "/TypeConversion2"}; + this.rtwnameHashMap["/Yaw_loop"] = {sid: "AHRSControl:286"}; + this.sidHashMap["AHRSControl:286"] = {rtwname: "/Yaw_loop"}; + this.rtwnameHashMap["/Yaw_loop_caller"] = {sid: "AHRSControl:405"}; + this.sidHashMap["AHRSControl:405"] = {rtwname: "/Yaw_loop_caller"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "AHRSControl:217"}; + this.sidHashMap["AHRSControl:217"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "AHRSControl:218"}; + this.sidHashMap["AHRSControl:218"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "AHRSControl:219"}; + this.sidHashMap["AHRSControl:219"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:220"}; + this.sidHashMap["AHRSControl:220"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/theta_cmd"] = {sid: "AHRSControl:221"}; + this.sidHashMap["AHRSControl:221"] = {rtwname: "/theta_cmd"}; + this.rtwnameHashMap["/phi_cmd"] = {sid: "AHRSControl:222"}; + this.sidHashMap["AHRSControl:222"] = {rtwname: "/phi_cmd"}; + this.rtwnameHashMap["/r_cmd"] = {sid: "AHRSControl:223"}; + this.sidHashMap["AHRSControl:223"] = {rtwname: "/r_cmd"}; + this.rtwnameHashMap["/Filter"] = {sid: "AHRSControl:347"}; + this.sidHashMap["AHRSControl:347"] = {rtwname: "/Filter"}; + this.rtwnameHashMap["/SumA21"] = {sid: "AHRSControl:341"}; + this.sidHashMap["AHRSControl:341"] = {rtwname: "/SumA21"}; + this.rtwnameHashMap["/SumB21"] = {sid: "AHRSControl:342"}; + this.sidHashMap["AHRSControl:342"] = {rtwname: "/SumB21"}; + this.rtwnameHashMap["/a_2_1"] = {sid: "AHRSControl:344"}; + this.sidHashMap["AHRSControl:344"] = {rtwname: "/a_2_1"}; + this.rtwnameHashMap["/s_1"] = {sid: "AHRSControl:345"}; + this.sidHashMap["AHRSControl:345"] = {rtwname: "/s_1"}; + this.rtwnameHashMap["/Signal"] = {sid: "AHRSControl:348"}; + this.sidHashMap["AHRSControl:348"] = {rtwname: "/Signal"}; + this.rtwnameHashMap["/prev_FeedbackSum"] = {sid: "AHRSControl:350"}; + this.sidHashMap["AHRSControl:350"] = {rtwname: "/prev_FeedbackSum"}; + this.rtwnameHashMap["/filtered_Signal"] = {sid: "AHRSControl:349"}; + this.sidHashMap["AHRSControl:349"] = {rtwname: "/filtered_Signal"}; + this.rtwnameHashMap["/FeedbackSum"] = {sid: "AHRSControl:351"}; + this.sidHashMap["AHRSControl:351"] = {rtwname: "/FeedbackSum"}; + this.rtwnameHashMap["/EmptySubsystem"] = {sid: "AHRSControl:117:1"}; + this.sidHashMap["AHRSControl:117:1"] = {rtwname: "/EmptySubsystem"}; + this.rtwnameHashMap["/pitch_feedback"] = {sid: "AHRSControl:376"}; + this.sidHashMap["AHRSControl:376"] = {rtwname: "/pitch_feedback"}; + this.rtwnameHashMap["/Filter_caller"] = {sid: "AHRSControl:357"}; + this.sidHashMap["AHRSControl:357"] = {rtwname: "/Filter_caller"}; + this.rtwnameHashMap["/Gain"] = {sid: "AHRSControl:356"}; + this.sidHashMap["AHRSControl:356"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Sum5"] = {sid: "AHRSControl:125"}; + this.sidHashMap["AHRSControl:125"] = {rtwname: "/Sum5"}; + this.rtwnameHashMap["/Unit Delay"] = {sid: "AHRSControl:359"}; + this.sidHashMap["AHRSControl:359"] = {rtwname: "/Unit Delay"}; + this.rtwnameHashMap["/theta_cmd"] = {sid: "AHRSControl:377"}; + this.sidHashMap["AHRSControl:377"] = {rtwname: "/theta_cmd"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:378"}; + this.sidHashMap["AHRSControl:378"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/ds"] = {sid: "AHRSControl:379"}; + this.sidHashMap["AHRSControl:379"] = {rtwname: "/ds"}; + this.rtwnameHashMap["/roll_feedback"] = {sid: "AHRSControl:382"}; + this.sidHashMap["AHRSControl:382"] = {rtwname: "/roll_feedback"}; + this.rtwnameHashMap["/Filter_caller"] = {sid: "AHRSControl:363"}; + this.sidHashMap["AHRSControl:363"] = {rtwname: "/Filter_caller"}; + this.rtwnameHashMap["/Gain"] = {sid: "AHRSControl:364"}; + this.sidHashMap["AHRSControl:364"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Sum5"] = {sid: "AHRSControl:365"}; + this.sidHashMap["AHRSControl:365"] = {rtwname: "/Sum5"}; + this.rtwnameHashMap["/Unit Delay"] = {sid: "AHRSControl:366"}; + this.sidHashMap["AHRSControl:366"] = {rtwname: "/Unit Delay"}; + this.rtwnameHashMap["/phi_cmd"] = {sid: "AHRSControl:383"}; + this.sidHashMap["AHRSControl:383"] = {rtwname: "/phi_cmd"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:384"}; + this.sidHashMap["AHRSControl:384"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/dc"] = {sid: "AHRSControl:385"}; + this.sidHashMap["AHRSControl:385"] = {rtwname: "/dc"}; + this.rtwnameHashMap["/yaw_feedback"] = {sid: "AHRSControl:388"}; + this.sidHashMap["AHRSControl:388"] = {rtwname: "/yaw_feedback"}; + this.rtwnameHashMap["/Filter_caller"] = {sid: "AHRSControl:371"}; + this.sidHashMap["AHRSControl:371"] = {rtwname: "/Filter_caller"}; + this.rtwnameHashMap["/Gain"] = {sid: "AHRSControl:372"}; + this.sidHashMap["AHRSControl:372"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Sum5"] = {sid: "AHRSControl:373"}; + this.sidHashMap["AHRSControl:373"] = {rtwname: "/Sum5"}; + this.rtwnameHashMap["/Unit Delay"] = {sid: "AHRSControl:374"}; + this.sidHashMap["AHRSControl:374"] = {rtwname: "/Unit Delay"}; + this.rtwnameHashMap["/r_cmd"] = {sid: "AHRSControl:389"}; + this.sidHashMap["AHRSControl:389"] = {rtwname: "/r_cmd"}; + this.rtwnameHashMap["/voted_fb"] = {sid: "AHRSControl:390"}; + this.sidHashMap["AHRSControl:390"] = {rtwname: "/voted_fb"}; + this.rtwnameHashMap["/dT"] = {sid: "AHRSControl:391"}; + this.sidHashMap["AHRSControl:391"] = {rtwname: "/dT"}; + this.rtwnameHashMap["/EmptySubsystem"] = {sid: "AHRSControl:145:1"}; + this.sidHashMap["AHRSControl:145:1"] = {rtwname: "/EmptySubsystem"}; + this.rtwnameHashMap["/Pitch_loop"] = {sid: "AHRSControl:313"}; + this.sidHashMap["AHRSControl:313"] = {rtwname: "/Pitch_loop"}; + this.rtwnameHashMap["/Gain"] = {sid: "AHRSControl:295"}; + this.sidHashMap["AHRSControl:295"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Gain1"] = {sid: "AHRSControl:331"}; + this.sidHashMap["AHRSControl:331"] = {rtwname: "/Gain1"}; + this.rtwnameHashMap["/Gain2"] = {sid: "AHRSControl:296"}; + this.sidHashMap["AHRSControl:296"] = {rtwname: "/Gain2"}; + this.rtwnameHashMap["/Integrator"] = {sid: "AHRSControl:297"}; + this.sidHashMap["AHRSControl:297"] = {rtwname: "/Integrator"}; + this.rtwnameHashMap["/Sum"] = {sid: "AHRSControl:399"}; + this.sidHashMap["AHRSControl:399"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Sum3"] = {sid: "AHRSControl:298"}; + this.sidHashMap["AHRSControl:298"] = {rtwname: "/Sum3"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "AHRSControl:314"}; + this.sidHashMap["AHRSControl:314"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/theta"] = {sid: "AHRSControl:400"}; + this.sidHashMap["AHRSControl:400"] = {rtwname: "/theta"}; + this.rtwnameHashMap["/theta_cmd"] = {sid: "AHRSControl:315"}; + this.sidHashMap["AHRSControl:315"] = {rtwname: "/theta_cmd"}; + this.rtwnameHashMap["/Roll_loop"] = {sid: "AHRSControl:319"}; + this.sidHashMap["AHRSControl:319"] = {rtwname: "/Roll_loop"}; + this.rtwnameHashMap["/Gain1"] = {sid: "AHRSControl:137"}; + this.sidHashMap["AHRSControl:137"] = {rtwname: "/Gain1"}; + this.rtwnameHashMap["/Gain2"] = {sid: "AHRSControl:332"}; + this.sidHashMap["AHRSControl:332"] = {rtwname: "/Gain2"}; + this.rtwnameHashMap["/Gain3"] = {sid: "AHRSControl:139"}; + this.sidHashMap["AHRSControl:139"] = {rtwname: "/Gain3"}; + this.rtwnameHashMap["/Integrator1"] = {sid: "AHRSControl:143"}; + this.sidHashMap["AHRSControl:143"] = {rtwname: "/Integrator1"}; + this.rtwnameHashMap["/Sum"] = {sid: "AHRSControl:401"}; + this.sidHashMap["AHRSControl:401"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Sum4"] = {sid: "AHRSControl:157"}; + this.sidHashMap["AHRSControl:157"] = {rtwname: "/Sum4"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "AHRSControl:320"}; + this.sidHashMap["AHRSControl:320"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/phi"] = {sid: "AHRSControl:402"}; + this.sidHashMap["AHRSControl:402"] = {rtwname: "/phi"}; + this.rtwnameHashMap["/phi_cmd"] = {sid: "AHRSControl:321"}; + this.sidHashMap["AHRSControl:321"] = {rtwname: "/phi_cmd"}; + this.rtwnameHashMap["/Yaw_loop"] = {sid: "AHRSControl:324"}; + this.sidHashMap["AHRSControl:324"] = {rtwname: "/Yaw_loop"}; + this.rtwnameHashMap["/Gain1"] = {sid: "AHRSControl:333"}; + this.sidHashMap["AHRSControl:333"] = {rtwname: "/Gain1"}; + this.rtwnameHashMap["/Gain4"] = {sid: "AHRSControl:140"}; + this.sidHashMap["AHRSControl:140"] = {rtwname: "/Gain4"}; + this.rtwnameHashMap["/Gain5"] = {sid: "AHRSControl:141"}; + this.sidHashMap["AHRSControl:141"] = {rtwname: "/Gain5"}; + this.rtwnameHashMap["/Integrator2"] = {sid: "AHRSControl:144"}; + this.sidHashMap["AHRSControl:144"] = {rtwname: "/Integrator2"}; + this.rtwnameHashMap["/Sum"] = {sid: "AHRSControl:403"}; + this.sidHashMap["AHRSControl:403"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Sum5"] = {sid: "AHRSControl:158"}; + this.sidHashMap["AHRSControl:158"] = {rtwname: "/Sum5"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "AHRSControl:325"}; + this.sidHashMap["AHRSControl:325"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/r"] = {sid: "AHRSControl:404"}; + this.sidHashMap["AHRSControl:404"] = {rtwname: "/r"}; + this.rtwnameHashMap["/r_cmd"] = {sid: "AHRSControl:326"}; + this.sidHashMap["AHRSControl:326"] = {rtwname: "/r_cmd"}; + this.rtwnameHashMap["/f"] = {sid: "AHRSControl:260"}; + this.sidHashMap["AHRSControl:260"] = {rtwname: "/f"}; + this.rtwnameHashMap["/Constant"] = {sid: "AHRSControl:70"}; + this.sidHashMap["AHRSControl:70"] = {rtwname: "/Constant"}; + this.rtwnameHashMap["/Gain"] = {sid: "AHRSControl:71"}; + this.sidHashMap["AHRSControl:71"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Sum"] = {sid: "AHRSControl:72"}; + this.sidHashMap["AHRSControl:72"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Switch"] = {sid: "AHRSControl:73"}; + this.sidHashMap["AHRSControl:73"] = {rtwname: "/Switch"}; + this.rtwnameHashMap["/Switch1"] = {sid: "AHRSControl:74"}; + this.sidHashMap["AHRSControl:74"] = {rtwname: "/Switch1"}; + this.rtwnameHashMap["/Switch2"] = {sid: "AHRSControl:75"}; + this.sidHashMap["AHRSControl:75"] = {rtwname: "/Switch2"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "AHRSControl:261"}; + this.sidHashMap["AHRSControl:261"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "AHRSControl:262"}; + this.sidHashMap["AHRSControl:262"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "AHRSControl:263"}; + this.sidHashMap["AHRSControl:263"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/AHRS1_Valid"] = {sid: "AHRSControl:264"}; + this.sidHashMap["AHRSControl:264"] = {rtwname: "/AHRS1_Valid"}; + this.rtwnameHashMap["/AHRS2_Valid"] = {sid: "AHRSControl:265"}; + this.sidHashMap["AHRSControl:265"] = {rtwname: "/AHRS2_Valid"}; + this.rtwnameHashMap["/AHRS3_Valid"] = {sid: "AHRSControl:266"}; + this.sidHashMap["AHRSControl:266"] = {rtwname: "/AHRS3_Valid"}; + this.rtwnameHashMap["/Avg_Value"] = {sid: "AHRSControl:267"}; + this.sidHashMap["AHRSControl:267"] = {rtwname: "/Avg_Value"}; + this.rtwnameHashMap["/f"] = {sid: "AHRSControl:253"}; + this.sidHashMap["AHRSControl:253"] = {rtwname: "/f"}; + this.rtwnameHashMap["/MinMax"] = {sid: "AHRSControl:85"}; + this.sidHashMap["AHRSControl:85"] = {rtwname: "/MinMax"}; + this.rtwnameHashMap["/MinMax1"] = {sid: "AHRSControl:86"}; + this.sidHashMap["AHRSControl:86"] = {rtwname: "/MinMax1"}; + this.rtwnameHashMap["/MinMax2"] = {sid: "AHRSControl:87"}; + this.sidHashMap["AHRSControl:87"] = {rtwname: "/MinMax2"}; + this.rtwnameHashMap["/MinMax3"] = {sid: "AHRSControl:88"}; + this.sidHashMap["AHRSControl:88"] = {rtwname: "/MinMax3"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "AHRSControl:254"}; + this.sidHashMap["AHRSControl:254"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "AHRSControl:255"}; + this.sidHashMap["AHRSControl:255"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "AHRSControl:256"}; + this.sidHashMap["AHRSControl:256"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/Mid_Value"] = {sid: "AHRSControl:257"}; + this.sidHashMap["AHRSControl:257"] = {rtwname: "/Mid_Value"}; + this.rtwnameHashMap["/EmptySubsystem"] = {sid: "AHRSControl:90:1"}; + this.sidHashMap["AHRSControl:90:1"] = {rtwname: "/EmptySubsystem"}; + this.rtwnameHashMap["/f"] = {sid: "AHRSControl:270"}; + this.sidHashMap["AHRSControl:270"] = {rtwname: "/f"}; + this.rtwnameHashMap["/Constant"] = {sid: "AHRSControl:102"}; + this.sidHashMap["AHRSControl:102"] = {rtwname: "/Constant"}; + this.rtwnameHashMap["/Sum"] = {sid: "AHRSControl:103"}; + this.sidHashMap["AHRSControl:103"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Switch"] = {sid: "AHRSControl:104"}; + this.sidHashMap["AHRSControl:104"] = {rtwname: "/Switch"}; + this.rtwnameHashMap["/Switch1"] = {sid: "AHRSControl:105"}; + this.sidHashMap["AHRSControl:105"] = {rtwname: "/Switch1"}; + this.rtwnameHashMap["/Switch2"] = {sid: "AHRSControl:106"}; + this.sidHashMap["AHRSControl:106"] = {rtwname: "/Switch2"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "AHRSControl:271"}; + this.sidHashMap["AHRSControl:271"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "AHRSControl:272"}; + this.sidHashMap["AHRSControl:272"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "AHRSControl:273"}; + this.sidHashMap["AHRSControl:273"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/AHRS1_Valid"] = {sid: "AHRSControl:274"}; + this.sidHashMap["AHRSControl:274"] = {rtwname: "/AHRS1_Valid"}; + this.rtwnameHashMap["/AHRS2_Valid"] = {sid: "AHRSControl:275"}; + this.sidHashMap["AHRSControl:275"] = {rtwname: "/AHRS2_Valid"}; + this.rtwnameHashMap["/AHRS3_Valid"] = {sid: "AHRSControl:276"}; + this.sidHashMap["AHRSControl:276"] = {rtwname: "/AHRS3_Valid"}; + this.rtwnameHashMap["/Single_Value"] = {sid: "AHRSControl:277"}; + this.sidHashMap["AHRSControl:277"] = {rtwname: "/Single_Value"}; + this.getSID = function(rtwname) { return this.rtwnameHashMap[rtwname];} + this.getRtwname = function(sid) { return this.sidHashMap[sid];} +} +RTW_rtwnameSIDMap.instance = new RTW_rtwnameSIDMap(); diff --git a/src/validation/slprj/ert/AHRSControl/html/css/coder_app.css b/src/validation/slprj/ert/AHRSControl/html/css/coder_app.css new file mode 100644 index 0000000..d47cf0e --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/css/coder_app.css @@ -0,0 +1,184 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +pre#code { + font-family: Consolas, Courier; + font-size: small; +} + +.ct { + font-style: italic; + color: #117755 +} /* comment */ +.pp { + font-weight:bold; + color: #992211 +} /* preprocessor */ +.kw, .br { + font-weight:bold; + color: #112266 +} /* keyword or brace */ +.dt { + font-weight:bold; + color: #112266 +} /* data type */ +.tk { + font-style: normal; + color: #112266 +} /* regular token */ +pre#code a.req { + text-decoration: none; + color: #112266 +} +pre#code a.req_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.req_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +pre#code a.blk { + text-decoration: none; +} +pre#code a.blk_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.blk_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +a.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight token */ +tr.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight row */ +a.hiliteToken, tr.hiliteToken, td.hiliteToken { + background-color: #ffff99; +} +.hiliteCurrentLine, tr.hiliteCurrentLine > td { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); + box-shadow: inset 0 1px 0 0 rgba(150, 12, 116, 0.25), inset 0 -1px 0 0 rgba(150, 12, 116, 0.25); +} +span.hiliteTotalLine { + font-style: normal; + color: #aff; +} +a.tk { + text-decoration: none; +} +a.tk:hover { + text-decoration: none; +} +a.active { + text-decoration: underline; +} +a.active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} /* hyperlink */ +table.code { + border: 0px +} +table.code td { + vertical-align: top; +} +table.code td.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} +table.code > tr:first { + text-align: right; +} /* hyperlink */ + +ul.popup_attrib_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.popup_attrib_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} +.highlighted { + background-color:yellow; +} +a:class1 { + color: -webkit-link; + text-decoration: underline; + cursor: hand; +} +.scroll +{ + height:80px; + overflow:scroll; + overflow-x:hidden; +} +div#popup_window { + position: absolute; + background-color: rgb(203,203,255); + border: solid 3px #ECECEC; + border-radius: 5px; + /* shadow box around the window*/ + -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + padding: 2px; +} +div#popup_window a { + text-decoration: none; + color: green; +} +div#popup_window a:hover { + cursor: pointer; + text-decoration: underline; + color: blue; +} +div#popup_window tr.selected { + background-color: #ffff99; +} +div#token_usage_nav { + border-bottom: 1px solid gray; +} +table#token_usage_details { + cellpadding: 100px; + table-layout:fixed; + border: 0px; +} +.token_usage_details_tabrow { + width: 40px; +} +table#token_usage_details td { + padding-right: 5em; + padding-left: 1em; +} +.token_usage_details_tabrow:hover { + background-color: gray; +} +.nav_table td.hidden { + display: none; +} +table#codeTbl tr td { + color: #112266 +} +table#codeTbl tr td { + padding-left: 10px; +} +table#codeTbl tr td:first-child { + font-style: italic; + color: #888888; + text-align: right; + padding-left:0px; +} + diff --git a/src/validation/slprj/ert/AHRSControl/html/define.js b/src/validation/slprj/ert/AHRSControl/html/define.js new file mode 100644 index 0000000..3f3f286 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/define.js @@ -0,0 +1,110 @@ +function CodeDefine() { +this.def = new Array(); +this.def["AHRSControl_MdlrefDW"] = {file: "AHRSControl_c.html",line:41,type:"var"}; +this.def["AHRSControl_DW"] = {file: "AHRSControl_c.html",line:44,type:"var"}; +this.def["AHRSControl_Filter"] = {file: "AHRSControl_c.html",line:84,type:"fcn"}; +this.def["AHRSControl_pitch_feedback"] = {file: "AHRSControl_c.html",line:109,type:"fcn"}; +this.def["AHRSControl_roll_feedback"] = {file: "AHRSControl_c.html",line:144,type:"fcn"}; +this.def["AHRSControl_yaw_feedback"] = {file: "AHRSControl_c.html",line:179,type:"fcn"}; +this.def["AHRSControl_Heli_inner_loop"] = {file: "AHRSControl_c.html",line:214,type:"fcn"}; +this.def["AHRSControl_Pitch_loop_Disable"] = {file: "AHRSControl_c.html",line:304,type:"fcn"}; +this.def["AHRSControl_Pitch_loop"] = {file: "AHRSControl_c.html",line:311,type:"fcn"}; +this.def["AHRSControl_Roll_loop_Disable"] = {file: "AHRSControl_c.html",line:348,type:"fcn"}; +this.def["AHRSControl_Roll_loop"] = {file: "AHRSControl_c.html",line:355,type:"fcn"}; +this.def["AHRSControl_Yaw_loop_Disable"] = {file: "AHRSControl_c.html",line:392,type:"fcn"}; +this.def["AHRSControl_Yaw_loop"] = {file: "AHRSControl_c.html",line:399,type:"fcn"}; +this.def["AHRSCon_Heli_outer_loop_Disable"] = {file: "AHRSControl_c.html",line:436,type:"fcn"}; +this.def["AHRSControl_Heli_outer_loop"] = {file: "AHRSControl_c.html",line:461,type:"fcn"}; +this.def["AHRSContro_AHRSLoopCtrl_Disable"] = {file: "AHRSControl_c.html",line:544,type:"fcn"}; +this.def["AHRSControl_AHRSLoopCtrl"] = {file: "AHRSControl_c.html",line:555,type:"fcn"}; +this.def["AHRSControl_Avg_Value"] = {file: "AHRSControl_c.html",line:591,type:"fcn"}; +this.def["AHRSControl_Mid_Value"] = {file: "AHRSControl_c.html",line:645,type:"fcn"}; +this.def["AHRSControl_Single_Value"] = {file: "AHRSControl_c.html",line:668,type:"fcn"}; +this.def["AHRSControl_AHRS_voter"] = {file: "AHRSControl_c.html",line:721,type:"fcn"}; +this.def["AHRSControl_Disable"] = {file: "AHRSControl_c.html",line:820,type:"fcn"}; +this.def["AHRSControl_AHRS_Control"] = {file: "AHRSControl_c.html",line:835,type:"fcn"}; +this.def["AHRSControl_initialize"] = {file: "AHRSControl_c.html",line:873,type:"fcn"}; +this.def["RT_MODEL_AHRSControl_T"] = {file: "AHRSControl_h.html",line:83,type:"type"}; +this.def["DW_AHRSControl_f_T"] = {file: "AHRSControl_h.html",line:98,type:"type"}; +this.def["ConstP_AHRSControl_T"] = {file: "AHRSControl_h.html",line:127,type:"type"}; +this.def["MdlrefDW_AHRSControl_T"] = {file: "AHRSControl_h.html",line:133,type:"type"}; +this.def["AHRSControl_ConstP"] = {file: "AHRSControl_data_c.html",line:25,type:"var"}; +this.def["AHRS_Bus"] = {file: "../../_sharedutils/html/AHRS_Bus_h.html",line:38,type:"type"}; +this.def["int8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:55,type:"type"}; +this.def["uint8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:56,type:"type"}; +this.def["int16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:57,type:"type"}; +this.def["uint16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:58,type:"type"}; +this.def["int32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:59,type:"type"}; +this.def["uint32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:60,type:"type"}; +this.def["real32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:61,type:"type"}; +this.def["real64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:62,type:"type"}; +this.def["real_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:68,type:"type"}; +this.def["time_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:69,type:"type"}; +this.def["boolean_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:70,type:"type"}; +this.def["int_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:71,type:"type"}; +this.def["uint_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:72,type:"type"}; +this.def["ulong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:73,type:"type"}; +this.def["ulonglong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:74,type:"type"}; +this.def["char_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:75,type:"type"}; +this.def["uchar_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:76,type:"type"}; +this.def["byte_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:77,type:"type"}; +this.def["int64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:78,type:"type"}; +this.def["uint64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:79,type:"type"}; +this.def["int8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:89,type:"type"}; +this.def["uint8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:90,type:"type"}; +this.def["int16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:91,type:"type"}; +this.def["uint16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:92,type:"type"}; +this.def["int32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:93,type:"type"}; +this.def["uint32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:94,type:"type"}; +this.def["int64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:95,type:"type"}; +this.def["uint64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:96,type:"type"}; +this.def["real32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:97,type:"type"}; +this.def["real64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:98,type:"type"}; +this.def["real_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:104,type:"type"}; +this.def["time_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:105,type:"type"}; +this.def["boolean_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:106,type:"type"}; +this.def["int_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:107,type:"type"}; +this.def["uint_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:108,type:"type"}; +this.def["ulong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:109,type:"type"}; +this.def["ulonglong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:110,type:"type"}; +this.def["char_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:111,type:"type"}; +this.def["uchar_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:112,type:"type"}; +this.def["byte_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:113,type:"type"}; +this.def["pointer_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:136,type:"type"}; +} +CodeDefine.instance = new CodeDefine(); +var testHarnessInfo = {OwnerFileName: "", HarnessOwner: "", HarnessName: "", IsTestHarness: "0"}; +var relPathToBuildDir = "../ert_main.c"; +var fileSep = "\\"; +var isPC = true; +function Html2SrcLink() { + this.html2SrcPath = new Array; + this.html2Root = new Array; + this.html2SrcPath["AHRSControl_c.html"] = "../AHRSControl.c"; + this.html2Root["AHRSControl_c.html"] = "AHRSControl_c.html"; + this.html2SrcPath["AHRSControl_h.html"] = "../AHRSControl.h"; + this.html2Root["AHRSControl_h.html"] = "AHRSControl_h.html"; + this.html2SrcPath["AHRSControl_data_c.html"] = "../AHRSControl_data.c"; + this.html2Root["AHRSControl_data_c.html"] = "AHRSControl_data_c.html"; + this.html2SrcPath["AHRSControl_AHRS_Control_h.html"] = "../AHRSControl_AHRS_Control.h"; + this.html2Root["AHRSControl_AHRS_Control_h.html"] = "../../_sharedutils/html/AHRSControl_AHRS_Control_h.html"; + this.html2SrcPath["AHRS_Bus_h.html"] = "../AHRS_Bus.h"; + this.html2Root["AHRS_Bus_h.html"] = "../../_sharedutils/html/AHRS_Bus_h.html"; + this.html2SrcPath["rtwtypes_h.html"] = "../rtwtypes.h"; + this.html2Root["rtwtypes_h.html"] = "../../_sharedutils/html/rtwtypes_h.html"; + this.getLink2Src = function (htmlFileName) { + if (this.html2SrcPath[htmlFileName]) + return this.html2SrcPath[htmlFileName]; + else + return null; + } + this.getLinkFromRoot = function (htmlFileName) { + if (this.html2Root[htmlFileName]) + return this.html2Root[htmlFileName]; + else + return null; + } +} +Html2SrcLink.instance = new Html2SrcLink(); +var fileList = [ +"AHRSControl_c.html","AHRSControl_h.html","AHRSControl_data_c.html","AHRSControl_AHRS_Control_h.html","AHRS_Bus_h.html","rtwtypes_h.html"]; diff --git a/src/validation/slprj/ert/AHRSControl/html/hilite_warning.png b/src/validation/slprj/ert/AHRSControl/html/hilite_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f013f815ae58acfcb9112170c871851d666b820f GIT binary patch literal 3014 zcmV;%3pw004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 + + + + + + + + + + + + +
    + + diff --git a/src/validation/slprj/ert/AHRSControl/html/js/coder_app.js b/src/validation/slprj/ert/AHRSControl/html/js/coder_app.js new file mode 100644 index 0000000..3c34823 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/js/coder_app.js @@ -0,0 +1,525 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +function queryByClassName(className, elem) { + if (!elem) elem = document.body; + if (typeof elem.querySelectorAll === "function") { + return elem.querySelectorAll("."+className); + } else { + return elem.getElementsByClass(className); + } +} + +function nav_token_usage_details(direction) { + var els = queryByClassName("token_usage_details_tabrow"); + var selectedIdx = 0; + var selectedClassName = "selected"; + for (selectedIdx; selectedIdx < els.length; selectedIdx++) { + if (els[selectedIdx].classList.contains(selectedClassName)) { + break; + } + } + var nextIdx = selectedIdx; + if (direction === -1 && selectedIdx > 0) { + nextIdx = selectedIdx-1; + } else if (direction === 1 && selectedIdx < els.length - 1) { + nextIdx = selectedIdx + 1; + } + if (nextIdx !== selectedIdx) { + els[selectedIdx].classList.remove(selectedClassName); + els[nextIdx].classList.add(selectedClassName); + els[nextIdx].scrollIntoView(alignWithTop=false); + } + return false; +} + +function tabrowClicked(event) { +} + +function popupOnload() { + var els = queryByClassName("token_usage_details_tabrow"); + for (var i=0; i" + + top.rtwGetFileName(link2Src) + ""; + var bodyNode = document.body; + bodyNode.insertBefore(link, bodyNode.firstElementChild); + } + top.updateHyperlinks(); + // update fileSelector frame + if (top.fileSelector) { + var o = top.fileSelector.document.getElementById('fileSelector'); + if (o) { + o.value = filename; + } + } + // add links to line numbers + var hasLineFlag = null; + if (top.TraceInfoLineFlag && top.TraceInfoLineFlag.instance) { + hasLineFlag = true; + } else { + hasLineFlag = false; + } + + if(hasLineFlag) { + var lines = queryByClassName("ln", codeElement); + var lineTraceFlag = top.TraceInfoLineFlag.instance.lineTraceFlag; + var lineNo = null; + for (var i=0; i= 0; --i) { + var childNode = trNode.childNodes[i]; + if (childNode.tagName.toUpperCase() === "TD") { + return childNode.childNodes; + } + } + return null; +} + +// see g1225075 +function fixBoxStyleFnHeaderLineWidths() { + // Match strings like "/**********/" which is the top line of + // a box-style function comment header + var reBoxHeader = /\/\*+\//; + + // Match strings like "' */" which is the contents of the text + // element originally generated in the report to pad the width of + // the line. + var rePadding = /'\s*\*\//; + + // All block identifier elements in the report page + blkLineElts = queryByClassName("blk"); + for (var i = 0; i < blkLineElts.length; ++i) { + var origPadding = blkLineElts[i].nextSibling; + if (origPadding.textContent.match(rePadding)) { + var spanElt = findParent(blkLineElts[i], { tagName: "span", className: "ct" }); + if (!spanElt) { + continue; + } + + // The numbered line in the report containing block identifier "i" + var tableRowElt = findParent(spanElt, { tagName: "tr" }); + if (!tableRowElt) { + continue; + } + + // Loop backward through table rows (i.e., report lines) looking + // for the "/***************/" start of the header. When found save + // its pixel width. Not actually the width of the itself but + // the span inside its last . This is will determine the real + // padding that is needed for proper alignment regardless of font + // or CKJ characters. + var targetWidth = 0; + var sanity = Number.MAX_VALUE; + var node = tableRowElt.previousSibling; + while (node && (sanity-- > 0)) { + var lastCellContents = getLastTableCellContents(node); + if (lastCellContents) { + if (lastCellContents.length === 0) { + break; + } + if (lastCellContents[0].textContent.match(reBoxHeader)) { + targetWidth = lastCellContents[0].offsetWidth; + break; + } + } + node = node.previousSibling; + } + + // If applying a new padding (i.e., targetWidth > 0), replace + // the original padding "' */' (a single text element) with + // two text elements and a span in between. The span will be the + // new pixel-accurate padding. + if (targetWidth > 0) { + var singleQuoteNode = document.createTextNode("'"); + var spacerNode = document.createElement('span'); + origPadding.textContent = "*/"; + origPadding.parentNode.insertBefore(spacerNode, origPadding); + origPadding.parentNode.insertBefore(singleQuoteNode, spacerNode); + + var padWidth = targetWidth - spanElt.offsetWidth; + spacerNode.style.display = 'inline-block'; + spacerNode.style.width = String(padWidth) + "px"; + spacerNode.style.height = '1em'; // cursor won't work w/o some height + spacerNode.style.cursor = 'text'; + } + } + } +} + +// the onload function for source file +function srcFileOnload() { + var codeElement = document.getElementById("codeTbl"); + var insertFunction = getInsertFunction(codeElement); + try { + var els = codeElement.getElementsByTagName("tr"); + for (var i = 0; i < els.length; i++) { + registerDelayedOnMouseOver(els[i], lineOnMouseIn, lineOnMouseOut); + } + updateToken(codeElement); + } catch (err) {}; + insertFunction(); + // add code to model hyperlinks for all tokens + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + // highlight the filename in the TOC frame + if (top.rtwreport_contents_frame && top.hiliteByFileName(top.rtwreport_document_frame.document.location.href)) { + // remove the highlights in the TOC frame if filename is hilite successfully + top.removeHiliteTOC(top.rtwreport_contents_frame); + } + + // annotate code with code coverage data + if (typeof rtwannotate === 'function') { + rtwannotate(filename.replace(/.html$/,"_cov.xml")); + } + + fixBoxStyleFnHeaderLineWidths(); + + // highlight token and row + if (top.RTW_TraceInfo.instance && top.RTW_TraceArgs.instance) { + var i; + // find the highlight file name + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(filename); + var ids=[], rows=[]; + if (typeof fileIdx !== "undefined") { + ids = top.RTW_TraceArgs.instance.getIDs(fileIdx); + rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + // highlight rows in file + for (i=0; i 0) + top.RTW_TraceInfo.instance.setInitLocation(filename,rows[0]); + else { + top.toggleNavSideBar("off"); + return; + } + } + + // display navigation side bar + if (top.rtwreport_nav_frame) top.rtwreport_nav_frame.location.reload(); + if (rows.length>0) { + top.toggleNavSideBar("on"); + top.toggleNavToolBar("on"); + } else { + top.toggleNavSideBar("off"); + } + } + top.scrollToLineBasedOnHash(document.location.hash); + function getHash() { + var loc; + var aHash=""; + var topDocObj = top.window.document; + // get the hash value from location. + loc = topDocObj.location; + loc = loc.search || loc.hash; + aHash = loc.substring(1); + aHash = decodeURI(aHash); + return aHash; + } +} + +function createPopup(filename, evt) { + var anchorObj = evt.currentTarget; + if (anchorObj.children.length > 0) + return; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var windowObj = top.getInspectWindow(); + var propObj = top.getInspectData(filename, anchorObj); + var navObj = top.getInspectLink(filename, location.pathname, anchorObj); + if (propObj) { + windowObj.appendChild(propObj); + windowObj.style.left = "0px"; + if (anchorObj.parentElement.nodeName === "TD" && + anchorObj.parentElement.parentElement.nodeName === "TR") { + anchorObj.parentElement.parentElement.lastChild.insertBefore(windowObj, + anchorObj.parentElement.parentElement.lastChild.lastChild.nextSibling); + var left = Math.min(evt.clientX , window.innerWidth - windowObj.scrollWidth - 30); + left = Math.max(0, left); + windowObj.style.left = "" + left + "px"; + } + } +}; + +function destroyPopup(anchorObj) { + var popWindow = document.getElementById("popup_window"); + if (popWindow) { + popWindow.parentElement.removeChild(popWindow); + } +}; diff --git a/src/validation/slprj/ert/AHRSControl/html/nav.html b/src/validation/slprj/ert/AHRSControl/html/nav.html new file mode 100644 index 0000000..64f68db --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/nav.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/navToolbar.html b/src/validation/slprj/ert/AHRSControl/html/navToolbar.html new file mode 100644 index 0000000..d07c72e --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/navToolbar.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/AHRSControl/html/rtwhilite.js b/src/validation/slprj/ert/AHRSControl/html/rtwhilite.js new file mode 100644 index 0000000..bb368a1 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/rtwhilite.js @@ -0,0 +1,2081 @@ +// Copyright 2006-2019 The MathWorks, Inc. + +// Class RTW_Hash ------------------------------------------------------------ +// Internal web browser doesn't change window.location.hash if the link points +// to the same page. +// RTW_Hash remembers the hash value when the page is loaded in the first time +// or a link is clicked. +// removeHiliteByHash cleans the high lighted elements according to the stored +// hash value +function RTW_Hash(aHash) { + if (aHash == null) { + this.fHash = ""; + } else { + this.fHash = aHash; + }; + + this.getHash = function() { + return this.fHash; + } + + this.setHash = function(aHash) { + this.fHash = aHash; + } +} + +RTW_Hash.instance = null; + +// Class RTW_TraceInfo -------------------------------------------------------- +function RTW_TraceInfo(aFileLinks) { + this.fFileLinks = aFileLinks; + this.fLines = new Array(); + this.fTotalLines = 0; // total number of highlighted lines + this.fNumLines = new Array(); + this.fFileIdxCache = new Array(); + this.fDisablePanel = false; + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + this.fCurrCodeNode = null; + this.getHtmlFileName = function(aIndex) { + if (aIndex < this.fFileLinks.length) { + var href = this.fFileLinks[aIndex].href; + return href.substring(href.lastIndexOf('/')+1); + } + } + this.getSrcFileName = function(aIndex) { + var name = this.getHtmlFileName(aIndex); + if (name) + name = RTW_TraceInfo.toSrcFileName(name); + return name; + } + this.getNumFileLinks = function() { + return this.fFileLinks.length; + } + this.setFileLinkColor = function(aIndex, aColor) { + var link = this.fFileLinks[aIndex]; + if (link && link.parentNode && link.parentNode.style) + link.parentNode.style.backgroundColor = aColor; + } + this.highlightFileLink = function(aIndex, aColor) { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, i == aIndex ? aColor : ""); + } + } + this.highlightCurrFileLink = function(aColor) { + this.highlightFileLink(this.fCurrFileIdx); + } + this.highlightLines = function(aCodeNode,aColor) { + this.fCurrCodeNode = aCodeNode; + var lines = this.fLines[this.getHtmlFileName(this.fCurrFileIdx)]; + if (lines && aCodeNode) { + for (var i = 0; i < lines.length; ++i) { + var lineObj = aCodeNode.childNodes[lines[i]-1]; + if (lineObj) + lineObj.style.backgroundColor=aColor; + } + } + } + this.getFileIdx = function(aFile) { + if (this.fFileIdxCache[aFile] != null) + return this.fFileIdxCache[aFile]; + for (var i = 0; i < this.fFileLinks.length; ++i) { + if (this.getHtmlFileName(i) == aFile) { + this.fFileIdxCache[aFile] = i; + return i; + } + } + return null; + } + this.getCurrFileIdx = function() { return this.fCurrFileIdx; } + this.setNumHighlightedLines = function(aFileIdx, aNumLines) { + this.fNumLines[aFileIdx] = aNumLines; + updateNumHighlightedLines(this.fFileLinks[aFileIdx], aNumLines); + } + this.getNumLines = function(aFileIdx) { + return this.fNumLines[aFileIdx] != null ? this.fNumLines[aFileIdx] : 0; + } + this.getNumLinesAll = function() { + var sum = 0; + var len = this.fNumLines.length; + for (var i = 0; i < len; ++i) { + sum += this.getNumLines(i); + } + return sum; + } + this.getPrevButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonPrev"); + else + return document.getElementById("rtwIdButtonPrev"); + } + this.getNextButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonNext"); + else + return document.getElementById("rtwIdButtonNext"); + } + this.getPanel = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdTracePanel"); + else + return document.getElementById("rtwIdTracePanel"); + } + this.removeHighlighting = function() { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, ""); + this.setNumHighlightedLines(i, 0); + } + // remove highlight and reset current code node + try { + if (this.fCurrCodeNode != null) + this.highlightLines(getCodeNode(),""); + } catch (e) {}; + this.fCurrCodeNode = null; + if (this.getPrevButton()) { this.getPrevButton().disabled = true; } + if (this.getNextButton()) { this.getNextButton().disabled = true; } + if (this.getPanel()) { this.getPanel().style.display = "none"; } + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + } + this.setCurrLineIdx = function(aLineIdx) { + this.fCurrLineIdx = aLineIdx; + } + this.getCurrLineIdx = function() { return this.fCurrLineIdx; } + this.setCurrent = function(aFileIdx, aLineIdx) { + this.fCurrFileIdx = aFileIdx; + var numLines = this.getNumLines(aFileIdx); + if (!numLines || aLineIdx >= numLines) + this.fCurrLineIdx = -1; + else + this.fCurrLineIdx = aLineIdx; + var allNumLines = this.getNumLinesAll(); + if (this.getPrevButton()) { + this.getPrevButton().disabled = (allNumLines <= 1 || !this.hasPrev()); + } + if (this.getNextButton()) { + this.getNextButton().disabled = (allNumLines <= 1 || !this.hasNext()); + } + if (this.getPanel() && !this.fDisablePanel) { + this.getPanel().style.display = 'block'; + } + } + this.setDisablePanel = function(aDisable) { + this.fDisablePanel = aDisable; + } + this.getPrevFileIdx = function() { + if (this.fCurrLineIdx > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx - 1; i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + // update the navigation bar state + this.updateNavState = function() { + if (this.getPrevButton()) + this.getPrevButton().disabled = !this.hasPrev(); + if (this.getNextButton()) + this.getNextButton().disabled = !this.hasNext(); + setTraceNumber(); + } + this.hasPrev = function() { + return this.getPrevFileIdx() != null; + } + this.getFirstFileIdx = function() { + for (var i = 0; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + } + this.getLastFileIdx = function() { + for (var i = this.getNumFileLinks(); i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + } + this.goFirst = function() { + this.fCurrFileIdx = this.getFirstFileIdx(); + this.fCurrLineIdx = 0; + this.updateNavState(); + } + this.goLast = function() { + this.fCurrFileIdx = this.getLastFileIdx();; + this.fCurrLineIdx = this.getNumLines(this.fCurrFileIdx) - 1; + this.updateNavState(); + } + this.goPrev = function() { + var fileIdx = this.getPrevFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + --this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = this.getNumLines(fileIdx) - 1; + } + this.updateNavState(); + } + this.getNextFileIdx = function() { + if (this.fCurrLineIdx < this.getNumLines(this.fCurrFileIdx) - 1 && this.getNumLines(this.fCurrFileIdx) > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx + 1; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + this.hasNext = function() { + return this.getNextFileIdx() != null; + } + this.goNext = function() { + var fileIdx = this.getNextFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + ++this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = 0; + } + this.updateNavState(); + } + this.setTotalLines = function(num) { + this.fTotalLines = num; + } + this.getTotalLines = function() { return this.fTotalLines;} + this.setLines = function(aFile, aLines) { + this.fLines[aFile] = aLines; + var index = this.getFileIdx(aFile); + if (index != null) + this.setNumHighlightedLines(index,aLines.length); + } + this.getLines = function(aFile) { + return this.fLines[aFile]; + } + // get current on focus line number + this.getCurrLine = function() { + var file = this.getHtmlFileName(this.getCurrFileIdx()); + var lines = this.fLines[file]; + var line = null; + if (lines) { + var line = lines[this.fCurrLineIdx]; + } + return line; + } + this.getHRef = function(aFileIdx, aLineIdx, offset) { + var file = this.getHtmlFileName(aFileIdx); + var lines = this.fLines[file]; + if (lines) { + var line = lines[aLineIdx]; + line = offset_line(line, offset); + file = file+"#"+line; + } + return file; + } + + this.getCurrentHRef = function(offset) { + return this.getHRef(this.fCurrFileIdx, this.fCurrLineIdx, offset); + } + this.setInitLocation = function(aFile, aLine) { + var fileIdx = this.getFileIdx(aFile); + var lineIdx = null; + if (fileIdx != null && aLine) { + var lines = this.getLines(aFile); + for (var i = 0; i < lines.length; ++i) { + if (lines[i] == aLine) { + lineIdx = i; + break; + } + } + } + if (fileIdx == null || lineIdx == null) + this.setCurrent(-1,-1); + else + this.setCurrent(fileIdx,lineIdx); + } +} + +// Static methods in RTW_TraceInfo + +RTW_TraceInfo.getFileLinks = function(docObj) { + var links; + if (docObj && docObj.getElementsByName) + links = docObj.getElementsByName("rtwIdGenFileLinks"); + return links ? links : new Array(); +} + +RTW_TraceInfo.toSrcFileName = function(aHtmlFileName) { + aHtmlFileName = aHtmlFileName.replace(/_c.html$/,".c"); + aHtmlFileName = aHtmlFileName.replace(/_h.html$/,".h"); + aHtmlFileName = aHtmlFileName.replace(/_cpp.html$/,".cpp"); + aHtmlFileName = aHtmlFileName.replace(/_hpp.html$/,".hpp"); + aHtmlFileName = aHtmlFileName.replace(/_cc.html$/,".hpp"); + return aHtmlFileName; +} + +RTW_TraceInfo.instance = null; + +// Class RTW_TraceArgs -------------------------------------------------------- +// file.c:10,20,30&file.h:10,20,30[&color=value] or +// sid=model:1[&color=value] +RTW_TraceArgs = function(aHash) { + this.fColor = null; + this.fFontSize = null; + this.fInitFile = null; + this.fInitLine = null; + this.fSID = null; + this.fFiles = new Array(); + this.fLines = new Array(); + this.fMessage = null; + this.fBlock = null; + this.fNumBlocks = 0; + this.fUseExternalBrowser = true; + this.fInStudio = false; + this.fModel2CodeSrc = null; + this.fInCodeTrace = false; + this.fTraceData = null; + this.fFileIdx = []; // filename to fileId + this.fRows = []; // highlighted rows indexed by fileId + this.fIDs = []; // highlighted IDs indexed by fileId + + this.hasSid = function() { + return !(this.fSID == null); + } + this.parseCommand = function(aHash) { + var args = new Array(); + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf('='); + if (sep != -1) { + var cmd = arg.substring(0,sep); + var opt = arg.substring(sep+1); + switch (cmd.toLowerCase()) { + case "color": + this.fColor = opt; + break; + case "fontsize": + this.fFontSize = opt; + break; + case "initfile": + this.fInitFile = RTW_TraceArgs.toHtmlFileName(opt); + break; + case "initline": + this.fInitLine = opt; + break; + case "msg": + this.fMessage = opt; + break; + case "block": + this.fBlock = unescape(opt); + break; + case "numblocks": + this.fNumBlocks = parseInt(opt); + break; + case "sid": + this.fSID = opt; + // convert sid to code location + break; + case "model2code_src": + // model2code_src from model or webview + this.fModel2CodeSrc = opt; + break; + case "useexternalbrowser": + this.fUseExternalBrowser = (opt=="true"); + break; + case "instudio": + this.fInStudio = (opt=="true"); + break; + case "incodetrace": + this.fInCodeTrace = (opt=="true"); + break; + case "tracedata": + this.fTraceData = decodeURI(opt); + break; + } + } + } + } + this.parseUrlHash = function(aHash) { + var rows, sep, assignSep; + if (aHash) { + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf(':'); + assignSep = arg.indexOf('='); + if (sep !== -1 && assignSep === -1) { + var fileLines = arg.split(':'); + var htmlFileName = RTW_TraceArgs.toHtmlFileName(fileLines[0]); + this.fFileIdx[htmlFileName] = i; + this.fFiles.push(htmlFileName); + if (fileLines[1]) { + rows = fileLines[1].split(','); + rows = uniqueRows(rows); + this.fLines.push(rows); + this.fRows[i] = rows; + } + } + } + if (this.fInitFile == null && this.fFiles.length > 0) { + this.fInitFile = this.fFiles[0]; + this.fInitLine = (this.fLines[0] == null ? -1 : this.fLines[0][0]); + } + } + } + this.parseUrlHash2 = function(aHash) { + aHash = decodeURI(aHash); + var rows; + var ids; + if (aHash && aHash.length > 0 && aHash[0] === "[") { + var input = eval(aHash); + var i; + var j; + // set highlight files from url + for (i=0; i 0 + && top.rtwreport_document_frame.location.href !== "about:blank" && forceReload !== true) { + updateHyperlinks(); + return; + } + + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; + + // redirect the page based on the url + var initPage = null; + if (RTW_TraceArgs.instance.getNumFiles()) { + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + RTW_TraceInfo.instance.removeHighlighting() + var numFiles = RTW_TraceArgs.instance.getNumFiles(); + var tLines = 0; + for (var i = 0; i < numFiles; ++i) { + RTW_TraceInfo.instance.setLines(RTW_TraceArgs.instance.getFile(i),RTW_TraceArgs.instance.getLines(i)); + tLines += RTW_TraceArgs.instance.getLines(i).length; + } + RTW_TraceInfo.instance.setTotalLines(tLines); + if (aPanel == false) { + RTW_TraceInfo.instance.setDisablePanel(true); + } + var initFile = RTW_TraceArgs.instance.getInitFile(); + RTW_TraceInfo.instance.setInitLocation(initFile,RTW_TraceArgs.instance.getInitLine()); + if (!hasInCodeTrace()) { + initPage = RTW_TraceInfo.instance.getCurrentHRef(); + } else { + initPage = initFile; + } + } else { + // catch error that document frame is in another domain + try { + var fileDocObj = top.rtwreport_document_frame.document; + if (fileDocObj.location && (!fileDocObj.location.href || fileDocObj.location.href == "about:blank")) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + var tracePage = tocDocObj.getElementById("rtwIdTraceability"); + if (summaryPage) { + initPage = summaryPage.href; + } else if (tracePage) { + initPage = tracePage; + } + } + } catch(e) {}; + } + if (RTW_TraceArgs.instance && RTW_TraceArgs.instance.fMessage) { + // display diagnostic message + var linkId = "rtwIdMsgFileLink"; + var msgFile = tocDocObj.getElementById(linkId); + if (msgFile && msgFile.style) { + msgFile.style.display = "block"; + // Highlight the background of msg link + tocHiliteById(linkId); + } + initPage = "rtwmsg.html"; + } + if (initPage) { + var is_same_page = false; + try { + var fileDocObj = top.rtwreport_document_frame.document; + is_same_page = isSamePage(fileDocObj.location.href, initPage); + } catch(e) {}; + if (document.getElementById("rtwreport_document_frame")) { + document.getElementById("rtwreport_document_frame").setAttribute("src", initPage); + } else { + top.rtwreport_document_frame.location.href = initPage; + } + + if (is_same_page) { + // Goto the same page won't trigger onload function. + // Call it manuelly to highligh new code location. + rtwFileOnLoad(top.rtwreport_document_frame.document); + } + } +} + +// Compare if href1(i.e. file:///path/file1.html#222) and href2(i.e.file2.html) are same pages. +// isSamePage return true if file1 == file2. +function isSamePage(href1, href2) { + var page1 = href1.substring(href1.lastIndexOf('/')+1,href1.lastIndexOf('.html')); + var page2 = href2.substring(href2.lastIndexOf('/')+1,href2.lastIndexOf('.html')); + return (page1 == page2); +} + +// Callback for main document loading +function rtwMainOnLoad() { + rtwMainOnLoadFcn(document,null,true, false); + var newUrl; + // modify history state to avoid reload from pressing back + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser() && + typeof window.history.replaceState === "function") { + if (window.location.search.length > 0) { + if (window.location.search.indexOf("loaded=true") === -1) { + newUrl = document.location.pathname + window.location.search + '&loaded=true'; + } else { + newUrl = document.location.pathname + window.location.search; + } + } else { + newUrl = document.location.pathname + window.location.search + '?loaded=true'; + } + window.history.replaceState("","",newUrl); + } +} + +// Helper function for traceability report +function rtwMainReload(location) { + // remove highlight filename and lines before reloading the page + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + rtwMainOnLoadFcn(document,location,true,true); +} + +function rtwMainReloadNoPanel(location) { + rtwMainOnLoadFcn(document,location,false,true); +} + +// Callback for hyperlink "Remove Highlighting" +function rtwRemoveHighlighting() { + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + if (rtwSrcFrame()) { + rtwSrcFrame().focus(); + } + if (hasInCodeTrace()) { + removeInCodeTraceHighlight(); + } +} + +// Display diagnostic message in document frame +function rtwDisplayMessage() { + var docObj = top.rtwreport_document_frame.document; + var msg = docObj.getElementById(RTW_TraceArgs.instance.fMessage); + if (!msg) { + msg = docObj.getElementById("rtwMsg_notTraceable"); + } + if (msg && msg.style) { + msg.style.display = "block"; // make message visible + var msgstr = msg.innerHTML; + // replace '%s' in message with block name + if (top.RTW_TraceArgs.instance) { + var sid = top.RTW_TraceArgs.instance.getBlock(); + if (sid) { + var block = sid; + if (top.RTW_rtwnameSIDMap && top.RTW_rtwnameSIDMap.instance && top.RTW_rtwnameSIDMap.instance.getRtwname(sid)) { + block = top.RTW_rtwnameSIDMap.instance.getRtwname(sid).rtwname; + block = block.replace("<", "<").replace(">", ">"); + } else { + block = sid; + } + if (block) { + msgstr = msgstr.replace("%s", block); + } + } + } + msg.innerHTML = msgstr; + } +} + +function updateHyperlinks() { + docObj = top.rtwreport_document_frame; + if (docObj && docObj.document) { + if (RTW_TraceArgs.instance === null || !RTW_TraceArgs.instance.getUseExternalBrowser()) { + var plain_link = docObj.document.getElementById("linkToText_plain"); + if (plain_link && plain_link.href && plain_link.href.indexOf("matlab:coder.internal.editUrlTextFile") === -1 ) { + plain_link.href = "matlab:coder.internal.editUrlTextFile('" + str2StrVar(plain_link.href) + "')"; + } + var alink = docObj.document.getElementById("linkToCS"); + var linkCmd = "matlab:coder.internal.viewCodeConfigsetFromReport"; + if (alink && alink.href && alink.href.indexOf(linkCmd) === -1) { + alink.href = linkCmd+ "('" + str2StrVar(alink.href) + "');"; + if(alink.style) { + alink.style.display = ""; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) { + hidden_link.style.display = "none"; + } + } + } + } else { + var alink = docObj.document.getElementById("linkToCS"); + if (alink && alink.style) { + alink.style.display = "none"; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) + hidden_link.style.display = ""; + } + if (typeof docObj.document.getElementsByClassName === "function") { + alinks = docObj.document.getElementsByClassName("callMATLAB"); + } else if (typeof docObj.document.getElementsByName === "function") { + alinks = docObj.document.getElementsByName("callMATLAB"); + } else { + alinks = []; + } + alink = docObj.document.getElementById("CodeGenAdvCheck"); + if (alink && alink.href && alink.href.indexOf("externalweb=true")===-1) { + alink.href = alink.href + "?externalweb=true"; + } + + if (typeof docObj.document.getElementsByName === "function") + var objs = docObj.document.getElementsByName("MATLAB_link"); + else + objs = []; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + objs[objIndex].style.display = "none"; + } + } + } + updateCode2ModelLinks(docObj.document); + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; +} + +function update_modelref_report_link(docObj) { + if (docObj.getElementsByName) { + var arg = ""; + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser()) { + arg = "?useExternalBrowser=false"; + } + if (RTW_TraceArgs && RTW_TraceArgs.instance && RTW_TraceArgs.instance.getModel2CodeSrc() != null) { + if (arg.length > 0) + arg = arg + "&model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + else + arg = "?model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + } + if (arg.length > 0) { + links = docObj.getElementsByName('external_link'); + for (var link_idx = 0; link_idx < links.length; ++link_idx) { + links[link_idx].href = links[link_idx].href + arg; + } + } + } +} + +function rtwResizeFrame(f) { + if (f) { + f.style.height = f.contentWindow.document.body.scrollHeight + "px"; + } +} + +function rtwPageOnLoad(id) { + // highlight toc entry + tocHiliteById(id); + // restore elements state + if (top && top.restoreState) { + if (top.rtwreport_contents_frame && top.rtwreport_contents_frame.document) + top.restoreState(top.rtwreport_contents_frame.document); + if (top.rtwreport_document_frame && top.rtwreport_document_frame.document) { + top.restoreState(top.rtwreport_document_frame.document); + rtwResizeFrame(top.rtwreport_document_frame.document.getElementById("rtwIdContentsIframe")); + } + } + updateHyperlinks(); +} + +// highlight code after changeSys +function rtwChangeSysCallback(sid) { + if (sid == "" || typeof RTW_Sid2UrlHash == "undefined" || !RTW_Sid2UrlHash.instance) + return false; + urlHash = RTW_Sid2UrlHash.instance.getUrlHash(sid); + if (urlHash != undefined) { + if (RTW_TraceArgs && RTW_TraceArgs.instance && + !RTW_TraceArgs.instance.getUseExternalBrowser()) + urlHash = (urlHash == "")? "?useExternalBrowser=false" : + urlHash+"&useExternalBrowser=false"; + rtwMainReload(urlHash, true); + return true; + } else { + // remove highlighting from traceinfo + rtwRemoveHighlighting(); + return false; + } +} + +function emlFileOnload(docObj) { + var loc = docObj.location; + if (loc.hash) { + var line = loc.hash.substring(1); + hiliteEmlLine(docObj, line); + } +} + +function hiliteEmlLine(docObj, line) { + var bgColor; + if (top.HiliteCodeStatus) + bgColor = "#66CCFF"; + else + bgColor = "#E8D152"; + // unhighlight + if (typeof docObj.HiliteLine != "undefined") { + trObj = docObj.getElementById("LN_"+docObj.HiliteLine); + if (trObj != null) { + trObj.style.backgroundColor = ""; + } + } + // hilighlight + trObj = docObj.getElementById("LN_"+line); + if (trObj != null) { + trObj.style.backgroundColor = bgColor; + docObj.HiliteLine = line; + } +} + +function emlLineOnClick(docObj,sid,line) { + if (top) { + top.HiliteCodeStatus = top.rtwChangeSysCallback(sid); + } + hiliteEmlLine(docObj, line); +} + +function updateCode2ModelLinks(docObj) { + var webviewFrame = top.document.getElementById('rtw_webviewMidFrame'); + var link2model = false; + var isTestHarness = false; + if (top.testHarnessInfo && top.testHarnessInfo.IsTestHarness === "1") { + isTestHarness = true; + } + if (webviewFrame || isTestHarness) { + if (webviewFrame && RTW_TraceArgs.instance && + (RTW_TraceArgs.instance.getModel2CodeSrc() !== "model" || + RTW_TraceArgs.instance.getUseExternalBrowser()) + ) { + hiliteCmd = "javascript:top.rtwHilite("; + } else { + hiliteCmd = "matlab:coder.internal.code2model("; + link2model = true; + } + var objs = docObj.getElementsByName('code2model'); + var o = null; + var str = ''; + var sid = ''; + var pattern = "'code2model',"; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + o = objs[objIndex]; + str = o.href.substring(o.href.indexOf('(')+1); + if (str.indexOf(pattern) > -1) { + str = str.substring(str.indexOf(pattern) + pattern.length); + } + o.href = hiliteCmd + str; + if (link2model && isTestHarness) { + sid = str.substring(0, str.indexOf(")")); + o.href = hiliteCmd + sid + ",'" + + top.testHarnessInfo.HarnessName+ "','" + + top.testHarnessInfo.HarnessOwner+ "','" + + top.testHarnessInfo.OwnerFileName + "');"; + } + } + } +} + +function rtwHilite(aBlock,aParentSID) { + if (aBlock.indexOf('-') !== -1) { + // remove sid range: model:sid:2-10 => model:sid + var s; + s = aBlock.split(':'); + if (s.length > 0) { + s = s[s.length-1]; + if (s.indexOf('-') != -1) { + aBlock = aBlock.substring(0, aBlock.lastIndexOf(':')); + } + } + } + if (typeof aParentSID === "undefined") { + if (top.RTW_SidParentMap && top.RTW_SidParentMap.instance) + aParentSID = top.RTW_SidParentMap.instance.getParentSid(aBlock); + else + aParentSID = aBlock; + } + top.HiliteCodeStatus = true; + + // webview 2 defines an interface api, call slwebview. + if (top.slwebview) { + // webview 2.x + if (top.codeToWebView(aBlock, aParentSID) === -1) { + alert("Cannot highlight block in model Web view. It may not be exported."); + } + + } else { + // webview 1.x + if (hiliteBlockForRTWReport(aBlock,aParentSID) === false) { + if (hiliteBlockForRTWReport(aBlock, aBlock) === false) { + rtwHilite(aParentSID); + } + } + } +} + +function str2StrVar(str) { + return str.replace(/'/g,"''"); +} +window.onload=rtwMainOnLoad; + +// handle incode traceability highlighting +function inCodeTraceOnload() { + var tocDocObj = top.rtwreport_contents_frame.document; + if (!top.RTW_TraceArgs.instance) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + top.rtwreport_document_frame.location.href = summaryPage.href; + return; + } + + var files = top.RTW_TraceArgs.instance.getFile(); + if (files.length === 0) { + if (top.RTW_TraceArgs.instance) { + var block = top.RTW_TraceArgs.instance.getBlock(); + block = block.replace("<", "<").replace(">", ">"); + } + top.rtwreport_document_frame.document.write("
    No traceability information for block " + block + ".
    "); + return; + }; + + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + + // update filelist with num of highlighted lines + var tocDoc = top.rtwreport_contents_frame.document; + var tLines = 0; + for (var i=0; i 1) { + var spanNodes = parent.getElementsByTagName('span'); + var len = spanNodes.length; + if (len > 0) { + if (aNumLines > 0) { + /* display number of matches */ + spanNodes.item(len-1).innerHTML = " ("+aNumLines+")"; + } else { + /* clear number of matches */ + spanNodes.item(len-1).innerHTML = ""; + } + } + } +} + +function setupInStudio() { + if (top.whole) { + var tmp = top.whole.rows.split(","); + tmp[0] = "35px"; + top.whole.rows = tmp.join(); + } + if (top.main) { + var tmp = top.main.cols.split(","); + tmp[0] = "0"; + top.main.cols = tmp.join(); + } + // add file list to source file + if (top.Html2SrcLink && top.Html2SrcLink.instance && top.fileSelector) { + var myDoc = top.fileSelector.document; + var fileSelector = myDoc.createElement("select"); + fileSelector.id = "fileSelector"; + fileSelector.onchange = top.fileSelectorOnChange; + var filename; + var filelink; + fileSelector.innerHTML += ""; + for (var i=0; i < top.fileList.length; i++) { + filename = top.fileList[i]; + filelink = top.Html2SrcLink.instance.getLink2Src(filename); + fileSelector.innerHTML += ""; + } + var bodyNode = myDoc.body; + bodyNode.insertBefore(fileSelector, bodyNode.firstElementChild); + var textNode = myDoc.createElement("span"); + textNode.innerHTML = "Goto: "; + bodyNode.insertBefore(textNode, fileSelector); + var myCss = myDoc.createElement("link"); + myCss.type = "text/css"; + myCss.rel = "stylesheet"; + myCss.href = "rtwreport.css"; + myDoc.getElementsByTagName("head")[0].appendChild(myCss); + } +} + +function toggleNavSideBar(val) { + if (top.main) { + var tmp = top.main.cols.split(","); + + if (val === "on") { + tmp[tmp.length-1] = "15px"; + } else { + tmp[tmp.length-1] = "0"; + } + top.main.cols = tmp.join(); + if (top.rtwreport_nav_frame) + top.rtwreport_nav_frame.location.href = "nav.html"; + } +}; + +function toggleNavToolBar(val) +{ + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp1 = midFrame.rows.split(","); + var frameIdx = getNavToolbarFrameIdx(); + if (val === "on") { + tmp1[frameIdx] = "40px"; + } else { + tmp1[frameIdx] = "0"; + } + midFrame.rows = tmp1.join(); + if (top.rtwreport_navToolbar_frame) { + top.rtwreport_navToolbar_frame.location.href = "navToolbar.html"; + } + } +}; + +var GlobalConfig = { + navHiliteColor: "#0000ff", + fileLinkHiliteColor: "#ffff99", + navToolbarBgcolor: "ivory", + offset: 10, + hiliteToken: false +}; +var NavSideBarState = { + calLineHeight: 0, + overLink: false, + linkTarget: null, + lastLinkTarget: null, + linkTargetIdx: 0 +} +function drawNavSideBar() { + var rectHeight = 1; + if (!top || !top.rtwreport_document_frame || !top.rtwreport_nav_frame) return; + + if (!top.RTW_TraceArgs.instance) return; + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(); + if (fileIdx === undefined) return; + var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + if (rows.length === 0) return; // no highlighted line + + var codeTbl = top.rtwreport_document_frame.document.getElementById("codeTbl"); + if (!codeTbl) return; // no code table + + var nRows = codeTbl.rows.length + 1; + var canvas = top.rtwreport_nav_frame.document.getElementById("canvas"); + canvas.width = top.rtwreport_nav_frame.innerWidth; + canvas.height = top.rtwreport_nav_frame.innerHeight-2; + NavSideBarState.calLineHeight = canvas.height/nRows; + if (canvas.getContext) { + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + // fill background + ctx.fillStyle = GlobalConfig.navToolbarBgcolor; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = GlobalConfig.navHiliteColor; + for (var i=0;i" + anchorObj.text + "
  • "+ + size + "
  • "; + } + propObj.appendChild(ulObj); + + return propObj; +} +function getInspectLink(file, pathname, anchorObj) { + var model = top.reportModel; + var tokenId = anchorObj.id; + var navObj = document.createElement("div"); + navObj.id = "token_usage_nav"; + ulObj = document.createElement("ul"); + ulObj.id = "token_nav_links"; + ulObj.className="popup_attrib_list"; + var srcFileName = RTW_TraceInfo.toSrcFileName(file); + var defObj; + if (top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]) { + defObj = top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]; + } else if (top.CodeDefine.instance.def[anchorObj.text]) { + defObj = top.CodeDefine.instance.def[anchorObj.text]; + } + var line = anchorObj.id.substring(0,anchorObj.id.indexOf("c")); + // link to model + if (top.TraceInfoFlag && top.TraceInfoFlag.instance && + top.TraceInfoFlag.instance.traceFlag[srcFileName+":"+anchorObj.id]) { + return null; + } + // link to def/decl + if (defObj) { + var filename = defObj.file.split(/\//); + filename = filename[filename.length-1]; + ulObj.innerHTML += "
  • " + anchorObj.text + " defined at " + RTW_TraceInfo.toSrcFileName(filename) + " line " + defObj.line + "
  • "; + } + navObj.appendChild(ulObj); + return navObj; +} + +var LastHiliteTokenId = null; +function rmHiliteClickedToken() { + if (LastHiliteTokenId) { + var o = top.rtwreport_document_frame.document.getElementById(LastHiliteTokenId); + if (o) { + o.className = o.className.replace("hiliteToken", ""); + } + } +} +function hiliteClickedToken(elem) { + rmHiliteClickedToken(); + LastHiliteTokenId = elem.id; + elem.className += " hiliteToken"; +} + +var initLine = null; +function scrollToInitLine() { + if (initLine) { + var lineElem = top.rtwreport_document_frame.document.getElementById(initLine); + if (lineElem) { + lineElem.scrollIntoView(); + } + } +} + +function scrollToLineBasedOnHash(hashValue) { + // move to the current highlight line if the hash is not empty + if (hashValue === "") { + if (top.RTW_TraceInfo.instance && top.RTW_TraceInfo.instance.getCurrLine() !== null) { + top.rtwreport_document_frame.document.location.href=top.RTW_TraceInfo.instance.getCurrentHRef(); + top.initLine = top.rtwreport_document_frame.document.location.hash.substr(1); + } + } else { + // scroll and hilite line + hashValue = hashValue.substr(1); + if (isNaN(hashValue)) { + // #fcn_name + var pattern = "+newPage"; + if (hashValue.indexOf(pattern) != -1) { + hashValue = hashValue.replace(pattern, ''); + var lineElem = top.rtwreport_document_frame.document.getElementById(hashValue); + initLine = hashValue; // save initLine in case the dom is updated later by anootation + if (lineElem) { + lineElem.scrollIntoView(); + addTagToCurrentLine(); + } + + } else { + var token = null; + pattern = ["var_", "fcn_", "type_"]; + for (var i =0; i < pattern.length; i++) { + if (hashValue.indexOf(pattern[i]) === 0) { + token = hashValue.substr(pattern[i].length); + break; + } + } + if (token !== null && top.CodeDefine && top.CodeDefine.instance) { + var addr; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var srcFileName; + if (top.RTW_TraceInfo) { + srcFileName = top.RTW_TraceInfo.toSrcFileName(filename); + } + if (top.CodeDefine.instance.def[srcFileName + ":" + token]) { + addr = top.CodeDefine.instance.def[srcFileName + ":" + token]; + } else { + addr = top.CodeDefine.instance.def[token]; + } + if (addr) { + hilite_line(addr.line); + } + } else { // token id like #line"c"#col + if (hashValue.indexOf("c") !== -1) { + hilite_line(hashValue.substr(0, hashValue.indexOf("c")), hashValue); + } + } + } + } else { // #line + hilite_line(hashValue); + } + } + return false; + // hilite line number and scroll with an offset + function hilite_line(line, tokenId) { + if (isNaN(line)) return; + if (!tokenId) { + tokenId = line; + } + var elem = top.rtwreport_document_frame.document.getElementById(tokenId); + hiliteClickedToken(elem); + initLine = offset_line(line); + scrollToInitLine(); + } +} + +function tokenLinkOnClick(event) { + var alink = event.currentTarget; + if (alink.pathname === top.rtwreport_document_frame.location.pathname) { + event.preventDefault(); + scrollToLineBasedOnHash(alink.hash); + } + return false; +} +function inspectToken(file, pathname, event) { + var height = "70px"; + // show inspect data + if (top.rtwreport_inspect_frame) { + var windowObj = getInspectWindow(); + var propObj = getInspectData(file, event.currentTarget); + var navObj = getInspectLink(file, pathname, event.currentTarget); + if (navObj === null) { + closeInspectWindow(); + return false; + } + if (propObj === null) { + height = "50px"; + } else { + windowObj.appendChild(propObj); + } + windowObj.appendChild(navObj); + var data = top.rtwreport_inspect_frame.document.getElementById("popup_window"); + if (data) { + data.parentNode.replaceChild(windowObj.cloneNode(true), data); + } + } + var offsetHeight = 0; + var docHeight = 0; + if (typeof(top.rtwInspectFrame().document.body.offsetHeight) === "number") { + offsetHeight = top.rtwInspectFrame().document.body.offsetHeight; + } + if (typeof(top.rtwInspectFrame().document.height) === "number") { + docHeight = top.rtwInspectFrame().document.height; + } + if (offsetHeight > 0) { + height = ""+offsetHeight+"px"; + } else if (docHeight > 0) { + height = ""+docHeight+"px"; + } + setInspectWindow(height); + return false; +} +function setInspectWindow(height) { + // show inspect code frame + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp = midFrame.rows.split(","); + tmp[getInspectFrameIdx()] = height; + midFrame.rows = tmp.join(); + } +} +function closeInspectWindow() { + setInspectWindow(0); + return false; +} + +// set the trace number in the navigation toolbar +function setTraceNumber() { + if (RTW_TraceInfo.instance) { + var aFrame = rtwNavToolbarFrame(); + if (aFrame) { + var node = aFrame.document.getElementById("rtwIdTraceNumber"); + // calculate current line index over total highlighted lines + var currNum = RTW_TraceInfo.instance.getCurrLineIdx(); + for (var idx=0;idx 0) + line = (line > GlobalConfig.offset ? line - GlobalConfig.offset : 1); + return line; +} + +function load_js(frame, file) { + var h = frame.document.getElementsByTagName("head")[0]; + var o = h.getElementsByTagName('script'); + for (var i=0;iBlock-to-Code Highlighting Message + + + +

    Block-to-Code Highlighting Message

    + + \ No newline at end of file diff --git a/src/validation/slprj/ert/AHRSControl/html/rtwreport.css b/src/validation/slprj/ert/AHRSControl/html/rtwreport.css new file mode 100644 index 0000000..54b994a --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/rtwreport.css @@ -0,0 +1,257 @@ +/* Copyright 2011-2016 The MathWorks, Inc. */ +body,p,table {font-family: calibri, verdana, sans-serif;} +button,.buton {font-family: calibri, verdana, sans-serif;} +button,.button {font-size: small;} +.small_font {font-size: small;} +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } +input { font-family: sans-serif, verdana, calibri; } +table { + background-color: #ffffff; + width: 100%; +} + +table.toc, table.button, table.panel { + border-style: none; +} + +/* LineNumber */ +.LN { + font-style: italic; + color: #888888; +} + +/* Comment */ +.CT { + font-style: italic; + color: #117755; +} + +/* PreProcessor */ +PP { + /* font-weight: bold; */ + color: #992211; +} + +/* Keyword */ +.KW { + /* font-weight: bold; */ + color: #0000FF; +} + +/* Datatype */ +.DT { + /* font-weight: bold; */ + color: #112266 +} + +.highlighted { + background-color: yellow; +} + +.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} + +input.search { + background-color: #ffffff; +} + +input.failedSearch { + background-color: #F78181; +} + +/* ensure that code2model links are comment green */ +a.code2model:link { + color: #117755; + font-style: italic; +} +a.code2model:visited{ + color: #117755; + font-style: italic; +} + +.toc td, .button td, .panel td { + border-style: none; + padding: 4px; +} + +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } + +/******* table *******/ +/* default table style */ +table.AltRow { + border-collapse: collapse; border: none; border-spacing: 0pt; + border-top: solid #4F81BD 1.0pt; border-bottom: solid #4F81BD 1.0pt; +} +table.AltRow th, table.AltRow td { padding: 2pt 8pt 2pt 2pt } +/* default alternating row style */ +table.AltRow tr.even td { background-color:#D3DFEE; border:none;} +table.AltRow tr.odd td { background-color:#FFFFFF; border:none;} +/* tr class="heading" */ +table.AltRow tr.heading td, table.AltRow th { + background-color:#FFFFFF; font-weight:bold; border:none; + border-bottom: solid #4F81BD 1.0pt; +} +/* table class="FirstColumn" */ +table.FirstColumn td:first-child { font-weight:bold } +/* table class="TotalRow" */ +table.TotalRow tr:last-child { font-weight:bold } +table.TotalRow tr:last-child td { border-top: solid #4F81BD 1.0pt } + +a.closeButton { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) ); + background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9'); + background-color:#f9f9f9; + -webkit-border-top-left-radius:20px; + -moz-border-radius-topleft:20px; + border-top-left-radius:20px; + -webkit-border-top-right-radius:20px; + -moz-border-radius-topright:20px; + border-top-right-radius:20px; + -webkit-border-bottom-right-radius:20px; + -moz-border-radius-bottomright:20px; + border-bottom-right-radius:20px; + -webkit-border-bottom-left-radius:20px; + -moz-border-radius-bottomleft:20px; + border-bottom-left-radius:20px; + text-indent:0; + border:2px solid #dcdcdc; + display:inline-block; + color:#454143; + font-family:Arial; + font-size:15px; + font-weight:bold; + font-style:normal; + height:20px; + line-height:20px; + width:20px; + text-decoration:none; + text-align:center; + cursor: pointer; +} +a.closeButton:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) ); + background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9', endColorstr='#f9f9f9'); + background-color:#e9e9e9; +} +a.closeButton:active { + position:relative; + top:1px; +} + +.button { + -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; + -webkit-border-top-left-radius:5px; + -moz-border-radius-topleft:5px; + border-top-left-radius:5px; + -webkit-border-top-right-radius:5px; + -moz-border-radius-topright:5px; + border-top-right-radius:5px; + -webkit-border-bottom-right-radius:5px; + -moz-border-radius-bottomright:5px; + border-bottom-right-radius:5px; + -webkit-border-bottom-left-radius:5px; + -moz-border-radius-bottomleft:5px; + border-bottom-left-radius:5px; + text-indent:0px; + border:1px solid #dcdcdc; + display:inline-block; + color:black; + font-family:Arial; + font-size:12px; + font-weight:bold; + font-style:normal; + height:12px; + line-height:12px; + width:45px; + text-decoration:none; + text-align:center; + text-shadow:1px 1px 0px #ffffff; +} +.button:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) ); + background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed'); + background-color:#dfdfdf; +}.button:active { + position:relative; + top:1px; +}.button:disabled { + color:#777777; +} + +ul.nav_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.nav_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} + +.nav_toolbar { + background-color: ivory; + margin-top: 0; +} + +.inspect_body { + margin: 0; + margin-bottom: 0; + display: inline; + vertical-align:middle; +} + +table.nav_table { + background-color: ivory; + border: none; + width: 100%; + display: inline; + vertical-align:middle; +} + +table#rtwIdTracePanel > tr > td { + white-space: nowrap; + table-layout:fixed; + vertical-align:middle; +} + +table.nav_table > button { + height: 20px; +} +select#fileSelector { + padding: 5px; + font-size: 16px; + line-height: 1; + border-radius: 0; + height: 34px; +} + +.treeTable table{ + table-layout: fixed; +} +.treeTable td:first-child > span{ + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + width: 100%; +} diff --git a/src/validation/slprj/ert/AHRSControl/html/rtwreport_utils.js b/src/validation/slprj/ert/AHRSControl/html/rtwreport_utils.js new file mode 100644 index 0000000..f58fb49 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/rtwreport_utils.js @@ -0,0 +1,92 @@ +// Copyright 2011-2013 The MathWorks, Inc. + + +function local_onload() { + if (typeof top.rtwreport_document_frame !== "undefined") { + var docObj = window.document; + var alink = docObj.getElementById("linkToText_plain"); + if (alink) { + alink.href = "matlab:coder.internal.editUrlTextFile('" + alink.href + "')"; + } + alink = docObj.getElementById("linkToCS"); + if (alink) { + alink.href = "matlab:coder.internal.viewCodeConfigsetFromReport('" + alink.href + "');"; + } + } +} + +var utils = (function() { + + // Load via Microsoft.XMLDOM--for older versions of IE + function loadXML_MSXMLDOM(filename, callback, async) { + if (navigator.appName == "Microsoft Internet Explorer") { + // Internet Explorer 5/6 + try { + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = async; + xmlDoc.onreadystatechange = function() { + if (xmlDoc.readyState == 4) { + callback(xmlDoc); + } + } + xmlDoc.load(filename); + return true; + } catch(e) { + } + } + return false; + } + + // Load via XMLHttpRequest + function loadXML_XHR(filename, callback, async) { + if (window.XMLHttpRequest) { + try { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + callback(this.responseXML); + } + } + xhr.open("GET", filename, async); + xhr.send(""); + return true; + } catch(e) { + if (navigator.appName === "Netscape" && e.code === 1012) { + // file not found: ignore + return true; + } + } + } + return false; + } + + return { + trimText: function(s) { + // In IE9, String.trim not present + if (s && s.trim) { + return s.trim(); + } + else { + return s; + } + }, + getText: function(elt) { + // In IE9, use 'text' property rather than 'textContent' + return elt.textContent ? elt.textContent : elt.text; + }, + loadXML: function(filename, callback, options) { + var async = !!options && typeof(options["async"]) !== "undefined" ? options.async : true; + if (!loadXML_XHR(filename, callback, async)) { + if (!loadXML_MSXMLDOM(filename, callback, async)) { + return false; + } + } + return true; + } + }; +})(); + +function code2model(sid) { + utils.loadXML("http://localhost:31415/matlab/feval/coder.internal.code2model?arguments=[\"" + sid + "\"]", function() {}); + //window.location.href = "matlab:coder.internal.code2model('" + sid + "')"; +} diff --git a/src/validation/slprj/ert/AHRSControl/html/rtwshrink.js b/src/validation/slprj/ert/AHRSControl/html/rtwshrink.js new file mode 100644 index 0000000..8e2affb --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/rtwshrink.js @@ -0,0 +1,210 @@ +// Copyright 2011-2017 The MathWorks, Inc. + +function RTW_STRUCT(prop, value) { + this.prop = prop; + if (typeof(value) == 'undefined') { + this.value = ""; + } else { + this.value = value; + } +} + +// initialize the cache when code generation report is first loaded +function RTW_BOOK() { + this.length = 0; + this.rtw_pages = new Array(); + this.getPage = function(file) { + return this.rtw_pages[file]; + }; + this.addPage = function(file) { + var page; + if (this.hasPage(file)) { + page = this.rtw_pages[file]; + } else { + page = new RTW_PAGE(file); + this.rtw_pages[file] = page; + } + return page; + }; + this.hasPage = function(file) { + return typeof(this.rtw_pages[file]) != 'undefined'; + }; + this.removePage = function(file) { + var tmp; + if (typeof(this.rtw_pages[file]) != 'undefined') { + tmp = this.rtw_pages[file]; + delete this.rtw_pages[file]; + this.length--; + } + return tmp; + }; +} + +if (!RTW_BOOK.instance) { + RTW_BOOK.instance = new RTW_BOOK(); +} + +function RTW_PAGE() { + this.length = 0; + this.items = new Array(); + this.pagename = ''; + if (arguments.length > 0 && typeof(arguments[1]) != 'undefined') { + this.pagename = arguments[1]; + } + + this.getItem = function(id) { + return this.items[id]; + }; + this.getItems = function() { + return this.items; + }; + this.addItem = function(id, value) { + var tmp; + if (typeof(value) != 'undefined') { + if (typeof(this.items[id]) != 'undefined') { + this.length++; + } else { + tmp = this.items[id]; + } + this.items[id] = value; + this.length++; + } + return tmp; + }; + this.hasItem = function(id) { + return typeof(this.items[id]) != 'undefined'; + }; + this.removeItem = function(id) { + var tmp; + if (typeof(this.items[id]) != 'undefined') { + tmp = this.items[id]; + delete this.items[id]; + this.length--; + } + return tmp; + }; +} + +function rtwTableShrink(doc, obj, id, isSymbol) { + var hide, hide_text, show, show_text; + if (isSymbol) { + hide = "[-]"; + hide_text = hide; + show = "[+]"; + show_text = show; + } else { + hide = "[hide]"; + hide_text = "[hide]"; + show = "[show]"; + show_text = "[show]"; + } + hide = "" + hide + ""; + show = "" + show + ""; + if (doc.getElementsByName) { + var o = doc.getElementsByName(id); + for (var oid = 0; oid < o.length; ++oid) { + if (o[oid].style.display === "none") { + o[oid].style.display = ""; + } else { + o[oid].style.display = "none"; + } + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } + + // IE supports innerText while other browsers support textContent + if (obj.textContent) { + var objText = obj.textContent; + } else { + var objText = obj.innerText; + } + + if (objText.toLowerCase() === show_text.toLowerCase()) { + obj.innerHTML = hide; + } else { + obj.innerHTML = show; + } + + if (addToPage) { + addToPage(doc, obj, 'innerHTML'); + } +} + +function rtwTableExpand(doc, controlObj, id) { + if (doc.getElementById) { + var obj = doc.getElementById(id); + if (obj && obj.style.display === "none") { + rtwTableShrink(doc, controlObj, id, false); + } + } +} + +function restoreState(docObj) { + var filename = docObj.location.href; + if (RTW_BOOK.instance && RTW_BOOK.instance.hasPage(filename)) { + var page = RTW_BOOK.instance.getPage(filename); + var items = page.getItems(); + var elem; + if (docObj.getElementsByName) { + for (var i in items) { + var o = docObj.getElementsByName(i); + for (var oid = 0; oid < o.length; ++oid) { + elem = o[oid]; + if (items[i].prop === 'display') { + if (elem.style.display === 'none') { + elem.style.display = ''; + } else { + elem.style.display = 'none'; + } + } else if (items[i].prop === 'innerHTML') { + elem.innerHTML = items[i].value; + } + } + } + } + } +} + +function addToPage(docObj, obj, prop) { + var filename = docObj.location.href; + if (RTW_BOOK.instance) { + var page; + if (RTW_BOOK.instance.hasPage(filename)) { + page = RTW_BOOK.instance.getPage(filename); + } else { + page = RTW_BOOK.instance.addPage(filename); + } + if (page.hasItem(obj.id)) { + page.removeItem(obj.id); + } else { + var my_struct; + if (prop === "display") { + my_struct = new RTW_STRUCT(prop, obj.style.display); + } else { + my_struct = new RTW_STRUCT(prop, obj.innerHTML); + } + page.addItem(obj.id, my_struct); + } + } +} + +function rtwSwitchView(doc, obj1, obj2) { + if (doc.getElementsByName) { + var o = doc.getElementsByName(obj1); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = "none"; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + var o = doc.getElementsByName(obj2); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = ""; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } +} diff --git a/src/validation/slprj/ert/AHRSControl/html/search.js b/src/validation/slprj/ert/AHRSControl/html/search.js new file mode 100644 index 0000000..816380f --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/search.js @@ -0,0 +1,559 @@ +// Copyright 2007-2012 The MathWorks, Inc. + +function createHighlightSpanStart(num) +{ + return ""; +} + +var str2pos; // This is a map between a tag stripped string and the original string. +function getTagStrippedStringAndMap(aString) +{ + var tagStrippedString = new String(); + + str2pos = new Array(); + + var inTag = false; + var inScript = false; + + for (var strPos = 0; strPos < aString.length; strPos++) { + if (inTag && aString.charAt(strPos) == '>') { + inTag = false; + if (inScript && (strPos > 8) && (aString.slice(strPos, strPos - 8) == '/script>')) { + inScript = false; + } + continue; + } else if (!inTag && aString.charAt(strPos) == '<') { + inTag = true; + if (!inScript && aString.slice(strPos, strPos + 7) == ' str2posprev+1) // we have jumped some text, so there must be a tag + { + // insert end tag + newText += highlightEndTag; + + // insert intermediate body text tags + newText += bodyText.slice(str2posprev+1, str2pos[cnt]); + + // insert start tag + newText += highlightStartTag; + } + newText += bodyText.charAt(str2pos[cnt]); + str2posprev=str2pos[cnt]; + } + + // insert end + newText += highlightEndTag; + return newText; + +} + +// check to see if the sequence at position 'i' in taglessString is actually in +// the middle of an escape sequence. We assume escape sequences follow the pattern +// &;. We check for  , <, > and & +function isInEscapedSequence(i, taglessString, searchTerm) +{ + var escapeSeq = / |<|>|&/gi; + var maxEscapeSeqLength = 6; + var startPos = 0; + var endPos = 0; + + // exit if the search term has an escape sequence inside it + if (escapeSeq.test(searchTerm)) { + return false; + } + + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + // go back in the string until we find an ampersand or we hit maxEscapeSeqLength characters + tempI = i; + var bFound = false; + while (tempI >= 0 && tempI > (i-maxEscapeSeqLength)) { + if (taglessString.charAt(tempI) == "&") { + startPos = tempI; + bFound = true; + break; + } + tempI = tempI-1; + + // if we hit a ';' in any position other than the first while searching + // for an ampersand, then we cannot be inside an escape sequence + if (tempI >= 0 && taglessString.charAt(tempI) == ";") { + return false; + } + } + if (!bFound) { + return false; + } + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + var subString = taglessString.substring(startPos, startPos + maxEscapeSeqLength); + return escapeSeq.test(subString); +} + +// Adds highlighting to bodyText around searchTerm. Case sensitivity is optional. +// hitCount is used to a) count the number of search matches and b) Generate unique +// name strings for each highlighting SPAN element. +function addHighlight(bodyText, searchTerm, caseSensitive, hitCount) +{ + var highlightStartTag = ""; + var highlightEndTag = ""; + + var newText = ""; + var i = 0; + var previ = 0; + var bodyTextUC = bodyText.toUpperCase(); + + if (caseSensitive) { + var taglessString = getTagStrippedStringAndMap(bodyText); + } else { + var taglessString = getTagStrippedStringAndMap(bodyTextUC); + } + + // escape the search term in case the user input '<' or '>' etc + searchTerm = escapeSpecialChars(searchTerm); + + if (!caseSensitive) { + var searchTermUC = searchTerm.toUpperCase(); + } + + // search for subsequent matches + while (true) { + if (caseSensitive) { + i = taglessString.indexOf(searchTerm, i); + } else { + i = taglessString.indexOf(searchTermUC, i); + } + if (i < 0) break; + + // we have a match! + + // make sure that the match is not inside an escaped sequence of text + // such as   + if (isInEscapedSequence(i, taglessString, searchTerm)) { + i=i+1; + continue; + } + + // insert highlight tags that cross tag boundaries + highlightStartTag = createHighlightSpanStart(hitCount); + hitCount = hitCount+1; + newText += insertHighlighting(bodyText, previ, i, searchTerm.length, highlightStartTag, highlightEndTag); + previ = str2pos[i+searchTerm.length-1]+1; + + i = i + searchTerm.length; + } + + newText += bodyText.slice(previ, bodyText.length); + return [newText, hitCount]; +} + +function removeHighlight(bodyText) +{ + // We use regular expressions here rather than a straight text search because + // some browsers actually insert double quotes and capitalize. Also, each highlight + // name is uniquely numbered in order of discovery + var highlightStartTag = //i; + var highlightEndTag = /<\/span>/i; + + var newText = ""; + + var startPatternFirstIndex = -1; + var startPatternLastIndex = -1; + + var endPatternFirstIndex = -1; + var endPatternLastIndex = -1; + + while (highlightStartTag.test(bodyText) === true) { + startPatternFirstIndex = bodyText.search(highlightStartTag); + newText += bodyText.substring(0, startPatternFirstIndex); + startPatternLastIndex = bodyText.indexOf('>', startPatternFirstIndex+1); + + bodyText = bodyText.substr(startPatternLastIndex+1); + endPatternFirstIndex = bodyText.search(highlightEndTag); + newText += bodyText.substring(0, endPatternFirstIndex); + endPatternLastIndex = endPatternFirstIndex+7; + + bodyText = bodyText.substr(endPatternLastIndex); + } + if (startPatternFirstIndex < 0) { + return bodyText; + } else { + return newText+bodyText; + } +} + +function removeHighlightInAllDocs() +{ + if (top) { + for (var i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + if (typeof currentDoc.body !== "undefined" && currentDoc.body !== null) + currentDoc.body.innerHTML=removeHighlight(currentDoc.body.innerHTML); + } + } + } +} + +function findInDoc(searchStringFromSubmitBox, doc, caseSensitive, hitCount) +{ + var searchBody = doc.body.innerHTML; + // if the document is empty, or the documents is invalid, return + if (!doc.body || typeof(searchBody) === "undefined") { + return [false, hitCount]; + } + + // inject highlighting code into html + var result = addHighlight(searchBody, searchStringFromSubmitBox, caseSensitive, hitCount); + doc.body.innerHTML = result[0]; + + return [true, result[1]]; +} + +var currentlyHighlightedHit; + +function getSpansByName(name) +{ + var allSpans = []; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + var highlightedSpans = currentDoc.getElementsByName(name); + if (highlightedSpans && highlightedSpans.length && highlightedSpans.length > 0) { + for (j = 0; j < highlightedSpans.length; j++) { + allSpans = allSpans.concat(highlightedSpans[j]); + } + } + } + } + return allSpans; +} + +function isVisibleElement(elementID) +{ + if (elementID) + return elementID.offsetWidth > 0 || elementID.offsetHeight > 0; + else + return false; +} + +function areAllSpansVisible(spans) +{ + isVisible = true; + for (i = 0; i < highlightedSpans.length; i++) { + isVisible = isVisible && isVisibleElement(highlightedSpans[i]); + } + return isVisible; +} + +function getNextVisible() +{ + var isVisible = false; + var foundVisible = false; + while (!isVisible) { + currentlyHighlightedHit = currentlyHighlightedHit + 1; + highlightedSpans = setCurrentSearchMatchIfVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + isVisible = true; + } else if (currentlyHighlightedHit < totalHits) { + continue; + } else { + // we have reached the end + isVisible = false; + currentlyHighlightedHit = 0; + highlightedSpans = null; + break; + } + } + + return highlightedSpans; +} + +function clearCurrentSearchMatch() +{ + // clear prior highlighting + spanName = "highlight" + currentlyHighlightedHit; + highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (highlightedSpans[i]) { + highlightedSpans[i].setAttribute("class", "highlighted"); + } + } + } +} + +function setCurrentSearchMatchIfVisible(hitNum){ + currentlyHighlightedHit = hitNum; + var spanName = "highlight" + currentlyHighlightedHit; + var highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (!isVisibleElement(highlightedSpans[i])) { + highlightedSpans = null; + break; + } + } + } + return highlightedSpans; +} + +// this takes in an option integer 'hitNum'. If not specified, it scrolls +// to the next hit +function scrollToNextHit(hitNum) +{ + var i = 0; + var found = false; + var spanName = ""; + var highlightedSpans; + var searchBox = findElement('searchTxtBox'); + + clearCurrentSearchMatch(); + + if (hitNum) { + // if a number is provided, use it + highlightedSpans = setCurrentSearchMatchIfVisible(hitNum); + } else { + // start working on next element to highlight + highlightedSpans = getNextVisible(); + } + + // we found the current + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + + // if highlightedSpans is invalid, then we did not find any valid, visible subsequent matches + // wrap to beginning or indicate no matches + } else { + // Element not found. Scroll to first visible element + currentlyHighlightedHit = 0; + var highlightedSpans = getNextVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + } else { + // there aren't any matches + searchBox.setAttribute("class", "failedSearch"); + } + } +} + +// find search box +function findElement(element) +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var elem = top.frames[i].document.getElementById(element); + if (elem) { + return elem; + } + } + } +} + +// Restore search term once form is submitted +function initSearchBox(strInitValue) +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.value = strInitValue; + } +} + +// Sets focus back on to the text box +function setFocusOnTxtBox() +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.focus(); + txtBox.select(); + } + return txtBox; +} + +var previousSearchString; +var totalHits; +function findInAllDocs(searchStringFromSubmitBox, caseSensitive) +{ + if (previousSearchString != searchStringFromSubmitBox) { + // If the search string has changed or a new page has been loaded, do a new search + var hitCount = 1; + var i = 0; + var success = false; + previousSearchString = searchStringFromSubmitBox; + + // start by removing traceinfo highlighting + rtwRemoveHighlighting(); + + // remove all previous search highlighting + removeHighlightInAllDocs(); + + // 1. Iterate through all frames in window and search + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + + // if we have no search term, restore + if (searchStringFromSubmitBox !== "") { + // search and highlight in all frames + var srchResult = findInDoc(searchStringFromSubmitBox, currentDoc, caseSensitive, hitCount); + hitCount = srchResult[1]; + totalHits = srchResult[1]; + } + } + + // 2. Restore search term once form is submitted and text highlighted + if (searchStringFromSubmitBox != "") { + strInitValue = searchStringFromSubmitBox; + } + initSearchBox(strInitValue); + + // 3. Scroll to the first hit encountered + scrollToNextHit(1); + + // 4. Set focus back to text box and select text + var txtBox = setFocusOnTxtBox(); + if (txtBox) { + txtBox.select(); + } + + } else { + // If the search string is the same, then scroll to the next + // hit if the hit is valid. Else wrap back. + scrollToNextHit(); + } + return false; +} + +// if the search box is empty, clear highlighting +function clearIfEmpty() +{ + txtBox = findElement('searchTxtBox'); + if (txtBox.value == "") { + txtBox.setAttribute("class", "search"); + removeHighlightInAllDocs(); + previousSearchString=""; + setFocusOnTxtBox(); + } +} + +function keyPressSwitchyard(keyPressEvent) +{ + var kc; + keyPressEvent = (keyPressEvent == null ? window.keyPressEvent : keyPressEvent); + + // typically IE does not support this + if (!keyPressEvent || (typeof keyPressEvent == "undefined")) { + return; + } + + if (keyPressEvent.keyCode) { + kc=keyPressEvent.keyCode; + } else if (keyPressEvent.which) { + kc=keyPressEvent.which; + } else { + return; + } + + // we do not care about the browser find appearing. If it does appear, then + // we are running an external browser and that is okay. + + // handle Ctrl-Key combinations + if (keyPressEvent.ctrlKey) { + switch (kc) { + case 70: // Ctrl-F + { + setFocusOnTxtBox(); + break; + } + + default: break; + } + } +} + +function installDocumentKeyPressHandler() +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + currentDoc.onkeydown = keyPressSwitchyard; + } + top.document.onkeydown = keyPressSwitchyard; + + // This also clears search related highlighting + removeHighlightInAllDocs(); + currentlyHighlightedHit = 0; + if (previousSearchString) initSearchBox(previousSearchString); + previousSearchString = ""; +} + +// This function is a onresize callback for the rtwreport_contents_frame +// It is used to dynamically resize the searchbox based on the size of the frame. +function setWidthDynamic(frameID, elementID, extraSpace, minSize) +{ + var frame = document.getElementById(frameID); + + // sanity check input args + if (frame && extraSpace > 0 && minSize > 0) { + var frameWidth = frame.scrollWidth; + var newSize = extraSpace + minSize + 40; // 40 is the extra whitespace + var element = findElement(elementID); + if (element) + { + if (frameWidth < newSize) { + element.style.width = minSize; + } else { + element.style.width = frameWidth - extraSpace - 40; + } + } + } +} diff --git a/src/validation/slprj/ert/AHRSControl/html/spinner.gif b/src/validation/slprj/ert/AHRSControl/html/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4ab78302c5d6ff92def7688c291999a4fcbd70d GIT binary patch literal 4178 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/html/traceInfo_flag.js b/src/validation/slprj/ert/AHRSControl/html/traceInfo_flag.js new file mode 100644 index 0000000..45ba57e --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/html/traceInfo_flag.js @@ -0,0 +1,269 @@ +function TraceInfoFlag() { + this.traceFlag = new Array(); + this.traceFlag["AHRSControl.c:95c37"]=1; + this.traceFlag["AHRSControl.c:95c51"]=1; + this.traceFlag["AHRSControl.c:95c54"]=1; + this.traceFlag["AHRSControl.c:95c75"]=1; + this.traceFlag["AHRSControl.c:105c37"]=1; + this.traceFlag["AHRSControl.c:120c23"]=1; + this.traceFlag["AHRSControl.c:121c12"]=1; + this.traceFlag["AHRSControl.c:121c47"]=1; + this.traceFlag["AHRSControl.c:128c26"]=1; + this.traceFlag["AHRSControl.c:155c23"]=1; + this.traceFlag["AHRSControl.c:156c12"]=1; + this.traceFlag["AHRSControl.c:156c49"]=1; + this.traceFlag["AHRSControl.c:163c24"]=1; + this.traceFlag["AHRSControl.c:190c23"]=1; + this.traceFlag["AHRSControl.c:191c12"]=1; + this.traceFlag["AHRSControl.c:191c49"]=1; + this.traceFlag["AHRSControl.c:198c22"]=1; + this.traceFlag["AHRSControl.c:258c29"]=1; + this.traceFlag["AHRSControl.c:261c33"]=1; + this.traceFlag["AHRSControl.c:264c40"]=1; + this.traceFlag["AHRSControl.c:264c42"]=1; + this.traceFlag["AHRSControl.c:266c32"]=1; + this.traceFlag["AHRSControl.c:273c53"]=1; + this.traceFlag["AHRSControl.c:276c33"]=1; + this.traceFlag["AHRSControl.c:279c40"]=1; + this.traceFlag["AHRSControl.c:279c42"]=1; + this.traceFlag["AHRSControl.c:281c32"]=1; + this.traceFlag["AHRSControl.c:288c53"]=1; + this.traceFlag["AHRSControl.c:291c33"]=1; + this.traceFlag["AHRSControl.c:294c40"]=1; + this.traceFlag["AHRSControl.c:294c42"]=1; + this.traceFlag["AHRSControl.c:296c32"]=1; + this.traceFlag["AHRSControl.c:323c33"]=1; + this.traceFlag["AHRSControl.c:330c26"]=1; + this.traceFlag["AHRSControl.c:330c55"]=1; + this.traceFlag["AHRSControl.c:330c63"]=1; + this.traceFlag["AHRSControl.c:335c36"]=1; + this.traceFlag["AHRSControl.c:335c44"]=1; + this.traceFlag["AHRSControl.c:336c40"]=1; + this.traceFlag["AHRSControl.c:339c42"]=1; + this.traceFlag["AHRSControl.c:339c45"]=1; + this.traceFlag["AHRSControl.c:340c42"]=1; + this.traceFlag["AHRSControl.c:367c31"]=1; + this.traceFlag["AHRSControl.c:374c24"]=1; + this.traceFlag["AHRSControl.c:374c54"]=1; + this.traceFlag["AHRSControl.c:374c57"]=1; + this.traceFlag["AHRSControl.c:374c64"]=1; + this.traceFlag["AHRSControl.c:379c37"]=1; + this.traceFlag["AHRSControl.c:379c40"]=1; + this.traceFlag["AHRSControl.c:379c46"]=1; + this.traceFlag["AHRSControl.c:380c41"]=1; + this.traceFlag["AHRSControl.c:383c43"]=1; + this.traceFlag["AHRSControl.c:383c46"]=1; + this.traceFlag["AHRSControl.c:384c43"]=1; + this.traceFlag["AHRSControl.c:411c29"]=1; + this.traceFlag["AHRSControl.c:418c22"]=1; + this.traceFlag["AHRSControl.c:418c52"]=1; + this.traceFlag["AHRSControl.c:418c60"]=1; + this.traceFlag["AHRSControl.c:423c37"]=1; + this.traceFlag["AHRSControl.c:423c40"]=1; + this.traceFlag["AHRSControl.c:423c46"]=1; + this.traceFlag["AHRSControl.c:424c41"]=1; + this.traceFlag["AHRSControl.c:427c43"]=1; + this.traceFlag["AHRSControl.c:427c46"]=1; + this.traceFlag["AHRSControl.c:428c43"]=1; + this.traceFlag["AHRSControl.c:471c45"]=1; + this.traceFlag["AHRSControl.c:479c24"]=1; + this.traceFlag["AHRSControl.c:482c31"]=1; + this.traceFlag["AHRSControl.c:482c33"]=1; + this.traceFlag["AHRSControl.c:484c20"]=1; + this.traceFlag["AHRSControl.c:496c45"]=1; + this.traceFlag["AHRSControl.c:504c24"]=1; + this.traceFlag["AHRSControl.c:507c31"]=1; + this.traceFlag["AHRSControl.c:507c33"]=1; + this.traceFlag["AHRSControl.c:509c18"]=1; + this.traceFlag["AHRSControl.c:521c45"]=1; + this.traceFlag["AHRSControl.c:529c24"]=1; + this.traceFlag["AHRSControl.c:532c31"]=1; + this.traceFlag["AHRSControl.c:532c33"]=1; + this.traceFlag["AHRSControl.c:534c22"]=1; + this.traceFlag["AHRSControl.c:598c23"]=1; + this.traceFlag["AHRSControl.c:639c43"]=1; + this.traceFlag["AHRSControl.c:639c64"]=1; + this.traceFlag["AHRSControl.c:640c44"]=1; + this.traceFlag["AHRSControl.c:675c23"]=1; + this.traceFlag["AHRSControl.c:715c48"]=1; + this.traceFlag["AHRSControl.c:715c69"]=1; + this.traceFlag["AHRSControl.c:788c53"]=1; + this.traceFlag["AHRSControl.c:789c18"]=1; + this.traceFlag["AHRSControl.c:792c25"]=1; + this.traceFlag["AHRSControl.c:799c25"]=1; + this.traceFlag["AHRSControl.c:806c25"]=1; +} +top.TraceInfoFlag.instance = new TraceInfoFlag(); +function TraceInfoLineFlag() { + this.lineTraceFlag = new Array(); + this.lineTraceFlag["AHRSControl.c:95"]=1; + this.lineTraceFlag["AHRSControl.c:105"]=1; + this.lineTraceFlag["AHRSControl.c:119"]=1; + this.lineTraceFlag["AHRSControl.c:120"]=1; + this.lineTraceFlag["AHRSControl.c:121"]=1; + this.lineTraceFlag["AHRSControl.c:128"]=1; + this.lineTraceFlag["AHRSControl.c:133"]=1; + this.lineTraceFlag["AHRSControl.c:134"]=1; + this.lineTraceFlag["AHRSControl.c:140"]=1; + this.lineTraceFlag["AHRSControl.c:154"]=1; + this.lineTraceFlag["AHRSControl.c:155"]=1; + this.lineTraceFlag["AHRSControl.c:156"]=1; + this.lineTraceFlag["AHRSControl.c:163"]=1; + this.lineTraceFlag["AHRSControl.c:168"]=1; + this.lineTraceFlag["AHRSControl.c:169"]=1; + this.lineTraceFlag["AHRSControl.c:175"]=1; + this.lineTraceFlag["AHRSControl.c:189"]=1; + this.lineTraceFlag["AHRSControl.c:190"]=1; + this.lineTraceFlag["AHRSControl.c:191"]=1; + this.lineTraceFlag["AHRSControl.c:198"]=1; + this.lineTraceFlag["AHRSControl.c:203"]=1; + this.lineTraceFlag["AHRSControl.c:204"]=1; + this.lineTraceFlag["AHRSControl.c:210"]=1; + this.lineTraceFlag["AHRSControl.c:236"]=1; + this.lineTraceFlag["AHRSControl.c:237"]=1; + this.lineTraceFlag["AHRSControl.c:245"]=1; + this.lineTraceFlag["AHRSControl.c:246"]=1; + this.lineTraceFlag["AHRSControl.c:254"]=1; + this.lineTraceFlag["AHRSControl.c:255"]=1; + this.lineTraceFlag["AHRSControl.c:258"]=1; + this.lineTraceFlag["AHRSControl.c:261"]=1; + this.lineTraceFlag["AHRSControl.c:263"]=1; + this.lineTraceFlag["AHRSControl.c:264"]=1; + this.lineTraceFlag["AHRSControl.c:266"]=1; + this.lineTraceFlag["AHRSControl.c:269"]=1; + this.lineTraceFlag["AHRSControl.c:273"]=1; + this.lineTraceFlag["AHRSControl.c:276"]=1; + this.lineTraceFlag["AHRSControl.c:278"]=1; + this.lineTraceFlag["AHRSControl.c:279"]=1; + this.lineTraceFlag["AHRSControl.c:281"]=1; + this.lineTraceFlag["AHRSControl.c:284"]=1; + this.lineTraceFlag["AHRSControl.c:288"]=1; + this.lineTraceFlag["AHRSControl.c:291"]=1; + this.lineTraceFlag["AHRSControl.c:293"]=1; + this.lineTraceFlag["AHRSControl.c:294"]=1; + this.lineTraceFlag["AHRSControl.c:296"]=1; + this.lineTraceFlag["AHRSControl.c:299"]=1; + this.lineTraceFlag["AHRSControl.c:307"]=1; + this.lineTraceFlag["AHRSControl.c:317"]=1; + this.lineTraceFlag["AHRSControl.c:323"]=1; + this.lineTraceFlag["AHRSControl.c:330"]=1; + this.lineTraceFlag["AHRSControl.c:335"]=1; + this.lineTraceFlag["AHRSControl.c:336"]=1; + this.lineTraceFlag["AHRSControl.c:337"]=1; + this.lineTraceFlag["AHRSControl.c:339"]=1; + this.lineTraceFlag["AHRSControl.c:340"]=1; + this.lineTraceFlag["AHRSControl.c:351"]=1; + this.lineTraceFlag["AHRSControl.c:361"]=1; + this.lineTraceFlag["AHRSControl.c:367"]=1; + this.lineTraceFlag["AHRSControl.c:374"]=1; + this.lineTraceFlag["AHRSControl.c:379"]=1; + this.lineTraceFlag["AHRSControl.c:380"]=1; + this.lineTraceFlag["AHRSControl.c:381"]=1; + this.lineTraceFlag["AHRSControl.c:383"]=1; + this.lineTraceFlag["AHRSControl.c:384"]=1; + this.lineTraceFlag["AHRSControl.c:395"]=1; + this.lineTraceFlag["AHRSControl.c:405"]=1; + this.lineTraceFlag["AHRSControl.c:411"]=1; + this.lineTraceFlag["AHRSControl.c:418"]=1; + this.lineTraceFlag["AHRSControl.c:423"]=1; + this.lineTraceFlag["AHRSControl.c:424"]=1; + this.lineTraceFlag["AHRSControl.c:425"]=1; + this.lineTraceFlag["AHRSControl.c:427"]=1; + this.lineTraceFlag["AHRSControl.c:428"]=1; + this.lineTraceFlag["AHRSControl.c:441"]=1; + this.lineTraceFlag["AHRSControl.c:448"]=1; + this.lineTraceFlag["AHRSControl.c:455"]=1; + this.lineTraceFlag["AHRSControl.c:471"]=1; + this.lineTraceFlag["AHRSControl.c:476"]=1; + this.lineTraceFlag["AHRSControl.c:479"]=1; + this.lineTraceFlag["AHRSControl.c:481"]=1; + this.lineTraceFlag["AHRSControl.c:482"]=1; + this.lineTraceFlag["AHRSControl.c:484"]=1; + this.lineTraceFlag["AHRSControl.c:487"]=1; + this.lineTraceFlag["AHRSControl.c:496"]=1; + this.lineTraceFlag["AHRSControl.c:501"]=1; + this.lineTraceFlag["AHRSControl.c:504"]=1; + this.lineTraceFlag["AHRSControl.c:506"]=1; + this.lineTraceFlag["AHRSControl.c:507"]=1; + this.lineTraceFlag["AHRSControl.c:509"]=1; + this.lineTraceFlag["AHRSControl.c:512"]=1; + this.lineTraceFlag["AHRSControl.c:521"]=1; + this.lineTraceFlag["AHRSControl.c:526"]=1; + this.lineTraceFlag["AHRSControl.c:529"]=1; + this.lineTraceFlag["AHRSControl.c:531"]=1; + this.lineTraceFlag["AHRSControl.c:532"]=1; + this.lineTraceFlag["AHRSControl.c:534"]=1; + this.lineTraceFlag["AHRSControl.c:537"]=1; + this.lineTraceFlag["AHRSControl.c:549"]=1; + this.lineTraceFlag["AHRSControl.c:577"]=1; + this.lineTraceFlag["AHRSControl.c:578"]=1; + this.lineTraceFlag["AHRSControl.c:579"]=1; + this.lineTraceFlag["AHRSControl.c:580"]=1; + this.lineTraceFlag["AHRSControl.c:585"]=1; + this.lineTraceFlag["AHRSControl.c:586"]=1; + this.lineTraceFlag["AHRSControl.c:587"]=1; + this.lineTraceFlag["AHRSControl.c:598"]=1; + this.lineTraceFlag["AHRSControl.c:603"]=1; + this.lineTraceFlag["AHRSControl.c:604"]=1; + this.lineTraceFlag["AHRSControl.c:606"]=1; + this.lineTraceFlag["AHRSControl.c:615"]=1; + this.lineTraceFlag["AHRSControl.c:616"]=1; + this.lineTraceFlag["AHRSControl.c:618"]=1; + this.lineTraceFlag["AHRSControl.c:627"]=1; + this.lineTraceFlag["AHRSControl.c:628"]=1; + this.lineTraceFlag["AHRSControl.c:630"]=1; + this.lineTraceFlag["AHRSControl.c:639"]=1; + this.lineTraceFlag["AHRSControl.c:640"]=1; + this.lineTraceFlag["AHRSControl.c:660"]=1; + this.lineTraceFlag["AHRSControl.c:661"]=1; + this.lineTraceFlag["AHRSControl.c:675"]=1; + this.lineTraceFlag["AHRSControl.c:680"]=1; + this.lineTraceFlag["AHRSControl.c:681"]=1; + this.lineTraceFlag["AHRSControl.c:683"]=1; + this.lineTraceFlag["AHRSControl.c:692"]=1; + this.lineTraceFlag["AHRSControl.c:693"]=1; + this.lineTraceFlag["AHRSControl.c:695"]=1; + this.lineTraceFlag["AHRSControl.c:704"]=1; + this.lineTraceFlag["AHRSControl.c:705"]=1; + this.lineTraceFlag["AHRSControl.c:707"]=1; + this.lineTraceFlag["AHRSControl.c:715"]=1; + this.lineTraceFlag["AHRSControl.c:716"]=1; + this.lineTraceFlag["AHRSControl.c:763"]=1; + this.lineTraceFlag["AHRSControl.c:764"]=1; + this.lineTraceFlag["AHRSControl.c:765"]=1; + this.lineTraceFlag["AHRSControl.c:772"]=1; + this.lineTraceFlag["AHRSControl.c:773"]=1; + this.lineTraceFlag["AHRSControl.c:775"]=1; + this.lineTraceFlag["AHRSControl.c:778"]=1; + this.lineTraceFlag["AHRSControl.c:779"]=1; + this.lineTraceFlag["AHRSControl.c:788"]=1; + this.lineTraceFlag["AHRSControl.c:789"]=1; + this.lineTraceFlag["AHRSControl.c:790"]=1; + this.lineTraceFlag["AHRSControl.c:792"]=1; + this.lineTraceFlag["AHRSControl.c:793"]=1; + this.lineTraceFlag["AHRSControl.c:797"]=1; + this.lineTraceFlag["AHRSControl.c:799"]=1; + this.lineTraceFlag["AHRSControl.c:800"]=1; + this.lineTraceFlag["AHRSControl.c:804"]=1; + this.lineTraceFlag["AHRSControl.c:806"]=1; + this.lineTraceFlag["AHRSControl.c:807"]=1; + this.lineTraceFlag["AHRSControl.c:828"]=1; + this.lineTraceFlag["AHRSControl.c:856"]=1; + this.lineTraceFlag["AHRSControl.c:857"]=1; + this.lineTraceFlag["AHRSControl.c:858"]=1; + this.lineTraceFlag["AHRSControl.c:866"]=1; + this.lineTraceFlag["AHRSControl.c:867"]=1; + this.lineTraceFlag["AHRSControl.h:89"]=1; + this.lineTraceFlag["AHRSControl.h:90"]=1; + this.lineTraceFlag["AHRSControl.h:91"]=1; + this.lineTraceFlag["AHRSControl.h:92"]=1; + this.lineTraceFlag["AHRSControl.h:93"]=1; + this.lineTraceFlag["AHRSControl.h:94"]=1; + this.lineTraceFlag["AHRSControl.h:95"]=1; + this.lineTraceFlag["AHRSControl.h:96"]=1; + this.lineTraceFlag["AHRSControl.h:97"]=1; + this.lineTraceFlag["AHRSControl.h:116"]=1; + this.lineTraceFlag["AHRSControl.h:121"]=1; + this.lineTraceFlag["AHRSControl.h:126"]=1; +} +top.TraceInfoLineFlag.instance = new TraceInfoLineFlag(); diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.bat b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.bat new file mode 100644 index 0000000..5d6815f --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.bat @@ -0,0 +1,15 @@ +@if not "%MINGW_ROOT%" == "" (@set "PATH=%PATH%;%MINGW_ROOT%") + + +call "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a\bin\win64\checkMATLABRootForDriveMap.exe" "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a" > mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f AHRSControl.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f AHRSControl.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.mk b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.mk new file mode 100644 index 0000000..303e0c4 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.mk @@ -0,0 +1,414 @@ +########################################################################### +## Makefile generated for Simulink model 'AHRSControl'. +## +## Makefile : AHRSControl.mk +## Generated on : Thu Jul 16 18:50:58 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./AHRSControl_rtwlib.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = AHRSControl +MAKEFILE = AHRSControl.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../.. +COMPILER_COMMAND_FILE = AHRSControl_comp.rsp +CMD_FILE = AHRSControl.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = AHRSControl_rtwlib.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./AHRSControl_rtwlib.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=0 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=AHRSControl -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/slprj/ert/AHRSControl/AHRSControl.c $(START_DIR)/slprj/ert/AHRSControl/AHRSControl_data.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = AHRSControl.obj AHRSControl_data.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/AHRSControl/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/AHRSControl/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : ../%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : ../%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +AHRSControl.obj : $(START_DIR)/slprj/ert/AHRSControl/AHRSControl.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +AHRSControl_data.obj : $(START_DIR)/slprj/ert/AHRSControl/AHRSControl_data.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.rsp b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.rsp new file mode 100644 index 0000000..a269e92 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl.rsp @@ -0,0 +1,2 @@ +AHRSControl.obj +AHRSControl_data.obj diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_comp.rsp b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_comp.rsp new file mode 100644 index 0000000..56bc620 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_comp.rsp @@ -0,0 +1,8 @@ +-ID:/Documents/SCHOOL/McSCert/do178/src/validation +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl +-ID:/Program\ Files/MATLAB/R2020a/extern/include +-ID:/Program\ Files/MATLAB/R2020a/simulink/include +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src/ext_mode/common +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/ert +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/_sharedutils diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_ref.rsp b/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_ref.rsp new file mode 100644 index 0000000..e69de29 diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/buildInfo.mat b/src/validation/slprj/ert/AHRSControl/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..7533146287d9bf411d003e1fec075f4066945f26 GIT binary patch literal 14214 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/compileInfo.mat b/src/validation/slprj/ert/AHRSControl/instrumented/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..9c4691577e1dbc96cb4d30f0720e83cbc44b21c8 GIT binary patch literal 2146 zcma)-YgE$N8pi)fB8nF*H7wJ=mr~0MijsP$WUK~3@y4X)WLy#jkrd6Oj6hA%$}zK( z7nISw>y)>d2`AH(GRrWnIX2zKDZ|D~j@eYC*pX^^KAiL6?6vk<`^)=V&%5`tpEnRs z3BZ2^db*&&Ks?2n$>PK~fx#SF3iBW@!3PZX3->2uJ)A&4UJNZI<^Xt*>jP5a4uQl& z9MBC5x_S9{qJ2EQL3gw}8vH+3j1KU5LHq-amQTLRJ5BPOL8Zb0Iu=v{bTb&7dg8UY zsCYebUaK`(z{Lxq+0nWC>Dc;d0y)(dM>G=SAevTd3cJXCXk@?Z zMhc;YxHN(6f)u=EvwKCTuP-gP{A5+hGIi$*a*Zf7f0-w#elr(bRq^9UB`CsMg zk1EB4A&~wM2>kJt<3V5UFFt#ssH}d>g{+}S@d9>wYB8kbo!w~~vFa3CKc(pRp2CCc z)9+hNn%)_n+jXM~%wam7ar%Swv?Y5Kn}*tNY|WZx$~)m)E^mi!+{2Rth?$Uz>s^O%b#n{2=DZ31`uszSm5ZTx))LinZDFF6 zOn_ey!;?tQcrG&M-6vRcn6A>z_biQyyW4V|2{%Ufi`0_vr?P$bf-q9~DAp(b_CjjM z#i-%PY(xDg|2(E9ZO!WbxZq#7a|uKHHVEeZ&eLLajEZ9}9>Ko+WtJ)*=doO$-g3z`j%;x!(9&os?D&G=+O`+m%+@v|Davw}0Jv=^t9=&WBTigfD+>s=EpdZ*vNh`e*?ei$)n5THt59-5VzMp-o_8 z@OB?8J7@jT%qO~24Tev|7@?ppL^PxZePa!{; zTbum0P_rSnUZx0AhR>*b4Lgq?-7(!A%#kAQ|FB-&{_2CA^iXBsyivR2kE+n|wD(Im z!R6T>505@Sz3t#MuGRURV&v^HG3IXx>p8Nf6?X0izw+FP07=-GeQ>F}>ik4aeUjY@2{?Hf|LGtfTVWT0 zape3|E6$v(H{VzH*8`%pOj&_Btk}J0-S5fhp|+~Lu8eiXh{m=@H1V3FPFYWF z?TGcUD0%|#M&;C_t3J-#Vt@0Bx>zy;JF2$|;>THtbhitC#?PIfym~~~c!E9gQ-3bb zp3Rf>sS$~?;9kw8daOKA;+ME0Z-SvUd36SDg6}x#q0yok6bcZO z!E`jWgq2#tm)cFAqK+ms7OR90wz|2xZS%Ztk8ypp!x2%Pe?o-V?5ZVKsASqIegl7_ zKDWfX;d-JPsI^3NYj}Puyw7$4=>OsIMGs^hm+f|pe!(^8Yd5d88-mI;5Pf}Gu6IoX z^%&r0r5mI{9a}-Y2jm>zL5Ms+AF1)44b25i^>-%RA^G1SUCe4=K&G?@=7H8ICV4Z| zFM>{HZH}l|&dh?r*lYCdMny0P#G$*s8h7=3haIF#c0XG%^K~G}c6SFMbAeq?49;H3 zl)N^$aO-TZLEt`2#y<7EgaimoVn)=6$XgL{mwJFog^pPG4$1*YGa-Gq1FRuQF%WQP z3uK^Or~;EL!MCKrz!)l=H0T(pJv9NP>%g*PPI1bNH%WLF5-EILPQ)aK;$F|UpEMs+ zBI7H7Qa-qxR%{S91+P7Va;yzg=*yRV7we%E5u8;eiYA*f-n$4gw_u%T6^jO=Ht z9IQ6<3By=SGBJW4!lXy*`tbxr_L*odJ+*Opu(Dh-FLj@63Q8|%DvK{@lD5ZR!4z1@ zg{Ek08AQoNC5XlamLBi=-c;s5+q}1+5_8se3Q`tYu4AB3HZCmcxDIqFW!*L5y8Xsf VsPUioGlgn-Z5R>&YVU2b{5L|vipl^0 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/defines.txt b/src/validation/slprj/ert/AHRSControl/instrumented/defines.txt new file mode 100644 index 0000000..32c8635 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=AHRSControl +NUMST=1 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/instrumentationInfo.mat b/src/validation/slprj/ert/AHRSControl/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..c40ede2dc96f63e6fc860889e05bab36d2c6c433 GIT binary patch literal 773 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NS||OZ?-6>A`J;SIy!F?O zj}^ME^PKu~Q(?!=_lzgzZ@P9f-0@@N1d;vRF6XVTRo)Y1Se7&M2Pm-IfEW^39t=rl z3eOml)Yv!@T0bQ=2zIbGSXgXbqGGJS_lBjispak+Cex=jwl)fD>9ZV>`}y-`UFXh~ zJO-=*e;Mw`@OFbtbAp@30X3}-Y?|c64J-oI&zCRRwfxyqG1X})&z@Hpb%CgjD zVjrEZ#_#%?oRq$LmNG+l7T;TtN#SslPJm5nxTJ7^>!~r5A@>w9)}-e>SDw6ibSdWh zq9c1Q%{j8@%p|Y>HVZ7&1+*QutoxJ|^WemR4GT&(o^)0?TTse$J5k~7gRcw!G$}J| zdn95EGCmTI@yu9_-(teX=C@!Dlgn$Z^~YHIczC$I#An;ET;d5=-yq9&i7!t6l)eQM J!?714lK{R*Ltp>^ literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/instrumented/profiling_info.mat b/src/validation/slprj/ert/AHRSControl/instrumented/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..7c35343d5d05c55258f2efa28fbf5297c1d3edaa GIT binary patch literal 368 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NS}aZCnOXwB$+8Z zYq+Fvfa~dD24#WI%!Pf`esw`fegRokX@#DFs?5S6atzIv*=B$=nxJW9NOEK2NND|( z$e^OfbL8aDovc4AS5~Szu6#N3sH*GCl}8gQ8K#7A6yvv)o1xINuF*d$G7D}i$kMI{ z?CKzmR&Yx{fL+UwR0pRHMR JclL5G2LQu=a mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f AHRSControl.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f AHRSControl.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.mk b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.mk new file mode 100644 index 0000000..42899a4 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.mk @@ -0,0 +1,414 @@ +########################################################################### +## Makefile generated for Simulink model 'AHRSControl'. +## +## Makefile : AHRSControl.mk +## Generated on : Thu Jul 16 18:55:17 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./AHRSControl_rtwlib.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = AHRSControl +MAKEFILE = AHRSControl.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../../../.. +COMPILER_COMMAND_FILE = AHRSControl_comp.rsp +CMD_FILE = AHRSControl.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = AHRSControl_rtwlib.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./AHRSControl_rtwlib.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=0 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=AHRSControl -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/slprj/ert/AHRSControl/AHRSControl.c $(START_DIR)/slprj/ert/AHRSControl/AHRSControl_data.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = AHRSControl.obj AHRSControl_data.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/AHRSControl/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/AHRSControl/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : ../../../%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : ../../../%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +AHRSControl.obj : $(START_DIR)/slprj/ert/AHRSControl/AHRSControl.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +AHRSControl_data.obj : $(START_DIR)/slprj/ert/AHRSControl/AHRSControl_data.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.obj b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl.obj new file mode 100644 index 0000000000000000000000000000000000000000..d50b2076b3776514d95bf33832d2141f95952de8 GIT binary patch literal 9586 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 Lfj%!T319#K4WEEm literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_ref.rsp b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_ref.rsp new file mode 100644 index 0000000..e69de29 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib new file mode 100644 index 0000000000000000000000000000000000000000..896a542ae8cb66a85c12c6100bdc0b7645fc93e0 GIT binary patch literal 11296 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 B^kV=3 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/buildInfo.mat b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..3e533435b3eb5e9678b1c321a02c5ccbc1d20350 GIT binary patch literal 14274 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/defines.txt b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/defines.txt new file mode 100644 index 0000000..32c8635 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=AHRSControl +NUMST=1 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/instrumentationInfo.mat b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..0166785fda9727cd61ec68715bf3ada87f4990de GIT binary patch literal 773 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSV(Ffvde5-`93qo*%Fkgdwdz)&&gadJY!g@m+( z1m;UJ4rh)qFs=!(Qx-6G&Qw$=JLm8D^^CTjX3;qh-*b9;XLZ|FrYAmVTs4{D(W5_? z7Ci~serC>||OZ?-6>A`J;SIy!F?O zj}^ME^PKu~Q(?!=_lzgzZ@P9f-0@@N1d;vRF6XVTRo)Y1Se7&M2Pm-IfEW^39t=rl z3eOml)Yv!@T0bQ=2zIbGSXgXbqGGJS_lBjispak+Cex=jwl)fD>9ZV>`}y-`UFXh~ zJO-=*e;Mw`@OFbtbAp@30X3}-Y?|c64J-oI&zCRRwfxyqG1X})&z@Hpb%CgjD zVjrEZ#_#%?oRq$LmNG+l7T;TtN#SslPJm5nxTJ7^>!~r5A@>w9)}-e>SDw6ibSdWh zq9c1Q%{j8@%p|Y>HVZ7&1+*QutoxJ|^WemR4GT&(o^)0?TTse$J5k~7gRcw!G$}J| zdn95EGCmTI@yu9_-(teX=C@!Dlgn$Z^~YHIczC$I#An;ET;d5=-yq9&i7!t6l)eQM J!?714lK{ifLt+2` literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/mlEnv.txt b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/mlEnv.txt new file mode 100644 index 0000000..4dd92c5 --- /dev/null +++ b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/mlEnv.txt @@ -0,0 +1,4 @@ +MATLAB_ROOT=E: +ALT_MATLAB_ROOT=E: +MATLAB_BIN=E:\bin +ALT_MATLAB_BIN=E:\bin diff --git a/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/profiling_info.mat b/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..ced0786e68ca7225baec5a51dc6a95cf01dc1896 GIT binary patch literal 368 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSV(Ffvde5-`93qo*%FkZlOW6>}aZCnOXwB$+8Z zYq+Fvfa~dD24#WI%!Pf`esw`fegRokX@#DFs?5S6atzIv*=B$=nxJW9NOEK2NND|( z$e^OfbL8aDovc4AS5~Szu6#N3sH*GCl}8gQ8K#7A6yvv)o1xINuF*d$G7D}i$kMI{ z?CKzmR&Yx{fL+UwR0pRHMR JclL5G2LQ$1a + + + 323 + + true + AHRSControl + AHRSControl + + false + false + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + AAFJTQAAAAAOAAAAOAAAAAYAAAAIAAAAAgAAAAAAAAAFAAAACAAAAAAAAAABAAAAAQAAAAAAAAAFAAQAAQAAAAEAAAAAAAAA + {"Inports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Outports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","LocalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ParameterArguments":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedLocalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InternalData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Constants":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","DataTransfers":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ModelData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InitializeTerminate":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Execution":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedUtility":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}"} + + -2 + true + true + true + 2147483647 + -1 + 1 + + -1 + + + AHRS_Control + + + 0.01 + #AHRS_Bus#HeliSystemDD_New.sldd# + true + true + false + false + true + true + false + true + true + false + false + false + 4 + -1 + 6 + 6 + 0 + 1 + 1 + 2 + false + true + true + + true + true + 0.01 + 40 + 0 + + 2 + <?xml version="1.0"?> +<slexec_sto version="1.1" packageUris="http://schema.mathworks.com/mf0/slexec_mm_sto/R2019b_201902271317"> + <sto.Registry type="sto.Registry" uuid="80835fee-2687-4103-a59e-73986936be10"> + <clocks type="sto.Timer" uuid="fd82a8af-a1a7-49fc-bcee-9612f5ab4645"> + <needsToProvideTimeDuringExecution>true</needsToProvideTimeDuringExecution> + <clockTickConstraint>PeriodicWithFixedResolution</clockTickConstraint> + <resolution>0.01</resolution> + <specifiedTaskingMode>ClassicMultiTasking</specifiedTaskingMode> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="bad96da0-d041-4e2e-8083-43ce9124f00a"> + <baseTaskID>_task0</baseTaskID> + <computedFundamentalStepSize>0.01</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="37f16e0a-3553-4abc-a7ca-799de31145c2"/> + <rootTaskHierarchyElements type="sto.Task" uuid="40d05976-9d84-49c1-ae9b-04f409a76726"> + <isExecutable>true</isExecutable> + <rates type="sto.Rate" uuid="37f16e0a-3553-4abc-a7ca-799de31145c2"> + <annotation>D1</annotation> + <colorIndex>2</colorIndex> + <description>Discrete 1</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <registry type="sto.Registry" uuid="80835fee-2687-4103-a59e-73986936be10"/> + <taskId>_task0</taskId> + <rateSpec type="sto.RateSpec" uuid="4712e563-5bc0-435d-b80d-bf10514eef3d"> + <period>0.01</period> + <rateType>ClassicPeriodicDiscrete</rateType> + </rateSpec> + </rates> + <elementType>Task</elementType> + <identifier>_task0</identifier> + <priority>40</priority> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <clocks type="sto.Event" uuid="c1250580-b058-4e80-bb50-f511582fb955"> + <eventType>EXPORT_ASYNCHRONOUS</eventType> + <cNum>1</cNum> + <clockType>Event</clockType> + <identifier>AHRSControl/AHRS_Control,0,0</identifier> + <resolution>-1</resolution> + <specifiedTaskingMode>ExplicitTasking</specifiedTaskingMode> + <timeAdvanceMode>None</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="be985961-dfaa-4922-8e51-293977c08e99"> + <computedFundamentalStepSize>-1</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="b26aaddb-3b73-468d-a360-ae80e7382b3a"/> + <rootTaskHierarchyElements type="sto.Task" uuid="f0780fff-4303-400c-aa49-7e9fc4a9b57f"> + <isExecutable>true</isExecutable> + <isExplicit>true</isExplicit> + <rates type="sto.Rate" uuid="b26aaddb-3b73-468d-a360-ae80e7382b3a"> + <annotation>F-1</annotation> + <colorIndex>23</colorIndex> + <description>Exported Inherit</description> + <eventSourceType>EXPORT_ASYNCHRONOUS</eventSourceType> + <rateIDX>1</rateIDX> + <registry type="sto.Registry" uuid="80835fee-2687-4103-a59e-73986936be10"/> + <stringID>AHRSControl/AHRS_Control,0,0</stringID> + <taskId>ExplicitTask0</taskId> + <rateSpec type="sto.RateSpec" uuid="782e7e54-f169-4f5c-99aa-fa9558413b07"> + <offset>-2</offset> + <period>-1</period> + <rateType>LegacyAsync</rateType> + </rateSpec> + </rates> + <tNum>1</tNum> + <elementType>Task</elementType> + <identifier>ExplicitTask0</identifier> + <priority>40</priority> + <schedulingClockID>AHRSControl/AHRS_Control,0,0</schedulingClockID> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <clocks type="sto.Event" uuid="77a82fcc-bba1-48d2-9451-0b06a9949208"> + <eventType>PARAMETER_CHANGE_EVENT</eventType> + <cNum>2</cNum> + <clockType>Event</clockType> + <identifier>ParameterChangeEvent</identifier> + <resolution>-1</resolution> + <specifiedTaskingMode>ExplicitTasking</specifiedTaskingMode> + <timeAdvanceMode>None</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="86b0f00f-a7f6-4ade-93fe-1987a7e08385"> + <computedFundamentalStepSize>-1</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="d230b61b-8c56-4a8f-afd7-6bf0f5ab776e"/> + <rootTaskHierarchyElements type="sto.Task" uuid="767a646f-2e18-497d-89a8-dbe69d58c175"> + <isExplicit>true</isExplicit> + <rates type="sto.Rate" uuid="d230b61b-8c56-4a8f-afd7-6bf0f5ab776e"> + <eventSourceType>PARAMETER_CHANGE_EVENT</eventSourceType> + <rateIDX>-1</rateIDX> + <registry type="sto.Registry" uuid="80835fee-2687-4103-a59e-73986936be10"/> + <stringID>ParameterChangeEvent</stringID> + <taskId>ModelWideParameterChangeEvent</taskId> + <useForExecution>NotForExecution</useForExecution> + <rateSpec type="sto.RateSpec" uuid="2dc31d54-8f58-4f7c-b5b1-c47c199c8524"> + <period>inf</period> + <rateType>ModelWideParameterChangeEvent</rateType> + </rateSpec> + </rates> + <tNum>2</tNum> + <elementType>Task</elementType> + <identifier>ModelWideParameterChangeEvent</identifier> + <priority>-1</priority> + <schedulingClockID>ParameterChangeEvent</schedulingClockID> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <clocks type="sto.Event" uuid="23098b52-81f0-40ec-ab86-b934a8c0e96c"> + <eventType>UNSPECIFIED_EVENT_SOURCE</eventType> + <cNum>3</cNum> + <clockType>Event</clockType> + <identifier>NonTunableParameterChangeEvent</identifier> + <resolution>-1</resolution> + <specifiedTaskingMode>ExplicitTasking</specifiedTaskingMode> + <timeAdvanceMode>None</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="81c04aab-dfe0-4659-938b-aabd42ca35b5"> + <computedFundamentalStepSize>-1</computedFundamentalStepSize> + </clockDomain> + </clocks> + <executionSpec>Undetermined</executionSpec> + <hasUnknownEdges>true</hasUnknownEdges> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="3b218494-9158-4ece-98bb-be71a93ab6fa"> + <taskIdentifier>_task0</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="19182155-a547-42d0-b064-b49f4b7101fc"> + <clockIdentifier>AHRSControl/AHRS_Control,0,0</clockIdentifier> + <taskIdentifier>ExplicitTask0</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="ee55b105-6407-49c1-a72b-d9ca8c7889ed"> + <clockIdentifier>ParameterChangeEvent</clockIdentifier> + <taskIdentifier>ModelWideParameterChangeEvent</taskIdentifier> + </taskDependencyGraph> + <taskPriorityDirection>HighNumberLast</taskPriorityDirection> + <taskingMode>ClassicMultiTasking</taskingMode> + <tasks type="sto.Task" uuid="40d05976-9d84-49c1-ae9b-04f409a76726"/> + <tasks type="sto.Task" uuid="f0780fff-4303-400c-aa49-7e9fc4a9b57f"/> + <tasks type="sto.Task" uuid="767a646f-2e18-497d-89a8-dbe69d58c175"/> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + </sto.Registry> +</slexec_sto> + false + 0.01 + true + + + MdlrefDW_AHRSControl_T + + + true + 0.01 + 2 + true + true + true + 2 + SOLVER_MODE_MULTITASKING + FixedStepDiscrete + SOLVER_TYPE_FIXEDSTEP + 2 + + 8 + 64 + 32 + 32 + 32 + 64 + 32 + 32 + 16 + 32 + 1 + true + true + 32 + + + + + + + + + true + true + true + true + true + + + + + + + + + + + AHRS_Control + true + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + AHRS_Control + AHRSLoopCtrl + + + AHRSControl/AHRS_Control/AHRS_voter_caller + AHRS_Control + AHRS_voter + + AHRSControl/AHRS_Control + AHRS_Control + + 14 + 325.0003662109375 + + + 14 + 327.0003662109375 + + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + + 14 + 429.000244140625 + + true + AHRSControl + AHRSControl/AHRS_Control + + ({true}_0) + + Scoped Export + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + 3 + + + AHRS2 + 4 + + + AHRS3 + 5 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + actuator_commands + 6 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + AHRS_voter + true + AHRSControl/AHRS_Control/AHRS_voter_caller + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + AHRS_Control/AHRS_voter + Avg_Value + + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + AHRS_Control/AHRS_voter + Mid_Value + + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + AHRS_Control/AHRS_voter + Single_Value + + AHRS_Control + AHRSControl/AHRS_Control/AHRS_voter + AHRS_voter + + 14 + 561.00048828125 + + + 14 + 598.00048828125 + + + 14 + 628.00048828125 + + true + AHRSControl/AHRS_Control/AHRS_voter_caller + AHRS_Control + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + O0 + 3 + + + AHRS1 + + + AHRS2 + 1 + + + AHRS3 + 2 + + + voted_fb + 3 + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Heli_outer_loop + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Pitch_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Roll_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Yaw_loop + + AHRS_Control/AHRSLoopCtrl + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Heli_outer_loop + + 14 + 433.000244140625 + + + 1 + 438.000244140625 + + + 14 + 456.000244140625 + + + 1 + 461.000244140625 + + + 14 + 489.000244140625 + + + 1 + 494.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + AHRSLoopCtrl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + O1 + 5 + + + O2 + 6 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + phi_cmd + 5 + + + r_cmd + 6 + + + theta_cmd + 4 + + + voted_fb + 3 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Single_Value + true + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + AHRS_Control/AHRS_voter + AHRSControl/AHRS_Control/AHRS_voter/Single_Value + Single_Value + true + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + AHRS_voter + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + + + AHRS1_Valid + 3 + + + AHRS2 + 1 + + + AHRS2_Valid + 4 + + + AHRS3 + 2 + + + AHRS3_Valid + 5 + + + Single_Value + 6 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Yaw_loop + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop + Yaw_loop + + 1 + 494.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + Heli_outer_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_r_cmd + + + r + 1 + + + r_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Roll_loop + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop + Roll_loop + + 1 + 461.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + Heli_outer_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_phi_cmd + + + phi + 1 + + + phi_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Pitch_loop + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop + Pitch_loop + + 1 + 438.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + Heli_outer_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_theta_cmd + + + theta + 1 + + + theta_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Avg_Value + true + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + AHRS_Control/AHRS_voter + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value + Avg_Value + true + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + AHRS_voter + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + + + AHRS1_Valid + 3 + + + AHRS2 + 1 + + + AHRS2_Valid + 4 + + + AHRS3 + 2 + + + AHRS3_Valid + 5 + + + Avg_Value + 6 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Heli_inner_loop + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + pitch_feedback + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + roll_feedback + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + yaw_feedback + + AHRS_Control/AHRSLoopCtrl + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Heli_inner_loop + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + AHRSLoopCtrl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + actuator_commands + 4 + + + phi_cmd + 1 + + + r_cmd + 2 + + + theta_cmd + + + voted_fb + 3 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + yaw_feedback + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback + yaw_feedback + + 1 + 395.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + Heli_inner_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + dT + 2 + + + r_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Mid_Value + true + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + AHRS_Control/AHRS_voter + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value + Mid_Value + true + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + AHRS_voter + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + O0 + 3 + + + AHRS1 + + + AHRS2 + 1 + + + AHRS3 + 2 + + + Mid_Value + 3 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + AHRSLoopCtrl + true + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + AHRS_Control/AHRSLoopCtrl + Heli_inner_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + AHRS_Control/AHRSLoopCtrl + Heli_outer_loop + + AHRS_Control + AHRSControl/AHRS_Control/AHRSLoopCtrl + AHRSLoopCtrl + + 14 + 327.0003662109375 + + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + + 14 + 429.000244140625 + + + 14 + 433.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + AHRS_Control + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + actuator_commands + 4 + + + voted_fb + 3 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 5 + + Numeric + numerictype('double') + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + pitch_feedback + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback + pitch_feedback + + 1 + 359.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + Heli_inner_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + ds + 2 + + + theta_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + roll_feedback + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback + roll_feedback + + 1 + 377.000244140625 + + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + Heli_inner_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + dc + 2 + + + phi_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Filter + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/Filter + Filter + true + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + Heli_inner_loop + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + + ({true}_0) + + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + + ({true}_0) + + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/Filter + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + O1 + 3 + + + FeedbackSum + 3 + + + Signal + + + filtered_Signal + 2 + + + prev_FeedbackSum + 1 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + + true + + + + + + sltpEvents + + + sltpTaskGroups + + + + + AHRS_Control + + + AHRSControl/AHRS_Control,0,0 + ExplicitTask0 + + + sltpTasks + + + + + \ No newline at end of file diff --git a/src/validation/slprj/ert/AHRSControl/tmwinternal/binfo_mdlref.mat b/src/validation/slprj/ert/AHRSControl/tmwinternal/binfo_mdlref.mat new file mode 100644 index 0000000000000000000000000000000000000000..da805219979cad41f1faf714f993db8c8373c878 GIT binary patch literal 28470 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
    y>k9Yah!8A|H_Z3&UTGA8Fn+A8VLB_mY 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 N(49+ckzgh4{{#3=0+;{* literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/AHRSControl/tmwinternal/minfo_mdlref.mat b/src/validation/slprj/ert/AHRSControl/tmwinternal/minfo_mdlref.mat new file mode 100644 index 0000000000000000000000000000000000000000..2fd021a054076e27d6a846f35fb19b23bde5676a GIT binary patch literal 2398 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 QaB2xyo(ZZB0M@MtK|q& + + + FUxhDso/1GfPwnfseTpPcQ== + + \ No newline at end of file diff --git a/src/validation/slprj/ert/AHRSControl/tmwinternal/tr b/src/validation/slprj/ert/AHRSControl/tmwinternal/tr new file mode 100644 index 0000000000000000000000000000000000000000..0a820c3d3a4cbbb7289f4d9f18837b3b34d3b21b GIT binary patch literal 65816 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 a)TV8^bZtIn^n`I^5}z+z#xOPb>;C|Y?yfNa literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/ActuatorControl.c b/src/validation/slprj/ert/ActuatorControl/ActuatorControl.c new file mode 100644 index 0000000..a591c45 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/ActuatorControl.c @@ -0,0 +1,404 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: ActuatorControl.c + * + * Code generated for Simulink model 'ActuatorControl'. + * + * Model version : 1.72 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:02 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "ActuatorControl.h" + +/* Macros for accessing real-time model data structure */ +#ifndef rtmGetErrorStatus +# define rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) +#endif + +#ifndef rtmSetErrorStatus +# define rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) +#endif + +#ifndef rtmGetErrorStatusPointer +# define rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus +#endif + +#ifndef rtmSetErrorStatusPointer +# define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +MdlrefDW_ActuatorControl_T ActuatorControl_MdlrefDW; + +/* Block states (default storage) */ +DW_ActuatorControl_f_T ActuatorControl_DW; +extern void Actuator_Actuator1_loop_Disable(void); +extern void ActuatorControl_Actuator1_loop(real_T rtu_Act1_pos, real_T + rtu_Act1_cmd, real_T *rty_Actuator1); +extern void Actuator_Actuator2_loop_Disable(void); +extern void ActuatorControl_Actuator2_loop(real_T rtu_Act2_pos, real_T + rtu_Act2_cmd, real_T *rty_Actuator2); +extern void Actuator_Actuator3_loop_Disable(void); +extern void ActuatorControl_Actuator3_loop(real_T rtu_Act3_pos, real_T + rtu_Act3_cmd, real_T *rty_Actuator3); + +/* Disable for Simulink Function: '/Actuaor1_loop' */ +void Actuator_Actuator1_loop_Disable(void) +{ + /* Disable for DiscreteIntegrator: '/Integrator' */ + ActuatorControl_DW.Integrator_DSTATE_h = ActuatorControl_DW.Integrator_f; +} + +/* Output and update for Simulink Function: '/Actuaor1_loop' */ +void ActuatorControl_Actuator1_loop(real_T rtu_Act1_pos, real_T rtu_Act1_cmd, + real_T *rty_Actuator1) +{ + real_T rtb_Sum; + + /* DiscreteIntegrator: '/Integrator' */ + ActuatorControl_DW.Integrator_f = ActuatorControl_DW.Integrator_DSTATE_h; + + /* Sum: '/Sum' incorporates: + * SignalConversion generated from: '/Act1_cmd' + * SignalConversion generated from: '/Act1_pos' + */ + rtb_Sum = rtu_Act1_cmd - rtu_Act1_pos; + + /* SignalConversion generated from: '/Actuator1' incorporates: + * Gain: '/Gain' + * Gain: '/Gain1' + * Gain: '/Gain3' + * Gain: '/Gain4' + * Sum: '/Sum1' + * Sum: '/Diff' + * UnitDelay: '/UD' + * + * Block description for '/Diff': + * + * Add in CPU + * + * Block description for '/UD': + * + * Store in Global RAM + */ + *rty_Actuator1 = ((0.001 * ActuatorControl_DW.Integrator_f) + (0.339 * rtb_Sum)) + - (((rtb_Sum - ActuatorControl_DW.UD_DSTATE_j) * 0.00272) * 0.001); + + /* Update for DiscreteIntegrator: '/Integrator' incorporates: + * Gain: '/Gain2' + */ + ActuatorControl_DW.Integrator_DSTATE_h += 2.73 * rtb_Sum; + if (ActuatorControl_DW.Integrator_DSTATE_h >= 0.1) { + ActuatorControl_DW.Integrator_DSTATE_h = 0.1; + } else { + if (ActuatorControl_DW.Integrator_DSTATE_h <= -0.1) { + ActuatorControl_DW.Integrator_DSTATE_h = -0.1; + } + } + + /* End of Update for DiscreteIntegrator: '/Integrator' */ + + /* Update for UnitDelay: '/UD' + * + * Block description for '/UD': + * + * Store in Global RAM + */ + ActuatorControl_DW.UD_DSTATE_j = rtb_Sum; +} + +/* Disable for Simulink Function: '/Actuaor2_loop' */ +void Actuator_Actuator2_loop_Disable(void) +{ + /* Disable for DiscreteIntegrator: '/Integrator' */ + ActuatorControl_DW.Integrator_DSTATE_n = ActuatorControl_DW.Integrator_i; +} + +/* Output and update for Simulink Function: '/Actuaor2_loop' */ +void ActuatorControl_Actuator2_loop(real_T rtu_Act2_pos, real_T rtu_Act2_cmd, + real_T *rty_Actuator2) +{ + real_T rtb_Sum; + + /* DiscreteIntegrator: '/Integrator' */ + ActuatorControl_DW.Integrator_i = ActuatorControl_DW.Integrator_DSTATE_n; + + /* Sum: '/Sum' incorporates: + * SignalConversion generated from: '/Act2_cmd' + * SignalConversion generated from: '/Act2_pos' + */ + rtb_Sum = rtu_Act2_cmd - rtu_Act2_pos; + + /* SignalConversion generated from: '/Actuator2' incorporates: + * Gain: '/Gain' + * Gain: '/Gain1' + * Gain: '/Gain3' + * Gain: '/Gain4' + * Sum: '/Sum1' + * Sum: '/Diff' + * UnitDelay: '/UD' + * + * Block description for '/Diff': + * + * Add in CPU + * + * Block description for '/UD': + * + * Store in Global RAM + */ + *rty_Actuator2 = ((0.001 * ActuatorControl_DW.Integrator_i) + (0.339 * rtb_Sum)) + - (((rtb_Sum - ActuatorControl_DW.UD_DSTATE_o) * 0.00272) * 0.001); + + /* Update for DiscreteIntegrator: '/Integrator' incorporates: + * Gain: '/Gain2' + */ + ActuatorControl_DW.Integrator_DSTATE_n += 2.73 * rtb_Sum; + if (ActuatorControl_DW.Integrator_DSTATE_n >= 0.1) { + ActuatorControl_DW.Integrator_DSTATE_n = 0.1; + } else { + if (ActuatorControl_DW.Integrator_DSTATE_n <= -0.1) { + ActuatorControl_DW.Integrator_DSTATE_n = -0.1; + } + } + + /* End of Update for DiscreteIntegrator: '/Integrator' */ + + /* Update for UnitDelay: '/UD' + * + * Block description for '/UD': + * + * Store in Global RAM + */ + ActuatorControl_DW.UD_DSTATE_o = rtb_Sum; +} + +/* Disable for Simulink Function: '/Actuaor3_loop' */ +void Actuator_Actuator3_loop_Disable(void) +{ + /* Disable for DiscreteIntegrator: '/Integrator' */ + ActuatorControl_DW.Integrator_DSTATE = ActuatorControl_DW.Integrator; +} + +/* Output and update for Simulink Function: '/Actuaor3_loop' */ +void ActuatorControl_Actuator3_loop(real_T rtu_Act3_pos, real_T rtu_Act3_cmd, + real_T *rty_Actuator3) +{ + real_T rtb_Sum; + + /* DiscreteIntegrator: '/Integrator' */ + ActuatorControl_DW.Integrator = ActuatorControl_DW.Integrator_DSTATE; + + /* Sum: '/Sum' incorporates: + * SignalConversion generated from: '/Act3_cmd' + * SignalConversion generated from: '/Act3_pos' + */ + rtb_Sum = rtu_Act3_cmd - rtu_Act3_pos; + + /* SignalConversion generated from: '/Actuator3' incorporates: + * Gain: '/Gain' + * Gain: '/Gain1' + * Gain: '/Gain3' + * Gain: '/Gain4' + * Sum: '/Sum1' + * Sum: '/Diff' + * UnitDelay: '/UD' + * + * Block description for '/Diff': + * + * Add in CPU + * + * Block description for '/UD': + * + * Store in Global RAM + */ + *rty_Actuator3 = ((0.001 * ActuatorControl_DW.Integrator) + (0.339 * rtb_Sum)) + - (((rtb_Sum - ActuatorControl_DW.UD_DSTATE) * 0.00272) * 0.001); + + /* Update for DiscreteIntegrator: '/Integrator' incorporates: + * Gain: '/Gain2' + */ + ActuatorControl_DW.Integrator_DSTATE += 2.73 * rtb_Sum; + if (ActuatorControl_DW.Integrator_DSTATE >= 0.1) { + ActuatorControl_DW.Integrator_DSTATE = 0.1; + } else { + if (ActuatorControl_DW.Integrator_DSTATE <= -0.1) { + ActuatorControl_DW.Integrator_DSTATE = -0.1; + } + } + + /* End of Update for DiscreteIntegrator: '/Integrator' */ + + /* Update for UnitDelay: '/UD' + * + * Block description for '/UD': + * + * Store in Global RAM + */ + ActuatorControl_DW.UD_DSTATE = rtb_Sum; +} + +/* Disable for referenced model: 'ActuatorControl' */ +void ActuatorControl_Disable(void) +{ + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Actuator_Control' incorporates: + * SubSystem: '/Actuator_Control' + */ + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Actuaor3_loop' incorporates: + * SubSystem: '/Actuaor3_loop' + */ + Actuator_Actuator3_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Actuaor3_loop' */ + + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Actuaor2_loop' incorporates: + * SubSystem: '/Actuaor2_loop' + */ + Actuator_Actuator2_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Actuaor2_loop' */ + + /* Disable for S-Function (sfun_private_function_caller) generated from: '/Actuaor1_loop' incorporates: + * SubSystem: '/Actuaor1_loop' + */ + Actuator_Actuator1_loop_Disable(); + + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Actuaor1_loop' */ + /* End of Disable for S-Function (sfun_private_function_caller) generated from: '/Actuator_Control' */ +} + +/* Output and update for referenced model: 'ActuatorControl' */ +void Actuator_Control(const int16_T rtu_Act1_pos, const real_T rtu_Act1_cmd, + const int16_T rtu_Act2_pos, const real_T rtu_Act2_cmd, + const int16_T rtu_Act3_pos, const real_T rtu_Act3_cmd, + int16_T *rty_Actuator1, int16_T *rty_Actuator2, int16_T + *rty_Actuator3) +{ + real_T rtb_TmpSignalConversionAtAct1_c; + + /* Outputs for Function Call SubSystem: '/Actuator_Control' */ + /* Gain: '/Scaling4' incorporates: + * DataTypeConversion: '/TypeConversion4' + * SignalConversion generated from: '/Act3_pos' + */ + rtb_TmpSignalConversionAtAct1_c = 3.0518509475997192E-6 * ((real_T) + rtu_Act3_pos); + + /* FunctionCaller: '/Actuator3_loop_caller' incorporates: + * SignalConversion generated from: '/Act3_cmd' + */ + ActuatorControl_Actuator3_loop(rtb_TmpSignalConversionAtAct1_c, rtu_Act3_cmd, + &rtb_TmpSignalConversionAtAct1_c); + + /* Saturate: '/Saturation2' */ + if (rtb_TmpSignalConversionAtAct1_c > 0.3) { + rtb_TmpSignalConversionAtAct1_c = 0.3; + } else { + if (rtb_TmpSignalConversionAtAct1_c < -0.3) { + rtb_TmpSignalConversionAtAct1_c = -0.3; + } + } + + /* End of Saturate: '/Saturation2' */ + + /* Gain: '/Scaling5' */ + rtb_TmpSignalConversionAtAct1_c *= 109223.33333333334; + + /* SignalConversion generated from: '/Actuator3' incorporates: + * DataTypeConversion: '/TypeConversion5' + */ + *rty_Actuator3 = (int16_T)floor(rtb_TmpSignalConversionAtAct1_c); + + /* Gain: '/Scaling2' incorporates: + * DataTypeConversion: '/TypeConversion2' + * SignalConversion generated from: '/Act2_pos' + */ + rtb_TmpSignalConversionAtAct1_c = 3.0518509475997192E-6 * ((real_T) + rtu_Act2_pos); + + /* FunctionCaller: '/Actuator2_loop_caller' incorporates: + * SignalConversion generated from: '/Act2_cmd' + */ + ActuatorControl_Actuator2_loop(rtb_TmpSignalConversionAtAct1_c, rtu_Act2_cmd, + &rtb_TmpSignalConversionAtAct1_c); + + /* Saturate: '/Saturation1' */ + if (rtb_TmpSignalConversionAtAct1_c > 0.3) { + rtb_TmpSignalConversionAtAct1_c = 0.3; + } else { + if (rtb_TmpSignalConversionAtAct1_c < -0.3) { + rtb_TmpSignalConversionAtAct1_c = -0.3; + } + } + + /* End of Saturate: '/Saturation1' */ + + /* Gain: '/Scaling3' */ + rtb_TmpSignalConversionAtAct1_c *= 109223.33333333334; + + /* SignalConversion generated from: '/Actuator2' incorporates: + * DataTypeConversion: '/TypeConversion3' + */ + *rty_Actuator2 = (int16_T)floor(rtb_TmpSignalConversionAtAct1_c); + + /* Gain: '/Scaling' incorporates: + * DataTypeConversion: '/TypeConversion' + * SignalConversion generated from: '/Act1_pos' + */ + rtb_TmpSignalConversionAtAct1_c = 3.0518509475997192E-6 * ((real_T) + rtu_Act1_pos); + + /* FunctionCaller: '/Actuator1_loop_caller' incorporates: + * SignalConversion generated from: '/Act1_cmd' + */ + ActuatorControl_Actuator1_loop(rtb_TmpSignalConversionAtAct1_c, rtu_Act1_cmd, + &rtb_TmpSignalConversionAtAct1_c); + + /* Saturate: '/Saturation' */ + if (rtb_TmpSignalConversionAtAct1_c > 0.3) { + rtb_TmpSignalConversionAtAct1_c = 0.3; + } else { + if (rtb_TmpSignalConversionAtAct1_c < -0.3) { + rtb_TmpSignalConversionAtAct1_c = -0.3; + } + } + + /* End of Saturate: '/Saturation' */ + + /* Gain: '/Scaling1' */ + rtb_TmpSignalConversionAtAct1_c *= 109223.33333333334; + + /* SignalConversion generated from: '/Actuator1' incorporates: + * DataTypeConversion: '/TypeConversion1' + */ + *rty_Actuator1 = (int16_T)floor(rtb_TmpSignalConversionAtAct1_c); + + /* End of Outputs for SubSystem: '/Actuator_Control' */ +} + +/* Model initialize function */ +void ActuatorControl_initialize(const char_T **rt_errorStatus) +{ + RT_MODEL_ActuatorControl_T *const ActuatorControl_M = + &(ActuatorControl_MdlrefDW.rtm); + + /* Registration code */ + + /* initialize error status */ + rtmSetErrorStatusPointer(ActuatorControl_M, rt_errorStatus); +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/ActuatorControl/ActuatorControl.h b/src/validation/slprj/ert/ActuatorControl/ActuatorControl.h new file mode 100644 index 0000000..a00973d --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/ActuatorControl.h @@ -0,0 +1,140 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: ActuatorControl.h + * + * Code generated for Simulink model 'ActuatorControl'. + * + * Model version : 1.72 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:02 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#ifndef RTW_HEADER_ActuatorControl_h_ +#define RTW_HEADER_ActuatorControl_h_ +#include +#ifndef ActuatorControl_COMMON_INCLUDES_ +# define ActuatorControl_COMMON_INCLUDES_ +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" +#endif /* ActuatorControl_COMMON_INCLUDES_ */ + +/* Child system includes */ +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ +#include "Actuator_Control.h" +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +/* Model Code Variants */ + +/* Forward declaration for rtModel */ +typedef struct tag_RTM_ActuatorControl_T RT_MODEL_ActuatorControl_T; + +/* Block signals and states (default storage) for model 'ActuatorControl' */ +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ + +typedef struct { + real_T Integrator; /* '/Integrator' */ + real_T Integrator_i; /* '/Integrator' */ + real_T Integrator_f; /* '/Integrator' */ + real_T Integrator_DSTATE; /* '/Integrator' */ + real_T UD_DSTATE; /* '/UD' */ + real_T Integrator_DSTATE_n; /* '/Integrator' */ + real_T UD_DSTATE_o; /* '/UD' */ + real_T Integrator_DSTATE_h; /* '/Integrator' */ + real_T UD_DSTATE_j; /* '/UD' */ +} DW_ActuatorControl_f_T; + +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ + +/* Real-time Model Data Structure */ +struct tag_RTM_ActuatorControl_T { + const char_T **errorStatus; +}; + +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ + +typedef struct { + RT_MODEL_ActuatorControl_T rtm; +} MdlrefDW_ActuatorControl_T; + +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +extern void ActuatorControl_Disable(void); +extern void Actuator_Control(const int16_T rtu_Act1_pos, const real_T + rtu_Act1_cmd, const int16_T rtu_Act2_pos, const real_T rtu_Act2_cmd, const + int16_T rtu_Act3_pos, const real_T rtu_Act3_cmd, int16_T *rty_Actuator1, + int16_T *rty_Actuator2, int16_T *rty_Actuator3); + +/* Model reference registration function */ +extern void ActuatorControl_initialize(const char_T **rt_errorStatus); + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ + +extern MdlrefDW_ActuatorControl_T ActuatorControl_MdlrefDW; + +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +#ifndef ActuatorControl_MDLREF_HIDE_CHILD_ + +/* Block states (default storage) */ +extern DW_ActuatorControl_f_T ActuatorControl_DW; + +#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/ + +/*- + * The generated code includes comments that allow you to trace directly + * back to the appropriate location in the model. The basic format + * is /block_name, where system is the system number (uniquely + * assigned by Simulink) and block_name is the name of the block. + * + * Use the MATLAB hilite_system command to trace the generated code back + * to the model. For example, + * + * hilite_system('') - opens system 3 + * hilite_system('/Kp') - opens and selects block Kp which resides in S3 + * + * Here is the system hierarchy for this model + * + * '' : 'ActuatorControl' + * '' : 'ActuatorControl/Actuator_Control' + * '' : 'ActuatorControl/Actuator_Control/Actuaor1_loop' + * '' : 'ActuatorControl/Actuator_Control/Actuaor2_loop' + * '' : 'ActuatorControl/Actuator_Control/Actuaor3_loop' + * '' : 'ActuatorControl/Actuator_Control/Actuaor1_loop/Difference' + * '' : 'ActuatorControl/Actuator_Control/Actuaor2_loop/Difference' + * '' : 'ActuatorControl/Actuator_Control/Actuaor3_loop/Difference' + */ + +/*- + * Requirements for '': ActuatorControl + */ +#endif /* RTW_HEADER_ActuatorControl_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/ActuatorControl/ActuatorControl_mr_codeInfo.mat b/src/validation/slprj/ert/ActuatorControl/ActuatorControl_mr_codeInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..55819895a4619ec5d8d039bb1b42e418738f57ff GIT binary patch literal 5277 zcma*q_di?h{|9i~wOcW3)@UiM6`L5LYExBvQ>%)mMa&RI?X5R8(^gxn6{T)FYSg%? zw3M_pf`ri65fX%NKA-RR5BOe>^E}t}IOlyHuj_|%oyT=-j2x_uZb@n=0VQpW925hC zLjx2f?}qwD213HaK$3Tjoh|NYsw+quhX?pZ2KY-t9)Tns9zZ26p`ns0nvyEoAPp4| zP+L+Js0x()f3`mi|JN8TYykA(eY%)RoS%=+3&x>P!wJTrt zHUlZ36V{ZWFG<>R(jI6XaJwW}SpzwwhLmoTQ&iFU`{`4F9O0?IxbhD@CppBWhnm+M z#D+?ffIF&EWBoveRW$(UKS_;z|4GVmVU6K)=B;MFHSQZ4$IfoSmU_p0J=I4#1=?R? zTcnbDp|zxXOCK2pZS+jB2=5$k^FYtw<92!paZN{y@pP!2-_aze*0`Gf&>n2NEorTn zN`Tu}E3`9y-iT)mTp@(Q2!^=MjJ3%U~+~8-dzaK4BjwPG%haq3Xc^x=kW%n{GDDDJlNoieIAeTxyk*JfOEPVc{8? z_WAcLZQ5Mx3it|aXC!y4Rby5cOU7@sHFD%h_S@Blb|*w>bClURiZ_}$@{6?> z?KNs(?Y&&m-@PE+61X@Q!2E2A0pC+Du@pYb71mmmKakdi=K99kAgY`7N}>)lB+408 z_o+#R6slFtAK^MEx8@w)kf(J^V%Vg~Ey7WN`tubozM%2t`bFKFNvFbq5x=OVpI&Ug z-|D~4(r|pF5ajsF#Ob#sft4_rM^LYQn^~T09Oe0CAW6a@?F%{-ew7WW zRH;K9$j|gU81ncfRH1X8Z3WwPF=1?Dx{<^1v}W|`!N*XHPA#v%6#MBn%tS%F5VLqB z%e6u-Kl{%Ic)!o{phJMB$>mZBwqa9ppPLSH4eo{+q{GhJe-5i}T&C+H4 zG}?>7Hv!ED!#`(Z9(9zg@G6@clQZM$8m#euXS(XF92@^r@jUuU+*MDR?c11NEuu43 zPXbB~68#o5nygxc*AzP43^&O})&)!I`ts zV2mO@Z{^Z7zoM}=SttA9_eN|YPHC!>y~a&yfU~}V`^GjO4urcoXXOe$FSCd?K%g&^ zxHS93urv1)pS@5PJao>ax~X`}t`V6RFRNgs4}*r{+FknW-b)A&nN=jXNfkq<{CX5W z8&z~N^+YoEK#w}PntxVZ#rUCjzCxF5*^9=*nuAo^;z+M8Dmsq&+_CY#NTnN+)89ZMwff zB^6?U(tfB7J69OHE$5D1Bx~DbdWnDtb1iD0iqYk3OK!buB>F*P^d` zw0-E8O$cugfIg94y!*;#jYeiGf}TXicN?z*zLo#L8iw417tG>&zgvW4r=D?t7(3B1 zM!rWY{F2V!W~J&Xmf6;#@$pjMzg~4Et|d_wL8bl)Xm9I%g_V~9325{+*OT6I|Alx_ z^V#0!Li}Gt&g1b<)}>-4xO$~`Mx<=R!CWRqwkzLk_rGe3U87zW%PWR)r1MDwRvs7O zRk>26ogZu4v<&oLj}=OnDl!)PSK3V5!CZXAs1U}I?puUj0p8lbz*QrSXcg(pZG$z= z)Ws`e12y7|$J^~+N9N3#*G2#(CXOO?$3U!{=Cjd1K}BT!_Da0`jU5p`sf|d~<-+%* zwio_e5caX(*n357eF4(Zz)dT5@A0t&*r$U^a;@n4bhyVKx(EiHTb%2OS)b=T z-H;HpK3^BNJvPHwO@SSOwBpke0*xnxV`qg`Jw>XfxLP#@}c{4Sy=sSg&g^4ra9E_SUGDyV>oi=+G%YoZ>NF%Ec zuWsD%kX)^dR@szQ-IS%DYkf#vi8o$!B?`ajI+Ld3r&Fi9NT)z2MyE%|lpQfZUG@2M zEI{W+hoj@WYKshTLHfnU>5or~x>PT|;Kew%bfB`9QRQFA8aJM-_ACx>VkcvIQ}*Iy zapWd`FUb9##fit*ftX%sR*%8ZCU_!d0UeW&x_2!1X_kBE|EhsPP}2%%}dZPRbEAUtDJbNdG-1BB#y_>l%8SGLP&(#yf@IRkA4%ZcG3s* zf(P`R4ad;*pJ8@{kzn9FSk((&eiaE_ooGkrqpYF5W$YfzjfAjA?A8fh>cCY~1HHI}) z*sure5a(@&yyCEjQ%N!#4XA{;>qqnPaog5td@1+qiY`-{7Fm*fv-${FVpF@=Kcepz z_`J7#g4?fZ0_dk)M#@R>hpA68L<{E6{csoNT$=e5>g8D8+Ed=&$Gi_>h;6&&#i;5f zq8q#TG9V)Of)W@%b)l2ZU8zN2%Jr}Lw$Gld^JJ3_yC5wJt5FbOU5^Qr|2s0uP^s$k z40ESgR6R-ZaXaIY)Y7BqI?_c7g1L(JGJ+wJ>vv>zvPaz0MnJgE);)sCk^$GeY|@E8 z&$h^)#IpstG9XSxl`{uYun{D7b$TME(pnkEu4 z5y81KpQatXKh(+jWKC*PKZ7q#o0FShFyxx5ZN*KviCpF-hrrIH%7{4cbM<}0;m92QM5;2c#6Lb9VCKBrj|Cd0_GnyH%~97uygyk&&?_j?Zw znn)fc4t)778YGxriKUr+nojWhTI*|_etNl@)ej4M!57Z&geRQuwsnW$2`9E#rZHu( z0sOgMt4Yj(p5D`o^8*R}AY>MLKmfH*O}o7u*D5kwu_}0Tr8aZ(ERZ_ZS(Y_qGYu59 z|LzcHUnP#_!mmboo<;ZZ?1r>ZgI9KlGovFR927#gftS07PW}heucJkv-b2uIXrkAy zyc5EyX&qDj)ZOv%lTS@j6vyqMc+W!e)P&8O`NV9MLK=-n!&VZ zbvK;;;U}7)n&n{U=HkQ??|%ZT=N4tJWs+~-Mb8mM0vnxu-6`KY=V)Pj-XxBTEAdIGSUC zzIjjCws1(iD4T^$r9@_Ib874o(pSM9 zPaq+v{44Od?E;V`vgQ)^o0@(cFj(J&m_ZJ#uj!lquIWF09`;oG9K*74K0EIc?Z?-$ zdhTR&+~>M$fn7OL{9So`+2;7N#93b@-=X1XtbH*`W)1{mFai~!WTru&w9w;{Yup5P z^#as0y}4){cgw1Kl;Lp+5T*RTuYs$(?EsM9K+@RG5LiyZ7iUJ}UuU#mz-6Q400k6H z9&?~k;9AV?$gy{*r|3iHmy>yE&DUjJ&H9k~wFH=7BO?RP{f;k%AG%Au?SwSrs!XHI zh83l(3Qt%zMwnq07bR$y&>toHgUp-qR~+_agitpJ1#uLhZQAlUcXzN($~(VbYaeE! zLmSg$tA(pGlF~f|#SsXgvaUf&)59!GjpWJyB zI{S8)C0$ESyyv8UBxU7i%r|IbU1>tg^)i}Gc;XUj>!S6i5oXfDaY1gaocIx-&D4`S z{|y8BIG{lIbd51Aac_nvrV#stvZb{>R}~0&TL^*8iS!(Rj!EkUk7>I3Zji8FF%6S7 z89s}_t9Er}O{<2P;sVe=b`C&Dotc-O;p5ontTJ&9KkCg6;GuP9$NP0`mIrlj?DOv@ z#~SPJuP`Q$*YMqaZ6;F{=g+owi9DLk%BGY*=~HKhTf_zX(HNd}1fO_b7b-ipctRXW zn4_w1v}Z6;FvTOLwA!S=Eq#sm5*Q^P10q4}$BZq{!4KQpK!^+YzsZr8NUmV#mraS5 zFKZJW5=z(eGK1W>(Hw%dFqW3|O@?1QEq?x#vK(Bv<*;}1NiG5lwyT`&&|WrxZx;}` zFyKt(@x1_H14|5(3Icojn>iZbSd~9o-S|}$v6(nArL!_Egi1|R zeCjwGX1m2C5tD>(-j8qYtFniKUdf|_y%PVsIoNXkO8=&CS2M{ZpWZy1KUg25MC?hM zXsw^Tn8{91Tiy=F> zXoGk9LdSiMIiGSqXC-D|=dQ_wxsM|!A6|uFyFvgNBfHBg-$3wlb${&Z7UlMeaGcYO zxQ<_Z2IcVGu0=nLG_c&!%Av%*sP`m(x;G*7RS?lyEfps7?#U&C>2&&EtE?BQqdN%MhkgD&Jp@qXai}jG@u*)Gk)^en_V7>> zE5r8a)NW;Ai;o1=z|DLhh^&8=>Y^4O@gPcVkK&givIoGK6<<8ec_5BMrYE|0;08HEkteGLDX75;27pItPkwQC4R b`VN8bPzxz~YScEb-UpWAN)p5W6vX`xghPvA literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/buildInfo.mat b/src/validation/slprj/ert/ActuatorControl/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..4ed3ea9d19f5ab994d2bc9911e705d474dd4d67b GIT binary patch literal 12763 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∋e7`;v-4p8?k8X^hJF6ONM zg_d_81d%RsBKRV>+)_|!_gMFcJe>nb_g7COe4_M;H|pdM=VAWW0L6`{5Vx|~K;z_G zwFq6*5;c{g9^eLwRu(lAnK#+-S{ZAgeJ=NqesPNd_qzxk?ao`>Bt|YxCki0k3P9xG z?$hk7Y?Cw89^m(3yn{@U>Ix0!zKJifXQ|-MPNMG~fF#nGis~>qTMQ-V9T`QMvBlua z%7slEjuW~R!u+qPF`1%5xOFr^ucbb4&`k-Fzo?M7P>wSS%@gg(LT$l>B6PPbhP+}t z&O4z%cWU5^BUf@I;wez#2rgX*-<`D*S4Z3H<;!Ad!M?pz1N(#tMQCb?LQA*MIdQO~ z&N7O0Y#Z8v&8{r0#5Fh3sI~LS?9ToW7h4dC^A}}HZUa0qszten+>M=5urU7v_}hPM zyIzSEptzn2V+uBPp!rlK`dX5n0KKKo9JIV{nMd(+My17B!Rz0Zd7^;}U`6*SSahhn z=&{JLd5jGfX>yh>ANDAznh}!N$*ugTNRbmvxf(DF_B1?^ELU{7S1OSd2NkHq6@ryW zx$Vke{?}4){g+5Qv$ZBrFV#u61iFtM6KQ9vAwR#|6;V(Lkywf&o8JiugxO(f;%2HX zU97O3j}l1=QYLZPFqMgvT{ch3)RBm~RHWj0O?w{=#V|a;NrMOXa>&3cL@iZYm@l17 zR|0AxQ4>TjIEpw+d7(@B=5ac%oGm2iD2(4B*}0@FTYm#4R+$S5%>UX=%}%*}TPUFj z+%4QbN>}NJb*ED%4|pFeAXjuKf>Jb1VgA=C zOZ+d885?1eTe&iE3fhRn6ajG7$XzAs2&X4b&I6!@%A|^}C?b>`ihvX~v8(3ImXvDv z8Q>PeA~r5u?W!~63Anmb8Yt2(gPn^eB_N#kpeQDl9R!xW!okF@XkXgH2<-~M-O{U^ zJPm9njAlIV6be<+HsxNyC@4cw1t7uve?XDujM&*6v_#zm*hQJOMd*dd6P1J6S&9vr z{7?a}*D?v<9q2cvdU848Ry+qSU^$N2poq+|f1Dd3er!3QYM-h6E1+d;^M~Xh4q0>&NmoKgmN8lvq6dgGWkJjk_q>=47Po875;S9S9I&C^#Z?!B}R= zpoStsZt0X*jY&KgrItP=IYry+)OCtx?)}4$S}h@*QiHHSJe) z>{As@`@4uc#VU2@An&Qi<+4&mFD^wHx65hBuPDL>x9pWg$YI0Qm0t>@lu<%+M39GyA90$K=j*Keq!frzbsws zRL0$79+6|o??yu-vrt6EEt_UrftH(h&HU`>r_rN1GLNi|I}3Lzf^pUXT}6h&{$#-u z?QRPp6al-Xxou8GsnU+q#!$NSI<|{|uM#NEnp`rzaG(TbwmMM8ipqy%Ktd6G1sWda ze*@4PgoP288G%sqh2xoqP-q$C4zrk?Yeba0XJGq5-Ijvwhnc(E(01;*RhS$u)R;d8 z?(4C$a^O|@SsW7mXJfOaC><>;^N`xL%Kv9%-6_8XOhB);FAW9~YQYhlF zB|-snd*{PZ%HyW-s6-$ER#1jQVJ14UXcn?in*g^jx8msH0Xe8Fm3?>t^S>bsnfs$c za(JP5QDp^)ks~4EjxFFQwOn@^AY?bwB<>=0xboMa=hWB!C3Hk;#i5g}%N_GCAtH`9 zFf-8<>&-$p3B9g_pgCPjB?{x{YNgE8v@1}I3J+vCoKW26x@8Ot{$xDnQb*)z)TVyC z=knNMk@I(6*IR}k! z9GT1AI4b~iD~llxWf7joxEUq#4a9;ov=K*$P}>UZ0hJCLC2J`n#%+N_#CVRygJ_9@ z3Aj}V71}&x*dke@B~B>H(u28OOy1~3O)mH+7Dk*Bf~mBzrHu%HOD`?}o;Eidmqbd= z>=;3q|3Nr;dR5r8MUrg;xI`mV3wR=Xs|!1b_X$m;KmaY)#^Z!rTTmoI07P;mS!x5` zXLUqsgpG$|5L8Y$M?szdCXylmh9+>@yh5=1^#ml5cL$pTyIbSjN5@en%I`w(OdAKd zTGVoO=YSK5gaF1?<<*UV&`mgBAGHaUO7+?aLeIFb(Hta)F#m%~bAlHSO3Q_45-uAa z9;C*oEh97l=IqTx9%R-_pm92*@afkAPP08k_wXqN}e;|NI=&7HGZBpbY~vB!A6aFJ}l z9d=p9+;Vmj%>TyaJpYsK(6)i-sqT{QYvqA?w9~>x;=lvr^i4e1b0U$jfhIQ;h5EZ? z*h@ZQcwn4misbGER?nyqHxB=Bk!bMXc=wg`>Lh{Q0z6lDxg%#v&)!O!f}fhQoI8ap z+4}IPpms}1p?Q=zQN&e7pfes^A;xYiV9dW5yld9E>q$`d%(HxHz<#O1H zoRvUr6s;O)?8y&aPMB#wa-oUbwK_>Q$s8Qo2p(fBq{Dx;DOEQPZtj8^UjQd)Lhrk8 zbI?^JHr&PLS|j*X_ar!p+Guli1$IJPaY)nAd>|2^uzpbrk!Ap8K=?d(F=&cY^md;LSWsp zJx+0$tDG$X3M$ZNpwJgiU5UuxhazTXj`ytaO-U}vj!Tjwczdk~rE%KqB6Z=a?b0hF z3_4FVHxD-y_lft})I6!g$_Pa{3<-pQYGv*}fCWX9N`)*Ew)hgLw=OqLTj0#fnC7CL z>>iF-Se$I#ZI;>ccA1>Qw;QuC|3h%OEYPALgwp~F7m2JiGs--31#ZUapv68@X#6NZ z3q=HQAc5~uJ?#1HHoyXXa<&;1)tEeMY$&qzfVkbQ?j~O1?X(k=vMAy(#M>-EjF?pf z3!kUVC+$04^6}=*3W-Z=yf#;_0T1`E4xz(%q08L~OI%xuFY} zU=GJ6SCKOS)uc-p_zqvqXY#CB_c7r%kz$Pk>)8`YA zRszLY4~Rlm+A{pL5@j~MY=x~r({n1t0QJ7wTxjpKnC#S;Sc-au+D0iAvFU+4-n)IF z*`okOvXzk5FD^l7FD2crv`TVX1wu2}>Ijfr?{J(AD^w)nnH}ly*91{zG0J%2UeP&i z10fXQx@Ba=>dc_Z8VBCqgaXUjx4`@lt$B0LJ`+J35tgxiK`wDDN%3Gc%pB_Il_a9Hx$G6(F0>Z6l3vlxb3)| zEZAK~B;sPi1HxneY!B2&(gvaxGQ&~#$dTm%<&1VoCoc*dt8@GR)@6~k``}bu!wyA6 z-9qdH(@l@FFWI=Qr8qn6e9Nja_mR`BfL(8b3|5mn1{i(rlU_8y?aRao=Kvd(Y=5yZN%3PCWgSYfH<0Ta?obqt38!EyKMLhUMtnl`<6xVk5 zFUR8W>?qNdk!>+3>e1{EZ>8B$a!=U)-9K)+7T;>qFEe9?Dje zbPh@ql%5IUzVKH~(g0#683^GNh#yGW!&@9+kX7nenA#WW-k)okJjkadg(M$ZXcVN_ zLlE+2L0jfSE-kdKJWm@kZD=v{ORy!Foj$p|{gMS`>d8pJSLnec=otekhTg*d>87xM zT$jVNxZi$q4a1ZDl}1}g5B(~%nFe}I3q6Blyu_hrgx*ubsCWEY4gG0??=|o=L;vz+ zmDayF|C_@&RDGv=?E$+m&s|++)6FPB7b; z1PnLuMO`>jXLCZG4StpZhQ3eUZ4_vYph*d;`Lk;o;-~LX z4{CLK#P*pV^9eub}_KTMD1Ns9RVKk}L^-orlb20t4hcw)tK4NaK z#6W8onlyg@$t7FvC2l=@alWbW==iVUtIjm(xrYya*K}w6iIqQ3wcOnI&|FCBM3W{q zT2Oa@f66b*4}G(3{oyV?P+&)z^kOhmU={+;rP445p z@uT;DURCdp@ldb!H0h#mWVe@ag$a02*y*(jQ%mUU@q$wZ-$}`+Wa+#@0ump<2_V z?wQrzjr=FsYhjNUY6rce`4lj0MU(0uzqa$s(J@aQ?DxvOEz`SJgQS*1(h}dFx(to$ zJgwiI&)+cjB+wcyXwr+0F9d8!(?EwWg6_O&7W?7cSZCtkRs(Hl+^QOR8O=yzo;L~lo#;aA^Utc-0 zq<^~%NNP-zQpV3enRq7l^}}zk>NaK4&8MNEf@#v+XTSd-ZAY~Kj)!Jly8Py>#qd=S zO`7`SiFU(t;`N7Hk64)a=j<8K@{MTH#{-kE<$s(OKDYSVYeC*O;vuOaP5Nx{sDPV| zqr*0)f7$9>YxT{LKx+ea7zg7hk#X!sBdS8oYI7xi_2q+@bz| z2d51l_JMbx^&y&cXwS*WV{KE9uJMb`A%iBbjRWq#J?^tAZ2kjVIhR|PxKY~NF(%2F zj~A;|K!4Hc_E0=-ciaM%xl07$Qbh%~vTY&VZiPm=>zuuk4llEv2{rgFC6~o^?_c4; zBFYIob)|$T%PsGf5=xI9L>Yv~Ec3-_^h;@^7uSljY%&3vpu{96MbYa{+Gh?oDZA?y^ghAgXM)#W9F11Eq4 zN^McI(}T+|fzpuzkT>Z;22x1IkVJSd1oz)n+_w{LBwzI~xL zv4{D-#6Ik-un%38!nD2LzH$Y@lYJ5kZEk`#&!!S`NBJ(y_^SnQ9?TnPI#|HC(yef| zArBKZH)4$WaN3N@J7sRfVPAEh8*vIF6v5)Y^}e--J+4o{AIS^YmT^KYoZGv1|6QrO ze%O?|6cLG6GM8ci?QTJls1v~}$dx%Jm8lS9Mkcq2}OXRk?ztTl~f0X zF;sqiHC+Fzsq{qkg=#-Y|MgXj1NaY}|61Vxn-*wcjR&qfEh&cMK#RFkIXvAP#+{HN z_kyRRdeY1q0r?Uf@`XcAJ>)RJ`Drt2n^NmnR25;8t67uzM{oYolYeyQAMNph^PgeY6ZrqX-+wJoMO(ny zzl6#OtR?p&ClKU4`JBuL2XZu&&7Iuv|)B|?6>QZT6g(qN~>qc=NNnA z*;(7!zZ3S%DpFcjIsYj_B%bIM%um=K~00S3ubj?;xJaO zp2M`k*qjevY z#iZtJF@M!xzjJnV@)uX`JZ4wVjF?eJzwWfT`LjJ{kasZlrvJT_7Z;~T%)GFC{r(X- z`^Z5qHUKnzS|=XZkFJC-xMeD1LBgy`{s`ku3J9}k> z^-mtPJAY>Q`Fm4Wjl;;hpUz=UmPF5b`pE`u+0Ci-yJ6&?@1=beR42LK^R+h>emrON zi#{0n$JSTo7Vk|P@$$GGC(o?-wR3xn{OyO()YdZ+tL?A%wO2}TpKe}UWYC{^;a{Y+ zUUua7WB*)T`lSwWx~!mSF6Sb+bAJyqTt7bNj%I*yno;B8w5RpA7AP{Ig5q&U2SMJwfUrH-2UT9| z@67Ma1@;H#1NKX153`gR%XVO!vS-*gnIG8w>=t$9hJt+XQ2_mjE3PID)K(2HVEkxcpl|(5W)KZ{BOostAefDn0(yqQfFDc# zLgYA1eOYoBvXOf<1p<2V5C09O=*izSfZve2HK728CBH!mOa7!EVTk-e^KpUSX}(MF zQFZbgO}dSc?nnVW`PC+$KeAFo) zHS!}SLG1wzJ-J2$h#|Q`Kl&C+zbpmxA zB@IAd6p&Mx%a38OV;^AA*K9+t%E`J5XVF3Z?w6| z1Jf5B+WzPElO4KV<_1e-uyqhkKk;0ue!$3#(c9Ne{E%6=r~#&Db_=u)q^gTcOA@Y) z7_Hv7>$}(qmU@jMx&~SY&?GqlY#C_nPm`Ko8~;n2ju|yq#XR(hA!O7akkpSRU1~o1 z)~}=Dzh7E#A#hVc-5}5>&7n!poFT>LW~rlhoE@BTe0^G@hJn^>n)LdFtaHJ|$z!Z% z3?KYGcVlhP@yw!0i763ZtgoB?`ix-R^>O>Aj0aemG->9H%y(0^#GhZ}pBX!&|J-d* z;G;BY`ToZ9&fZlU=X6O}{K||*M-l_AeQAVNZ#N7z<{sHN1dvasNmnn%gudAyfX6TeQn~b@{M@9-k)sv=YAh zfAfM$U4O+Z!+*(r-Q0ae_Nn{cdH`3~dP1d~a^)1`c6)DKxb*ptIOS{WfVw=OQs@mI zpk3}zsg!RwKE{1?G}t>azF=m>E+3$QZcwQwTNXUxl66?NVqYlx)?asz01b47N^wct z*eRCi**~*+$p(GB%xS>TaDhqPU19uWsn4=*;odho-`{TqF4uL2N};#3fD5IaU{Yv} zQJ`IpP^o>4v;OI{IQ*I=ovxmsT-gM4p#xM3y|D@md3&f-q)&>Z;5?TpbBqoy*t6iL zI?zBns8pz{*c@|r2j}^R*ZXCi$x^?eTTj-F~qFXrL8Lsv>ZmE0<4XW8-wE zwu2!_4xs!m!{EUH9QUhY7H9gxbeHK8({ZLHOpQ!&Ou1D~D1AjNN> z0w`z+nF0)ALM{jHjUeQI;2sG=ZUOFJz^{Y@w2uMif8f3a{Hhf|`xo#l;Q;MpfEftf zfq*|KI6&JCV5)(;0q~ox09yJ_NC|K;KYk?~poR7jJ2^lL>mf`L&}w-`RbEaG*JS9v zFi?6^Xao!6OF{{aVnCg#sT>?mF2LPX@xWbJ$-wb>#F#y3PZMIqJ|4J!1Y|NPY7-jy zXl;c;BPYoJ_&f^A|IEzCLHYj@kQxP}Aut*OLoWn4K+Q>5`3GzW!iryD>kfa71Iqs_ z%u^U(`~QZX*GFAE8Un*B1SFc`q0RMKe|#=lU2@vjEHRy**R@H-QlcpiDz!C+^~j%h zE_T=_l6VIsqQkm#`* zouymUJx^_oKD0v2hSQvp9VB`K9j;K230ExC|0Kc(PvlQ@az-uJ+vvWRjOyGV*{$(FT4P zLqMYYr>tN5!_-f{-RiIYpDTw=7~X(9u|L-`F@f2A^2W96nwO;tO#n|W?W?o85v1dO zal!liV5gd3XNGkk1NK#&*sZq0|HQ)gQ`6<2+*!h~7A%T3$iV0bGIsBT)GFS!PFtGR u&vRPxav#4RNGbZ3UPf_{DEdZvMsu*}!n2Q=UO1~XH)l-j|0%kT;Sc~>Y&y08 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/defines.txt b/src/validation/slprj/ert/ActuatorControl/defines.txt new file mode 100644 index 0000000..e230bb2 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/defines.txt @@ -0,0 +1,15 @@ +MODEL=ActuatorControl +NUMST=1 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_c.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_c.html new file mode 100644 index 0000000..7a47a09 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_c.html @@ -0,0 +1,826 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: ActuatorControl.c
    7 *
    8 * Code generated for Simulink model 'ActuatorControl'.
    9 *
    10 * Model version : 1.72
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:02 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#include "ActuatorControl.h"
    23
    24/* Macros for accessing real-time model data structure */
    25#ifndef rtmGetErrorStatus
    26# define rtmGetErrorStatus(rtm) (*((rtm)->errorStatus))
    27#endif
    28
    29#ifndef rtmSetErrorStatus
    30# define rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val))
    31#endif
    32
    33#ifndef rtmGetErrorStatusPointer
    34# define rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus
    35#endif
    36
    37#ifndef rtmSetErrorStatusPointer
    38# define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val))
    39#endif
    40
    41MdlrefDW_ActuatorControl_T ActuatorControl_MdlrefDW;
    42
    43/* Block states (default storage) */
    44DW_ActuatorControl_f_T ActuatorControl_DW;
    45extern void Actuator_Actuator1_loop_Disable(void);
    46extern void ActuatorControl_Actuator1_loop(real_T rtu_Act1_pos, real_T
    47 rtu_Act1_cmd, real_T *rty_Actuator1);
    48extern void Actuator_Actuator2_loop_Disable(void);
    49extern void ActuatorControl_Actuator2_loop(real_T rtu_Act2_pos, real_T
    50 rtu_Act2_cmd, real_T *rty_Actuator2);
    51extern void Actuator_Actuator3_loop_Disable(void);
    52extern void ActuatorControl_Actuator3_loop(real_T rtu_Act3_pos, real_T
    53 rtu_Act3_cmd, real_T *rty_Actuator3);
    54
    55/* Disable for Simulink Function: '<S1>/Actuaor1_loop' */
    56void Actuator_Actuator1_loop_Disable(void)
    57{
    58 /* Disable for DiscreteIntegrator: '<S2>/Integrator' */
    59 ActuatorControl_DW.Integrator_DSTATE_h = ActuatorControl_DW.Integrator_f;
    60}
    61
    62/* Output and update for Simulink Function: '<S1>/Actuaor1_loop' */
    63void ActuatorControl_Actuator1_loop(real_T rtu_Act1_pos, real_T rtu_Act1_cmd,
    64 real_T *rty_Actuator1)
    65{
    66 real_T rtb_Sum;
    67
    68 /* DiscreteIntegrator: '<S2>/Integrator' */
    69 ActuatorControl_DW.Integrator_f = ActuatorControl_DW.Integrator_DSTATE_h;
    70
    71 /* Sum: '<S2>/Sum' incorporates:
    72 * SignalConversion generated from: '<S2>/Act1_cmd'
    73 * SignalConversion generated from: '<S2>/Act1_pos'
    74 */
    75 rtb_Sum = rtu_Act1_cmd - rtu_Act1_pos;
    76
    77 /* SignalConversion generated from: '<S2>/Actuator1' incorporates:
    78 * Gain: '<S2>/Gain'
    79 * Gain: '<S2>/Gain1'
    80 * Gain: '<S2>/Gain3'
    81 * Gain: '<S2>/Gain4'
    82 * Sum: '<S2>/Sum1'
    83 * Sum: '<S5>/Diff'
    84 * UnitDelay: '<S5>/UD'
    85 *
    86 * Block description for '<S5>/Diff':
    87 *
    88 * Add in CPU
    89 *
    90 * Block description for '<S5>/UD':
    91 *
    92 * Store in Global RAM
    93 */
    94 *rty_Actuator1 = ((0.001 * ActuatorControl_DW.Integrator_f) + (0.339 * rtb_Sum))
    95 - (((rtb_Sum - ActuatorControl_DW.UD_DSTATE_j) * 0.00272) * 0.001);
    96
    97 /* Update for DiscreteIntegrator: '<S2>/Integrator' incorporates:
    98 * Gain: '<S2>/Gain2'
    99 */
    100 ActuatorControl_DW.Integrator_DSTATE_h += 2.73 * rtb_Sum;
    101 if (ActuatorControl_DW.Integrator_DSTATE_h >= 0.1) {
    102 ActuatorControl_DW.Integrator_DSTATE_h = 0.1;
    103 } else {
    104 if (ActuatorControl_DW.Integrator_DSTATE_h <= -0.1) {
    105 ActuatorControl_DW.Integrator_DSTATE_h = -0.1;
    106 }
    107 }
    108
    109 /* End of Update for DiscreteIntegrator: '<S2>/Integrator' */
    110
    111 /* Update for UnitDelay: '<S5>/UD'
    112 *
    113 * Block description for '<S5>/UD':
    114 *
    115 * Store in Global RAM
    116 */
    117 ActuatorControl_DW.UD_DSTATE_j = rtb_Sum;
    118}
    119
    120/* Disable for Simulink Function: '<S1>/Actuaor2_loop' */
    121void Actuator_Actuator2_loop_Disable(void)
    122{
    123 /* Disable for DiscreteIntegrator: '<S3>/Integrator' */
    124 ActuatorControl_DW.Integrator_DSTATE_n = ActuatorControl_DW.Integrator_i;
    125}
    126
    127/* Output and update for Simulink Function: '<S1>/Actuaor2_loop' */
    128void ActuatorControl_Actuator2_loop(real_T rtu_Act2_pos, real_T rtu_Act2_cmd,
    129 real_T *rty_Actuator2)
    130{
    131 real_T rtb_Sum;
    132
    133 /* DiscreteIntegrator: '<S3>/Integrator' */
    134 ActuatorControl_DW.Integrator_i = ActuatorControl_DW.Integrator_DSTATE_n;
    135
    136 /* Sum: '<S3>/Sum' incorporates:
    137 * SignalConversion generated from: '<S3>/Act2_cmd'
    138 * SignalConversion generated from: '<S3>/Act2_pos'
    139 */
    140 rtb_Sum = rtu_Act2_cmd - rtu_Act2_pos;
    141
    142 /* SignalConversion generated from: '<S3>/Actuator2' incorporates:
    143 * Gain: '<S3>/Gain'
    144 * Gain: '<S3>/Gain1'
    145 * Gain: '<S3>/Gain3'
    146 * Gain: '<S3>/Gain4'
    147 * Sum: '<S3>/Sum1'
    148 * Sum: '<S6>/Diff'
    149 * UnitDelay: '<S6>/UD'
    150 *
    151 * Block description for '<S6>/Diff':
    152 *
    153 * Add in CPU
    154 *
    155 * Block description for '<S6>/UD':
    156 *
    157 * Store in Global RAM
    158 */
    159 *rty_Actuator2 = ((0.001 * ActuatorControl_DW.Integrator_i) + (0.339 * rtb_Sum))
    160 - (((rtb_Sum - ActuatorControl_DW.UD_DSTATE_o) * 0.00272) * 0.001);
    161
    162 /* Update for DiscreteIntegrator: '<S3>/Integrator' incorporates:
    163 * Gain: '<S3>/Gain2'
    164 */
    165 ActuatorControl_DW.Integrator_DSTATE_n += 2.73 * rtb_Sum;
    166 if (ActuatorControl_DW.Integrator_DSTATE_n >= 0.1) {
    167 ActuatorControl_DW.Integrator_DSTATE_n = 0.1;
    168 } else {
    169 if (ActuatorControl_DW.Integrator_DSTATE_n <= -0.1) {
    170 ActuatorControl_DW.Integrator_DSTATE_n = -0.1;
    171 }
    172 }
    173
    174 /* End of Update for DiscreteIntegrator: '<S3>/Integrator' */
    175
    176 /* Update for UnitDelay: '<S6>/UD'
    177 *
    178 * Block description for '<S6>/UD':
    179 *
    180 * Store in Global RAM
    181 */
    182 ActuatorControl_DW.UD_DSTATE_o = rtb_Sum;
    183}
    184
    185/* Disable for Simulink Function: '<S1>/Actuaor3_loop' */
    186void Actuator_Actuator3_loop_Disable(void)
    187{
    188 /* Disable for DiscreteIntegrator: '<S4>/Integrator' */
    189 ActuatorControl_DW.Integrator_DSTATE = ActuatorControl_DW.Integrator;
    190}
    191
    192/* Output and update for Simulink Function: '<S1>/Actuaor3_loop' */
    193void ActuatorControl_Actuator3_loop(real_T rtu_Act3_pos, real_T rtu_Act3_cmd,
    194 real_T *rty_Actuator3)
    195{
    196 real_T rtb_Sum;
    197
    198 /* DiscreteIntegrator: '<S4>/Integrator' */
    199 ActuatorControl_DW.Integrator = ActuatorControl_DW.Integrator_DSTATE;
    200
    201 /* Sum: '<S4>/Sum' incorporates:
    202 * SignalConversion generated from: '<S4>/Act3_cmd'
    203 * SignalConversion generated from: '<S4>/Act3_pos'
    204 */
    205 rtb_Sum = rtu_Act3_cmd - rtu_Act3_pos;
    206
    207 /* SignalConversion generated from: '<S4>/Actuator3' incorporates:
    208 * Gain: '<S4>/Gain'
    209 * Gain: '<S4>/Gain1'
    210 * Gain: '<S4>/Gain3'
    211 * Gain: '<S4>/Gain4'
    212 * Sum: '<S4>/Sum1'
    213 * Sum: '<S7>/Diff'
    214 * UnitDelay: '<S7>/UD'
    215 *
    216 * Block description for '<S7>/Diff':
    217 *
    218 * Add in CPU
    219 *
    220 * Block description for '<S7>/UD':
    221 *
    222 * Store in Global RAM
    223 */
    224 *rty_Actuator3 = ((0.001 * ActuatorControl_DW.Integrator) + (0.339 * rtb_Sum))
    225 - (((rtb_Sum - ActuatorControl_DW.UD_DSTATE) * 0.00272) * 0.001);
    226
    227 /* Update for DiscreteIntegrator: '<S4>/Integrator' incorporates:
    228 * Gain: '<S4>/Gain2'
    229 */
    230 ActuatorControl_DW.Integrator_DSTATE += 2.73 * rtb_Sum;
    231 if (ActuatorControl_DW.Integrator_DSTATE >= 0.1) {
    232 ActuatorControl_DW.Integrator_DSTATE = 0.1;
    233 } else {
    234 if (ActuatorControl_DW.Integrator_DSTATE <= -0.1) {
    235 ActuatorControl_DW.Integrator_DSTATE = -0.1;
    236 }
    237 }
    238
    239 /* End of Update for DiscreteIntegrator: '<S4>/Integrator' */
    240
    241 /* Update for UnitDelay: '<S7>/UD'
    242 *
    243 * Block description for '<S7>/UD':
    244 *
    245 * Store in Global RAM
    246 */
    247 ActuatorControl_DW.UD_DSTATE = rtb_Sum;
    248}
    249
    250/* Disable for referenced model: 'ActuatorControl' */
    251void ActuatorControl_Disable(void)
    252{
    253 /* Disable for S-Function (sfun_private_function_caller) generated from: '<Root>/Actuator_Control' incorporates:
    254 * SubSystem: '<Root>/Actuator_Control'
    255 */
    256 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/Actuaor3_loop' incorporates:
    257 * SubSystem: '<S1>/Actuaor3_loop'
    258 */
    259 Actuator_Actuator3_loop_Disable();
    260
    261 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/Actuaor3_loop' */
    262
    263 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/Actuaor2_loop' incorporates:
    264 * SubSystem: '<S1>/Actuaor2_loop'
    265 */
    266 Actuator_Actuator2_loop_Disable();
    267
    268 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/Actuaor2_loop' */
    269
    270 /* Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/Actuaor1_loop' incorporates:
    271 * SubSystem: '<S1>/Actuaor1_loop'
    272 */
    273 Actuator_Actuator1_loop_Disable();
    274
    275 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<S1>/Actuaor1_loop' */
    276 /* End of Disable for S-Function (sfun_private_function_caller) generated from: '<Root>/Actuator_Control' */
    277}
    278
    279/* Output and update for referenced model: 'ActuatorControl' */
    280void Actuator_Control(const int16_T rtu_Act1_pos, const real_T rtu_Act1_cmd,
    281 const int16_T rtu_Act2_pos, const real_T rtu_Act2_cmd,
    282 const int16_T rtu_Act3_pos, const real_T rtu_Act3_cmd,
    283 int16_T *rty_Actuator1, int16_T *rty_Actuator2, int16_T
    284 *rty_Actuator3)
    285{
    286 real_T rtb_TmpSignalConversionAtAct1_c;
    287
    288 /* Outputs for Function Call SubSystem: '<Root>/Actuator_Control' */
    289 /* Gain: '<S1>/Scaling4' incorporates:
    290 * DataTypeConversion: '<S1>/TypeConversion4'
    291 * SignalConversion generated from: '<S1>/Act3_pos'
    292 */
    293 rtb_TmpSignalConversionAtAct1_c = 3.0518509475997192E-6 * ((real_T)
    294 rtu_Act3_pos);
    295
    296 /* FunctionCaller: '<S1>/Actuator3_loop_caller' incorporates:
    297 * SignalConversion generated from: '<S1>/Act3_cmd'
    298 */
    299 ActuatorControl_Actuator3_loop(rtb_TmpSignalConversionAtAct1_c, rtu_Act3_cmd,
    300 &rtb_TmpSignalConversionAtAct1_c);
    301
    302 /* Saturate: '<S1>/Saturation2' */
    303 if (rtb_TmpSignalConversionAtAct1_c > 0.3) {
    304 rtb_TmpSignalConversionAtAct1_c = 0.3;
    305 } else {
    306 if (rtb_TmpSignalConversionAtAct1_c < -0.3) {
    307 rtb_TmpSignalConversionAtAct1_c = -0.3;
    308 }
    309 }
    310
    311 /* End of Saturate: '<S1>/Saturation2' */
    312
    313 /* Gain: '<S1>/Scaling5' */
    314 rtb_TmpSignalConversionAtAct1_c *= 109223.33333333334;
    315
    316 /* SignalConversion generated from: '<S1>/Actuator3' incorporates:
    317 * DataTypeConversion: '<S1>/TypeConversion5'
    318 */
    319 *rty_Actuator3 = (int16_T)floor(rtb_TmpSignalConversionAtAct1_c);
    320
    321 /* Gain: '<S1>/Scaling2' incorporates:
    322 * DataTypeConversion: '<S1>/TypeConversion2'
    323 * SignalConversion generated from: '<S1>/Act2_pos'
    324 */
    325 rtb_TmpSignalConversionAtAct1_c = 3.0518509475997192E-6 * ((real_T)
    326 rtu_Act2_pos);
    327
    328 /* FunctionCaller: '<S1>/Actuator2_loop_caller' incorporates:
    329 * SignalConversion generated from: '<S1>/Act2_cmd'
    330 */
    331 ActuatorControl_Actuator2_loop(rtb_TmpSignalConversionAtAct1_c, rtu_Act2_cmd,
    332 &rtb_TmpSignalConversionAtAct1_c);
    333
    334 /* Saturate: '<S1>/Saturation1' */
    335 if (rtb_TmpSignalConversionAtAct1_c > 0.3) {
    336 rtb_TmpSignalConversionAtAct1_c = 0.3;
    337 } else {
    338 if (rtb_TmpSignalConversionAtAct1_c < -0.3) {
    339 rtb_TmpSignalConversionAtAct1_c = -0.3;
    340 }
    341 }
    342
    343 /* End of Saturate: '<S1>/Saturation1' */
    344
    345 /* Gain: '<S1>/Scaling3' */
    346 rtb_TmpSignalConversionAtAct1_c *= 109223.33333333334;
    347
    348 /* SignalConversion generated from: '<S1>/Actuator2' incorporates:
    349 * DataTypeConversion: '<S1>/TypeConversion3'
    350 */
    351 *rty_Actuator2 = (int16_T)floor(rtb_TmpSignalConversionAtAct1_c);
    352
    353 /* Gain: '<S1>/Scaling' incorporates:
    354 * DataTypeConversion: '<S1>/TypeConversion'
    355 * SignalConversion generated from: '<S1>/Act1_pos'
    356 */
    357 rtb_TmpSignalConversionAtAct1_c = 3.0518509475997192E-6 * ((real_T)
    358 rtu_Act1_pos);
    359
    360 /* FunctionCaller: '<S1>/Actuator1_loop_caller' incorporates:
    361 * SignalConversion generated from: '<S1>/Act1_cmd'
    362 */
    363 ActuatorControl_Actuator1_loop(rtb_TmpSignalConversionAtAct1_c, rtu_Act1_cmd,
    364 &rtb_TmpSignalConversionAtAct1_c);
    365
    366 /* Saturate: '<S1>/Saturation' */
    367 if (rtb_TmpSignalConversionAtAct1_c > 0.3) {
    368 rtb_TmpSignalConversionAtAct1_c = 0.3;
    369 } else {
    370 if (rtb_TmpSignalConversionAtAct1_c < -0.3) {
    371 rtb_TmpSignalConversionAtAct1_c = -0.3;
    372 }
    373 }
    374
    375 /* End of Saturate: '<S1>/Saturation' */
    376
    377 /* Gain: '<S1>/Scaling1' */
    378 rtb_TmpSignalConversionAtAct1_c *= 109223.33333333334;
    379
    380 /* SignalConversion generated from: '<S1>/Actuator1' incorporates:
    381 * DataTypeConversion: '<S1>/TypeConversion1'
    382 */
    383 *rty_Actuator1 = (int16_T)floor(rtb_TmpSignalConversionAtAct1_c);
    384
    385 /* End of Outputs for SubSystem: '<Root>/Actuator_Control' */
    386}
    387
    388/* Model initialize function */
    389void ActuatorControl_initialize(const char_T **rt_errorStatus)
    390{
    391 RT_MODEL_ActuatorControl_T *const ActuatorControl_M =
    392 &(ActuatorControl_MdlrefDW.rtm);
    393
    394 /* Registration code */
    395
    396 /* initialize error status */
    397 rtmSetErrorStatusPointer(ActuatorControl_M, rt_errorStatus);
    398}
    399
    400/*
    401 * File trailer for generated code.
    402 *
    403 * [EOF]
    404 */
    405
    +
    + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_codegen_rpt.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_codegen_rpt.html new file mode 100644 index 0000000..0804bc6 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_codegen_rpt.html @@ -0,0 +1,33 @@ + + + +ActuatorControl Code Generation Report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_coderassumptions.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_coderassumptions.html new file mode 100644 index 0000000..23e7dcf --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_coderassumptions.html @@ -0,0 +1,377 @@ + + + +Coder Assumptions for 'ActuatorControl' + + + + +

    +Coder Assumptions for 'ActuatorControl' +

    +
    +

    +List of assumptions that you can check and expected results for selected target environment. For more information see, Verification of Code Generation Assumptions. +

    +
    +
    + +
    +

    +C Language Configuration for Intel->x86-32 (Windows32) Target Hardware +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +32 +
    +BitPerSizeT + +32 +
    +BitPerPtrDiffT + +32 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Configuration for Development Computer +

    + + + + + + +
    +

    +Expected values are used only if the code has been compiled with PORTABLE_WORDSIZES defined, i.e. when you run a SIL simulation with PortableWordSizes set to 'on'. +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +64 +
    +BitPerSizeT + +64 +
    +BitPerPtrDiffT + +64 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Standard +

    + + + + + + +
    +

    +Zero initialization code has been optimized for model 'ActuatorControl'. +

    +

    + + + + + + + +
    +Initial value of a global integer variable is zero + +True +
    + +

    +

    +If the assumption is not correct, remove the optimization through the Configuration Parameters > Code Generation > Optimization settings. Alternatively, configure your target environment to make the assumption hold. +

    + +
    +

    +Floating-Point Numbers +

    + + + + + + +
    +

    +Code generation is configured to support floating-point numbers, therefore your target environment might perform subnormal number calculations. +

    +

    + + + + + + + + + + + + +
    +Flush-to-zero computed subnormal values (FTZ) + +False +
    +Flush-to-zero incoming subnormal values (DAZ) + +False +
    + +

    +

    +If the assumptions are not correct, subnormal numbers might cause mismatches between model and generated code simulation results. For more information see, Subnormal Number Performance. +

    + +
    + + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_contents.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_contents.html new file mode 100644 index 0000000..90f59e9 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_contents.html @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Contents + + +
    + + +
    + +Summary + + +
    + +Subsystem Report + + +
    + +Traceability Report + + +
    + +Static Code Metrics Report + + +
    + +Code Replacements Report + + +
    + +Coder Assumptions + + +
    +
    + + + + + + + + + + + + + +
    + +Generated Code + + +
    + + + + + + + + + + + + +
    +[-] + +Model files +
    + + + + + + + + + + + + +
    + +ActuatorControl.c + + +
    + +ActuatorControl.h + + +
    + +
    + +
    + + + + + + + + + + + + +
    +[+] + +Shared files (3) +
    + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_h.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_h.html new file mode 100644 index 0000000..ee7d4c1 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_h.html @@ -0,0 +1,298 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: ActuatorControl.h
    7 *
    8 * Code generated for Simulink model 'ActuatorControl'.
    9 *
    10 * Model version : 1.72
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:02 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#ifndef RTW_HEADER_ActuatorControl_h_
    23#define RTW_HEADER_ActuatorControl_h_
    24#include <math.h>
    25#ifndef ActuatorControl_COMMON_INCLUDES_
    26# define ActuatorControl_COMMON_INCLUDES_
    27#include "rtwtypes.h"
    28#include "rtw_continuous.h"
    29#include "rtw_solver.h"
    30#endif /* ActuatorControl_COMMON_INCLUDES_ */
    31
    32/* Child system includes */
    33#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    34#include "Actuator_Control.h"
    35#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    36
    37#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    38#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    39
    40#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    41#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    42
    43#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    44#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    45
    46/* Model Code Variants */
    47
    48/* Forward declaration for rtModel */
    49typedef struct tag_RTM_ActuatorControl_T RT_MODEL_ActuatorControl_T;
    50
    51/* Block signals and states (default storage) for model 'ActuatorControl' */
    52#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    53
    54typedef struct {
    55 real_T Integrator; /* '<S4>/Integrator' */
    56 real_T Integrator_i; /* '<S3>/Integrator' */
    57 real_T Integrator_f; /* '<S2>/Integrator' */
    58 real_T Integrator_DSTATE; /* '<S4>/Integrator' */
    59 real_T UD_DSTATE; /* '<S7>/UD' */
    60 real_T Integrator_DSTATE_n; /* '<S3>/Integrator' */
    61 real_T UD_DSTATE_o; /* '<S6>/UD' */
    62 real_T Integrator_DSTATE_h; /* '<S2>/Integrator' */
    63 real_T UD_DSTATE_j; /* '<S5>/UD' */
    64} DW_ActuatorControl_f_T;
    65
    66#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    67
    68#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    69
    70/* Real-time Model Data Structure */
    71struct tag_RTM_ActuatorControl_T {
    72 const char_T **errorStatus;
    73};
    74
    75#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    76
    77#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    78
    79typedef struct {
    80 RT_MODEL_ActuatorControl_T rtm;
    81} MdlrefDW_ActuatorControl_T;
    82
    83#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    84
    85extern void ActuatorControl_Disable(void);
    86extern void Actuator_Control(const int16_T rtu_Act1_pos, const real_T
    87 rtu_Act1_cmd, const int16_T rtu_Act2_pos, const real_T rtu_Act2_cmd, const
    88 int16_T rtu_Act3_pos, const real_T rtu_Act3_cmd, int16_T *rty_Actuator1,
    89 int16_T *rty_Actuator2, int16_T *rty_Actuator3);
    90
    91/* Model reference registration function */
    92extern void ActuatorControl_initialize(const char_T **rt_errorStatus);
    93
    94#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    95
    96extern MdlrefDW_ActuatorControl_T ActuatorControl_MdlrefDW;
    97
    98#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    99
    100#ifndef ActuatorControl_MDLREF_HIDE_CHILD_
    101
    102/* Block states (default storage) */
    103extern DW_ActuatorControl_f_T ActuatorControl_DW;
    104
    105#endif /*ActuatorControl_MDLREF_HIDE_CHILD_*/
    106
    107/*-
    108 * The generated code includes comments that allow you to trace directly
    109 * back to the appropriate location in the model. The basic format
    110 * is <system>/block_name, where system is the system number (uniquely
    111 * assigned by Simulink) and block_name is the name of the block.
    112 *
    113 * Use the MATLAB hilite_system command to trace the generated code back
    114 * to the model. For example,
    115 *
    116 * hilite_system('<S3>') - opens system 3
    117 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
    118 *
    119 * Here is the system hierarchy for this model
    120 *
    121 * '<Root>' : 'ActuatorControl'
    122 * '<S1>' : 'ActuatorControl/Actuator_Control'
    123 * '<S2>' : 'ActuatorControl/Actuator_Control/Actuaor1_loop'
    124 * '<S3>' : 'ActuatorControl/Actuator_Control/Actuaor2_loop'
    125 * '<S4>' : 'ActuatorControl/Actuator_Control/Actuaor3_loop'
    126 * '<S5>' : 'ActuatorControl/Actuator_Control/Actuaor1_loop/Difference'
    127 * '<S6>' : 'ActuatorControl/Actuator_Control/Actuaor2_loop/Difference'
    128 * '<S7>' : 'ActuatorControl/Actuator_Control/Actuaor3_loop/Difference'
    129 */
    130
    131/*-
    132 * Requirements for '<Root>': ActuatorControl
    133 */
    134#endif /* RTW_HEADER_ActuatorControl_h_ */
    135
    136/*
    137 * File trailer for generated code.
    138 *
    139 * [EOF]
    140 */
    141
    +
    + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_metrics.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_metrics.html new file mode 100644 index 0000000..7c84f5f --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_metrics.html @@ -0,0 +1,18 @@ + + + +Static Code Metrics Report + + + + +

    +Static Code Metrics Report +

    +
    + +
    +Static Code Metrics report is not generated. On the Configuration Parameters > Code Generation > Report pane, select Generate static code metrics. On the model diagram window, select Code > C/C++ Code > Code Generation Report > Open Model Report or rebuild the model. + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_replacements.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_replacements.html new file mode 100644 index 0000000..85ff6f0 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_replacements.html @@ -0,0 +1,18 @@ + + + +Code replacements in ActuatorControl + + + + +

    +Code replacements in ActuatorControl +

    +
    + +
    +Code replacements report not generated. Select 'Summarize which blocks triggered code replacements'. + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_subsystems.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_subsystems.html new file mode 100644 index 0000000..e360927 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_subsystems.html @@ -0,0 +1,174 @@ + + + +Non-virtual subsystems in ActuatorControl + + + + +

    +Non-virtual subsystems in ActuatorControl +

    +
    + +
    +
    + +
    +

    +1. Code Mapping [hide] +

    + + + + + + + + + + +
    +

    +The following table:

      +
    • +provides a mapping from the non-virtual subsystems in the model to functions or reusable functions in the generated code and +
    • +
    • +notes exceptions that caused some non-virtual subsystems to not reuse code even though they were assigned a function packaging setting ('Function packaging' entry on the Subsystem Block Dialog) of 'Auto' or 'Reusable function'. +
    • + +
    + +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Subsystem + + + + +Reuse Setting + + + + +Reuse Outcome + + + + +Outcome Diagnostic + + +
    +<S2> + +Function + +Function(S2) + +normal +
    +<S3> + +Function + +Function(S3) + +normal +
    +<S4> + +Function + +Function(S4) + +normal +
    +<S1> + +Function + +Function(S1) + +normal +
    + +
    +

    +2. Code Reuse Exceptions [hide] +

    + + + + + + + + + + +
    +

    +The following section provides details on each exception that caused a non-virtual subsystem with a function packaging setting of

      +
    • +'Auto' to become an inlined code segment, +
    • +
    • +'Auto' to become a non-reusable function without arguments, or +
    • +
    • +'Reusable function' to become a non-reusable function without arguments. +
    • + +
    +Note:This section does not report graphically identical non-virtual subsystems marked as 'Auto' that were not reused due to differences in their functional properties (such as dimensions, datatypes, work vectors, parameters, etc.). You may identify reasons for non-reuse in such cases by inspecting the differences in the functional attributes of the subsystems in the model or in the inlined generated code. +

    + +
    +
    No reuse exception in model +
    + + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_survey.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_survey.html new file mode 100644 index 0000000..52aa47a --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_survey.html @@ -0,0 +1,177 @@ + + + +Code Generation Report for 'ActuatorControl' + + + + +

    +Code Generation Report for 'ActuatorControl' +

    +
    + +
    +
    + +
    +

    +Model Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + +
    +Author + +bpotter +
    +Last Modified By + +super +
    +Model Version + +1.72 +
    +
    + +Configuration settings at time of code generation + + +

    + +
    +

    +Code Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +System Target File + +ert.tlc +
    +Hardware Device Type + +Intel->x86-32 (Windows32) +
    +Simulink Coder Version + +9.3 (R2020a) 18-Nov-2019 +
    +Timestamp of Generated Source Code + +Thu Jul 16 18:51:02 2020 +
    + + + +
    +Type of Build + +Exported Model Reference +
    +Objectives Specified + +Execution efficiency, RAM efficiency +
    + +

    + +
    +

    +Additional Information +

    + + + + + + +
    + + + + + + + +
    +Code Generation Advisor + +Not run +
    + +
    + + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_trace.html b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_trace.html new file mode 100644 index 0000000..416ac5e --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_trace.html @@ -0,0 +1,7 @@ +Traceability Report for ActuatorControl + + + +

    Traceability Report for ActuatorControl

    +

    Traceability report is not generated. On the Configuration Parameters > Code Generation > Comments pane, select the Include comments parameter. On the Configuration Parameters dialog box, enter search keyword "GenerateTraceReport" and select the Traceability Report Contents parameters. Then, rebuild the model.

    + \ No newline at end of file diff --git a/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_traceInfo.js b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_traceInfo.js new file mode 100644 index 0000000..0e46404 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/ActuatorControl_traceInfo.js @@ -0,0 +1,189 @@ +function RTW_rtwnameSIDMap() { + this.rtwnameHashMap = new Array(); + this.sidHashMap = new Array(); + this.rtwnameHashMap[""] = {sid: "ActuatorControl"}; + this.sidHashMap["ActuatorControl"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:37"}; + this.sidHashMap["ActuatorControl:37"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:252"}; + this.sidHashMap["ActuatorControl:252"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:344"}; + this.sidHashMap["ActuatorControl:344"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:359"}; + this.sidHashMap["ActuatorControl:359"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:254"}; + this.sidHashMap["ActuatorControl:254"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:346"}; + this.sidHashMap["ActuatorControl:346"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "ActuatorControl:361"}; + this.sidHashMap["ActuatorControl:361"] = {rtwname: ""}; + this.rtwnameHashMap["/Actuator_Control"] = {sid: "ActuatorControl:37"}; + this.sidHashMap["ActuatorControl:37"] = {rtwname: "/Actuator_Control"}; + this.rtwnameHashMap["/Actuator_Control"] = {sid: "ActuatorControl:47"}; + this.sidHashMap["ActuatorControl:47"] = {rtwname: "/Actuator_Control"}; + this.rtwnameHashMap["/Actuaor1_loop"] = {sid: "ActuatorControl:252"}; + this.sidHashMap["ActuatorControl:252"] = {rtwname: "/Actuaor1_loop"}; + this.rtwnameHashMap["/Actuaor2_loop"] = {sid: "ActuatorControl:344"}; + this.sidHashMap["ActuatorControl:344"] = {rtwname: "/Actuaor2_loop"}; + this.rtwnameHashMap["/Actuaor3_loop"] = {sid: "ActuatorControl:359"}; + this.sidHashMap["ActuatorControl:359"] = {rtwname: "/Actuaor3_loop"}; + this.rtwnameHashMap["/Actuator1_loop_caller"] = {sid: "ActuatorControl:374"}; + this.sidHashMap["ActuatorControl:374"] = {rtwname: "/Actuator1_loop_caller"}; + this.rtwnameHashMap["/Actuator2_loop_caller"] = {sid: "ActuatorControl:376"}; + this.sidHashMap["ActuatorControl:376"] = {rtwname: "/Actuator2_loop_caller"}; + this.rtwnameHashMap["/Actuator3_loop_caller"] = {sid: "ActuatorControl:377"}; + this.sidHashMap["ActuatorControl:377"] = {rtwname: "/Actuator3_loop_caller"}; + this.rtwnameHashMap["/Saturation"] = {sid: "ActuatorControl:261"}; + this.sidHashMap["ActuatorControl:261"] = {rtwname: "/Saturation"}; + this.rtwnameHashMap["/Saturation1"] = {sid: "ActuatorControl:277"}; + this.sidHashMap["ActuatorControl:277"] = {rtwname: "/Saturation1"}; + this.rtwnameHashMap["/Saturation2"] = {sid: "ActuatorControl:292"}; + this.sidHashMap["ActuatorControl:292"] = {rtwname: "/Saturation2"}; + this.rtwnameHashMap["/Scaling"] = {sid: "ActuatorControl:262"}; + this.sidHashMap["ActuatorControl:262"] = {rtwname: "/Scaling"}; + this.rtwnameHashMap["/Scaling1"] = {sid: "ActuatorControl:263"}; + this.sidHashMap["ActuatorControl:263"] = {rtwname: "/Scaling1"}; + this.rtwnameHashMap["/Scaling2"] = {sid: "ActuatorControl:278"}; + this.sidHashMap["ActuatorControl:278"] = {rtwname: "/Scaling2"}; + this.rtwnameHashMap["/Scaling3"] = {sid: "ActuatorControl:279"}; + this.sidHashMap["ActuatorControl:279"] = {rtwname: "/Scaling3"}; + this.rtwnameHashMap["/Scaling4"] = {sid: "ActuatorControl:293"}; + this.sidHashMap["ActuatorControl:293"] = {rtwname: "/Scaling4"}; + this.rtwnameHashMap["/Scaling5"] = {sid: "ActuatorControl:294"}; + this.sidHashMap["ActuatorControl:294"] = {rtwname: "/Scaling5"}; + this.rtwnameHashMap["/TypeConversion"] = {sid: "ActuatorControl:265"}; + this.sidHashMap["ActuatorControl:265"] = {rtwname: "/TypeConversion"}; + this.rtwnameHashMap["/TypeConversion1"] = {sid: "ActuatorControl:266"}; + this.sidHashMap["ActuatorControl:266"] = {rtwname: "/TypeConversion1"}; + this.rtwnameHashMap["/TypeConversion2"] = {sid: "ActuatorControl:281"}; + this.sidHashMap["ActuatorControl:281"] = {rtwname: "/TypeConversion2"}; + this.rtwnameHashMap["/TypeConversion3"] = {sid: "ActuatorControl:282"}; + this.sidHashMap["ActuatorControl:282"] = {rtwname: "/TypeConversion3"}; + this.rtwnameHashMap["/TypeConversion4"] = {sid: "ActuatorControl:296"}; + this.sidHashMap["ActuatorControl:296"] = {rtwname: "/TypeConversion4"}; + this.rtwnameHashMap["/TypeConversion5"] = {sid: "ActuatorControl:297"}; + this.sidHashMap["ActuatorControl:297"] = {rtwname: "/TypeConversion5"}; + this.rtwnameHashMap["/Act1_pos"] = {sid: "ActuatorControl:48"}; + this.sidHashMap["ActuatorControl:48"] = {rtwname: "/Act1_pos"}; + this.rtwnameHashMap["/Act1_cmd"] = {sid: "ActuatorControl:49"}; + this.sidHashMap["ActuatorControl:49"] = {rtwname: "/Act1_cmd"}; + this.rtwnameHashMap["/Act2_pos"] = {sid: "ActuatorControl:50"}; + this.sidHashMap["ActuatorControl:50"] = {rtwname: "/Act2_pos"}; + this.rtwnameHashMap["/Act2_cmd"] = {sid: "ActuatorControl:51"}; + this.sidHashMap["ActuatorControl:51"] = {rtwname: "/Act2_cmd"}; + this.rtwnameHashMap["/Act3_pos"] = {sid: "ActuatorControl:52"}; + this.sidHashMap["ActuatorControl:52"] = {rtwname: "/Act3_pos"}; + this.rtwnameHashMap["/Act3_cmd"] = {sid: "ActuatorControl:53"}; + this.sidHashMap["ActuatorControl:53"] = {rtwname: "/Act3_cmd"}; + this.rtwnameHashMap["/Actuator1"] = {sid: "ActuatorControl:54"}; + this.sidHashMap["ActuatorControl:54"] = {rtwname: "/Actuator1"}; + this.rtwnameHashMap["/Actuator2"] = {sid: "ActuatorControl:55"}; + this.sidHashMap["ActuatorControl:55"] = {rtwname: "/Actuator2"}; + this.rtwnameHashMap["/Actuator3"] = {sid: "ActuatorControl:56"}; + this.sidHashMap["ActuatorControl:56"] = {rtwname: "/Actuator3"}; + this.rtwnameHashMap["/Actuator1_loop"] = {sid: "ActuatorControl:318"}; + this.sidHashMap["ActuatorControl:318"] = {rtwname: "/Actuator1_loop"}; + this.rtwnameHashMap["/Difference"] = {sid: "ActuatorControl:254"}; + this.sidHashMap["ActuatorControl:254"] = {rtwname: "/Difference"}; + this.rtwnameHashMap["/Gain"] = {sid: "ActuatorControl:255"}; + this.sidHashMap["ActuatorControl:255"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Gain1"] = {sid: "ActuatorControl:256"}; + this.sidHashMap["ActuatorControl:256"] = {rtwname: "/Gain1"}; + this.rtwnameHashMap["/Gain2"] = {sid: "ActuatorControl:257"}; + this.sidHashMap["ActuatorControl:257"] = {rtwname: "/Gain2"}; + this.rtwnameHashMap["/Gain3"] = {sid: "ActuatorControl:336"}; + this.sidHashMap["ActuatorControl:336"] = {rtwname: "/Gain3"}; + this.rtwnameHashMap["/Gain4"] = {sid: "ActuatorControl:337"}; + this.sidHashMap["ActuatorControl:337"] = {rtwname: "/Gain4"}; + this.rtwnameHashMap["/Integrator"] = {sid: "ActuatorControl:258"}; + this.sidHashMap["ActuatorControl:258"] = {rtwname: "/Integrator"}; + this.rtwnameHashMap["/Sum"] = {sid: "ActuatorControl:342"}; + this.sidHashMap["ActuatorControl:342"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Sum1"] = {sid: "ActuatorControl:259"}; + this.sidHashMap["ActuatorControl:259"] = {rtwname: "/Sum1"}; + this.rtwnameHashMap["/Act1_pos"] = {sid: "ActuatorControl:319"}; + this.sidHashMap["ActuatorControl:319"] = {rtwname: "/Act1_pos"}; + this.rtwnameHashMap["/Act1_cmd"] = {sid: "ActuatorControl:343"}; + this.sidHashMap["ActuatorControl:343"] = {rtwname: "/Act1_cmd"}; + this.rtwnameHashMap["/Actuator1"] = {sid: "ActuatorControl:320"}; + this.sidHashMap["ActuatorControl:320"] = {rtwname: "/Actuator1"}; + this.rtwnameHashMap["/Actuator2_loop"] = {sid: "ActuatorControl:345"}; + this.sidHashMap["ActuatorControl:345"] = {rtwname: "/Actuator2_loop"}; + this.rtwnameHashMap["/Difference"] = {sid: "ActuatorControl:346"}; + this.sidHashMap["ActuatorControl:346"] = {rtwname: "/Difference"}; + this.rtwnameHashMap["/Gain"] = {sid: "ActuatorControl:347"}; + this.sidHashMap["ActuatorControl:347"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Gain1"] = {sid: "ActuatorControl:348"}; + this.sidHashMap["ActuatorControl:348"] = {rtwname: "/Gain1"}; + this.rtwnameHashMap["/Gain2"] = {sid: "ActuatorControl:349"}; + this.sidHashMap["ActuatorControl:349"] = {rtwname: "/Gain2"}; + this.rtwnameHashMap["/Gain3"] = {sid: "ActuatorControl:350"}; + this.sidHashMap["ActuatorControl:350"] = {rtwname: "/Gain3"}; + this.rtwnameHashMap["/Gain4"] = {sid: "ActuatorControl:351"}; + this.sidHashMap["ActuatorControl:351"] = {rtwname: "/Gain4"}; + this.rtwnameHashMap["/Integrator"] = {sid: "ActuatorControl:352"}; + this.sidHashMap["ActuatorControl:352"] = {rtwname: "/Integrator"}; + this.rtwnameHashMap["/Sum"] = {sid: "ActuatorControl:353"}; + this.sidHashMap["ActuatorControl:353"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Sum1"] = {sid: "ActuatorControl:354"}; + this.sidHashMap["ActuatorControl:354"] = {rtwname: "/Sum1"}; + this.rtwnameHashMap["/Act2_pos"] = {sid: "ActuatorControl:355"}; + this.sidHashMap["ActuatorControl:355"] = {rtwname: "/Act2_pos"}; + this.rtwnameHashMap["/Act2_cmd"] = {sid: "ActuatorControl:356"}; + this.sidHashMap["ActuatorControl:356"] = {rtwname: "/Act2_cmd"}; + this.rtwnameHashMap["/Actuator2"] = {sid: "ActuatorControl:357"}; + this.sidHashMap["ActuatorControl:357"] = {rtwname: "/Actuator2"}; + this.rtwnameHashMap["/Actuator3_loop"] = {sid: "ActuatorControl:360"}; + this.sidHashMap["ActuatorControl:360"] = {rtwname: "/Actuator3_loop"}; + this.rtwnameHashMap["/Difference"] = {sid: "ActuatorControl:361"}; + this.sidHashMap["ActuatorControl:361"] = {rtwname: "/Difference"}; + this.rtwnameHashMap["/Gain"] = {sid: "ActuatorControl:362"}; + this.sidHashMap["ActuatorControl:362"] = {rtwname: "/Gain"}; + this.rtwnameHashMap["/Gain1"] = {sid: "ActuatorControl:363"}; + this.sidHashMap["ActuatorControl:363"] = {rtwname: "/Gain1"}; + this.rtwnameHashMap["/Gain2"] = {sid: "ActuatorControl:364"}; + this.sidHashMap["ActuatorControl:364"] = {rtwname: "/Gain2"}; + this.rtwnameHashMap["/Gain3"] = {sid: "ActuatorControl:365"}; + this.sidHashMap["ActuatorControl:365"] = {rtwname: "/Gain3"}; + this.rtwnameHashMap["/Gain4"] = {sid: "ActuatorControl:366"}; + this.sidHashMap["ActuatorControl:366"] = {rtwname: "/Gain4"}; + this.rtwnameHashMap["/Integrator"] = {sid: "ActuatorControl:367"}; + this.sidHashMap["ActuatorControl:367"] = {rtwname: "/Integrator"}; + this.rtwnameHashMap["/Sum"] = {sid: "ActuatorControl:368"}; + this.sidHashMap["ActuatorControl:368"] = {rtwname: "/Sum"}; + this.rtwnameHashMap["/Sum1"] = {sid: "ActuatorControl:369"}; + this.sidHashMap["ActuatorControl:369"] = {rtwname: "/Sum1"}; + this.rtwnameHashMap["/Act3_pos"] = {sid: "ActuatorControl:370"}; + this.sidHashMap["ActuatorControl:370"] = {rtwname: "/Act3_pos"}; + this.rtwnameHashMap["/Act3_cmd"] = {sid: "ActuatorControl:371"}; + this.sidHashMap["ActuatorControl:371"] = {rtwname: "/Act3_cmd"}; + this.rtwnameHashMap["/Actuator3"] = {sid: "ActuatorControl:372"}; + this.sidHashMap["ActuatorControl:372"] = {rtwname: "/Actuator3"}; + this.rtwnameHashMap["/U"] = {sid: "ActuatorControl:254:1"}; + this.sidHashMap["ActuatorControl:254:1"] = {rtwname: "/U"}; + this.rtwnameHashMap["/Diff"] = {sid: "ActuatorControl:254:2"}; + this.sidHashMap["ActuatorControl:254:2"] = {rtwname: "/Diff"}; + this.rtwnameHashMap["/UD"] = {sid: "ActuatorControl:254:3"}; + this.sidHashMap["ActuatorControl:254:3"] = {rtwname: "/UD"}; + this.rtwnameHashMap["/Y"] = {sid: "ActuatorControl:254:4"}; + this.sidHashMap["ActuatorControl:254:4"] = {rtwname: "/Y"}; + this.rtwnameHashMap["/U"] = {sid: "ActuatorControl:346:1"}; + this.sidHashMap["ActuatorControl:346:1"] = {rtwname: "/U"}; + this.rtwnameHashMap["/Diff"] = {sid: "ActuatorControl:346:2"}; + this.sidHashMap["ActuatorControl:346:2"] = {rtwname: "/Diff"}; + this.rtwnameHashMap["/UD"] = {sid: "ActuatorControl:346:3"}; + this.sidHashMap["ActuatorControl:346:3"] = {rtwname: "/UD"}; + this.rtwnameHashMap["/Y"] = {sid: "ActuatorControl:346:4"}; + this.sidHashMap["ActuatorControl:346:4"] = {rtwname: "/Y"}; + this.rtwnameHashMap["/U"] = {sid: "ActuatorControl:361:1"}; + this.sidHashMap["ActuatorControl:361:1"] = {rtwname: "/U"}; + this.rtwnameHashMap["/Diff"] = {sid: "ActuatorControl:361:2"}; + this.sidHashMap["ActuatorControl:361:2"] = {rtwname: "/Diff"}; + this.rtwnameHashMap["/UD"] = {sid: "ActuatorControl:361:3"}; + this.sidHashMap["ActuatorControl:361:3"] = {rtwname: "/UD"}; + this.rtwnameHashMap["/Y"] = {sid: "ActuatorControl:361:4"}; + this.sidHashMap["ActuatorControl:361:4"] = {rtwname: "/Y"}; + this.getSID = function(rtwname) { return this.rtwnameHashMap[rtwname];} + this.getRtwname = function(sid) { return this.sidHashMap[sid];} +} +RTW_rtwnameSIDMap.instance = new RTW_rtwnameSIDMap(); diff --git a/src/validation/slprj/ert/ActuatorControl/html/css/coder_app.css b/src/validation/slprj/ert/ActuatorControl/html/css/coder_app.css new file mode 100644 index 0000000..d47cf0e --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/css/coder_app.css @@ -0,0 +1,184 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +pre#code { + font-family: Consolas, Courier; + font-size: small; +} + +.ct { + font-style: italic; + color: #117755 +} /* comment */ +.pp { + font-weight:bold; + color: #992211 +} /* preprocessor */ +.kw, .br { + font-weight:bold; + color: #112266 +} /* keyword or brace */ +.dt { + font-weight:bold; + color: #112266 +} /* data type */ +.tk { + font-style: normal; + color: #112266 +} /* regular token */ +pre#code a.req { + text-decoration: none; + color: #112266 +} +pre#code a.req_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.req_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +pre#code a.blk { + text-decoration: none; +} +pre#code a.blk_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.blk_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +a.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight token */ +tr.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight row */ +a.hiliteToken, tr.hiliteToken, td.hiliteToken { + background-color: #ffff99; +} +.hiliteCurrentLine, tr.hiliteCurrentLine > td { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); + box-shadow: inset 0 1px 0 0 rgba(150, 12, 116, 0.25), inset 0 -1px 0 0 rgba(150, 12, 116, 0.25); +} +span.hiliteTotalLine { + font-style: normal; + color: #aff; +} +a.tk { + text-decoration: none; +} +a.tk:hover { + text-decoration: none; +} +a.active { + text-decoration: underline; +} +a.active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} /* hyperlink */ +table.code { + border: 0px +} +table.code td { + vertical-align: top; +} +table.code td.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} +table.code > tr:first { + text-align: right; +} /* hyperlink */ + +ul.popup_attrib_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.popup_attrib_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} +.highlighted { + background-color:yellow; +} +a:class1 { + color: -webkit-link; + text-decoration: underline; + cursor: hand; +} +.scroll +{ + height:80px; + overflow:scroll; + overflow-x:hidden; +} +div#popup_window { + position: absolute; + background-color: rgb(203,203,255); + border: solid 3px #ECECEC; + border-radius: 5px; + /* shadow box around the window*/ + -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + padding: 2px; +} +div#popup_window a { + text-decoration: none; + color: green; +} +div#popup_window a:hover { + cursor: pointer; + text-decoration: underline; + color: blue; +} +div#popup_window tr.selected { + background-color: #ffff99; +} +div#token_usage_nav { + border-bottom: 1px solid gray; +} +table#token_usage_details { + cellpadding: 100px; + table-layout:fixed; + border: 0px; +} +.token_usage_details_tabrow { + width: 40px; +} +table#token_usage_details td { + padding-right: 5em; + padding-left: 1em; +} +.token_usage_details_tabrow:hover { + background-color: gray; +} +.nav_table td.hidden { + display: none; +} +table#codeTbl tr td { + color: #112266 +} +table#codeTbl tr td { + padding-left: 10px; +} +table#codeTbl tr td:first-child { + font-style: italic; + color: #888888; + text-align: right; + padding-left:0px; +} + diff --git a/src/validation/slprj/ert/ActuatorControl/html/define.js b/src/validation/slprj/ert/ActuatorControl/html/define.js new file mode 100644 index 0000000..6a55171 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/define.js @@ -0,0 +1,93 @@ +function CodeDefine() { +this.def = new Array(); +this.def["ActuatorControl_MdlrefDW"] = {file: "ActuatorControl_c.html",line:41,type:"var"}; +this.def["ActuatorControl_DW"] = {file: "ActuatorControl_c.html",line:44,type:"var"}; +this.def["Actuator_Actuator1_loop_Disable"] = {file: "ActuatorControl_c.html",line:56,type:"fcn"}; +this.def["ActuatorControl_Actuator1_loop"] = {file: "ActuatorControl_c.html",line:63,type:"fcn"}; +this.def["Actuator_Actuator2_loop_Disable"] = {file: "ActuatorControl_c.html",line:121,type:"fcn"}; +this.def["ActuatorControl_Actuator2_loop"] = {file: "ActuatorControl_c.html",line:128,type:"fcn"}; +this.def["Actuator_Actuator3_loop_Disable"] = {file: "ActuatorControl_c.html",line:186,type:"fcn"}; +this.def["ActuatorControl_Actuator3_loop"] = {file: "ActuatorControl_c.html",line:193,type:"fcn"}; +this.def["ActuatorControl_Disable"] = {file: "ActuatorControl_c.html",line:251,type:"fcn"}; +this.def["Actuator_Control"] = {file: "ActuatorControl_c.html",line:280,type:"fcn"}; +this.def["ActuatorControl_initialize"] = {file: "ActuatorControl_c.html",line:389,type:"fcn"}; +this.def["RT_MODEL_ActuatorControl_T"] = {file: "ActuatorControl_h.html",line:49,type:"type"}; +this.def["DW_ActuatorControl_f_T"] = {file: "ActuatorControl_h.html",line:64,type:"type"}; +this.def["MdlrefDW_ActuatorControl_T"] = {file: "ActuatorControl_h.html",line:81,type:"type"}; +this.def["AHRS_Bus"] = {file: "../../_sharedutils/html/AHRS_Bus_h.html",line:38,type:"type"}; +this.def["int8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:55,type:"type"}; +this.def["uint8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:56,type:"type"}; +this.def["int16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:57,type:"type"}; +this.def["uint16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:58,type:"type"}; +this.def["int32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:59,type:"type"}; +this.def["uint32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:60,type:"type"}; +this.def["real32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:61,type:"type"}; +this.def["real64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:62,type:"type"}; +this.def["real_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:68,type:"type"}; +this.def["time_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:69,type:"type"}; +this.def["boolean_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:70,type:"type"}; +this.def["int_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:71,type:"type"}; +this.def["uint_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:72,type:"type"}; +this.def["ulong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:73,type:"type"}; +this.def["ulonglong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:74,type:"type"}; +this.def["char_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:75,type:"type"}; +this.def["uchar_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:76,type:"type"}; +this.def["byte_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:77,type:"type"}; +this.def["int64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:78,type:"type"}; +this.def["uint64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:79,type:"type"}; +this.def["int8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:89,type:"type"}; +this.def["uint8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:90,type:"type"}; +this.def["int16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:91,type:"type"}; +this.def["uint16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:92,type:"type"}; +this.def["int32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:93,type:"type"}; +this.def["uint32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:94,type:"type"}; +this.def["int64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:95,type:"type"}; +this.def["uint64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:96,type:"type"}; +this.def["real32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:97,type:"type"}; +this.def["real64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:98,type:"type"}; +this.def["real_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:104,type:"type"}; +this.def["time_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:105,type:"type"}; +this.def["boolean_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:106,type:"type"}; +this.def["int_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:107,type:"type"}; +this.def["uint_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:108,type:"type"}; +this.def["ulong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:109,type:"type"}; +this.def["ulonglong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:110,type:"type"}; +this.def["char_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:111,type:"type"}; +this.def["uchar_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:112,type:"type"}; +this.def["byte_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:113,type:"type"}; +this.def["pointer_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:136,type:"type"}; +} +CodeDefine.instance = new CodeDefine(); +var testHarnessInfo = {OwnerFileName: "", HarnessOwner: "", HarnessName: "", IsTestHarness: "0"}; +var relPathToBuildDir = "../ert_main.c"; +var fileSep = "\\"; +var isPC = true; +function Html2SrcLink() { + this.html2SrcPath = new Array; + this.html2Root = new Array; + this.html2SrcPath["ActuatorControl_c.html"] = "../ActuatorControl.c"; + this.html2Root["ActuatorControl_c.html"] = "ActuatorControl_c.html"; + this.html2SrcPath["ActuatorControl_h.html"] = "../ActuatorControl.h"; + this.html2Root["ActuatorControl_h.html"] = "ActuatorControl_h.html"; + this.html2SrcPath["AHRS_Bus_h.html"] = "../AHRS_Bus.h"; + this.html2Root["AHRS_Bus_h.html"] = "../../_sharedutils/html/AHRS_Bus_h.html"; + this.html2SrcPath["Actuator_Control_h.html"] = "../Actuator_Control.h"; + this.html2Root["Actuator_Control_h.html"] = "../../_sharedutils/html/Actuator_Control_h.html"; + this.html2SrcPath["rtwtypes_h.html"] = "../rtwtypes.h"; + this.html2Root["rtwtypes_h.html"] = "../../_sharedutils/html/rtwtypes_h.html"; + this.getLink2Src = function (htmlFileName) { + if (this.html2SrcPath[htmlFileName]) + return this.html2SrcPath[htmlFileName]; + else + return null; + } + this.getLinkFromRoot = function (htmlFileName) { + if (this.html2Root[htmlFileName]) + return this.html2Root[htmlFileName]; + else + return null; + } +} +Html2SrcLink.instance = new Html2SrcLink(); +var fileList = [ +"ActuatorControl_c.html","ActuatorControl_h.html","AHRS_Bus_h.html","Actuator_Control_h.html","rtwtypes_h.html"]; diff --git a/src/validation/slprj/ert/ActuatorControl/html/hilite_warning.png b/src/validation/slprj/ert/ActuatorControl/html/hilite_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f013f815ae58acfcb9112170c871851d666b820f GIT binary patch literal 3014 zcmV;%3pw004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 + + + + + + + + + + + + +
    + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/js/coder_app.js b/src/validation/slprj/ert/ActuatorControl/html/js/coder_app.js new file mode 100644 index 0000000..3c34823 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/js/coder_app.js @@ -0,0 +1,525 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +function queryByClassName(className, elem) { + if (!elem) elem = document.body; + if (typeof elem.querySelectorAll === "function") { + return elem.querySelectorAll("."+className); + } else { + return elem.getElementsByClass(className); + } +} + +function nav_token_usage_details(direction) { + var els = queryByClassName("token_usage_details_tabrow"); + var selectedIdx = 0; + var selectedClassName = "selected"; + for (selectedIdx; selectedIdx < els.length; selectedIdx++) { + if (els[selectedIdx].classList.contains(selectedClassName)) { + break; + } + } + var nextIdx = selectedIdx; + if (direction === -1 && selectedIdx > 0) { + nextIdx = selectedIdx-1; + } else if (direction === 1 && selectedIdx < els.length - 1) { + nextIdx = selectedIdx + 1; + } + if (nextIdx !== selectedIdx) { + els[selectedIdx].classList.remove(selectedClassName); + els[nextIdx].classList.add(selectedClassName); + els[nextIdx].scrollIntoView(alignWithTop=false); + } + return false; +} + +function tabrowClicked(event) { +} + +function popupOnload() { + var els = queryByClassName("token_usage_details_tabrow"); + for (var i=0; i" + + top.rtwGetFileName(link2Src) + ""; + var bodyNode = document.body; + bodyNode.insertBefore(link, bodyNode.firstElementChild); + } + top.updateHyperlinks(); + // update fileSelector frame + if (top.fileSelector) { + var o = top.fileSelector.document.getElementById('fileSelector'); + if (o) { + o.value = filename; + } + } + // add links to line numbers + var hasLineFlag = null; + if (top.TraceInfoLineFlag && top.TraceInfoLineFlag.instance) { + hasLineFlag = true; + } else { + hasLineFlag = false; + } + + if(hasLineFlag) { + var lines = queryByClassName("ln", codeElement); + var lineTraceFlag = top.TraceInfoLineFlag.instance.lineTraceFlag; + var lineNo = null; + for (var i=0; i= 0; --i) { + var childNode = trNode.childNodes[i]; + if (childNode.tagName.toUpperCase() === "TD") { + return childNode.childNodes; + } + } + return null; +} + +// see g1225075 +function fixBoxStyleFnHeaderLineWidths() { + // Match strings like "/**********/" which is the top line of + // a box-style function comment header + var reBoxHeader = /\/\*+\//; + + // Match strings like "' */" which is the contents of the text + // element originally generated in the report to pad the width of + // the line. + var rePadding = /'\s*\*\//; + + // All block identifier elements in the report page + blkLineElts = queryByClassName("blk"); + for (var i = 0; i < blkLineElts.length; ++i) { + var origPadding = blkLineElts[i].nextSibling; + if (origPadding.textContent.match(rePadding)) { + var spanElt = findParent(blkLineElts[i], { tagName: "span", className: "ct" }); + if (!spanElt) { + continue; + } + + // The numbered line in the report containing block identifier "i" + var tableRowElt = findParent(spanElt, { tagName: "tr" }); + if (!tableRowElt) { + continue; + } + + // Loop backward through table rows (i.e., report lines) looking + // for the "/***************/" start of the header. When found save + // its pixel width. Not actually the width of the itself but + // the span inside its last . This is will determine the real + // padding that is needed for proper alignment regardless of font + // or CKJ characters. + var targetWidth = 0; + var sanity = Number.MAX_VALUE; + var node = tableRowElt.previousSibling; + while (node && (sanity-- > 0)) { + var lastCellContents = getLastTableCellContents(node); + if (lastCellContents) { + if (lastCellContents.length === 0) { + break; + } + if (lastCellContents[0].textContent.match(reBoxHeader)) { + targetWidth = lastCellContents[0].offsetWidth; + break; + } + } + node = node.previousSibling; + } + + // If applying a new padding (i.e., targetWidth > 0), replace + // the original padding "' */' (a single text element) with + // two text elements and a span in between. The span will be the + // new pixel-accurate padding. + if (targetWidth > 0) { + var singleQuoteNode = document.createTextNode("'"); + var spacerNode = document.createElement('span'); + origPadding.textContent = "*/"; + origPadding.parentNode.insertBefore(spacerNode, origPadding); + origPadding.parentNode.insertBefore(singleQuoteNode, spacerNode); + + var padWidth = targetWidth - spanElt.offsetWidth; + spacerNode.style.display = 'inline-block'; + spacerNode.style.width = String(padWidth) + "px"; + spacerNode.style.height = '1em'; // cursor won't work w/o some height + spacerNode.style.cursor = 'text'; + } + } + } +} + +// the onload function for source file +function srcFileOnload() { + var codeElement = document.getElementById("codeTbl"); + var insertFunction = getInsertFunction(codeElement); + try { + var els = codeElement.getElementsByTagName("tr"); + for (var i = 0; i < els.length; i++) { + registerDelayedOnMouseOver(els[i], lineOnMouseIn, lineOnMouseOut); + } + updateToken(codeElement); + } catch (err) {}; + insertFunction(); + // add code to model hyperlinks for all tokens + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + // highlight the filename in the TOC frame + if (top.rtwreport_contents_frame && top.hiliteByFileName(top.rtwreport_document_frame.document.location.href)) { + // remove the highlights in the TOC frame if filename is hilite successfully + top.removeHiliteTOC(top.rtwreport_contents_frame); + } + + // annotate code with code coverage data + if (typeof rtwannotate === 'function') { + rtwannotate(filename.replace(/.html$/,"_cov.xml")); + } + + fixBoxStyleFnHeaderLineWidths(); + + // highlight token and row + if (top.RTW_TraceInfo.instance && top.RTW_TraceArgs.instance) { + var i; + // find the highlight file name + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(filename); + var ids=[], rows=[]; + if (typeof fileIdx !== "undefined") { + ids = top.RTW_TraceArgs.instance.getIDs(fileIdx); + rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + // highlight rows in file + for (i=0; i 0) + top.RTW_TraceInfo.instance.setInitLocation(filename,rows[0]); + else { + top.toggleNavSideBar("off"); + return; + } + } + + // display navigation side bar + if (top.rtwreport_nav_frame) top.rtwreport_nav_frame.location.reload(); + if (rows.length>0) { + top.toggleNavSideBar("on"); + top.toggleNavToolBar("on"); + } else { + top.toggleNavSideBar("off"); + } + } + top.scrollToLineBasedOnHash(document.location.hash); + function getHash() { + var loc; + var aHash=""; + var topDocObj = top.window.document; + // get the hash value from location. + loc = topDocObj.location; + loc = loc.search || loc.hash; + aHash = loc.substring(1); + aHash = decodeURI(aHash); + return aHash; + } +} + +function createPopup(filename, evt) { + var anchorObj = evt.currentTarget; + if (anchorObj.children.length > 0) + return; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var windowObj = top.getInspectWindow(); + var propObj = top.getInspectData(filename, anchorObj); + var navObj = top.getInspectLink(filename, location.pathname, anchorObj); + if (propObj) { + windowObj.appendChild(propObj); + windowObj.style.left = "0px"; + if (anchorObj.parentElement.nodeName === "TD" && + anchorObj.parentElement.parentElement.nodeName === "TR") { + anchorObj.parentElement.parentElement.lastChild.insertBefore(windowObj, + anchorObj.parentElement.parentElement.lastChild.lastChild.nextSibling); + var left = Math.min(evt.clientX , window.innerWidth - windowObj.scrollWidth - 30); + left = Math.max(0, left); + windowObj.style.left = "" + left + "px"; + } + } +}; + +function destroyPopup(anchorObj) { + var popWindow = document.getElementById("popup_window"); + if (popWindow) { + popWindow.parentElement.removeChild(popWindow); + } +}; diff --git a/src/validation/slprj/ert/ActuatorControl/html/nav.html b/src/validation/slprj/ert/ActuatorControl/html/nav.html new file mode 100644 index 0000000..64f68db --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/nav.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/navToolbar.html b/src/validation/slprj/ert/ActuatorControl/html/navToolbar.html new file mode 100644 index 0000000..d07c72e --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/navToolbar.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/ActuatorControl/html/rtwhilite.js b/src/validation/slprj/ert/ActuatorControl/html/rtwhilite.js new file mode 100644 index 0000000..bb368a1 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/rtwhilite.js @@ -0,0 +1,2081 @@ +// Copyright 2006-2019 The MathWorks, Inc. + +// Class RTW_Hash ------------------------------------------------------------ +// Internal web browser doesn't change window.location.hash if the link points +// to the same page. +// RTW_Hash remembers the hash value when the page is loaded in the first time +// or a link is clicked. +// removeHiliteByHash cleans the high lighted elements according to the stored +// hash value +function RTW_Hash(aHash) { + if (aHash == null) { + this.fHash = ""; + } else { + this.fHash = aHash; + }; + + this.getHash = function() { + return this.fHash; + } + + this.setHash = function(aHash) { + this.fHash = aHash; + } +} + +RTW_Hash.instance = null; + +// Class RTW_TraceInfo -------------------------------------------------------- +function RTW_TraceInfo(aFileLinks) { + this.fFileLinks = aFileLinks; + this.fLines = new Array(); + this.fTotalLines = 0; // total number of highlighted lines + this.fNumLines = new Array(); + this.fFileIdxCache = new Array(); + this.fDisablePanel = false; + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + this.fCurrCodeNode = null; + this.getHtmlFileName = function(aIndex) { + if (aIndex < this.fFileLinks.length) { + var href = this.fFileLinks[aIndex].href; + return href.substring(href.lastIndexOf('/')+1); + } + } + this.getSrcFileName = function(aIndex) { + var name = this.getHtmlFileName(aIndex); + if (name) + name = RTW_TraceInfo.toSrcFileName(name); + return name; + } + this.getNumFileLinks = function() { + return this.fFileLinks.length; + } + this.setFileLinkColor = function(aIndex, aColor) { + var link = this.fFileLinks[aIndex]; + if (link && link.parentNode && link.parentNode.style) + link.parentNode.style.backgroundColor = aColor; + } + this.highlightFileLink = function(aIndex, aColor) { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, i == aIndex ? aColor : ""); + } + } + this.highlightCurrFileLink = function(aColor) { + this.highlightFileLink(this.fCurrFileIdx); + } + this.highlightLines = function(aCodeNode,aColor) { + this.fCurrCodeNode = aCodeNode; + var lines = this.fLines[this.getHtmlFileName(this.fCurrFileIdx)]; + if (lines && aCodeNode) { + for (var i = 0; i < lines.length; ++i) { + var lineObj = aCodeNode.childNodes[lines[i]-1]; + if (lineObj) + lineObj.style.backgroundColor=aColor; + } + } + } + this.getFileIdx = function(aFile) { + if (this.fFileIdxCache[aFile] != null) + return this.fFileIdxCache[aFile]; + for (var i = 0; i < this.fFileLinks.length; ++i) { + if (this.getHtmlFileName(i) == aFile) { + this.fFileIdxCache[aFile] = i; + return i; + } + } + return null; + } + this.getCurrFileIdx = function() { return this.fCurrFileIdx; } + this.setNumHighlightedLines = function(aFileIdx, aNumLines) { + this.fNumLines[aFileIdx] = aNumLines; + updateNumHighlightedLines(this.fFileLinks[aFileIdx], aNumLines); + } + this.getNumLines = function(aFileIdx) { + return this.fNumLines[aFileIdx] != null ? this.fNumLines[aFileIdx] : 0; + } + this.getNumLinesAll = function() { + var sum = 0; + var len = this.fNumLines.length; + for (var i = 0; i < len; ++i) { + sum += this.getNumLines(i); + } + return sum; + } + this.getPrevButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonPrev"); + else + return document.getElementById("rtwIdButtonPrev"); + } + this.getNextButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonNext"); + else + return document.getElementById("rtwIdButtonNext"); + } + this.getPanel = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdTracePanel"); + else + return document.getElementById("rtwIdTracePanel"); + } + this.removeHighlighting = function() { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, ""); + this.setNumHighlightedLines(i, 0); + } + // remove highlight and reset current code node + try { + if (this.fCurrCodeNode != null) + this.highlightLines(getCodeNode(),""); + } catch (e) {}; + this.fCurrCodeNode = null; + if (this.getPrevButton()) { this.getPrevButton().disabled = true; } + if (this.getNextButton()) { this.getNextButton().disabled = true; } + if (this.getPanel()) { this.getPanel().style.display = "none"; } + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + } + this.setCurrLineIdx = function(aLineIdx) { + this.fCurrLineIdx = aLineIdx; + } + this.getCurrLineIdx = function() { return this.fCurrLineIdx; } + this.setCurrent = function(aFileIdx, aLineIdx) { + this.fCurrFileIdx = aFileIdx; + var numLines = this.getNumLines(aFileIdx); + if (!numLines || aLineIdx >= numLines) + this.fCurrLineIdx = -1; + else + this.fCurrLineIdx = aLineIdx; + var allNumLines = this.getNumLinesAll(); + if (this.getPrevButton()) { + this.getPrevButton().disabled = (allNumLines <= 1 || !this.hasPrev()); + } + if (this.getNextButton()) { + this.getNextButton().disabled = (allNumLines <= 1 || !this.hasNext()); + } + if (this.getPanel() && !this.fDisablePanel) { + this.getPanel().style.display = 'block'; + } + } + this.setDisablePanel = function(aDisable) { + this.fDisablePanel = aDisable; + } + this.getPrevFileIdx = function() { + if (this.fCurrLineIdx > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx - 1; i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + // update the navigation bar state + this.updateNavState = function() { + if (this.getPrevButton()) + this.getPrevButton().disabled = !this.hasPrev(); + if (this.getNextButton()) + this.getNextButton().disabled = !this.hasNext(); + setTraceNumber(); + } + this.hasPrev = function() { + return this.getPrevFileIdx() != null; + } + this.getFirstFileIdx = function() { + for (var i = 0; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + } + this.getLastFileIdx = function() { + for (var i = this.getNumFileLinks(); i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + } + this.goFirst = function() { + this.fCurrFileIdx = this.getFirstFileIdx(); + this.fCurrLineIdx = 0; + this.updateNavState(); + } + this.goLast = function() { + this.fCurrFileIdx = this.getLastFileIdx();; + this.fCurrLineIdx = this.getNumLines(this.fCurrFileIdx) - 1; + this.updateNavState(); + } + this.goPrev = function() { + var fileIdx = this.getPrevFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + --this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = this.getNumLines(fileIdx) - 1; + } + this.updateNavState(); + } + this.getNextFileIdx = function() { + if (this.fCurrLineIdx < this.getNumLines(this.fCurrFileIdx) - 1 && this.getNumLines(this.fCurrFileIdx) > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx + 1; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + this.hasNext = function() { + return this.getNextFileIdx() != null; + } + this.goNext = function() { + var fileIdx = this.getNextFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + ++this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = 0; + } + this.updateNavState(); + } + this.setTotalLines = function(num) { + this.fTotalLines = num; + } + this.getTotalLines = function() { return this.fTotalLines;} + this.setLines = function(aFile, aLines) { + this.fLines[aFile] = aLines; + var index = this.getFileIdx(aFile); + if (index != null) + this.setNumHighlightedLines(index,aLines.length); + } + this.getLines = function(aFile) { + return this.fLines[aFile]; + } + // get current on focus line number + this.getCurrLine = function() { + var file = this.getHtmlFileName(this.getCurrFileIdx()); + var lines = this.fLines[file]; + var line = null; + if (lines) { + var line = lines[this.fCurrLineIdx]; + } + return line; + } + this.getHRef = function(aFileIdx, aLineIdx, offset) { + var file = this.getHtmlFileName(aFileIdx); + var lines = this.fLines[file]; + if (lines) { + var line = lines[aLineIdx]; + line = offset_line(line, offset); + file = file+"#"+line; + } + return file; + } + + this.getCurrentHRef = function(offset) { + return this.getHRef(this.fCurrFileIdx, this.fCurrLineIdx, offset); + } + this.setInitLocation = function(aFile, aLine) { + var fileIdx = this.getFileIdx(aFile); + var lineIdx = null; + if (fileIdx != null && aLine) { + var lines = this.getLines(aFile); + for (var i = 0; i < lines.length; ++i) { + if (lines[i] == aLine) { + lineIdx = i; + break; + } + } + } + if (fileIdx == null || lineIdx == null) + this.setCurrent(-1,-1); + else + this.setCurrent(fileIdx,lineIdx); + } +} + +// Static methods in RTW_TraceInfo + +RTW_TraceInfo.getFileLinks = function(docObj) { + var links; + if (docObj && docObj.getElementsByName) + links = docObj.getElementsByName("rtwIdGenFileLinks"); + return links ? links : new Array(); +} + +RTW_TraceInfo.toSrcFileName = function(aHtmlFileName) { + aHtmlFileName = aHtmlFileName.replace(/_c.html$/,".c"); + aHtmlFileName = aHtmlFileName.replace(/_h.html$/,".h"); + aHtmlFileName = aHtmlFileName.replace(/_cpp.html$/,".cpp"); + aHtmlFileName = aHtmlFileName.replace(/_hpp.html$/,".hpp"); + aHtmlFileName = aHtmlFileName.replace(/_cc.html$/,".hpp"); + return aHtmlFileName; +} + +RTW_TraceInfo.instance = null; + +// Class RTW_TraceArgs -------------------------------------------------------- +// file.c:10,20,30&file.h:10,20,30[&color=value] or +// sid=model:1[&color=value] +RTW_TraceArgs = function(aHash) { + this.fColor = null; + this.fFontSize = null; + this.fInitFile = null; + this.fInitLine = null; + this.fSID = null; + this.fFiles = new Array(); + this.fLines = new Array(); + this.fMessage = null; + this.fBlock = null; + this.fNumBlocks = 0; + this.fUseExternalBrowser = true; + this.fInStudio = false; + this.fModel2CodeSrc = null; + this.fInCodeTrace = false; + this.fTraceData = null; + this.fFileIdx = []; // filename to fileId + this.fRows = []; // highlighted rows indexed by fileId + this.fIDs = []; // highlighted IDs indexed by fileId + + this.hasSid = function() { + return !(this.fSID == null); + } + this.parseCommand = function(aHash) { + var args = new Array(); + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf('='); + if (sep != -1) { + var cmd = arg.substring(0,sep); + var opt = arg.substring(sep+1); + switch (cmd.toLowerCase()) { + case "color": + this.fColor = opt; + break; + case "fontsize": + this.fFontSize = opt; + break; + case "initfile": + this.fInitFile = RTW_TraceArgs.toHtmlFileName(opt); + break; + case "initline": + this.fInitLine = opt; + break; + case "msg": + this.fMessage = opt; + break; + case "block": + this.fBlock = unescape(opt); + break; + case "numblocks": + this.fNumBlocks = parseInt(opt); + break; + case "sid": + this.fSID = opt; + // convert sid to code location + break; + case "model2code_src": + // model2code_src from model or webview + this.fModel2CodeSrc = opt; + break; + case "useexternalbrowser": + this.fUseExternalBrowser = (opt=="true"); + break; + case "instudio": + this.fInStudio = (opt=="true"); + break; + case "incodetrace": + this.fInCodeTrace = (opt=="true"); + break; + case "tracedata": + this.fTraceData = decodeURI(opt); + break; + } + } + } + } + this.parseUrlHash = function(aHash) { + var rows, sep, assignSep; + if (aHash) { + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf(':'); + assignSep = arg.indexOf('='); + if (sep !== -1 && assignSep === -1) { + var fileLines = arg.split(':'); + var htmlFileName = RTW_TraceArgs.toHtmlFileName(fileLines[0]); + this.fFileIdx[htmlFileName] = i; + this.fFiles.push(htmlFileName); + if (fileLines[1]) { + rows = fileLines[1].split(','); + rows = uniqueRows(rows); + this.fLines.push(rows); + this.fRows[i] = rows; + } + } + } + if (this.fInitFile == null && this.fFiles.length > 0) { + this.fInitFile = this.fFiles[0]; + this.fInitLine = (this.fLines[0] == null ? -1 : this.fLines[0][0]); + } + } + } + this.parseUrlHash2 = function(aHash) { + aHash = decodeURI(aHash); + var rows; + var ids; + if (aHash && aHash.length > 0 && aHash[0] === "[") { + var input = eval(aHash); + var i; + var j; + // set highlight files from url + for (i=0; i 0 + && top.rtwreport_document_frame.location.href !== "about:blank" && forceReload !== true) { + updateHyperlinks(); + return; + } + + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; + + // redirect the page based on the url + var initPage = null; + if (RTW_TraceArgs.instance.getNumFiles()) { + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + RTW_TraceInfo.instance.removeHighlighting() + var numFiles = RTW_TraceArgs.instance.getNumFiles(); + var tLines = 0; + for (var i = 0; i < numFiles; ++i) { + RTW_TraceInfo.instance.setLines(RTW_TraceArgs.instance.getFile(i),RTW_TraceArgs.instance.getLines(i)); + tLines += RTW_TraceArgs.instance.getLines(i).length; + } + RTW_TraceInfo.instance.setTotalLines(tLines); + if (aPanel == false) { + RTW_TraceInfo.instance.setDisablePanel(true); + } + var initFile = RTW_TraceArgs.instance.getInitFile(); + RTW_TraceInfo.instance.setInitLocation(initFile,RTW_TraceArgs.instance.getInitLine()); + if (!hasInCodeTrace()) { + initPage = RTW_TraceInfo.instance.getCurrentHRef(); + } else { + initPage = initFile; + } + } else { + // catch error that document frame is in another domain + try { + var fileDocObj = top.rtwreport_document_frame.document; + if (fileDocObj.location && (!fileDocObj.location.href || fileDocObj.location.href == "about:blank")) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + var tracePage = tocDocObj.getElementById("rtwIdTraceability"); + if (summaryPage) { + initPage = summaryPage.href; + } else if (tracePage) { + initPage = tracePage; + } + } + } catch(e) {}; + } + if (RTW_TraceArgs.instance && RTW_TraceArgs.instance.fMessage) { + // display diagnostic message + var linkId = "rtwIdMsgFileLink"; + var msgFile = tocDocObj.getElementById(linkId); + if (msgFile && msgFile.style) { + msgFile.style.display = "block"; + // Highlight the background of msg link + tocHiliteById(linkId); + } + initPage = "rtwmsg.html"; + } + if (initPage) { + var is_same_page = false; + try { + var fileDocObj = top.rtwreport_document_frame.document; + is_same_page = isSamePage(fileDocObj.location.href, initPage); + } catch(e) {}; + if (document.getElementById("rtwreport_document_frame")) { + document.getElementById("rtwreport_document_frame").setAttribute("src", initPage); + } else { + top.rtwreport_document_frame.location.href = initPage; + } + + if (is_same_page) { + // Goto the same page won't trigger onload function. + // Call it manuelly to highligh new code location. + rtwFileOnLoad(top.rtwreport_document_frame.document); + } + } +} + +// Compare if href1(i.e. file:///path/file1.html#222) and href2(i.e.file2.html) are same pages. +// isSamePage return true if file1 == file2. +function isSamePage(href1, href2) { + var page1 = href1.substring(href1.lastIndexOf('/')+1,href1.lastIndexOf('.html')); + var page2 = href2.substring(href2.lastIndexOf('/')+1,href2.lastIndexOf('.html')); + return (page1 == page2); +} + +// Callback for main document loading +function rtwMainOnLoad() { + rtwMainOnLoadFcn(document,null,true, false); + var newUrl; + // modify history state to avoid reload from pressing back + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser() && + typeof window.history.replaceState === "function") { + if (window.location.search.length > 0) { + if (window.location.search.indexOf("loaded=true") === -1) { + newUrl = document.location.pathname + window.location.search + '&loaded=true'; + } else { + newUrl = document.location.pathname + window.location.search; + } + } else { + newUrl = document.location.pathname + window.location.search + '?loaded=true'; + } + window.history.replaceState("","",newUrl); + } +} + +// Helper function for traceability report +function rtwMainReload(location) { + // remove highlight filename and lines before reloading the page + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + rtwMainOnLoadFcn(document,location,true,true); +} + +function rtwMainReloadNoPanel(location) { + rtwMainOnLoadFcn(document,location,false,true); +} + +// Callback for hyperlink "Remove Highlighting" +function rtwRemoveHighlighting() { + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + if (rtwSrcFrame()) { + rtwSrcFrame().focus(); + } + if (hasInCodeTrace()) { + removeInCodeTraceHighlight(); + } +} + +// Display diagnostic message in document frame +function rtwDisplayMessage() { + var docObj = top.rtwreport_document_frame.document; + var msg = docObj.getElementById(RTW_TraceArgs.instance.fMessage); + if (!msg) { + msg = docObj.getElementById("rtwMsg_notTraceable"); + } + if (msg && msg.style) { + msg.style.display = "block"; // make message visible + var msgstr = msg.innerHTML; + // replace '%s' in message with block name + if (top.RTW_TraceArgs.instance) { + var sid = top.RTW_TraceArgs.instance.getBlock(); + if (sid) { + var block = sid; + if (top.RTW_rtwnameSIDMap && top.RTW_rtwnameSIDMap.instance && top.RTW_rtwnameSIDMap.instance.getRtwname(sid)) { + block = top.RTW_rtwnameSIDMap.instance.getRtwname(sid).rtwname; + block = block.replace("<", "<").replace(">", ">"); + } else { + block = sid; + } + if (block) { + msgstr = msgstr.replace("%s", block); + } + } + } + msg.innerHTML = msgstr; + } +} + +function updateHyperlinks() { + docObj = top.rtwreport_document_frame; + if (docObj && docObj.document) { + if (RTW_TraceArgs.instance === null || !RTW_TraceArgs.instance.getUseExternalBrowser()) { + var plain_link = docObj.document.getElementById("linkToText_plain"); + if (plain_link && plain_link.href && plain_link.href.indexOf("matlab:coder.internal.editUrlTextFile") === -1 ) { + plain_link.href = "matlab:coder.internal.editUrlTextFile('" + str2StrVar(plain_link.href) + "')"; + } + var alink = docObj.document.getElementById("linkToCS"); + var linkCmd = "matlab:coder.internal.viewCodeConfigsetFromReport"; + if (alink && alink.href && alink.href.indexOf(linkCmd) === -1) { + alink.href = linkCmd+ "('" + str2StrVar(alink.href) + "');"; + if(alink.style) { + alink.style.display = ""; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) { + hidden_link.style.display = "none"; + } + } + } + } else { + var alink = docObj.document.getElementById("linkToCS"); + if (alink && alink.style) { + alink.style.display = "none"; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) + hidden_link.style.display = ""; + } + if (typeof docObj.document.getElementsByClassName === "function") { + alinks = docObj.document.getElementsByClassName("callMATLAB"); + } else if (typeof docObj.document.getElementsByName === "function") { + alinks = docObj.document.getElementsByName("callMATLAB"); + } else { + alinks = []; + } + alink = docObj.document.getElementById("CodeGenAdvCheck"); + if (alink && alink.href && alink.href.indexOf("externalweb=true")===-1) { + alink.href = alink.href + "?externalweb=true"; + } + + if (typeof docObj.document.getElementsByName === "function") + var objs = docObj.document.getElementsByName("MATLAB_link"); + else + objs = []; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + objs[objIndex].style.display = "none"; + } + } + } + updateCode2ModelLinks(docObj.document); + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; +} + +function update_modelref_report_link(docObj) { + if (docObj.getElementsByName) { + var arg = ""; + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser()) { + arg = "?useExternalBrowser=false"; + } + if (RTW_TraceArgs && RTW_TraceArgs.instance && RTW_TraceArgs.instance.getModel2CodeSrc() != null) { + if (arg.length > 0) + arg = arg + "&model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + else + arg = "?model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + } + if (arg.length > 0) { + links = docObj.getElementsByName('external_link'); + for (var link_idx = 0; link_idx < links.length; ++link_idx) { + links[link_idx].href = links[link_idx].href + arg; + } + } + } +} + +function rtwResizeFrame(f) { + if (f) { + f.style.height = f.contentWindow.document.body.scrollHeight + "px"; + } +} + +function rtwPageOnLoad(id) { + // highlight toc entry + tocHiliteById(id); + // restore elements state + if (top && top.restoreState) { + if (top.rtwreport_contents_frame && top.rtwreport_contents_frame.document) + top.restoreState(top.rtwreport_contents_frame.document); + if (top.rtwreport_document_frame && top.rtwreport_document_frame.document) { + top.restoreState(top.rtwreport_document_frame.document); + rtwResizeFrame(top.rtwreport_document_frame.document.getElementById("rtwIdContentsIframe")); + } + } + updateHyperlinks(); +} + +// highlight code after changeSys +function rtwChangeSysCallback(sid) { + if (sid == "" || typeof RTW_Sid2UrlHash == "undefined" || !RTW_Sid2UrlHash.instance) + return false; + urlHash = RTW_Sid2UrlHash.instance.getUrlHash(sid); + if (urlHash != undefined) { + if (RTW_TraceArgs && RTW_TraceArgs.instance && + !RTW_TraceArgs.instance.getUseExternalBrowser()) + urlHash = (urlHash == "")? "?useExternalBrowser=false" : + urlHash+"&useExternalBrowser=false"; + rtwMainReload(urlHash, true); + return true; + } else { + // remove highlighting from traceinfo + rtwRemoveHighlighting(); + return false; + } +} + +function emlFileOnload(docObj) { + var loc = docObj.location; + if (loc.hash) { + var line = loc.hash.substring(1); + hiliteEmlLine(docObj, line); + } +} + +function hiliteEmlLine(docObj, line) { + var bgColor; + if (top.HiliteCodeStatus) + bgColor = "#66CCFF"; + else + bgColor = "#E8D152"; + // unhighlight + if (typeof docObj.HiliteLine != "undefined") { + trObj = docObj.getElementById("LN_"+docObj.HiliteLine); + if (trObj != null) { + trObj.style.backgroundColor = ""; + } + } + // hilighlight + trObj = docObj.getElementById("LN_"+line); + if (trObj != null) { + trObj.style.backgroundColor = bgColor; + docObj.HiliteLine = line; + } +} + +function emlLineOnClick(docObj,sid,line) { + if (top) { + top.HiliteCodeStatus = top.rtwChangeSysCallback(sid); + } + hiliteEmlLine(docObj, line); +} + +function updateCode2ModelLinks(docObj) { + var webviewFrame = top.document.getElementById('rtw_webviewMidFrame'); + var link2model = false; + var isTestHarness = false; + if (top.testHarnessInfo && top.testHarnessInfo.IsTestHarness === "1") { + isTestHarness = true; + } + if (webviewFrame || isTestHarness) { + if (webviewFrame && RTW_TraceArgs.instance && + (RTW_TraceArgs.instance.getModel2CodeSrc() !== "model" || + RTW_TraceArgs.instance.getUseExternalBrowser()) + ) { + hiliteCmd = "javascript:top.rtwHilite("; + } else { + hiliteCmd = "matlab:coder.internal.code2model("; + link2model = true; + } + var objs = docObj.getElementsByName('code2model'); + var o = null; + var str = ''; + var sid = ''; + var pattern = "'code2model',"; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + o = objs[objIndex]; + str = o.href.substring(o.href.indexOf('(')+1); + if (str.indexOf(pattern) > -1) { + str = str.substring(str.indexOf(pattern) + pattern.length); + } + o.href = hiliteCmd + str; + if (link2model && isTestHarness) { + sid = str.substring(0, str.indexOf(")")); + o.href = hiliteCmd + sid + ",'" + + top.testHarnessInfo.HarnessName+ "','" + + top.testHarnessInfo.HarnessOwner+ "','" + + top.testHarnessInfo.OwnerFileName + "');"; + } + } + } +} + +function rtwHilite(aBlock,aParentSID) { + if (aBlock.indexOf('-') !== -1) { + // remove sid range: model:sid:2-10 => model:sid + var s; + s = aBlock.split(':'); + if (s.length > 0) { + s = s[s.length-1]; + if (s.indexOf('-') != -1) { + aBlock = aBlock.substring(0, aBlock.lastIndexOf(':')); + } + } + } + if (typeof aParentSID === "undefined") { + if (top.RTW_SidParentMap && top.RTW_SidParentMap.instance) + aParentSID = top.RTW_SidParentMap.instance.getParentSid(aBlock); + else + aParentSID = aBlock; + } + top.HiliteCodeStatus = true; + + // webview 2 defines an interface api, call slwebview. + if (top.slwebview) { + // webview 2.x + if (top.codeToWebView(aBlock, aParentSID) === -1) { + alert("Cannot highlight block in model Web view. It may not be exported."); + } + + } else { + // webview 1.x + if (hiliteBlockForRTWReport(aBlock,aParentSID) === false) { + if (hiliteBlockForRTWReport(aBlock, aBlock) === false) { + rtwHilite(aParentSID); + } + } + } +} + +function str2StrVar(str) { + return str.replace(/'/g,"''"); +} +window.onload=rtwMainOnLoad; + +// handle incode traceability highlighting +function inCodeTraceOnload() { + var tocDocObj = top.rtwreport_contents_frame.document; + if (!top.RTW_TraceArgs.instance) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + top.rtwreport_document_frame.location.href = summaryPage.href; + return; + } + + var files = top.RTW_TraceArgs.instance.getFile(); + if (files.length === 0) { + if (top.RTW_TraceArgs.instance) { + var block = top.RTW_TraceArgs.instance.getBlock(); + block = block.replace("<", "<").replace(">", ">"); + } + top.rtwreport_document_frame.document.write("
    No traceability information for block " + block + ".
    "); + return; + }; + + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + + // update filelist with num of highlighted lines + var tocDoc = top.rtwreport_contents_frame.document; + var tLines = 0; + for (var i=0; i 1) { + var spanNodes = parent.getElementsByTagName('span'); + var len = spanNodes.length; + if (len > 0) { + if (aNumLines > 0) { + /* display number of matches */ + spanNodes.item(len-1).innerHTML = " ("+aNumLines+")"; + } else { + /* clear number of matches */ + spanNodes.item(len-1).innerHTML = ""; + } + } + } +} + +function setupInStudio() { + if (top.whole) { + var tmp = top.whole.rows.split(","); + tmp[0] = "35px"; + top.whole.rows = tmp.join(); + } + if (top.main) { + var tmp = top.main.cols.split(","); + tmp[0] = "0"; + top.main.cols = tmp.join(); + } + // add file list to source file + if (top.Html2SrcLink && top.Html2SrcLink.instance && top.fileSelector) { + var myDoc = top.fileSelector.document; + var fileSelector = myDoc.createElement("select"); + fileSelector.id = "fileSelector"; + fileSelector.onchange = top.fileSelectorOnChange; + var filename; + var filelink; + fileSelector.innerHTML += ""; + for (var i=0; i < top.fileList.length; i++) { + filename = top.fileList[i]; + filelink = top.Html2SrcLink.instance.getLink2Src(filename); + fileSelector.innerHTML += ""; + } + var bodyNode = myDoc.body; + bodyNode.insertBefore(fileSelector, bodyNode.firstElementChild); + var textNode = myDoc.createElement("span"); + textNode.innerHTML = "Goto: "; + bodyNode.insertBefore(textNode, fileSelector); + var myCss = myDoc.createElement("link"); + myCss.type = "text/css"; + myCss.rel = "stylesheet"; + myCss.href = "rtwreport.css"; + myDoc.getElementsByTagName("head")[0].appendChild(myCss); + } +} + +function toggleNavSideBar(val) { + if (top.main) { + var tmp = top.main.cols.split(","); + + if (val === "on") { + tmp[tmp.length-1] = "15px"; + } else { + tmp[tmp.length-1] = "0"; + } + top.main.cols = tmp.join(); + if (top.rtwreport_nav_frame) + top.rtwreport_nav_frame.location.href = "nav.html"; + } +}; + +function toggleNavToolBar(val) +{ + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp1 = midFrame.rows.split(","); + var frameIdx = getNavToolbarFrameIdx(); + if (val === "on") { + tmp1[frameIdx] = "40px"; + } else { + tmp1[frameIdx] = "0"; + } + midFrame.rows = tmp1.join(); + if (top.rtwreport_navToolbar_frame) { + top.rtwreport_navToolbar_frame.location.href = "navToolbar.html"; + } + } +}; + +var GlobalConfig = { + navHiliteColor: "#0000ff", + fileLinkHiliteColor: "#ffff99", + navToolbarBgcolor: "ivory", + offset: 10, + hiliteToken: false +}; +var NavSideBarState = { + calLineHeight: 0, + overLink: false, + linkTarget: null, + lastLinkTarget: null, + linkTargetIdx: 0 +} +function drawNavSideBar() { + var rectHeight = 1; + if (!top || !top.rtwreport_document_frame || !top.rtwreport_nav_frame) return; + + if (!top.RTW_TraceArgs.instance) return; + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(); + if (fileIdx === undefined) return; + var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + if (rows.length === 0) return; // no highlighted line + + var codeTbl = top.rtwreport_document_frame.document.getElementById("codeTbl"); + if (!codeTbl) return; // no code table + + var nRows = codeTbl.rows.length + 1; + var canvas = top.rtwreport_nav_frame.document.getElementById("canvas"); + canvas.width = top.rtwreport_nav_frame.innerWidth; + canvas.height = top.rtwreport_nav_frame.innerHeight-2; + NavSideBarState.calLineHeight = canvas.height/nRows; + if (canvas.getContext) { + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + // fill background + ctx.fillStyle = GlobalConfig.navToolbarBgcolor; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = GlobalConfig.navHiliteColor; + for (var i=0;i" + anchorObj.text + "
  • "+ + size + "
  • "; + } + propObj.appendChild(ulObj); + + return propObj; +} +function getInspectLink(file, pathname, anchorObj) { + var model = top.reportModel; + var tokenId = anchorObj.id; + var navObj = document.createElement("div"); + navObj.id = "token_usage_nav"; + ulObj = document.createElement("ul"); + ulObj.id = "token_nav_links"; + ulObj.className="popup_attrib_list"; + var srcFileName = RTW_TraceInfo.toSrcFileName(file); + var defObj; + if (top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]) { + defObj = top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]; + } else if (top.CodeDefine.instance.def[anchorObj.text]) { + defObj = top.CodeDefine.instance.def[anchorObj.text]; + } + var line = anchorObj.id.substring(0,anchorObj.id.indexOf("c")); + // link to model + if (top.TraceInfoFlag && top.TraceInfoFlag.instance && + top.TraceInfoFlag.instance.traceFlag[srcFileName+":"+anchorObj.id]) { + return null; + } + // link to def/decl + if (defObj) { + var filename = defObj.file.split(/\//); + filename = filename[filename.length-1]; + ulObj.innerHTML += "
  • " + anchorObj.text + " defined at " + RTW_TraceInfo.toSrcFileName(filename) + " line " + defObj.line + "
  • "; + } + navObj.appendChild(ulObj); + return navObj; +} + +var LastHiliteTokenId = null; +function rmHiliteClickedToken() { + if (LastHiliteTokenId) { + var o = top.rtwreport_document_frame.document.getElementById(LastHiliteTokenId); + if (o) { + o.className = o.className.replace("hiliteToken", ""); + } + } +} +function hiliteClickedToken(elem) { + rmHiliteClickedToken(); + LastHiliteTokenId = elem.id; + elem.className += " hiliteToken"; +} + +var initLine = null; +function scrollToInitLine() { + if (initLine) { + var lineElem = top.rtwreport_document_frame.document.getElementById(initLine); + if (lineElem) { + lineElem.scrollIntoView(); + } + } +} + +function scrollToLineBasedOnHash(hashValue) { + // move to the current highlight line if the hash is not empty + if (hashValue === "") { + if (top.RTW_TraceInfo.instance && top.RTW_TraceInfo.instance.getCurrLine() !== null) { + top.rtwreport_document_frame.document.location.href=top.RTW_TraceInfo.instance.getCurrentHRef(); + top.initLine = top.rtwreport_document_frame.document.location.hash.substr(1); + } + } else { + // scroll and hilite line + hashValue = hashValue.substr(1); + if (isNaN(hashValue)) { + // #fcn_name + var pattern = "+newPage"; + if (hashValue.indexOf(pattern) != -1) { + hashValue = hashValue.replace(pattern, ''); + var lineElem = top.rtwreport_document_frame.document.getElementById(hashValue); + initLine = hashValue; // save initLine in case the dom is updated later by anootation + if (lineElem) { + lineElem.scrollIntoView(); + addTagToCurrentLine(); + } + + } else { + var token = null; + pattern = ["var_", "fcn_", "type_"]; + for (var i =0; i < pattern.length; i++) { + if (hashValue.indexOf(pattern[i]) === 0) { + token = hashValue.substr(pattern[i].length); + break; + } + } + if (token !== null && top.CodeDefine && top.CodeDefine.instance) { + var addr; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var srcFileName; + if (top.RTW_TraceInfo) { + srcFileName = top.RTW_TraceInfo.toSrcFileName(filename); + } + if (top.CodeDefine.instance.def[srcFileName + ":" + token]) { + addr = top.CodeDefine.instance.def[srcFileName + ":" + token]; + } else { + addr = top.CodeDefine.instance.def[token]; + } + if (addr) { + hilite_line(addr.line); + } + } else { // token id like #line"c"#col + if (hashValue.indexOf("c") !== -1) { + hilite_line(hashValue.substr(0, hashValue.indexOf("c")), hashValue); + } + } + } + } else { // #line + hilite_line(hashValue); + } + } + return false; + // hilite line number and scroll with an offset + function hilite_line(line, tokenId) { + if (isNaN(line)) return; + if (!tokenId) { + tokenId = line; + } + var elem = top.rtwreport_document_frame.document.getElementById(tokenId); + hiliteClickedToken(elem); + initLine = offset_line(line); + scrollToInitLine(); + } +} + +function tokenLinkOnClick(event) { + var alink = event.currentTarget; + if (alink.pathname === top.rtwreport_document_frame.location.pathname) { + event.preventDefault(); + scrollToLineBasedOnHash(alink.hash); + } + return false; +} +function inspectToken(file, pathname, event) { + var height = "70px"; + // show inspect data + if (top.rtwreport_inspect_frame) { + var windowObj = getInspectWindow(); + var propObj = getInspectData(file, event.currentTarget); + var navObj = getInspectLink(file, pathname, event.currentTarget); + if (navObj === null) { + closeInspectWindow(); + return false; + } + if (propObj === null) { + height = "50px"; + } else { + windowObj.appendChild(propObj); + } + windowObj.appendChild(navObj); + var data = top.rtwreport_inspect_frame.document.getElementById("popup_window"); + if (data) { + data.parentNode.replaceChild(windowObj.cloneNode(true), data); + } + } + var offsetHeight = 0; + var docHeight = 0; + if (typeof(top.rtwInspectFrame().document.body.offsetHeight) === "number") { + offsetHeight = top.rtwInspectFrame().document.body.offsetHeight; + } + if (typeof(top.rtwInspectFrame().document.height) === "number") { + docHeight = top.rtwInspectFrame().document.height; + } + if (offsetHeight > 0) { + height = ""+offsetHeight+"px"; + } else if (docHeight > 0) { + height = ""+docHeight+"px"; + } + setInspectWindow(height); + return false; +} +function setInspectWindow(height) { + // show inspect code frame + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp = midFrame.rows.split(","); + tmp[getInspectFrameIdx()] = height; + midFrame.rows = tmp.join(); + } +} +function closeInspectWindow() { + setInspectWindow(0); + return false; +} + +// set the trace number in the navigation toolbar +function setTraceNumber() { + if (RTW_TraceInfo.instance) { + var aFrame = rtwNavToolbarFrame(); + if (aFrame) { + var node = aFrame.document.getElementById("rtwIdTraceNumber"); + // calculate current line index over total highlighted lines + var currNum = RTW_TraceInfo.instance.getCurrLineIdx(); + for (var idx=0;idx 0) + line = (line > GlobalConfig.offset ? line - GlobalConfig.offset : 1); + return line; +} + +function load_js(frame, file) { + var h = frame.document.getElementsByTagName("head")[0]; + var o = h.getElementsByTagName('script'); + for (var i=0;iBlock-to-Code Highlighting Message + + + +

    Block-to-Code Highlighting Message

    + + \ No newline at end of file diff --git a/src/validation/slprj/ert/ActuatorControl/html/rtwreport.css b/src/validation/slprj/ert/ActuatorControl/html/rtwreport.css new file mode 100644 index 0000000..54b994a --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/rtwreport.css @@ -0,0 +1,257 @@ +/* Copyright 2011-2016 The MathWorks, Inc. */ +body,p,table {font-family: calibri, verdana, sans-serif;} +button,.buton {font-family: calibri, verdana, sans-serif;} +button,.button {font-size: small;} +.small_font {font-size: small;} +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } +input { font-family: sans-serif, verdana, calibri; } +table { + background-color: #ffffff; + width: 100%; +} + +table.toc, table.button, table.panel { + border-style: none; +} + +/* LineNumber */ +.LN { + font-style: italic; + color: #888888; +} + +/* Comment */ +.CT { + font-style: italic; + color: #117755; +} + +/* PreProcessor */ +PP { + /* font-weight: bold; */ + color: #992211; +} + +/* Keyword */ +.KW { + /* font-weight: bold; */ + color: #0000FF; +} + +/* Datatype */ +.DT { + /* font-weight: bold; */ + color: #112266 +} + +.highlighted { + background-color: yellow; +} + +.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} + +input.search { + background-color: #ffffff; +} + +input.failedSearch { + background-color: #F78181; +} + +/* ensure that code2model links are comment green */ +a.code2model:link { + color: #117755; + font-style: italic; +} +a.code2model:visited{ + color: #117755; + font-style: italic; +} + +.toc td, .button td, .panel td { + border-style: none; + padding: 4px; +} + +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } + +/******* table *******/ +/* default table style */ +table.AltRow { + border-collapse: collapse; border: none; border-spacing: 0pt; + border-top: solid #4F81BD 1.0pt; border-bottom: solid #4F81BD 1.0pt; +} +table.AltRow th, table.AltRow td { padding: 2pt 8pt 2pt 2pt } +/* default alternating row style */ +table.AltRow tr.even td { background-color:#D3DFEE; border:none;} +table.AltRow tr.odd td { background-color:#FFFFFF; border:none;} +/* tr class="heading" */ +table.AltRow tr.heading td, table.AltRow th { + background-color:#FFFFFF; font-weight:bold; border:none; + border-bottom: solid #4F81BD 1.0pt; +} +/* table class="FirstColumn" */ +table.FirstColumn td:first-child { font-weight:bold } +/* table class="TotalRow" */ +table.TotalRow tr:last-child { font-weight:bold } +table.TotalRow tr:last-child td { border-top: solid #4F81BD 1.0pt } + +a.closeButton { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) ); + background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9'); + background-color:#f9f9f9; + -webkit-border-top-left-radius:20px; + -moz-border-radius-topleft:20px; + border-top-left-radius:20px; + -webkit-border-top-right-radius:20px; + -moz-border-radius-topright:20px; + border-top-right-radius:20px; + -webkit-border-bottom-right-radius:20px; + -moz-border-radius-bottomright:20px; + border-bottom-right-radius:20px; + -webkit-border-bottom-left-radius:20px; + -moz-border-radius-bottomleft:20px; + border-bottom-left-radius:20px; + text-indent:0; + border:2px solid #dcdcdc; + display:inline-block; + color:#454143; + font-family:Arial; + font-size:15px; + font-weight:bold; + font-style:normal; + height:20px; + line-height:20px; + width:20px; + text-decoration:none; + text-align:center; + cursor: pointer; +} +a.closeButton:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) ); + background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9', endColorstr='#f9f9f9'); + background-color:#e9e9e9; +} +a.closeButton:active { + position:relative; + top:1px; +} + +.button { + -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; + -webkit-border-top-left-radius:5px; + -moz-border-radius-topleft:5px; + border-top-left-radius:5px; + -webkit-border-top-right-radius:5px; + -moz-border-radius-topright:5px; + border-top-right-radius:5px; + -webkit-border-bottom-right-radius:5px; + -moz-border-radius-bottomright:5px; + border-bottom-right-radius:5px; + -webkit-border-bottom-left-radius:5px; + -moz-border-radius-bottomleft:5px; + border-bottom-left-radius:5px; + text-indent:0px; + border:1px solid #dcdcdc; + display:inline-block; + color:black; + font-family:Arial; + font-size:12px; + font-weight:bold; + font-style:normal; + height:12px; + line-height:12px; + width:45px; + text-decoration:none; + text-align:center; + text-shadow:1px 1px 0px #ffffff; +} +.button:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) ); + background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed'); + background-color:#dfdfdf; +}.button:active { + position:relative; + top:1px; +}.button:disabled { + color:#777777; +} + +ul.nav_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.nav_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} + +.nav_toolbar { + background-color: ivory; + margin-top: 0; +} + +.inspect_body { + margin: 0; + margin-bottom: 0; + display: inline; + vertical-align:middle; +} + +table.nav_table { + background-color: ivory; + border: none; + width: 100%; + display: inline; + vertical-align:middle; +} + +table#rtwIdTracePanel > tr > td { + white-space: nowrap; + table-layout:fixed; + vertical-align:middle; +} + +table.nav_table > button { + height: 20px; +} +select#fileSelector { + padding: 5px; + font-size: 16px; + line-height: 1; + border-radius: 0; + height: 34px; +} + +.treeTable table{ + table-layout: fixed; +} +.treeTable td:first-child > span{ + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + width: 100%; +} diff --git a/src/validation/slprj/ert/ActuatorControl/html/rtwreport_utils.js b/src/validation/slprj/ert/ActuatorControl/html/rtwreport_utils.js new file mode 100644 index 0000000..f58fb49 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/rtwreport_utils.js @@ -0,0 +1,92 @@ +// Copyright 2011-2013 The MathWorks, Inc. + + +function local_onload() { + if (typeof top.rtwreport_document_frame !== "undefined") { + var docObj = window.document; + var alink = docObj.getElementById("linkToText_plain"); + if (alink) { + alink.href = "matlab:coder.internal.editUrlTextFile('" + alink.href + "')"; + } + alink = docObj.getElementById("linkToCS"); + if (alink) { + alink.href = "matlab:coder.internal.viewCodeConfigsetFromReport('" + alink.href + "');"; + } + } +} + +var utils = (function() { + + // Load via Microsoft.XMLDOM--for older versions of IE + function loadXML_MSXMLDOM(filename, callback, async) { + if (navigator.appName == "Microsoft Internet Explorer") { + // Internet Explorer 5/6 + try { + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = async; + xmlDoc.onreadystatechange = function() { + if (xmlDoc.readyState == 4) { + callback(xmlDoc); + } + } + xmlDoc.load(filename); + return true; + } catch(e) { + } + } + return false; + } + + // Load via XMLHttpRequest + function loadXML_XHR(filename, callback, async) { + if (window.XMLHttpRequest) { + try { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + callback(this.responseXML); + } + } + xhr.open("GET", filename, async); + xhr.send(""); + return true; + } catch(e) { + if (navigator.appName === "Netscape" && e.code === 1012) { + // file not found: ignore + return true; + } + } + } + return false; + } + + return { + trimText: function(s) { + // In IE9, String.trim not present + if (s && s.trim) { + return s.trim(); + } + else { + return s; + } + }, + getText: function(elt) { + // In IE9, use 'text' property rather than 'textContent' + return elt.textContent ? elt.textContent : elt.text; + }, + loadXML: function(filename, callback, options) { + var async = !!options && typeof(options["async"]) !== "undefined" ? options.async : true; + if (!loadXML_XHR(filename, callback, async)) { + if (!loadXML_MSXMLDOM(filename, callback, async)) { + return false; + } + } + return true; + } + }; +})(); + +function code2model(sid) { + utils.loadXML("http://localhost:31415/matlab/feval/coder.internal.code2model?arguments=[\"" + sid + "\"]", function() {}); + //window.location.href = "matlab:coder.internal.code2model('" + sid + "')"; +} diff --git a/src/validation/slprj/ert/ActuatorControl/html/rtwshrink.js b/src/validation/slprj/ert/ActuatorControl/html/rtwshrink.js new file mode 100644 index 0000000..8e2affb --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/rtwshrink.js @@ -0,0 +1,210 @@ +// Copyright 2011-2017 The MathWorks, Inc. + +function RTW_STRUCT(prop, value) { + this.prop = prop; + if (typeof(value) == 'undefined') { + this.value = ""; + } else { + this.value = value; + } +} + +// initialize the cache when code generation report is first loaded +function RTW_BOOK() { + this.length = 0; + this.rtw_pages = new Array(); + this.getPage = function(file) { + return this.rtw_pages[file]; + }; + this.addPage = function(file) { + var page; + if (this.hasPage(file)) { + page = this.rtw_pages[file]; + } else { + page = new RTW_PAGE(file); + this.rtw_pages[file] = page; + } + return page; + }; + this.hasPage = function(file) { + return typeof(this.rtw_pages[file]) != 'undefined'; + }; + this.removePage = function(file) { + var tmp; + if (typeof(this.rtw_pages[file]) != 'undefined') { + tmp = this.rtw_pages[file]; + delete this.rtw_pages[file]; + this.length--; + } + return tmp; + }; +} + +if (!RTW_BOOK.instance) { + RTW_BOOK.instance = new RTW_BOOK(); +} + +function RTW_PAGE() { + this.length = 0; + this.items = new Array(); + this.pagename = ''; + if (arguments.length > 0 && typeof(arguments[1]) != 'undefined') { + this.pagename = arguments[1]; + } + + this.getItem = function(id) { + return this.items[id]; + }; + this.getItems = function() { + return this.items; + }; + this.addItem = function(id, value) { + var tmp; + if (typeof(value) != 'undefined') { + if (typeof(this.items[id]) != 'undefined') { + this.length++; + } else { + tmp = this.items[id]; + } + this.items[id] = value; + this.length++; + } + return tmp; + }; + this.hasItem = function(id) { + return typeof(this.items[id]) != 'undefined'; + }; + this.removeItem = function(id) { + var tmp; + if (typeof(this.items[id]) != 'undefined') { + tmp = this.items[id]; + delete this.items[id]; + this.length--; + } + return tmp; + }; +} + +function rtwTableShrink(doc, obj, id, isSymbol) { + var hide, hide_text, show, show_text; + if (isSymbol) { + hide = "[-]"; + hide_text = hide; + show = "[+]"; + show_text = show; + } else { + hide = "[hide]"; + hide_text = "[hide]"; + show = "[show]"; + show_text = "[show]"; + } + hide = "" + hide + ""; + show = "" + show + ""; + if (doc.getElementsByName) { + var o = doc.getElementsByName(id); + for (var oid = 0; oid < o.length; ++oid) { + if (o[oid].style.display === "none") { + o[oid].style.display = ""; + } else { + o[oid].style.display = "none"; + } + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } + + // IE supports innerText while other browsers support textContent + if (obj.textContent) { + var objText = obj.textContent; + } else { + var objText = obj.innerText; + } + + if (objText.toLowerCase() === show_text.toLowerCase()) { + obj.innerHTML = hide; + } else { + obj.innerHTML = show; + } + + if (addToPage) { + addToPage(doc, obj, 'innerHTML'); + } +} + +function rtwTableExpand(doc, controlObj, id) { + if (doc.getElementById) { + var obj = doc.getElementById(id); + if (obj && obj.style.display === "none") { + rtwTableShrink(doc, controlObj, id, false); + } + } +} + +function restoreState(docObj) { + var filename = docObj.location.href; + if (RTW_BOOK.instance && RTW_BOOK.instance.hasPage(filename)) { + var page = RTW_BOOK.instance.getPage(filename); + var items = page.getItems(); + var elem; + if (docObj.getElementsByName) { + for (var i in items) { + var o = docObj.getElementsByName(i); + for (var oid = 0; oid < o.length; ++oid) { + elem = o[oid]; + if (items[i].prop === 'display') { + if (elem.style.display === 'none') { + elem.style.display = ''; + } else { + elem.style.display = 'none'; + } + } else if (items[i].prop === 'innerHTML') { + elem.innerHTML = items[i].value; + } + } + } + } + } +} + +function addToPage(docObj, obj, prop) { + var filename = docObj.location.href; + if (RTW_BOOK.instance) { + var page; + if (RTW_BOOK.instance.hasPage(filename)) { + page = RTW_BOOK.instance.getPage(filename); + } else { + page = RTW_BOOK.instance.addPage(filename); + } + if (page.hasItem(obj.id)) { + page.removeItem(obj.id); + } else { + var my_struct; + if (prop === "display") { + my_struct = new RTW_STRUCT(prop, obj.style.display); + } else { + my_struct = new RTW_STRUCT(prop, obj.innerHTML); + } + page.addItem(obj.id, my_struct); + } + } +} + +function rtwSwitchView(doc, obj1, obj2) { + if (doc.getElementsByName) { + var o = doc.getElementsByName(obj1); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = "none"; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + var o = doc.getElementsByName(obj2); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = ""; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } +} diff --git a/src/validation/slprj/ert/ActuatorControl/html/search.js b/src/validation/slprj/ert/ActuatorControl/html/search.js new file mode 100644 index 0000000..816380f --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/search.js @@ -0,0 +1,559 @@ +// Copyright 2007-2012 The MathWorks, Inc. + +function createHighlightSpanStart(num) +{ + return ""; +} + +var str2pos; // This is a map between a tag stripped string and the original string. +function getTagStrippedStringAndMap(aString) +{ + var tagStrippedString = new String(); + + str2pos = new Array(); + + var inTag = false; + var inScript = false; + + for (var strPos = 0; strPos < aString.length; strPos++) { + if (inTag && aString.charAt(strPos) == '>') { + inTag = false; + if (inScript && (strPos > 8) && (aString.slice(strPos, strPos - 8) == '/script>')) { + inScript = false; + } + continue; + } else if (!inTag && aString.charAt(strPos) == '<') { + inTag = true; + if (!inScript && aString.slice(strPos, strPos + 7) == ' str2posprev+1) // we have jumped some text, so there must be a tag + { + // insert end tag + newText += highlightEndTag; + + // insert intermediate body text tags + newText += bodyText.slice(str2posprev+1, str2pos[cnt]); + + // insert start tag + newText += highlightStartTag; + } + newText += bodyText.charAt(str2pos[cnt]); + str2posprev=str2pos[cnt]; + } + + // insert end + newText += highlightEndTag; + return newText; + +} + +// check to see if the sequence at position 'i' in taglessString is actually in +// the middle of an escape sequence. We assume escape sequences follow the pattern +// &;. We check for  , <, > and & +function isInEscapedSequence(i, taglessString, searchTerm) +{ + var escapeSeq = / |<|>|&/gi; + var maxEscapeSeqLength = 6; + var startPos = 0; + var endPos = 0; + + // exit if the search term has an escape sequence inside it + if (escapeSeq.test(searchTerm)) { + return false; + } + + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + // go back in the string until we find an ampersand or we hit maxEscapeSeqLength characters + tempI = i; + var bFound = false; + while (tempI >= 0 && tempI > (i-maxEscapeSeqLength)) { + if (taglessString.charAt(tempI) == "&") { + startPos = tempI; + bFound = true; + break; + } + tempI = tempI-1; + + // if we hit a ';' in any position other than the first while searching + // for an ampersand, then we cannot be inside an escape sequence + if (tempI >= 0 && taglessString.charAt(tempI) == ";") { + return false; + } + } + if (!bFound) { + return false; + } + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + var subString = taglessString.substring(startPos, startPos + maxEscapeSeqLength); + return escapeSeq.test(subString); +} + +// Adds highlighting to bodyText around searchTerm. Case sensitivity is optional. +// hitCount is used to a) count the number of search matches and b) Generate unique +// name strings for each highlighting SPAN element. +function addHighlight(bodyText, searchTerm, caseSensitive, hitCount) +{ + var highlightStartTag = ""; + var highlightEndTag = ""; + + var newText = ""; + var i = 0; + var previ = 0; + var bodyTextUC = bodyText.toUpperCase(); + + if (caseSensitive) { + var taglessString = getTagStrippedStringAndMap(bodyText); + } else { + var taglessString = getTagStrippedStringAndMap(bodyTextUC); + } + + // escape the search term in case the user input '<' or '>' etc + searchTerm = escapeSpecialChars(searchTerm); + + if (!caseSensitive) { + var searchTermUC = searchTerm.toUpperCase(); + } + + // search for subsequent matches + while (true) { + if (caseSensitive) { + i = taglessString.indexOf(searchTerm, i); + } else { + i = taglessString.indexOf(searchTermUC, i); + } + if (i < 0) break; + + // we have a match! + + // make sure that the match is not inside an escaped sequence of text + // such as   + if (isInEscapedSequence(i, taglessString, searchTerm)) { + i=i+1; + continue; + } + + // insert highlight tags that cross tag boundaries + highlightStartTag = createHighlightSpanStart(hitCount); + hitCount = hitCount+1; + newText += insertHighlighting(bodyText, previ, i, searchTerm.length, highlightStartTag, highlightEndTag); + previ = str2pos[i+searchTerm.length-1]+1; + + i = i + searchTerm.length; + } + + newText += bodyText.slice(previ, bodyText.length); + return [newText, hitCount]; +} + +function removeHighlight(bodyText) +{ + // We use regular expressions here rather than a straight text search because + // some browsers actually insert double quotes and capitalize. Also, each highlight + // name is uniquely numbered in order of discovery + var highlightStartTag = //i; + var highlightEndTag = /<\/span>/i; + + var newText = ""; + + var startPatternFirstIndex = -1; + var startPatternLastIndex = -1; + + var endPatternFirstIndex = -1; + var endPatternLastIndex = -1; + + while (highlightStartTag.test(bodyText) === true) { + startPatternFirstIndex = bodyText.search(highlightStartTag); + newText += bodyText.substring(0, startPatternFirstIndex); + startPatternLastIndex = bodyText.indexOf('>', startPatternFirstIndex+1); + + bodyText = bodyText.substr(startPatternLastIndex+1); + endPatternFirstIndex = bodyText.search(highlightEndTag); + newText += bodyText.substring(0, endPatternFirstIndex); + endPatternLastIndex = endPatternFirstIndex+7; + + bodyText = bodyText.substr(endPatternLastIndex); + } + if (startPatternFirstIndex < 0) { + return bodyText; + } else { + return newText+bodyText; + } +} + +function removeHighlightInAllDocs() +{ + if (top) { + for (var i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + if (typeof currentDoc.body !== "undefined" && currentDoc.body !== null) + currentDoc.body.innerHTML=removeHighlight(currentDoc.body.innerHTML); + } + } + } +} + +function findInDoc(searchStringFromSubmitBox, doc, caseSensitive, hitCount) +{ + var searchBody = doc.body.innerHTML; + // if the document is empty, or the documents is invalid, return + if (!doc.body || typeof(searchBody) === "undefined") { + return [false, hitCount]; + } + + // inject highlighting code into html + var result = addHighlight(searchBody, searchStringFromSubmitBox, caseSensitive, hitCount); + doc.body.innerHTML = result[0]; + + return [true, result[1]]; +} + +var currentlyHighlightedHit; + +function getSpansByName(name) +{ + var allSpans = []; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + var highlightedSpans = currentDoc.getElementsByName(name); + if (highlightedSpans && highlightedSpans.length && highlightedSpans.length > 0) { + for (j = 0; j < highlightedSpans.length; j++) { + allSpans = allSpans.concat(highlightedSpans[j]); + } + } + } + } + return allSpans; +} + +function isVisibleElement(elementID) +{ + if (elementID) + return elementID.offsetWidth > 0 || elementID.offsetHeight > 0; + else + return false; +} + +function areAllSpansVisible(spans) +{ + isVisible = true; + for (i = 0; i < highlightedSpans.length; i++) { + isVisible = isVisible && isVisibleElement(highlightedSpans[i]); + } + return isVisible; +} + +function getNextVisible() +{ + var isVisible = false; + var foundVisible = false; + while (!isVisible) { + currentlyHighlightedHit = currentlyHighlightedHit + 1; + highlightedSpans = setCurrentSearchMatchIfVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + isVisible = true; + } else if (currentlyHighlightedHit < totalHits) { + continue; + } else { + // we have reached the end + isVisible = false; + currentlyHighlightedHit = 0; + highlightedSpans = null; + break; + } + } + + return highlightedSpans; +} + +function clearCurrentSearchMatch() +{ + // clear prior highlighting + spanName = "highlight" + currentlyHighlightedHit; + highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (highlightedSpans[i]) { + highlightedSpans[i].setAttribute("class", "highlighted"); + } + } + } +} + +function setCurrentSearchMatchIfVisible(hitNum){ + currentlyHighlightedHit = hitNum; + var spanName = "highlight" + currentlyHighlightedHit; + var highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (!isVisibleElement(highlightedSpans[i])) { + highlightedSpans = null; + break; + } + } + } + return highlightedSpans; +} + +// this takes in an option integer 'hitNum'. If not specified, it scrolls +// to the next hit +function scrollToNextHit(hitNum) +{ + var i = 0; + var found = false; + var spanName = ""; + var highlightedSpans; + var searchBox = findElement('searchTxtBox'); + + clearCurrentSearchMatch(); + + if (hitNum) { + // if a number is provided, use it + highlightedSpans = setCurrentSearchMatchIfVisible(hitNum); + } else { + // start working on next element to highlight + highlightedSpans = getNextVisible(); + } + + // we found the current + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + + // if highlightedSpans is invalid, then we did not find any valid, visible subsequent matches + // wrap to beginning or indicate no matches + } else { + // Element not found. Scroll to first visible element + currentlyHighlightedHit = 0; + var highlightedSpans = getNextVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + } else { + // there aren't any matches + searchBox.setAttribute("class", "failedSearch"); + } + } +} + +// find search box +function findElement(element) +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var elem = top.frames[i].document.getElementById(element); + if (elem) { + return elem; + } + } + } +} + +// Restore search term once form is submitted +function initSearchBox(strInitValue) +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.value = strInitValue; + } +} + +// Sets focus back on to the text box +function setFocusOnTxtBox() +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.focus(); + txtBox.select(); + } + return txtBox; +} + +var previousSearchString; +var totalHits; +function findInAllDocs(searchStringFromSubmitBox, caseSensitive) +{ + if (previousSearchString != searchStringFromSubmitBox) { + // If the search string has changed or a new page has been loaded, do a new search + var hitCount = 1; + var i = 0; + var success = false; + previousSearchString = searchStringFromSubmitBox; + + // start by removing traceinfo highlighting + rtwRemoveHighlighting(); + + // remove all previous search highlighting + removeHighlightInAllDocs(); + + // 1. Iterate through all frames in window and search + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + + // if we have no search term, restore + if (searchStringFromSubmitBox !== "") { + // search and highlight in all frames + var srchResult = findInDoc(searchStringFromSubmitBox, currentDoc, caseSensitive, hitCount); + hitCount = srchResult[1]; + totalHits = srchResult[1]; + } + } + + // 2. Restore search term once form is submitted and text highlighted + if (searchStringFromSubmitBox != "") { + strInitValue = searchStringFromSubmitBox; + } + initSearchBox(strInitValue); + + // 3. Scroll to the first hit encountered + scrollToNextHit(1); + + // 4. Set focus back to text box and select text + var txtBox = setFocusOnTxtBox(); + if (txtBox) { + txtBox.select(); + } + + } else { + // If the search string is the same, then scroll to the next + // hit if the hit is valid. Else wrap back. + scrollToNextHit(); + } + return false; +} + +// if the search box is empty, clear highlighting +function clearIfEmpty() +{ + txtBox = findElement('searchTxtBox'); + if (txtBox.value == "") { + txtBox.setAttribute("class", "search"); + removeHighlightInAllDocs(); + previousSearchString=""; + setFocusOnTxtBox(); + } +} + +function keyPressSwitchyard(keyPressEvent) +{ + var kc; + keyPressEvent = (keyPressEvent == null ? window.keyPressEvent : keyPressEvent); + + // typically IE does not support this + if (!keyPressEvent || (typeof keyPressEvent == "undefined")) { + return; + } + + if (keyPressEvent.keyCode) { + kc=keyPressEvent.keyCode; + } else if (keyPressEvent.which) { + kc=keyPressEvent.which; + } else { + return; + } + + // we do not care about the browser find appearing. If it does appear, then + // we are running an external browser and that is okay. + + // handle Ctrl-Key combinations + if (keyPressEvent.ctrlKey) { + switch (kc) { + case 70: // Ctrl-F + { + setFocusOnTxtBox(); + break; + } + + default: break; + } + } +} + +function installDocumentKeyPressHandler() +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + currentDoc.onkeydown = keyPressSwitchyard; + } + top.document.onkeydown = keyPressSwitchyard; + + // This also clears search related highlighting + removeHighlightInAllDocs(); + currentlyHighlightedHit = 0; + if (previousSearchString) initSearchBox(previousSearchString); + previousSearchString = ""; +} + +// This function is a onresize callback for the rtwreport_contents_frame +// It is used to dynamically resize the searchbox based on the size of the frame. +function setWidthDynamic(frameID, elementID, extraSpace, minSize) +{ + var frame = document.getElementById(frameID); + + // sanity check input args + if (frame && extraSpace > 0 && minSize > 0) { + var frameWidth = frame.scrollWidth; + var newSize = extraSpace + minSize + 40; // 40 is the extra whitespace + var element = findElement(elementID); + if (element) + { + if (frameWidth < newSize) { + element.style.width = minSize; + } else { + element.style.width = frameWidth - extraSpace - 40; + } + } + } +} diff --git a/src/validation/slprj/ert/ActuatorControl/html/spinner.gif b/src/validation/slprj/ert/ActuatorControl/html/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4ab78302c5d6ff92def7688c291999a4fcbd70d GIT binary patch literal 4178 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/html/traceInfo_flag.js b/src/validation/slprj/ert/ActuatorControl/html/traceInfo_flag.js new file mode 100644 index 0000000..5733208 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/html/traceInfo_flag.js @@ -0,0 +1,140 @@ +function TraceInfoFlag() { + this.traceFlag = new Array(); + this.traceFlag["ActuatorControl.c:75c26"]=1; + this.traceFlag["ActuatorControl.c:94c28"]=1; + this.traceFlag["ActuatorControl.c:94c63"]=1; + this.traceFlag["ActuatorControl.c:94c72"]=1; + this.traceFlag["ActuatorControl.c:95c5"]=1; + this.traceFlag["ActuatorControl.c:95c18"]=1; + this.traceFlag["ActuatorControl.c:95c52"]=1; + this.traceFlag["ActuatorControl.c:95c63"]=1; + this.traceFlag["ActuatorControl.c:100c42"]=1; + this.traceFlag["ActuatorControl.c:100c50"]=1; + this.traceFlag["ActuatorControl.c:101c46"]=1; + this.traceFlag["ActuatorControl.c:104c48"]=1; + this.traceFlag["ActuatorControl.c:104c51"]=1; + this.traceFlag["ActuatorControl.c:105c48"]=1; + this.traceFlag["ActuatorControl.c:140c26"]=1; + this.traceFlag["ActuatorControl.c:159c28"]=1; + this.traceFlag["ActuatorControl.c:159c63"]=1; + this.traceFlag["ActuatorControl.c:159c72"]=1; + this.traceFlag["ActuatorControl.c:160c5"]=1; + this.traceFlag["ActuatorControl.c:160c18"]=1; + this.traceFlag["ActuatorControl.c:160c52"]=1; + this.traceFlag["ActuatorControl.c:160c63"]=1; + this.traceFlag["ActuatorControl.c:165c42"]=1; + this.traceFlag["ActuatorControl.c:165c50"]=1; + this.traceFlag["ActuatorControl.c:166c46"]=1; + this.traceFlag["ActuatorControl.c:169c48"]=1; + this.traceFlag["ActuatorControl.c:169c51"]=1; + this.traceFlag["ActuatorControl.c:170c48"]=1; + this.traceFlag["ActuatorControl.c:205c26"]=1; + this.traceFlag["ActuatorControl.c:224c28"]=1; + this.traceFlag["ActuatorControl.c:224c61"]=1; + this.traceFlag["ActuatorControl.c:224c70"]=1; + this.traceFlag["ActuatorControl.c:225c5"]=1; + this.traceFlag["ActuatorControl.c:225c18"]=1; + this.traceFlag["ActuatorControl.c:225c50"]=1; + this.traceFlag["ActuatorControl.c:225c61"]=1; + this.traceFlag["ActuatorControl.c:230c40"]=1; + this.traceFlag["ActuatorControl.c:230c48"]=1; + this.traceFlag["ActuatorControl.c:231c44"]=1; + this.traceFlag["ActuatorControl.c:234c46"]=1; + this.traceFlag["ActuatorControl.c:234c49"]=1; + this.traceFlag["ActuatorControl.c:235c46"]=1; + this.traceFlag["ActuatorControl.c:293c59"]=1; + this.traceFlag["ActuatorControl.c:303c39"]=1; + this.traceFlag["ActuatorControl.c:306c41"]=1; + this.traceFlag["ActuatorControl.c:306c43"]=1; + this.traceFlag["ActuatorControl.c:307c41"]=1; + this.traceFlag["ActuatorControl.c:314c35"]=1; + this.traceFlag["ActuatorControl.c:325c59"]=1; + this.traceFlag["ActuatorControl.c:335c39"]=1; + this.traceFlag["ActuatorControl.c:338c41"]=1; + this.traceFlag["ActuatorControl.c:338c43"]=1; + this.traceFlag["ActuatorControl.c:339c41"]=1; + this.traceFlag["ActuatorControl.c:346c35"]=1; + this.traceFlag["ActuatorControl.c:357c59"]=1; + this.traceFlag["ActuatorControl.c:367c39"]=1; + this.traceFlag["ActuatorControl.c:370c41"]=1; + this.traceFlag["ActuatorControl.c:370c43"]=1; + this.traceFlag["ActuatorControl.c:371c41"]=1; + this.traceFlag["ActuatorControl.c:378c35"]=1; +} +top.TraceInfoFlag.instance = new TraceInfoFlag(); +function TraceInfoLineFlag() { + this.lineTraceFlag = new Array(); + this.lineTraceFlag["ActuatorControl.c:59"]=1; + this.lineTraceFlag["ActuatorControl.c:69"]=1; + this.lineTraceFlag["ActuatorControl.c:75"]=1; + this.lineTraceFlag["ActuatorControl.c:94"]=1; + this.lineTraceFlag["ActuatorControl.c:95"]=1; + this.lineTraceFlag["ActuatorControl.c:100"]=1; + this.lineTraceFlag["ActuatorControl.c:101"]=1; + this.lineTraceFlag["ActuatorControl.c:102"]=1; + this.lineTraceFlag["ActuatorControl.c:104"]=1; + this.lineTraceFlag["ActuatorControl.c:105"]=1; + this.lineTraceFlag["ActuatorControl.c:117"]=1; + this.lineTraceFlag["ActuatorControl.c:124"]=1; + this.lineTraceFlag["ActuatorControl.c:134"]=1; + this.lineTraceFlag["ActuatorControl.c:140"]=1; + this.lineTraceFlag["ActuatorControl.c:159"]=1; + this.lineTraceFlag["ActuatorControl.c:160"]=1; + this.lineTraceFlag["ActuatorControl.c:165"]=1; + this.lineTraceFlag["ActuatorControl.c:166"]=1; + this.lineTraceFlag["ActuatorControl.c:167"]=1; + this.lineTraceFlag["ActuatorControl.c:169"]=1; + this.lineTraceFlag["ActuatorControl.c:170"]=1; + this.lineTraceFlag["ActuatorControl.c:182"]=1; + this.lineTraceFlag["ActuatorControl.c:189"]=1; + this.lineTraceFlag["ActuatorControl.c:199"]=1; + this.lineTraceFlag["ActuatorControl.c:205"]=1; + this.lineTraceFlag["ActuatorControl.c:224"]=1; + this.lineTraceFlag["ActuatorControl.c:225"]=1; + this.lineTraceFlag["ActuatorControl.c:230"]=1; + this.lineTraceFlag["ActuatorControl.c:231"]=1; + this.lineTraceFlag["ActuatorControl.c:232"]=1; + this.lineTraceFlag["ActuatorControl.c:234"]=1; + this.lineTraceFlag["ActuatorControl.c:235"]=1; + this.lineTraceFlag["ActuatorControl.c:247"]=1; + this.lineTraceFlag["ActuatorControl.c:259"]=1; + this.lineTraceFlag["ActuatorControl.c:266"]=1; + this.lineTraceFlag["ActuatorControl.c:273"]=1; + this.lineTraceFlag["ActuatorControl.c:293"]=1; + this.lineTraceFlag["ActuatorControl.c:299"]=1; + this.lineTraceFlag["ActuatorControl.c:300"]=1; + this.lineTraceFlag["ActuatorControl.c:303"]=1; + this.lineTraceFlag["ActuatorControl.c:304"]=1; + this.lineTraceFlag["ActuatorControl.c:306"]=1; + this.lineTraceFlag["ActuatorControl.c:307"]=1; + this.lineTraceFlag["ActuatorControl.c:314"]=1; + this.lineTraceFlag["ActuatorControl.c:319"]=1; + this.lineTraceFlag["ActuatorControl.c:325"]=1; + this.lineTraceFlag["ActuatorControl.c:331"]=1; + this.lineTraceFlag["ActuatorControl.c:332"]=1; + this.lineTraceFlag["ActuatorControl.c:335"]=1; + this.lineTraceFlag["ActuatorControl.c:336"]=1; + this.lineTraceFlag["ActuatorControl.c:338"]=1; + this.lineTraceFlag["ActuatorControl.c:339"]=1; + this.lineTraceFlag["ActuatorControl.c:346"]=1; + this.lineTraceFlag["ActuatorControl.c:351"]=1; + this.lineTraceFlag["ActuatorControl.c:357"]=1; + this.lineTraceFlag["ActuatorControl.c:363"]=1; + this.lineTraceFlag["ActuatorControl.c:364"]=1; + this.lineTraceFlag["ActuatorControl.c:367"]=1; + this.lineTraceFlag["ActuatorControl.c:368"]=1; + this.lineTraceFlag["ActuatorControl.c:370"]=1; + this.lineTraceFlag["ActuatorControl.c:371"]=1; + this.lineTraceFlag["ActuatorControl.c:378"]=1; + this.lineTraceFlag["ActuatorControl.c:383"]=1; + this.lineTraceFlag["ActuatorControl.h:55"]=1; + this.lineTraceFlag["ActuatorControl.h:56"]=1; + this.lineTraceFlag["ActuatorControl.h:57"]=1; + this.lineTraceFlag["ActuatorControl.h:58"]=1; + this.lineTraceFlag["ActuatorControl.h:59"]=1; + this.lineTraceFlag["ActuatorControl.h:60"]=1; + this.lineTraceFlag["ActuatorControl.h:61"]=1; + this.lineTraceFlag["ActuatorControl.h:62"]=1; + this.lineTraceFlag["ActuatorControl.h:63"]=1; +} +top.TraceInfoLineFlag.instance = new TraceInfoLineFlag(); diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.bat b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.bat new file mode 100644 index 0000000..9b78f34 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.bat @@ -0,0 +1,15 @@ +@if not "%MINGW_ROOT%" == "" (@set "PATH=%PATH%;%MINGW_ROOT%") + + +call "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a\bin\win64\checkMATLABRootForDriveMap.exe" "\\Stephen-Desktop\D$\Program Files\MATLAB\R2020a" > mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f ActuatorControl.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f ActuatorControl.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.mk b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.mk new file mode 100644 index 0000000..8219eca --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.mk @@ -0,0 +1,410 @@ +########################################################################### +## Makefile generated for Simulink model 'ActuatorControl'. +## +## Makefile : ActuatorControl.mk +## Generated on : Thu Jul 16 18:51:11 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./ActuatorControl_rtwlib.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = ActuatorControl +MAKEFILE = ActuatorControl.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../.. +COMPILER_COMMAND_FILE = ActuatorControl_comp.rsp +CMD_FILE = ActuatorControl.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = ActuatorControl_rtwlib.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./ActuatorControl_rtwlib.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=0 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=ActuatorControl -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/slprj/ert/ActuatorControl/ActuatorControl.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = ActuatorControl.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/ActuatorControl/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/ActuatorControl/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : ../%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : ../%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +ActuatorControl.obj : $(START_DIR)/slprj/ert/ActuatorControl/ActuatorControl.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.rsp b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.rsp new file mode 100644 index 0000000..d70b142 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl.rsp @@ -0,0 +1 @@ +ActuatorControl.obj diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_comp.rsp b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_comp.rsp new file mode 100644 index 0000000..df24f25 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_comp.rsp @@ -0,0 +1,8 @@ +-ID:/Documents/SCHOOL/McSCert/do178/src/validation +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl +-ID:/Program\ Files/MATLAB/R2020a/extern/include +-ID:/Program\ Files/MATLAB/R2020a/simulink/include +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src/ext_mode/common +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/ert +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/_sharedutils diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_ref.rsp b/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_ref.rsp new file mode 100644 index 0000000..e69de29 diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/buildInfo.mat b/src/validation/slprj/ert/ActuatorControl/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..0fe10c44fa2799ba23f6dfac294235ce0507f299 GIT binary patch literal 12897 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/compileInfo.mat b/src/validation/slprj/ert/ActuatorControl/instrumented/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..a31c9dd52dd7b6b381ce15fa0f024d3cec641894 GIT binary patch literal 2079 zcma)-c{JPU8pnSTA}MOAC8n02Qd=#FpkyeaH4#K@t&SNYsgNLcw|YqvYv_z2V`^z6 zr6{dqDQ!n+X#YI_xhvOnssR_yPSn#mtQE#H7y%p%092J=wbsS7!V8P&+G?0)M z2cjK8v=i0=jYXqDJCq#?{6E(oMc~tdc>Aeto;)}A3Em$R5(y5F9YHBT)`r1Jd2e*t z6^4XGx%Lz$1IG-fhZjbW8I~osz)%11wXyKC8nI0tlkBs&Er|pG?FHpsGF0w13Pn0j zB0(qg+{How(tP-Uv4&KR{IRZia$4h>m=|1u)rK(|yZ5LWA4d*oq!4Q2N*ZGiQIovU z!NqJ=4#)wXcA6h#T4ErwYt?gmh=VA#VcWgI_|6a#E6<3c+lah4rln=5y8|CQ zSLFSGRO)1&E*#kPI=CA?pWT`?F{xQ!_9OAv>h+H+V>3H}%-;dOE3YgP+!;5pN5V+7 zVa)kl$uZ8VbhWQ4jAZPuoZ>`4?o=`6b5U=o!ps^t$4aZ}Do!k*CwPoyrh77CNy5HY`>9#NVL z;NR*=bGfjv>e5^^ld-!vZLMZ45J%e}8R&2m1w=gjJO`fS^EBC}%i1fCwt(rWvb<}c zTG4m8&>BB96~SKT9evdG?OlJ2Kse=yjTNn?ceaF$AIsmV{P0ZHy3hXHzK^Tk+=CmK z$Zz~%&dUyZQ%^`P)U}h2&u`2#ID)CUogbq8eXnDNa;E)wj6eY;aoo(F`8}tOqEOwz zshX!G@3@qFrx)@vm!c$l@67GqzlR9p+{F-~ud>?B9nUa(B5lB(W46`=VwyDMrJ7PP~as7Nyn4gY0toi1O~ujNtYabSbT z7s6}i4LnM#C38-=cPS^^dSj%RFQ0#y%j(!T*q$W`xY4>i+$(}6Og6X17+Jj5?0eN0 zzI0#z9%JdoT)`p(+ub|!uG;KO-UMwTQ#C1{k7?Ggwg2_pL`Ea#HIJQ=yao`0OiwMk zq&Za2oR8$U$lD<)i#shm*R#bx|0<0jhS<^Tlp%Rsk_&KNG1Vys@ zOUclW^0B6QqepZW8nJY*8N`GAf%ulf8DCyUN&V0@J@I*~CbHyQu~;E$oR1O~x|*dI zYhLvu1q6(sv%*O6c0)CD_fI_%?VS>*=kzFKvy85;Tj_FRr!$OaLbB2nqo5&UX$8A7 zh`}?-<*SMg1%Z!cZ)(5Ypv2EvLo|hMY}rOGQ-&3ce7BcE6!spS=!18$5y%&Rx+A0 z_9`l{&hJVet> z`>9Ms(YA;?{}aCWOfPd-Q_|Ro@8~|rNC#^LOfmqMe8hfHB)E^*!cXDF43w-0%k8p? zk!HV5!qL>!SZ}Hcn3O=5H;Wyob)QJpV);N-2KbUE;Lh@^%D*lPjU|C$*}4@jai4G#7I z!PWKrL)~n)Iut-gApR-iyxZoWNYu|`W#rRX;S4I*vssAS(WJL;70@dzCpMx+fH=)W z=5sn&&yY3r%*w70p-pul z8keGoUx&dSY%tt|B=TC6{HOBfhWdl7AR3iO2qgzl$>9jkWF~=L8qOf6U)-FEG@G2( zzSEcdGfOU=jV-w(=!osclo$$GS}3C~h?IehXHPQ??3V}M))YW5JMTj#7U*1OrmnW# o!a$*Pm!PmyiqMVJFZx+uM5vRX>VHn=u-1hQL23ZdaM#q}KM{Fg)&Kwi literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/defines.txt b/src/validation/slprj/ert/ActuatorControl/instrumented/defines.txt new file mode 100644 index 0000000..e230bb2 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=ActuatorControl +NUMST=1 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/ActuatorControl/instrumented/instrumentationInfo.mat b/src/validation/slprj/ert/ActuatorControl/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..deb2287eae23903ea67f6351a652eec47704127f GIT binary patch literal 728 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSGcudffITL5iiH(^R%@ch7&;jO9b;ct{e=c=B zxiW92<;tTxCq2A=HdHV%AF>nE`F7MHQ$V2MQ|y|gm`{_vi-SLVbtN~=wf*zAHmPQE z^W5NWucV+)yk~Wjy1FMNpAsrI3KsG<`usVmtC*{6QiX02 zMa|w6wiUaXCfqsNb~IMU%b6L=(Ftk1`}tG=&M4< z9beq%IrZoFgY%7>^&S5GUYcJc?O|?W{B9rrBm2rj8}0})Xg)8V1@gZe-2Wa7NoESq z7?RZ3I1*YvB{m3lur^p&Y+a&atiSh$rLw8z?j0u6r#7}W3Tx@J9FhC^^JZP=&Xqg{ ztO0)+?#S?VgG_URo5le(tqyFO7M+>o_1|WJg}Q*Y!bIIv+s$;Ok;3TF#SnQkX4ynXO>;h!dDhHZ~T zj6udn;xV2XtMOY**x39Q%wckQt+oCbYab5}x0m>A8}aZCnOXwB$+8Z zYq+Fvfa~dD24#WI%!Pf`esw`fegRokX@#DFs?5S6atzIv*=B$=nxJW9NOEK2NND|( z$e^OfbL8aDovc4AS5~Szu6#N3sH*GCl}8gQ8K#7A6yvv)o1xINuF*d$G7D}i$kMI{ z?CKzmR&Yx{fL+UwR0p mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f ActuatorControl.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f ActuatorControl.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.mk b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.mk new file mode 100644 index 0000000..d8cff41 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.mk @@ -0,0 +1,410 @@ +########################################################################### +## Makefile generated for Simulink model 'ActuatorControl'. +## +## Makefile : ActuatorControl.mk +## Generated on : Thu Jul 16 18:55:23 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./ActuatorControl_rtwlib.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = ActuatorControl +MAKEFILE = ActuatorControl.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../../../.. +COMPILER_COMMAND_FILE = ActuatorControl_comp.rsp +CMD_FILE = ActuatorControl.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = ActuatorControl_rtwlib.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./ActuatorControl_rtwlib.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=0 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=ActuatorControl -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/slprj/ert/ActuatorControl/ActuatorControl.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = ActuatorControl.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/ActuatorControl/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/ActuatorControl/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : ../../../%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : ../../../%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +ActuatorControl.obj : $(START_DIR)/slprj/ert/ActuatorControl/ActuatorControl.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.obj b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.obj new file mode 100644 index 0000000000000000000000000000000000000000..519da29a90a4619bd455eaf890558940bfaaab75 GIT binary patch literal 4495 zcmcgvZERCj7(QKFoC@4KMN>iHh7eO_E0fLH5M&2gv#P79O4*i-bluiMO<6}*mbpY- zf-z|Z$zr0(jESfrek7R4KmW*vUtk~_#q5_x6D34ujEzP_U_S3Xz3;t+Ito8HN$+{? z^E~I=_r5*nz4s2hR4b@0Un;~Z6L~}+pB&AbSRD>55@M@Mh}Umc=UwOw5$z2OB=QM| zuM(6ZIvwa69Wu4TaB}-6 zro4AfFKTrmIz)UOg^}GOdc^dq34n8MG5z%f344uO`8M$ADVg-~S|- zq^c9#2=jF%*nhPI+tKRMzhHv>WeKK<7f!HaW|iQ^iV3!tL!IjT{~7?`WDQtuPnPX@xs}4%&f9&IJ3KV&N%bRrTO_Y>n`GO{NMR`QVlK- zvVa|l+R#>*LBHKU5o$~oVtT3&F;a!loOUEMm(qTpE^7DVr!Q$#o0GgK5))J?%z6+C zK3e!XrTLGg!rI{Una#K&?4fgXr$LMv(da%1nIq3yiPpUm9Bs{!CFGzp(}5FO=DIg* zGTrtS)fK?PSU+7jiYTI~f{sXysv`B5Mf%W%8yaa?MXFa7sjn>3`tvt5Qi(`usYqTb zdbkj=9x~xV>F=M2fi{gOn3HAAXh>wzI|lo+yLN3@y}3WXCy~$QwqytMxojpL8OY?4 zskYA5^-T-<$nl^ME>Dfu<90<|wQg_iZG^6YqcQ7CV+iLQxHK0nC-q*U`UKuX=n+T# zIDX53sXtmH#NEKu|A-$wSg1EVLeSozeiMEhfvHd9orYF0^)J)=4e*8c{`e-+7j3=E zvu$a^;qO|<-`M?=45wOW-yVASmRYZSZHn4Qt)>2mXl^=rV(R#&CbNCpTI!E%i^XDl z-ajwfw`|#9_(y{+@s{R>q3m#av|%{8vmuupSzm8FvL~I%8-33jk@R4DXG3R8voVy* zK7$va`;3-AQvgBJtIs|7dBp9EXs0T!jZvHtz2VSf+9RH0w2#%dnEQayXROXLcbd5( zqj^?qk!=-$4y3NOlDW0a1(}n~buhP+QJ&Ehql1j58Jz@DSNnm{Z>+lUUn^B(bT5#K zG{{^#b5AqsWi`#*ZsuNKZXa_~%)QCnA?A)VI>qQ8MqalS)hb47fmHMx89mNwg1KFc zUS#!E<_({0xRFyv_UthU&axoL{#TuG>ZR zpYmfj=a(%m2al~;$oW-^jZ)d;_@YHf@H}P>=id1>i)9Q?FKZTXe#s(OcrrNB_p9BU zU$OM$FdxOX%!sNsHCowjSF4FHKdgX7*XI$jd4 bFs297`83|G#*&qCVNGYfVO=r2tyBC5S6_Ev literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.rsp b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.rsp new file mode 100644 index 0000000..d70b142 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl.rsp @@ -0,0 +1 @@ +ActuatorControl.obj diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_comp.rsp b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_comp.rsp new file mode 100644 index 0000000..df24f25 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_comp.rsp @@ -0,0 +1,8 @@ +-ID:/Documents/SCHOOL/McSCert/do178/src/validation +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl +-ID:/Program\ Files/MATLAB/R2020a/extern/include +-ID:/Program\ Files/MATLAB/R2020a/simulink/include +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src/ext_mode/common +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/ert +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/_sharedutils diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_ref.rsp b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_ref.rsp new file mode 100644 index 0000000..e69de29 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib new file mode 100644 index 0000000000000000000000000000000000000000..66f2521db31fce868fe35b27e6286016a40262ca GIT binary patch literal 5056 zcmd^DZERCj7(QKFoaLi;il&0Xkq}d5YrD0pg&;e~npIs*Rmxa0(so@44rmdmr4G$n_0uvblMAX>MKbTkrEUw|F`CsFHEdxwlmwa~`)b#uhVX zx>)PBxi7yrk7*3quxzD%0Ra)b={#WYZb~CnO8DpzeWMQs+ax|}ExjVFov8^V? z-ndg9Z-!K-E*l7Y!AD z4IQwesc2V(LbyQ$CU<r~dv#VNpjQ#N;L=&OW2+Oq&}JsLTvt?5_3K;^LT?aaGPLhArIbNE z!S&>85YAc>>@+l}hwHmef>EkD!5%Q*Qi7c~O0XWSBAg2**jbif?0De>8+w)r_Eb%< zJ{%f^qn7+S^!(xzP(8gjm0cK>x0YSUjk2r9stCt|*>#j<7du`!yM~@+cDXUT`)2w1 z*RIXYop)b_-N}FF=1}D{J%|E4kuW#37iOT|;hYG1QiZ6JDuj8e5S+Ci3(ltOe@qwc zkHDrZ^~i@4y)a2k;6$O$2f@G-g>O=J=ZRFvJ~(}TGn^6Z!Ap3h0cbN~$Lm0(w!EMv zTCob?@X;JuiVi$d9dLldT(O2!rdvOwJOi*`Y@99}hbSVcf&!89nj&?UMf&KK+Zt&| zMyk{lsiQ2?#>=-gQUQ_TP!Tj#lu#k8y<|d#((Rv!0<9Wh!kjECya|>qI|uu+yLWF` zQ?aCoX=|4?jot-)?OkgcTVaK0sk2(lriiKDY^}cw(M@pJrlr&dan68Cec^DD>k?Tf zU>$<5IIPEETMiiO<8_SP4;bs8V8a&+*4)AvJ{wqXf^8#UtkbZj!4Zu0tGK=aeC7Q= zzYX_B+U~P#Th?^+`?m2n_xvnEskXE43_WH$YZV8luzcKBs*f?B_w=c$lbgJ1`L3;0 zAKMmu{`lT>CeM4H=i&5VM^{sq z-^Yh?*c|v#`4f;gc%4c0w^ixWd8Lw1vGuXg{fM6ZavZ&q+N? z+&SWkgyu-ChiuCT6hQK9tB6}iT!1)1Tqkh@gz|)@2puLgP3SZrdA1)3{Z6VG?zL3y zgdPGUBMlJOLELkM;-sdD+e6$-#O)_;inzCkJ3`z^LT3p5L&$2@qFPO89UvL~MnX@K znjmgBp_fU0ow&oqeMIOJQokhbYvO(&?l6eVu^6B!8yjPDw0#khl*73oKnTUB;us5B@X8$sWy^|^ONL!gaV}Ej3re; zsGU@t!=&0tC_?I1;HW!+^qx;>R9ml8S?>yV+~6kOTqu0oIHR% o+;`Rix{P4$*w`5T_@I9}|F>U4RdS*IVbWGulq5}nzeBeF0L5V%Y5)KL literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/buildInfo.mat b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..28391c36dc669a4cf7f6ce15d76d1a8101e36047 GIT binary patch literal 12968 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/compileInfo.mat b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..ec7a2a78325d920ac63bed63c361e302f892c02d GIT binary patch literal 2101 zcma)-c~p|=9>-rK5z<`B1t*u+C07&>C1o^4%Zs3xsZEV{6j4ajNO8H*RRULB#!+f2 z4IxcU%cGXISf;6@W1^&av!?aV6wX*yE@_TSH>~TNd*+|}ob#UZ{PX*q@AJIh=lcyJ zh6NIRK{sa%7(@(nVzLq$C~$XTbSm=@=O6*x?e|Rp74M1y{Wy&1R7Na#h)n>);?h8J zS|W(WgIIThn;XH!6?DP4V8H)#xoZHQ7bGA^=hM#b(|1_>YYdGB2k3ZE3D6B;a9Zw+ zvEY*O4d{r(EJ4G;rvFkf5b**BNJ)2X=Rf(nb3A>od z0obq-fle$M+7oGrn&0Th($(e9m>#2$w@_w^#Iv*H!kLu0nPZoP_+YgmPu*u2(9s** zf5Wa7W$lEr_pr8o@Wj&V?tQ~p2}Hyd2VU#Vg_y95X?UROq-mi_VH`wt*jmv|YA;5& zAH6M%)D}+T=UT)V*CWpl8yJ`yZzP3H6$U(}mATuc%X+rF3+sTt&1y~_9n-HpevEp* za^>UV@Psyy@iP!~`HlS{ANCEx-Uu42A9prKv0u1^fBkAXqP%T>#Jh^$qbnUN?- zN+rS13gO9=UpUU~PX4*9Y23{UhkIr^r@Af`IFb6sqXaABZ=SY)cP|(xm5t*G34=@N zZA}p)`}4H5o}9>Bp={6T`nVJz+PR90{(CUYW5La2{5j2&xqJlw+l{wup>%vo`;P;` zf!A?;*)M{`>^;($q!C+J-uJ?q81>3lVa3}R&c+LzyPc5NIWd~5`_5Q*#0Q8h(MJxE z1#0Qu+V~P@8SM;e52KyP)U-i)KyE_}n9KI<{CTizoCsCf{VGE1(k+f>l%b>2Ir50Dg|m-&Ev3XuUQdvGsUIQLy)N6awn%PtK(#ekNv37&S{_t4 zd>V8imTppJn4AC0)hT^LRkwj}h3}44u|x*1dTZueR;ieBC%#WP($X2H#C`qSA5)pF zt2-}dDnf2FFZ6c~LJy5KHpf}mztit}(-k@Y$n+t5{>D`PESu2LIq|;I_C)R|YcxYA zIZuLXG_7{Me`b_hk9#K;q;Qr2a;VMGSvYE&!QUWiZdm0b;gJUBP;N-O)t^E5=09L8Ng;n&rrjSd{RBYc&y`nWn*jh7YIZZ{bqICO9XTG~Dv{JX77N>-rB$`jS9Y8yH3v zL1h?o-6b35xjKfjCePMT<3}YHgMl!7H~>!ygR5pq>$9XUvo>q#70uTZF7h92$D*-b zZntf5=tti6nl&Z40!;_BnrwKnU44<;z}=?BF864-owNefnQ3;Zcz>qhXR`qGKY3ii zgZ8#-*52b^aE&GEjYifAs7wXX(uywdsBNHS0$6iIunLvAF6{&G7w@MBIFW`Z0Yj9g zod0_NVg!@w0QK8Pr?MRONpys!YY$+D&e{X$s;}|vJY(lgX|}#2Lgv2Ap@=a zMKIY6oTtcx7&JIVZXcxnY642vfaSEK;*?o)$;7oJt|a49_IS?BwiX#bSL!B6fC?`7 zS}YY!N-9o%dwid$Tsl#%=F+b=V8TNwF_z`Mng$AaxMb|%c_kb`*cy;jihR};{iSbA z$(oS0zF|_&ABg;xw=X^b9QrA(S_iQ(hH{(N-s!T6FP9E<}$tk#-bgfWFrp> zUhvFZ7kcNa@}ZYJ9Fa-+M%Q_%OD(r?P-whoXv9$s=xXX$-Tbej^k`7M-^a4~E3&#! LT>z-NXJhss(+X!@ literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/defines.txt b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/defines.txt new file mode 100644 index 0000000..e230bb2 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=ActuatorControl +NUMST=1 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/instrumentationInfo.mat b/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..2c00d6b412367623a944bfe034245969d8433115 GIT binary patch literal 728 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSGcudffITL5iiH(^R%@ch7&;jO9b;ct{e=c=B zxiW92<;tTxCq2A=HdHV%AF>nE`F7MHQ$V2MQ|y|gm`{_vi-SLVbtN~=wf*zAHmPQE z^W5NWucV+)yk~Wjy1FMNpAsrI3KsG<`usVmtC*{6QiX02 zMa|w6wiUaXCfqsNb~IMU%b6L=(Ftk1`}tG=&M4< z9beq%IrZoFgY%7>^&S5GUYcJc?O|?W{B9rrBm2rj8}0})Xg)8V1@gZe-2Wa7NoESq z7?RZ3I1*YvB{m3lur^p&Y+a&atiSh$rLw8z?j0u6r#7}W3Tx@J9FhC^^JZP=&Xqg{ ztO0)+?#S?VgG_URo5le(tqyFO7M+>o_1|WJg}Q*Y!bIIv+s$;Ok;3TF#SnQkX4ynXO>;h!dDhHZ~T zj6udn;xV2XtMOY**x39Q%wckQt+oCbYab5}x0m>A8}aZCnOXwB$+8Z zYq+Fvfa~dD24#WI%!Pf`esw`fegRokX@#DFs?5S6atzIv*=B$=nxJW9NOEK2NND|( z$e^OfbL8aDovc4AS5~Szu6#N3sH*GCl}8gQ8K#7A6yvv)o1xINuF*d$G7D}i$kMI{ z?CKzmR&Yx{fL+UwR0p + + + 323 + + true + ActuatorControl + ActuatorControl + + false + false + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + AAFJTQAAAAAOAAAAOAAAAAYAAAAIAAAAAgAAAAAAAAAFAAAACAAAAAAAAAABAAAAAQAAAAAAAAAFAAQAAQAAAAEAAAAAAAAA + {"Inports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Outports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","LocalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ParameterArguments":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedLocalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InternalData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Constants":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","DataTransfers":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ModelData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InitializeTerminate":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Execution":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedUtility":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}"} + + -2 + true + true + true + 2147483647 + -1 + 1 + + -1 + + + Actuator_Control + + + 0.001 + true + true + false + false + true + false + true + true + false + false + false + 4 + -1 + 6 + 6 + 0 + 1 + 1 + 2 + false + true + true + + true + true + 0.001 + 40 + 0 + + 2 + <?xml version="1.0"?> +<slexec_sto version="1.1" packageUris="http://schema.mathworks.com/mf0/slexec_mm_sto/R2019b_201902271317"> + <sto.Registry type="sto.Registry" uuid="58905fbf-13eb-4bab-b7d9-c4a291455645"> + <clocks type="sto.Timer" uuid="347cf612-2663-4e08-b986-e770ef842beb"> + <needsToProvideTimeDuringExecution>true</needsToProvideTimeDuringExecution> + <clockTickConstraint>PeriodicWithFixedResolution</clockTickConstraint> + <resolution>0.001</resolution> + <specifiedTaskingMode>ClassicMultiTasking</specifiedTaskingMode> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="954f9094-9263-4512-a610-3789f49d5ad2"> + <baseTaskID>_task0</baseTaskID> + <computedFundamentalStepSize>0.001</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="09c970d1-6054-4493-8411-b0106c766325"/> + <rootTaskHierarchyElements type="sto.Task" uuid="16a1ee8d-89ba-4757-9946-9640ad01a68e"> + <isExecutable>true</isExecutable> + <rates type="sto.Rate" uuid="09c970d1-6054-4493-8411-b0106c766325"> + <annotation>D1</annotation> + <colorIndex>2</colorIndex> + <description>Discrete 1</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <registry type="sto.Registry" uuid="58905fbf-13eb-4bab-b7d9-c4a291455645"/> + <taskId>_task0</taskId> + <rateSpec type="sto.RateSpec" uuid="35cc99ca-9da2-42c8-91f4-8ee549dcccd9"> + <period>0.001</period> + <rateType>ClassicPeriodicDiscrete</rateType> + </rateSpec> + </rates> + <elementType>Task</elementType> + <identifier>_task0</identifier> + <priority>40</priority> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <clocks type="sto.Event" uuid="919853ad-dfb3-4380-830c-96461b91e786"> + <eventType>EXPORT_ASYNCHRONOUS</eventType> + <cNum>1</cNum> + <clockType>Event</clockType> + <identifier>ActuatorControl/Actuator_Control,0,0</identifier> + <resolution>-1</resolution> + <specifiedTaskingMode>ExplicitTasking</specifiedTaskingMode> + <timeAdvanceMode>None</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="aba44f11-c52b-473a-ba34-772de2569a04"> + <computedFundamentalStepSize>-1</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="bc6f5975-397a-4c1a-8e7f-409d46a82da6"/> + <rootTaskHierarchyElements type="sto.Task" uuid="5055968f-5994-4f13-b430-9769d642caaa"> + <isExecutable>true</isExecutable> + <isExplicit>true</isExplicit> + <rates type="sto.Rate" uuid="bc6f5975-397a-4c1a-8e7f-409d46a82da6"> + <annotation>F-1</annotation> + <colorIndex>23</colorIndex> + <description>Exported Inherit</description> + <eventSourceType>EXPORT_ASYNCHRONOUS</eventSourceType> + <rateIDX>1</rateIDX> + <registry type="sto.Registry" uuid="58905fbf-13eb-4bab-b7d9-c4a291455645"/> + <stringID>ActuatorControl/Actuator_Control,0,0</stringID> + <taskId>ExplicitTask0</taskId> + <rateSpec type="sto.RateSpec" uuid="0a30ee36-1d67-451b-885d-45406cd3f42d"> + <offset>-2</offset> + <period>-1</period> + <rateType>LegacyAsync</rateType> + </rateSpec> + </rates> + <tNum>1</tNum> + <elementType>Task</elementType> + <identifier>ExplicitTask0</identifier> + <priority>40</priority> + <schedulingClockID>ActuatorControl/Actuator_Control,0,0</schedulingClockID> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <executionSpec>Undetermined</executionSpec> + <hasUnknownEdges>true</hasUnknownEdges> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="cb6ad084-427b-49ca-b47d-f1cee70ce701"> + <taskIdentifier>_task0</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="52c520d2-37ed-473e-80d7-e6858dc63946"> + <clockIdentifier>ActuatorControl/Actuator_Control,0,0</clockIdentifier> + <taskIdentifier>ExplicitTask0</taskIdentifier> + </taskDependencyGraph> + <taskPriorityDirection>HighNumberLast</taskPriorityDirection> + <taskingMode>ClassicMultiTasking</taskingMode> + <tasks type="sto.Task" uuid="16a1ee8d-89ba-4757-9946-9640ad01a68e"/> + <tasks type="sto.Task" uuid="5055968f-5994-4f13-b430-9769d642caaa"/> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + </sto.Registry> +</slexec_sto> + false + 0.001 + true + + + MdlrefDW_ActuatorControl_T + + + true + 0.001 + 2 + true + true + true + 2 + SOLVER_MODE_MULTITASKING + FixedStepDiscrete + SOLVER_TYPE_FIXEDSTEP + 2 + + 8 + 64 + 32 + 32 + 32 + 64 + 32 + 32 + 16 + 32 + 1 + true + true + 32 + + + + + + + + + true + true + true + true + true + + + + + + + + + + + Actuator_Control + true + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + Actuator_Control + Actuator1_loop + + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + Actuator_Control + Actuator2_loop + + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + Actuator_Control + Actuator3_loop + + ActuatorControl/Actuator_Control + Actuator_Control + + 14 + 743.00048828125 + + + 1 + 751.00048828125 + + + 14 + 772.00048828125 + + + 1 + 780.00048828125 + + + 14 + 801.00048828125 + + + 1 + 809.00048828125 + + + 1 + 903.00048828125 + + + 1 + 914.00048828125 + + + 1 + 925.00048828125 + + true + ActuatorControl + ActuatorControl/Actuator_Control + + ({true}_0) + + Scoped Export + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + O1 + 7 + + + O2 + 8 + + + Act1_cmd + 1 + + + Act1_pos + + + Act2_cmd + 3 + + + Act2_pos + 2 + + + Act3_cmd + 5 + + + Act3_pos + 4 + + + Actuator1 + 6 + + + Actuator2 + 7 + + + Actuator3 + 8 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + -1 + + + + Actuator3_loop + true + ActuatorControl/Actuator_Control/Actuator3_loop_caller + Actuator_Control + ActuatorControl/Actuator_Control/Actuaor3_loop + Actuator3_loop + + 1 + 809.00048828125 + + + 1 + 925.00048828125 + + true + ActuatorControl/Actuator_Control/Actuator3_loop_caller + Actuator_Control + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor3_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act3_cmd + 1 + + + Act3_pos + + + Actuator3 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Actuator2_loop + true + ActuatorControl/Actuator_Control/Actuator2_loop_caller + Actuator_Control + ActuatorControl/Actuator_Control/Actuaor2_loop + Actuator2_loop + + 1 + 780.00048828125 + + + 1 + 914.00048828125 + + true + ActuatorControl/Actuator_Control/Actuator2_loop_caller + Actuator_Control + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor2_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act2_cmd + 1 + + + Act2_pos + + + Actuator2 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Actuator1_loop + true + ActuatorControl/Actuator_Control/Actuator1_loop_caller + Actuator_Control + ActuatorControl/Actuator_Control/Actuaor1_loop + Actuator1_loop + + 1 + 751.00048828125 + + + 1 + 903.00048828125 + + true + ActuatorControl/Actuator_Control/Actuator1_loop_caller + Actuator_Control + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor1_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act1_cmd + 1 + + + Act1_pos + + + Actuator1 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + + true + + + + + + sltpEvents + + + sltpTaskGroups + + + + + Actuator_Control + + + ActuatorControl/Actuator_Control,0,0 + ExplicitTask0 + + + sltpTasks + + + + + \ No newline at end of file diff --git a/src/validation/slprj/ert/ActuatorControl/tmwinternal/binfo_mdlref.mat b/src/validation/slprj/ert/ActuatorControl/tmwinternal/binfo_mdlref.mat new file mode 100644 index 0000000000000000000000000000000000000000..8df3704222e9c7ca8ba6d3aa2c5dce041676ffc7 GIT binary patch literal 23135 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 aQE76CbADc0W_oaH30R&9sty3wtq4Ir#h#)7 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/ActuatorControl/tmwinternal/simulink_cache.xml b/src/validation/slprj/ert/ActuatorControl/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..5c1c1d1 --- /dev/null +++ b/src/validation/slprj/ert/ActuatorControl/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + 2d/eVQAYglmsb66qhyU8pQ== + + \ No newline at end of file diff --git a/src/validation/slprj/ert/ActuatorControl/tmwinternal/tr b/src/validation/slprj/ert/ActuatorControl/tmwinternal/tr new file mode 100644 index 0000000000000000000000000000000000000000..f40bc44df20a653ead91c8280ec36b5fd406c134 GIT binary patch literal 32354 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/FCC_New.c b/src/validation/slprj/ert/FCC_New/FCC_New.c new file mode 100644 index 0000000..7fd9f16 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/FCC_New.c @@ -0,0 +1,178 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_New.c + * + * Code generated for Simulink model 'FCC_New'. + * + * Model version : 1.98 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:15 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#include "FCC_New.h" + +/* Private macros used by the generated code to access rtModel */ +#ifndef rtmIsSampleHit +# define rtmIsSampleHit(sti, tid) (FCC_New_TimingBrdg->taskCounter[FCC_New_GlobalTID[sti]] == 0) +#endif + +#ifndef rtmIsSpecialSampleHit +# define rtmIsSpecialSampleHit(sti, prom_sti, tid) ( *((FCC_New_TimingBrdg->rateTransition)[FCC_New_GlobalTID[sti] + FCC_New_TimingBrdg->nTasks*FCC_New_GlobalTID[prom_sti]]) ) +#endif + +/* Macros for accessing real-time model data structure */ +#ifndef rtmGetClockTick0 +# define rtmGetClockTick0() ( *((FCC_New_TimingBrdg->clockTick[FCC_New_GlobalTID[0]])) ) +#endif + +#ifndef rtmGetClockTick1 +# define rtmGetClockTick1() ( *((FCC_New_TimingBrdg->clockTick[FCC_New_GlobalTID[1]])) ) +#endif + +#ifndef rtmGetClockTickH0 +# define rtmGetClockTickH0() ( *(FCC_New_TimingBrdg->clockTickH[FCC_New_GlobalTID[0]]) ) +#endif + +#ifndef rtmGetClockTickH1 +# define rtmGetClockTickH1() ( *(FCC_New_TimingBrdg->clockTickH[FCC_New_GlobalTID[1]]) ) +#endif + +#ifndef rtmGetErrorStatus +# define rtmGetErrorStatus(rtm) (*((rtm)->errorStatus)) +#endif + +#ifndef rtmSetErrorStatus +# define rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val)) +#endif + +#ifndef rtmGetErrorStatusPointer +# define rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus +#endif + +#ifndef rtmSetErrorStatusPointer +# define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef rtmGetT +# define rtmGetT() (*(FCC_New_TimingBrdg->taskTime[0])) +#endif + +int_T FCC_New_GlobalTID[2]; +const rtTimingBridge *FCC_New_TimingBrdg; +MdlrefDW_FCC_New_T FCC_New_MdlrefDW; + +/* Block states (default storage) */ +DW_FCC_New_f_T FCC_New_DW; + +/* Disable for referenced model: 'FCC_New' */ +void FCC_New_Disable(void) +{ + /* Disable for ModelReference: '/AHRSControl' */ + AHRSControl_Disable(); + + /* Disable for ModelReference: '/ActuatorControl' */ + ActuatorControl_Disable(); +} + +/* Output and update for referenced model: 'FCC_New' */ +void FCC_NewTID0(const int16_T *rtu_Act_Pos1, const int16_T *rtu_Act_Pos2, const + int16_T *rtu_Act_Pos3, int16_T *rty_Actuator1, int16_T + *rty_Actuator2, int16_T *rty_Actuator3) +{ + int_T tid = 0; + + /* RateTransition: '/RateTransition1' */ + if (rtmIsSpecialSampleHit(1, 0, tid)) { + FCC_New_DW.RateTransition1 = FCC_New_DW.RateTransition1_Buffer0; + + /* RateTransition: '/RateTransition2' */ + FCC_New_DW.RateTransition2 = FCC_New_DW.RateTransition2_Buffer0; + + /* RateTransition: '/RateTransition3' */ + FCC_New_DW.RateTransition3 = FCC_New_DW.RateTransition3_Buffer0; + } + + /* End of RateTransition: '/RateTransition1' */ + + /* FunctionCaller: '/ActuatorControl_caller' */ + Actuator_Control(*rtu_Act_Pos1, FCC_New_DW.RateTransition1, *rtu_Act_Pos2, + FCC_New_DW.RateTransition2, *rtu_Act_Pos3, + FCC_New_DW.RateTransition3, rty_Actuator1, rty_Actuator2, + rty_Actuator3); + + /* If subsystem generates rate grouping Output functions, + * when tid is used in Output function for one rate, + * all Output functions include tid as a local variable. + * As result, some Output functions may have unused tid. + */ + (void) (tid); +} + +/* Output and update for referenced model: 'FCC_New' */ +void FCC_NewTID1(const int16_T *rtu_Pilot_theta_cmd, const int16_T + *rtu_Pilot_phi_cmd, const int16_T *rtu_Pilot_r_cmd, const + AHRS_Bus *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, const AHRS_Bus * + rtu_AHRS3) +{ + int_T tid = 1; + real_T rtb_AHRSControl_caller[3]; + + /* FunctionCaller: '/AHRSControl_caller' */ + AHRSControl_AHRS_Control(*rtu_Pilot_theta_cmd, *rtu_Pilot_phi_cmd, + *rtu_Pilot_r_cmd, rtu_AHRS1, rtu_AHRS2, rtu_AHRS3, rtb_AHRSControl_caller); + + /* RateTransition: '/RateTransition1' */ + FCC_New_DW.RateTransition1_Buffer0 = rtb_AHRSControl_caller[0]; + + /* RateTransition: '/RateTransition2' */ + FCC_New_DW.RateTransition2_Buffer0 = rtb_AHRSControl_caller[1]; + + /* RateTransition: '/RateTransition3' */ + FCC_New_DW.RateTransition3_Buffer0 = rtb_AHRSControl_caller[2]; + + /* If subsystem generates rate grouping Output functions, + * when tid is used in Output function for one rate, + * all Output functions include tid as a local variable. + * As result, some Output functions may have unused tid. + */ + (void) (tid); +} + +/* Model initialize function */ +void FCC_New_initialize(const char_T **rt_errorStatus, const rtTimingBridge + *timingBridge, int_T mdlref_TID0, int_T mdlref_TID1) +{ + RT_MODEL_FCC_New_T *const FCC_New_M = &(FCC_New_MdlrefDW.rtm); + + /* Registration code */ + + /* setup the global timing engine */ + FCC_New_GlobalTID[0] = mdlref_TID0; + FCC_New_GlobalTID[1] = mdlref_TID1; + FCC_New_TimingBrdg = timingBridge; + + /* initialize error status */ + rtmSetErrorStatusPointer(FCC_New_M, rt_errorStatus); + + /* Model Initialize function for ModelReference Block: '/AHRSControl' */ + AHRSControl_initialize(rtmGetErrorStatusPointer(FCC_New_M)); + + /* Model Initialize function for ModelReference Block: '/ActuatorControl' */ + ActuatorControl_initialize(rtmGetErrorStatusPointer(FCC_New_M)); +} + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/FCC_New/FCC_New.h b/src/validation/slprj/ert/FCC_New/FCC_New.h new file mode 100644 index 0000000..8535991 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/FCC_New.h @@ -0,0 +1,150 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: FCC_New.h + * + * Code generated for Simulink model 'FCC_New'. + * + * Model version : 1.98 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:15 2020 + * + * Target selection: ert.tlc + * Embedded hardware selection: Intel->x86-32 (Windows32) + * Code generation objectives: + * 1. Execution efficiency + * 2. RAM efficiency + * Validation result: Not run + */ + +#ifndef RTW_HEADER_FCC_New_h_ +#define RTW_HEADER_FCC_New_h_ +#include "AHRS_Bus.h" +#ifndef FCC_New_COMMON_INCLUDES_ +# define FCC_New_COMMON_INCLUDES_ +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" +#endif /* FCC_New_COMMON_INCLUDES_ */ + +/* Shared type includes */ +#include "model_reference_types.h" + +/* Child system includes */ +#ifndef FCC_New_MDLREF_HIDE_CHILD_ +#define ActuatorControl_MDLREF_HIDE_CHILD_ +#include "ActuatorControl.h" +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +#ifndef FCC_New_MDLREF_HIDE_CHILD_ +#define AHRSControl_MDLREF_HIDE_CHILD_ +#include "AHRSControl.h" +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +/* Model Code Variants */ +#include "AHRSControl_AHRS_Control.h" +#include "Actuator_Control.h" + +/* Forward declaration for rtModel */ +typedef struct tag_RTM_FCC_New_T RT_MODEL_FCC_New_T; + +/* Block signals and states (default storage) for model 'FCC_New' */ +#ifndef FCC_New_MDLREF_HIDE_CHILD_ + +typedef struct { + real_T RateTransition1; /* '/RateTransition1' */ + real_T RateTransition2; /* '/RateTransition2' */ + real_T RateTransition3; /* '/RateTransition3' */ + real_T RateTransition1_Buffer0; /* '/RateTransition1' */ + real_T RateTransition2_Buffer0; /* '/RateTransition2' */ + real_T RateTransition3_Buffer0; /* '/RateTransition3' */ +} DW_FCC_New_f_T; + +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +#ifndef FCC_New_MDLREF_HIDE_CHILD_ + +/* Real-time Model Data Structure */ +struct tag_RTM_FCC_New_T { + const char_T **errorStatus; + + /* + * Timing: + * The following substructure contains information regarding + * the timing information for the model. + */ + struct { + struct { + uint32_T TID0_1; + boolean_T b_TID0_1; + } RateInteraction; + } Timing; +}; + +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +#ifndef FCC_New_MDLREF_HIDE_CHILD_ + +typedef struct { + RT_MODEL_FCC_New_T rtm; +} MdlrefDW_FCC_New_T; + +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +extern int_T FCC_New_GlobalTID[2]; +extern const rtTimingBridge *FCC_New_TimingBrdg; +extern void FCC_New_Disable(void); +extern void FCC_NewTID0(const int16_T *rtu_Act_Pos1, const int16_T *rtu_Act_Pos2, + const int16_T *rtu_Act_Pos3, int16_T *rty_Actuator1, int16_T *rty_Actuator2, + int16_T *rty_Actuator3); +extern void FCC_NewTID1(const int16_T *rtu_Pilot_theta_cmd, const int16_T + *rtu_Pilot_phi_cmd, const int16_T *rtu_Pilot_r_cmd, const AHRS_Bus *rtu_AHRS1, + const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3); + +/* Model reference registration function */ +extern void FCC_New_initialize(const char_T **rt_errorStatus, const + rtTimingBridge *timingBridge, int_T mdlref_TID0, int_T mdlref_TID1); + +#ifndef FCC_New_MDLREF_HIDE_CHILD_ + +extern MdlrefDW_FCC_New_T FCC_New_MdlrefDW; + +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +#ifndef FCC_New_MDLREF_HIDE_CHILD_ + +/* Block states (default storage) */ +extern DW_FCC_New_f_T FCC_New_DW; + +#endif /*FCC_New_MDLREF_HIDE_CHILD_*/ + +/*- + * The generated code includes comments that allow you to trace directly + * back to the appropriate location in the model. The basic format + * is /block_name, where system is the system number (uniquely + * assigned by Simulink) and block_name is the name of the block. + * + * Use the MATLAB hilite_system command to trace the generated code back + * to the model. For example, + * + * hilite_system('') - opens system 3 + * hilite_system('/Kp') - opens and selects block Kp which resides in S3 + * + * Here is the system hierarchy for this model + * + * '' : 'FCC_New' + * '' : 'FCC_New/ModelInfo' + */ + +/*- + * Requirements for '': FCC_New + */ +#endif /* RTW_HEADER_FCC_New_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/FCC_New/FCC_New_mr_codeInfo.mat b/src/validation/slprj/ert/FCC_New/FCC_New_mr_codeInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..2bbe6c471d2c302854dd6f97066fe85095109d4a GIT binary patch literal 11243 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/buildInfo.mat b/src/validation/slprj/ert/FCC_New/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..5814500eca0f9efe815027f8122641f0b44e0ce6 GIT binary patch literal 15273 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
    v4(&1m<<=I}x(%DBUH!8i~WA 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/codedescriptor.dmr b/src/validation/slprj/ert/FCC_New/codedescriptor.dmr new file mode 100644 index 0000000000000000000000000000000000000000..ef4c25f75244c583e3366dc349801a82531573fe GIT binary patch literal 324608 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 ~q-8QvB{COFH8`qTgB?p`bS&0liJ(fpDrF>O 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 MH$Ocir + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: FCC_New.c
    7 *
    8 * Code generated for Simulink model 'FCC_New'.
    9 *
    10 * Model version : 1.98
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:15 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#include "FCC_New.h"
    23
    24/* Private macros used by the generated code to access rtModel */
    25#ifndef rtmIsSampleHit
    26# define rtmIsSampleHit(sti, tid) (FCC_New_TimingBrdg->taskCounter[FCC_New_GlobalTID[sti]] == 0)
    27#endif
    28
    29#ifndef rtmIsSpecialSampleHit
    30# define rtmIsSpecialSampleHit(sti, prom_sti, tid) ( *((FCC_New_TimingBrdg->rateTransition)[FCC_New_GlobalTID[sti] + FCC_New_TimingBrdg->nTasks*FCC_New_GlobalTID[prom_sti]]) )
    31#endif
    32
    33/* Macros for accessing real-time model data structure */
    34#ifndef rtmGetClockTick0
    35# define rtmGetClockTick0() ( *((FCC_New_TimingBrdg->clockTick[FCC_New_GlobalTID[0]])) )
    36#endif
    37
    38#ifndef rtmGetClockTick1
    39# define rtmGetClockTick1() ( *((FCC_New_TimingBrdg->clockTick[FCC_New_GlobalTID[1]])) )
    40#endif
    41
    42#ifndef rtmGetClockTickH0
    43# define rtmGetClockTickH0() ( *(FCC_New_TimingBrdg->clockTickH[FCC_New_GlobalTID[0]]) )
    44#endif
    45
    46#ifndef rtmGetClockTickH1
    47# define rtmGetClockTickH1() ( *(FCC_New_TimingBrdg->clockTickH[FCC_New_GlobalTID[1]]) )
    48#endif
    49
    50#ifndef rtmGetErrorStatus
    51# define rtmGetErrorStatus(rtm) (*((rtm)->errorStatus))
    52#endif
    53
    54#ifndef rtmSetErrorStatus
    55# define rtmSetErrorStatus(rtm, val) (*((rtm)->errorStatus) = (val))
    56#endif
    57
    58#ifndef rtmGetErrorStatusPointer
    59# define rtmGetErrorStatusPointer(rtm) (rtm)->errorStatus
    60#endif
    61
    62#ifndef rtmSetErrorStatusPointer
    63# define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val))
    64#endif
    65
    66#ifndef rtmGetT
    67# define rtmGetT() (*(FCC_New_TimingBrdg->taskTime[0]))
    68#endif
    69
    70int_T FCC_New_GlobalTID[2];
    71const rtTimingBridge *FCC_New_TimingBrdg;
    72MdlrefDW_FCC_New_T FCC_New_MdlrefDW;
    73
    74/* Block states (default storage) */
    75DW_FCC_New_f_T FCC_New_DW;
    76
    77/* Disable for referenced model: 'FCC_New' */
    78void FCC_New_Disable(void)
    79{
    80 /* Disable for ModelReference: '<Root>/AHRSControl' */
    81 AHRSControl_Disable();
    82
    83 /* Disable for ModelReference: '<Root>/ActuatorControl' */
    84 ActuatorControl_Disable();
    85}
    86
    87/* Output and update for referenced model: 'FCC_New' */
    88void FCC_NewTID0(const int16_T *rtu_Act_Pos1, const int16_T *rtu_Act_Pos2, const
    89 int16_T *rtu_Act_Pos3, int16_T *rty_Actuator1, int16_T
    90 *rty_Actuator2, int16_T *rty_Actuator3)
    91{
    92 int_T tid = 0;
    93
    94 /* RateTransition: '<Root>/RateTransition1' */
    95 if (rtmIsSpecialSampleHit(1, 0, tid)) {
    96 FCC_New_DW.RateTransition1 = FCC_New_DW.RateTransition1_Buffer0;
    97
    98 /* RateTransition: '<Root>/RateTransition2' */
    99 FCC_New_DW.RateTransition2 = FCC_New_DW.RateTransition2_Buffer0;
    100
    101 /* RateTransition: '<Root>/RateTransition3' */
    102 FCC_New_DW.RateTransition3 = FCC_New_DW.RateTransition3_Buffer0;
    103 }
    104
    105 /* End of RateTransition: '<Root>/RateTransition1' */
    106
    107 /* FunctionCaller: '<Root>/ActuatorControl_caller' */
    108 Actuator_Control(*rtu_Act_Pos1, FCC_New_DW.RateTransition1, *rtu_Act_Pos2,
    109 FCC_New_DW.RateTransition2, *rtu_Act_Pos3,
    110 FCC_New_DW.RateTransition3, rty_Actuator1, rty_Actuator2,
    111 rty_Actuator3);
    112
    113 /* If subsystem generates rate grouping Output functions,
    114 * when tid is used in Output function for one rate,
    115 * all Output functions include tid as a local variable.
    116 * As result, some Output functions may have unused tid.
    117 */
    118 (void) (tid);
    119}
    120
    121/* Output and update for referenced model: 'FCC_New' */
    122void FCC_NewTID1(const int16_T *rtu_Pilot_theta_cmd, const int16_T
    123 *rtu_Pilot_phi_cmd, const int16_T *rtu_Pilot_r_cmd, const
    124 AHRS_Bus *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *
    125 rtu_AHRS3)
    126{
    127 int_T tid = 1;
    128 real_T rtb_AHRSControl_caller[3];
    129
    130 /* FunctionCaller: '<Root>/AHRSControl_caller' */
    131 AHRSControl_AHRS_Control(*rtu_Pilot_theta_cmd, *rtu_Pilot_phi_cmd,
    132 *rtu_Pilot_r_cmd, rtu_AHRS1, rtu_AHRS2, rtu_AHRS3, rtb_AHRSControl_caller);
    133
    134 /* RateTransition: '<Root>/RateTransition1' */
    135 FCC_New_DW.RateTransition1_Buffer0 = rtb_AHRSControl_caller[0];
    136
    137 /* RateTransition: '<Root>/RateTransition2' */
    138 FCC_New_DW.RateTransition2_Buffer0 = rtb_AHRSControl_caller[1];
    139
    140 /* RateTransition: '<Root>/RateTransition3' */
    141 FCC_New_DW.RateTransition3_Buffer0 = rtb_AHRSControl_caller[2];
    142
    143 /* If subsystem generates rate grouping Output functions,
    144 * when tid is used in Output function for one rate,
    145 * all Output functions include tid as a local variable.
    146 * As result, some Output functions may have unused tid.
    147 */
    148 (void) (tid);
    149}
    150
    151/* Model initialize function */
    152void FCC_New_initialize(const char_T **rt_errorStatus, const rtTimingBridge
    153 *timingBridge, int_T mdlref_TID0, int_T mdlref_TID1)
    154{
    155 RT_MODEL_FCC_New_T *const FCC_New_M = &(FCC_New_MdlrefDW.rtm);
    156
    157 /* Registration code */
    158
    159 /* setup the global timing engine */
    160 FCC_New_GlobalTID[0] = mdlref_TID0;
    161 FCC_New_GlobalTID[1] = mdlref_TID1;
    162 FCC_New_TimingBrdg = timingBridge;
    163
    164 /* initialize error status */
    165 rtmSetErrorStatusPointer(FCC_New_M, rt_errorStatus);
    166
    167 /* Model Initialize function for ModelReference Block: '<Root>/AHRSControl' */
    168 AHRSControl_initialize(rtmGetErrorStatusPointer(FCC_New_M));
    169
    170 /* Model Initialize function for ModelReference Block: '<Root>/ActuatorControl' */
    171 ActuatorControl_initialize(rtmGetErrorStatusPointer(FCC_New_M));
    172}
    173
    174/*
    175 * File trailer for generated code.
    176 *
    177 * [EOF]
    178 */
    179
    +
    + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_codegen_rpt.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_codegen_rpt.html new file mode 100644 index 0000000..362954e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_codegen_rpt.html @@ -0,0 +1,33 @@ + + + +FCC_New Code Generation Report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_coderassumptions.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_coderassumptions.html new file mode 100644 index 0000000..0699fff --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_coderassumptions.html @@ -0,0 +1,377 @@ + + + +Coder Assumptions for 'FCC_New' + + + + +

    +Coder Assumptions for 'FCC_New' +

    +
    +
    + +
    +

    +C Language Configuration for Intel->x86-32 (Windows32) Target Hardware +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +32 +
    +BitPerSizeT + +32 +
    +BitPerPtrDiffT + +32 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Configuration for Development Computer +

    + + + + + + +
    +

    +Expected values are used only if the code has been compiled with PORTABLE_WORDSIZES defined, i.e. when you run a SIL simulation with PortableWordSizes set to 'on'. +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +BitPerChar + +8 +
    +BitPerShort + +16 +
    +BitPerInt + +32 +
    +BitPerLong + +32 +
    +BitPerLongLong + +64 +
    +BitPerFloat + +32 +
    +BitPerDouble + +64 +
    +BitPerPointer + +64 +
    +BitPerSizeT + +64 +
    +BitPerPtrDiffT + +64 +
    +
    + + + + + + + + + + + + + + + + +
    +Endianess + +LittleEndian +
    +Shift right for signed integer is arithmetic shift + +True +
    +Signed integer division rounds to + +Zero +
    + +

    + +
    +

    +C Language Standard +

    + + + + + + +
    +

    +Zero initialization code has been optimized for model 'FCC_New'. +

    +

    + + + + + + + +
    +Initial value of a global integer variable is zero + +True +
    + +

    +

    +If the assumption is not correct, remove the optimization through the Configuration Parameters > Code Generation > Optimization settings. Alternatively, configure your target environment to make the assumption hold. +

    + +
    +

    +Floating-Point Numbers +

    + + + + + + +
    +

    +Code generation is configured to support floating-point numbers, therefore your target environment might perform subnormal number calculations. +

    +

    + + + + + + + + + + + + +
    +Flush-to-zero computed subnormal values (FTZ) + +False +
    +Flush-to-zero incoming subnormal values (DAZ) + +False +
    + +

    +

    +If the assumptions are not correct, subnormal numbers might cause mismatches between model and generated code simulation results. For more information see, Subnormal Number Performance. +

    + +
    + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_contents.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_contents.html new file mode 100644 index 0000000..f5f03c0 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_contents.html @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Contents + + +
    + + +
    + +Summary + + +
    + +Subsystem Report + + +
    + +Traceability Report + + +
    + +Static Code Metrics Report + + +
    + +Code Replacements Report + + +
    + +Coder Assumptions + + +
    +
    + + + + + + + + + + + + + +
    + +Generated Code + + +
    + + + + + + + + + + + + +
    +[-] + +Model files +
    + + + + + + + + + + + + +
    + +FCC_New.c + + +
    + +FCC_New.h + + +
    + +
    + +
    + + + + + + + + + + + + +
    +[+] + +Shared files (5) +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + +
    + +Referenced Models + + +
    +AHRSControl +
    +ActuatorControl +
    + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_h.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_h.html new file mode 100644 index 0000000..4b92bc7 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_h.html @@ -0,0 +1,318 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: FCC_New.h
    7 *
    8 * Code generated for Simulink model 'FCC_New'.
    9 *
    10 * Model version : 1.98
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:15 2020
    13 *
    14 * Target selection: ert.tlc
    15 * Embedded hardware selection: Intel->x86-32 (Windows32)
    16 * Code generation objectives:
    17 * 1. Execution efficiency
    18 * 2. RAM efficiency
    19 * Validation result: Not run
    20 */
    21
    22#ifndef RTW_HEADER_FCC_New_h_
    23#define RTW_HEADER_FCC_New_h_
    24#include "AHRS_Bus.h"
    25#ifndef FCC_New_COMMON_INCLUDES_
    26# define FCC_New_COMMON_INCLUDES_
    27#include "rtwtypes.h"
    28#include "rtw_continuous.h"
    29#include "rtw_solver.h"
    30#endif /* FCC_New_COMMON_INCLUDES_ */
    31
    32/* Shared type includes */
    33#include "model_reference_types.h"
    34
    35/* Child system includes */
    36#ifndef FCC_New_MDLREF_HIDE_CHILD_
    37#define ActuatorControl_MDLREF_HIDE_CHILD_
    38#include "ActuatorControl.h"
    39#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    40
    41#ifndef FCC_New_MDLREF_HIDE_CHILD_
    42#define AHRSControl_MDLREF_HIDE_CHILD_
    43#include "AHRSControl.h"
    44#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    45
    46/* Model Code Variants */
    47#include "AHRSControl_AHRS_Control.h"
    48#include "Actuator_Control.h"
    49
    50/* Forward declaration for rtModel */
    51typedef struct tag_RTM_FCC_New_T RT_MODEL_FCC_New_T;
    52
    53/* Block signals and states (default storage) for model 'FCC_New' */
    54#ifndef FCC_New_MDLREF_HIDE_CHILD_
    55
    56typedef struct {
    57 real_T RateTransition1; /* '<Root>/RateTransition1' */
    58 real_T RateTransition2; /* '<Root>/RateTransition2' */
    59 real_T RateTransition3; /* '<Root>/RateTransition3' */
    60 real_T RateTransition1_Buffer0; /* '<Root>/RateTransition1' */
    61 real_T RateTransition2_Buffer0; /* '<Root>/RateTransition2' */
    62 real_T RateTransition3_Buffer0; /* '<Root>/RateTransition3' */
    63} DW_FCC_New_f_T;
    64
    65#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    66
    67#ifndef FCC_New_MDLREF_HIDE_CHILD_
    68
    69/* Real-time Model Data Structure */
    70struct tag_RTM_FCC_New_T {
    71 const char_T **errorStatus;
    72
    73 /*
    74 * Timing:
    75 * The following substructure contains information regarding
    76 * the timing information for the model.
    77 */
    78 struct {
    79 struct {
    80 uint32_T TID0_1;
    81 boolean_T b_TID0_1;
    82 } RateInteraction;
    83 } Timing;
    84};
    85
    86#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    87
    88#ifndef FCC_New_MDLREF_HIDE_CHILD_
    89
    90typedef struct {
    91 RT_MODEL_FCC_New_T rtm;
    92} MdlrefDW_FCC_New_T;
    93
    94#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    95
    96extern int_T FCC_New_GlobalTID[2];
    97extern const rtTimingBridge *FCC_New_TimingBrdg;
    98extern void FCC_New_Disable(void);
    99extern void FCC_NewTID0(const int16_T *rtu_Act_Pos1, const int16_T *rtu_Act_Pos2,
    100 const int16_T *rtu_Act_Pos3, int16_T *rty_Actuator1, int16_T *rty_Actuator2,
    101 int16_T *rty_Actuator3);
    102extern void FCC_NewTID1(const int16_T *rtu_Pilot_theta_cmd, const int16_T
    103 *rtu_Pilot_phi_cmd, const int16_T *rtu_Pilot_r_cmd, const AHRS_Bus *rtu_AHRS1,
    104 const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3);
    105
    106/* Model reference registration function */
    107extern void FCC_New_initialize(const char_T **rt_errorStatus, const
    108 rtTimingBridge *timingBridge, int_T mdlref_TID0, int_T mdlref_TID1);
    109
    110#ifndef FCC_New_MDLREF_HIDE_CHILD_
    111
    112extern MdlrefDW_FCC_New_T FCC_New_MdlrefDW;
    113
    114#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    115
    116#ifndef FCC_New_MDLREF_HIDE_CHILD_
    117
    118/* Block states (default storage) */
    119extern DW_FCC_New_f_T FCC_New_DW;
    120
    121#endif /*FCC_New_MDLREF_HIDE_CHILD_*/
    122
    123/*-
    124 * The generated code includes comments that allow you to trace directly
    125 * back to the appropriate location in the model. The basic format
    126 * is <system>/block_name, where system is the system number (uniquely
    127 * assigned by Simulink) and block_name is the name of the block.
    128 *
    129 * Use the MATLAB hilite_system command to trace the generated code back
    130 * to the model. For example,
    131 *
    132 * hilite_system('<S3>') - opens system 3
    133 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
    134 *
    135 * Here is the system hierarchy for this model
    136 *
    137 * '<Root>' : 'FCC_New'
    138 * '<S1>' : 'FCC_New/ModelInfo'
    139 */
    140
    141/*-
    142 * Requirements for '<Root>': FCC_New
    143 */
    144#endif /* RTW_HEADER_FCC_New_h_ */
    145
    146/*
    147 * File trailer for generated code.
    148 *
    149 * [EOF]
    150 */
    151
    +
    + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_metrics.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_metrics.html new file mode 100644 index 0000000..7c84f5f --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_metrics.html @@ -0,0 +1,18 @@ + + + +Static Code Metrics Report + + + + +

    +Static Code Metrics Report +

    +
    + +
    +Static Code Metrics report is not generated. On the Configuration Parameters > Code Generation > Report pane, select Generate static code metrics. On the model diagram window, select Code > C/C++ Code > Code Generation Report > Open Model Report or rebuild the model. + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_replacements.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_replacements.html new file mode 100644 index 0000000..562a03e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_replacements.html @@ -0,0 +1,18 @@ + + + +Code replacements in FCC_New + + + + +

    +Code replacements in FCC_New +

    +
    + +
    +Code replacements report not generated. Select 'Summarize which blocks triggered code replacements'. + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_subsystems.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_subsystems.html new file mode 100644 index 0000000..b10ed0d --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_subsystems.html @@ -0,0 +1,87 @@ + + + +Non-virtual subsystems in FCC_New + + + + +

    +Non-virtual subsystems in FCC_New +

    +
    + +
    +
    + +
    +

    +1. Code Mapping [hide] +

    + + + + + + + + + + +
    +

    +The following table:

      +
    • +provides a mapping from the non-virtual subsystems in the model to functions or reusable functions in the generated code and +
    • +
    • +notes exceptions that caused some non-virtual subsystems to not reuse code even though they were assigned a function packaging setting ('Function packaging' entry on the Subsystem Block Dialog) of 'Auto' or 'Reusable function'. +
    • + +
    + +

    + +
    + +No non-virtual subsystems generating functions in model + + +
    +

    +2. Code Reuse Exceptions [hide] +

    + + + + + + + + + + +
    +

    +The following section provides details on each exception that caused a non-virtual subsystem with a function packaging setting of

      +
    • +'Auto' to become an inlined code segment, +
    • +
    • +'Auto' to become a non-reusable function without arguments, or +
    • +
    • +'Reusable function' to become a non-reusable function without arguments. +
    • + +
    +Note:This section does not report graphically identical non-virtual subsystems marked as 'Auto' that were not reused due to differences in their functional properties (such as dimensions, datatypes, work vectors, parameters, etc.). You may identify reasons for non-reuse in such cases by inspecting the differences in the functional attributes of the subsystems in the model or in the inlined generated code. +

    + +
    +
    No reuse exception in model +
    + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_survey.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_survey.html new file mode 100644 index 0000000..a6695b5 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_survey.html @@ -0,0 +1,186 @@ + + + +Code Generation Report for 'FCC_New' + + + + +

    +Code Generation Report for 'FCC_New' +

    +
    + +
    +
    + +
    +

    +Model Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + +
    +Author + +bpotter +
    +Last Modified By + +super +
    +Model Version + +1.98 +
    +Tasking Mode + +MultiTasking +
    +
    + +Configuration settings at time of code generation + + +

    + +
    +

    +Code Information +

    + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +System Target File + +ert.tlc +
    +Hardware Device Type + +Intel->x86-32 (Windows32) +
    +Simulink Coder Version + +9.3 (R2020a) 18-Nov-2019 +
    +Timestamp of Generated Source Code + +Thu Jul 16 18:51:15 2020 +
    + + + +
    +Type of Build + +Model Reference +
    +Objectives Specified + +Execution efficiency, RAM efficiency +
    + +

    + +
    +

    +Additional Information +

    + + + + + + +
    + + + + + + + +
    +Code Generation Advisor + +Not run +
    + +
    + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_trace.html b/src/validation/slprj/ert/FCC_New/html/FCC_New_trace.html new file mode 100644 index 0000000..7bc6ae4 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_trace.html @@ -0,0 +1,21 @@ +Traceability Report for FCC_New + + + \ No newline at end of file diff --git a/src/validation/slprj/ert/FCC_New/html/FCC_New_traceInfo.js b/src/validation/slprj/ert/FCC_New/html/FCC_New_traceInfo.js new file mode 100644 index 0000000..adde4ab --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/FCC_New_traceInfo.js @@ -0,0 +1,55 @@ +function RTW_rtwnameSIDMap() { + this.rtwnameHashMap = new Array(); + this.sidHashMap = new Array(); + this.rtwnameHashMap[""] = {sid: "FCC_New"}; + this.sidHashMap["FCC_New"] = {rtwname: ""}; + this.rtwnameHashMap[""] = {sid: "FCC_New:36"}; + this.sidHashMap["FCC_New:36"] = {rtwname: ""}; + this.rtwnameHashMap["/Act_Pos1"] = {sid: "FCC_New:1"}; + this.sidHashMap["FCC_New:1"] = {rtwname: "/Act_Pos1"}; + this.rtwnameHashMap["/Act_Pos2"] = {sid: "FCC_New:8"}; + this.sidHashMap["FCC_New:8"] = {rtwname: "/Act_Pos2"}; + this.rtwnameHashMap["/Act_Pos3"] = {sid: "FCC_New:9"}; + this.sidHashMap["FCC_New:9"] = {rtwname: "/Act_Pos3"}; + this.rtwnameHashMap["/Pilot_theta_cmd"] = {sid: "FCC_New:13"}; + this.sidHashMap["FCC_New:13"] = {rtwname: "/Pilot_theta_cmd"}; + this.rtwnameHashMap["/Pilot_phi_cmd"] = {sid: "FCC_New:15"}; + this.sidHashMap["FCC_New:15"] = {rtwname: "/Pilot_phi_cmd"}; + this.rtwnameHashMap["/Pilot_r_cmd"] = {sid: "FCC_New:17"}; + this.sidHashMap["FCC_New:17"] = {rtwname: "/Pilot_r_cmd"}; + this.rtwnameHashMap["/AHRS1"] = {sid: "FCC_New:19"}; + this.sidHashMap["FCC_New:19"] = {rtwname: "/AHRS1"}; + this.rtwnameHashMap["/AHRS2"] = {sid: "FCC_New:21"}; + this.sidHashMap["FCC_New:21"] = {rtwname: "/AHRS2"}; + this.rtwnameHashMap["/AHRS3"] = {sid: "FCC_New:23"}; + this.sidHashMap["FCC_New:23"] = {rtwname: "/AHRS3"}; + this.rtwnameHashMap["/AHRSControl"] = {sid: "FCC_New:254"}; + this.sidHashMap["FCC_New:254"] = {rtwname: "/AHRSControl"}; + this.rtwnameHashMap["/AHRSControl_caller"] = {sid: "FCC_New:255"}; + this.sidHashMap["FCC_New:255"] = {rtwname: "/AHRSControl_caller"}; + this.rtwnameHashMap["/ActuatorControl"] = {sid: "FCC_New:257"}; + this.sidHashMap["FCC_New:257"] = {rtwname: "/ActuatorControl"}; + this.rtwnameHashMap["/ActuatorControl_caller"] = {sid: "FCC_New:251"}; + this.sidHashMap["FCC_New:251"] = {rtwname: "/ActuatorControl_caller"}; + this.rtwnameHashMap["/Demux"] = {sid: "FCC_New:30"}; + this.sidHashMap["FCC_New:30"] = {rtwname: "/Demux"}; + this.rtwnameHashMap["/ModelInfo"] = {sid: "FCC_New:36"}; + this.sidHashMap["FCC_New:36"] = {rtwname: "/ModelInfo"}; + this.rtwnameHashMap["/RateTransition1"] = {sid: "FCC_New:10"}; + this.sidHashMap["FCC_New:10"] = {rtwname: "/RateTransition1"}; + this.rtwnameHashMap["/RateTransition2"] = {sid: "FCC_New:11"}; + this.sidHashMap["FCC_New:11"] = {rtwname: "/RateTransition2"}; + this.rtwnameHashMap["/RateTransition3"] = {sid: "FCC_New:12"}; + this.sidHashMap["FCC_New:12"] = {rtwname: "/RateTransition3"}; + this.rtwnameHashMap["/Actuator1"] = {sid: "FCC_New:2"}; + this.sidHashMap["FCC_New:2"] = {rtwname: "/Actuator1"}; + this.rtwnameHashMap["/Actuator2"] = {sid: "FCC_New:5"}; + this.sidHashMap["FCC_New:5"] = {rtwname: "/Actuator2"}; + this.rtwnameHashMap["/Actuator3"] = {sid: "FCC_New:7"}; + this.sidHashMap["FCC_New:7"] = {rtwname: "/Actuator3"}; + this.rtwnameHashMap["/EmptySubsystem"] = {sid: "FCC_New:36:1"}; + this.sidHashMap["FCC_New:36:1"] = {rtwname: "/EmptySubsystem"}; + this.getSID = function(rtwname) { return this.rtwnameHashMap[rtwname];} + this.getRtwname = function(sid) { return this.sidHashMap[sid];} +} +RTW_rtwnameSIDMap.instance = new RTW_rtwnameSIDMap(); diff --git a/src/validation/slprj/ert/FCC_New/html/css/coder_app.css b/src/validation/slprj/ert/FCC_New/html/css/coder_app.css new file mode 100644 index 0000000..d47cf0e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/css/coder_app.css @@ -0,0 +1,184 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +pre#code { + font-family: Consolas, Courier; + font-size: small; +} + +.ct { + font-style: italic; + color: #117755 +} /* comment */ +.pp { + font-weight:bold; + color: #992211 +} /* preprocessor */ +.kw, .br { + font-weight:bold; + color: #112266 +} /* keyword or brace */ +.dt { + font-weight:bold; + color: #112266 +} /* data type */ +.tk { + font-style: normal; + color: #112266 +} /* regular token */ +pre#code a.req { + text-decoration: none; + color: #112266 +} +pre#code a.req_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.req_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +pre#code a.blk { + text-decoration: none; +} +pre#code a.blk_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.blk_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +a.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight token */ +tr.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight row */ +a.hiliteToken, tr.hiliteToken, td.hiliteToken { + background-color: #ffff99; +} +.hiliteCurrentLine, tr.hiliteCurrentLine > td { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); + box-shadow: inset 0 1px 0 0 rgba(150, 12, 116, 0.25), inset 0 -1px 0 0 rgba(150, 12, 116, 0.25); +} +span.hiliteTotalLine { + font-style: normal; + color: #aff; +} +a.tk { + text-decoration: none; +} +a.tk:hover { + text-decoration: none; +} +a.active { + text-decoration: underline; +} +a.active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} /* hyperlink */ +table.code { + border: 0px +} +table.code td { + vertical-align: top; +} +table.code td.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} +table.code > tr:first { + text-align: right; +} /* hyperlink */ + +ul.popup_attrib_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.popup_attrib_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} +.highlighted { + background-color:yellow; +} +a:class1 { + color: -webkit-link; + text-decoration: underline; + cursor: hand; +} +.scroll +{ + height:80px; + overflow:scroll; + overflow-x:hidden; +} +div#popup_window { + position: absolute; + background-color: rgb(203,203,255); + border: solid 3px #ECECEC; + border-radius: 5px; + /* shadow box around the window*/ + -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + padding: 2px; +} +div#popup_window a { + text-decoration: none; + color: green; +} +div#popup_window a:hover { + cursor: pointer; + text-decoration: underline; + color: blue; +} +div#popup_window tr.selected { + background-color: #ffff99; +} +div#token_usage_nav { + border-bottom: 1px solid gray; +} +table#token_usage_details { + cellpadding: 100px; + table-layout:fixed; + border: 0px; +} +.token_usage_details_tabrow { + width: 40px; +} +table#token_usage_details td { + padding-right: 5em; + padding-left: 1em; +} +.token_usage_details_tabrow:hover { + background-color: gray; +} +.nav_table td.hidden { + display: none; +} +table#codeTbl tr td { + color: #112266 +} +table#codeTbl tr td { + padding-left: 10px; +} +table#codeTbl tr td:first-child { + font-style: italic; + color: #888888; + text-align: right; + padding-left:0px; +} + diff --git a/src/validation/slprj/ert/FCC_New/html/define.js b/src/validation/slprj/ert/FCC_New/html/define.js new file mode 100644 index 0000000..adeae1e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/define.js @@ -0,0 +1,96 @@ +function CodeDefine() { +this.def = new Array(); +this.def["FCC_New_GlobalTID"] = {file: "FCC_New_c.html",line:70,type:"var"}; +this.def["FCC_New_TimingBrdg"] = {file: "FCC_New_c.html",line:71,type:"var"}; +this.def["FCC_New_MdlrefDW"] = {file: "FCC_New_c.html",line:72,type:"var"}; +this.def["FCC_New_DW"] = {file: "FCC_New_c.html",line:75,type:"var"}; +this.def["FCC_New_Disable"] = {file: "FCC_New_c.html",line:78,type:"fcn"}; +this.def["FCC_NewTID0"] = {file: "FCC_New_c.html",line:88,type:"fcn"}; +this.def["FCC_NewTID1"] = {file: "FCC_New_c.html",line:122,type:"fcn"}; +this.def["FCC_New_initialize"] = {file: "FCC_New_c.html",line:152,type:"fcn"}; +this.def["RT_MODEL_FCC_New_T"] = {file: "FCC_New_h.html",line:51,type:"type"}; +this.def["DW_FCC_New_f_T"] = {file: "FCC_New_h.html",line:63,type:"type"}; +this.def["MdlrefDW_FCC_New_T"] = {file: "FCC_New_h.html",line:92,type:"type"}; +this.def["AHRS_Bus"] = {file: "../../_sharedutils/html/AHRS_Bus_h.html",line:38,type:"type"}; +this.def["rtTimingBridge"] = {file: "../../_sharedutils/html/model_reference_types_h.html",line:28,type:"type"}; +this.def["rtCtrlRateMdlRefTiming"] = {file: "../../_sharedutils/html/model_reference_types_h.html",line:43,type:"type"}; +this.def["int8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:55,type:"type"}; +this.def["uint8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:56,type:"type"}; +this.def["int16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:57,type:"type"}; +this.def["uint16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:58,type:"type"}; +this.def["int32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:59,type:"type"}; +this.def["uint32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:60,type:"type"}; +this.def["real32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:61,type:"type"}; +this.def["real64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:62,type:"type"}; +this.def["real_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:68,type:"type"}; +this.def["time_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:69,type:"type"}; +this.def["boolean_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:70,type:"type"}; +this.def["int_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:71,type:"type"}; +this.def["uint_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:72,type:"type"}; +this.def["ulong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:73,type:"type"}; +this.def["ulonglong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:74,type:"type"}; +this.def["char_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:75,type:"type"}; +this.def["uchar_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:76,type:"type"}; +this.def["byte_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:77,type:"type"}; +this.def["int64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:78,type:"type"}; +this.def["uint64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:79,type:"type"}; +this.def["int8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:89,type:"type"}; +this.def["uint8_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:90,type:"type"}; +this.def["int16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:91,type:"type"}; +this.def["uint16_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:92,type:"type"}; +this.def["int32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:93,type:"type"}; +this.def["uint32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:94,type:"type"}; +this.def["int64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:95,type:"type"}; +this.def["uint64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:96,type:"type"}; +this.def["real32_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:97,type:"type"}; +this.def["real64_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:98,type:"type"}; +this.def["real_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:104,type:"type"}; +this.def["time_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:105,type:"type"}; +this.def["boolean_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:106,type:"type"}; +this.def["int_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:107,type:"type"}; +this.def["uint_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:108,type:"type"}; +this.def["ulong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:109,type:"type"}; +this.def["ulonglong_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:110,type:"type"}; +this.def["char_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:111,type:"type"}; +this.def["uchar_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:112,type:"type"}; +this.def["byte_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:113,type:"type"}; +this.def["pointer_T"] = {file: "../../_sharedutils/html/rtwtypes_h.html",line:136,type:"type"}; +} +CodeDefine.instance = new CodeDefine(); +var testHarnessInfo = {OwnerFileName: "", HarnessOwner: "", HarnessName: "", IsTestHarness: "0"}; +var relPathToBuildDir = "../ert_main.c"; +var fileSep = "\\"; +var isPC = true; +function Html2SrcLink() { + this.html2SrcPath = new Array; + this.html2Root = new Array; + this.html2SrcPath["FCC_New_c.html"] = "../FCC_New.c"; + this.html2Root["FCC_New_c.html"] = "FCC_New_c.html"; + this.html2SrcPath["FCC_New_h.html"] = "../FCC_New.h"; + this.html2Root["FCC_New_h.html"] = "FCC_New_h.html"; + this.html2SrcPath["AHRSControl_AHRS_Control_h.html"] = "../AHRSControl_AHRS_Control.h"; + this.html2Root["AHRSControl_AHRS_Control_h.html"] = "../../_sharedutils/html/AHRSControl_AHRS_Control_h.html"; + this.html2SrcPath["AHRS_Bus_h.html"] = "../AHRS_Bus.h"; + this.html2Root["AHRS_Bus_h.html"] = "../../_sharedutils/html/AHRS_Bus_h.html"; + this.html2SrcPath["Actuator_Control_h.html"] = "../Actuator_Control.h"; + this.html2Root["Actuator_Control_h.html"] = "../../_sharedutils/html/Actuator_Control_h.html"; + this.html2SrcPath["model_reference_types_h.html"] = "../model_reference_types.h"; + this.html2Root["model_reference_types_h.html"] = "../../_sharedutils/html/model_reference_types_h.html"; + this.html2SrcPath["rtwtypes_h.html"] = "../rtwtypes.h"; + this.html2Root["rtwtypes_h.html"] = "../../_sharedutils/html/rtwtypes_h.html"; + this.getLink2Src = function (htmlFileName) { + if (this.html2SrcPath[htmlFileName]) + return this.html2SrcPath[htmlFileName]; + else + return null; + } + this.getLinkFromRoot = function (htmlFileName) { + if (this.html2Root[htmlFileName]) + return this.html2Root[htmlFileName]; + else + return null; + } +} +Html2SrcLink.instance = new Html2SrcLink(); +var fileList = [ +"FCC_New_c.html","FCC_New_h.html","AHRSControl_AHRS_Control_h.html","AHRS_Bus_h.html","Actuator_Control_h.html","model_reference_types_h.html","rtwtypes_h.html"]; diff --git a/src/validation/slprj/ert/FCC_New/html/hilite_warning.png b/src/validation/slprj/ert/FCC_New/html/hilite_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f013f815ae58acfcb9112170c871851d666b820f GIT binary patch literal 3014 zcmV;%3pw004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 + + + + + + + + + + + + +
    + + diff --git a/src/validation/slprj/ert/FCC_New/html/js/coder_app.js b/src/validation/slprj/ert/FCC_New/html/js/coder_app.js new file mode 100644 index 0000000..3c34823 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/js/coder_app.js @@ -0,0 +1,525 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +function queryByClassName(className, elem) { + if (!elem) elem = document.body; + if (typeof elem.querySelectorAll === "function") { + return elem.querySelectorAll("."+className); + } else { + return elem.getElementsByClass(className); + } +} + +function nav_token_usage_details(direction) { + var els = queryByClassName("token_usage_details_tabrow"); + var selectedIdx = 0; + var selectedClassName = "selected"; + for (selectedIdx; selectedIdx < els.length; selectedIdx++) { + if (els[selectedIdx].classList.contains(selectedClassName)) { + break; + } + } + var nextIdx = selectedIdx; + if (direction === -1 && selectedIdx > 0) { + nextIdx = selectedIdx-1; + } else if (direction === 1 && selectedIdx < els.length - 1) { + nextIdx = selectedIdx + 1; + } + if (nextIdx !== selectedIdx) { + els[selectedIdx].classList.remove(selectedClassName); + els[nextIdx].classList.add(selectedClassName); + els[nextIdx].scrollIntoView(alignWithTop=false); + } + return false; +} + +function tabrowClicked(event) { +} + +function popupOnload() { + var els = queryByClassName("token_usage_details_tabrow"); + for (var i=0; i" + + top.rtwGetFileName(link2Src) + ""; + var bodyNode = document.body; + bodyNode.insertBefore(link, bodyNode.firstElementChild); + } + top.updateHyperlinks(); + // update fileSelector frame + if (top.fileSelector) { + var o = top.fileSelector.document.getElementById('fileSelector'); + if (o) { + o.value = filename; + } + } + // add links to line numbers + var hasLineFlag = null; + if (top.TraceInfoLineFlag && top.TraceInfoLineFlag.instance) { + hasLineFlag = true; + } else { + hasLineFlag = false; + } + + if(hasLineFlag) { + var lines = queryByClassName("ln", codeElement); + var lineTraceFlag = top.TraceInfoLineFlag.instance.lineTraceFlag; + var lineNo = null; + for (var i=0; i= 0; --i) { + var childNode = trNode.childNodes[i]; + if (childNode.tagName.toUpperCase() === "TD") { + return childNode.childNodes; + } + } + return null; +} + +// see g1225075 +function fixBoxStyleFnHeaderLineWidths() { + // Match strings like "/**********/" which is the top line of + // a box-style function comment header + var reBoxHeader = /\/\*+\//; + + // Match strings like "' */" which is the contents of the text + // element originally generated in the report to pad the width of + // the line. + var rePadding = /'\s*\*\//; + + // All block identifier elements in the report page + blkLineElts = queryByClassName("blk"); + for (var i = 0; i < blkLineElts.length; ++i) { + var origPadding = blkLineElts[i].nextSibling; + if (origPadding.textContent.match(rePadding)) { + var spanElt = findParent(blkLineElts[i], { tagName: "span", className: "ct" }); + if (!spanElt) { + continue; + } + + // The numbered line in the report containing block identifier "i" + var tableRowElt = findParent(spanElt, { tagName: "tr" }); + if (!tableRowElt) { + continue; + } + + // Loop backward through table rows (i.e., report lines) looking + // for the "/***************/" start of the header. When found save + // its pixel width. Not actually the width of the itself but + // the span inside its last . This is will determine the real + // padding that is needed for proper alignment regardless of font + // or CKJ characters. + var targetWidth = 0; + var sanity = Number.MAX_VALUE; + var node = tableRowElt.previousSibling; + while (node && (sanity-- > 0)) { + var lastCellContents = getLastTableCellContents(node); + if (lastCellContents) { + if (lastCellContents.length === 0) { + break; + } + if (lastCellContents[0].textContent.match(reBoxHeader)) { + targetWidth = lastCellContents[0].offsetWidth; + break; + } + } + node = node.previousSibling; + } + + // If applying a new padding (i.e., targetWidth > 0), replace + // the original padding "' */' (a single text element) with + // two text elements and a span in between. The span will be the + // new pixel-accurate padding. + if (targetWidth > 0) { + var singleQuoteNode = document.createTextNode("'"); + var spacerNode = document.createElement('span'); + origPadding.textContent = "*/"; + origPadding.parentNode.insertBefore(spacerNode, origPadding); + origPadding.parentNode.insertBefore(singleQuoteNode, spacerNode); + + var padWidth = targetWidth - spanElt.offsetWidth; + spacerNode.style.display = 'inline-block'; + spacerNode.style.width = String(padWidth) + "px"; + spacerNode.style.height = '1em'; // cursor won't work w/o some height + spacerNode.style.cursor = 'text'; + } + } + } +} + +// the onload function for source file +function srcFileOnload() { + var codeElement = document.getElementById("codeTbl"); + var insertFunction = getInsertFunction(codeElement); + try { + var els = codeElement.getElementsByTagName("tr"); + for (var i = 0; i < els.length; i++) { + registerDelayedOnMouseOver(els[i], lineOnMouseIn, lineOnMouseOut); + } + updateToken(codeElement); + } catch (err) {}; + insertFunction(); + // add code to model hyperlinks for all tokens + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + // highlight the filename in the TOC frame + if (top.rtwreport_contents_frame && top.hiliteByFileName(top.rtwreport_document_frame.document.location.href)) { + // remove the highlights in the TOC frame if filename is hilite successfully + top.removeHiliteTOC(top.rtwreport_contents_frame); + } + + // annotate code with code coverage data + if (typeof rtwannotate === 'function') { + rtwannotate(filename.replace(/.html$/,"_cov.xml")); + } + + fixBoxStyleFnHeaderLineWidths(); + + // highlight token and row + if (top.RTW_TraceInfo.instance && top.RTW_TraceArgs.instance) { + var i; + // find the highlight file name + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(filename); + var ids=[], rows=[]; + if (typeof fileIdx !== "undefined") { + ids = top.RTW_TraceArgs.instance.getIDs(fileIdx); + rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + // highlight rows in file + for (i=0; i 0) + top.RTW_TraceInfo.instance.setInitLocation(filename,rows[0]); + else { + top.toggleNavSideBar("off"); + return; + } + } + + // display navigation side bar + if (top.rtwreport_nav_frame) top.rtwreport_nav_frame.location.reload(); + if (rows.length>0) { + top.toggleNavSideBar("on"); + top.toggleNavToolBar("on"); + } else { + top.toggleNavSideBar("off"); + } + } + top.scrollToLineBasedOnHash(document.location.hash); + function getHash() { + var loc; + var aHash=""; + var topDocObj = top.window.document; + // get the hash value from location. + loc = topDocObj.location; + loc = loc.search || loc.hash; + aHash = loc.substring(1); + aHash = decodeURI(aHash); + return aHash; + } +} + +function createPopup(filename, evt) { + var anchorObj = evt.currentTarget; + if (anchorObj.children.length > 0) + return; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var windowObj = top.getInspectWindow(); + var propObj = top.getInspectData(filename, anchorObj); + var navObj = top.getInspectLink(filename, location.pathname, anchorObj); + if (propObj) { + windowObj.appendChild(propObj); + windowObj.style.left = "0px"; + if (anchorObj.parentElement.nodeName === "TD" && + anchorObj.parentElement.parentElement.nodeName === "TR") { + anchorObj.parentElement.parentElement.lastChild.insertBefore(windowObj, + anchorObj.parentElement.parentElement.lastChild.lastChild.nextSibling); + var left = Math.min(evt.clientX , window.innerWidth - windowObj.scrollWidth - 30); + left = Math.max(0, left); + windowObj.style.left = "" + left + "px"; + } + } +}; + +function destroyPopup(anchorObj) { + var popWindow = document.getElementById("popup_window"); + if (popWindow) { + popWindow.parentElement.removeChild(popWindow); + } +}; diff --git a/src/validation/slprj/ert/FCC_New/html/nav.html b/src/validation/slprj/ert/FCC_New/html/nav.html new file mode 100644 index 0000000..64f68db --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/nav.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/navToolbar.html b/src/validation/slprj/ert/FCC_New/html/navToolbar.html new file mode 100644 index 0000000..d07c72e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/navToolbar.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/FCC_New/html/rtwhilite.js b/src/validation/slprj/ert/FCC_New/html/rtwhilite.js new file mode 100644 index 0000000..bb368a1 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/rtwhilite.js @@ -0,0 +1,2081 @@ +// Copyright 2006-2019 The MathWorks, Inc. + +// Class RTW_Hash ------------------------------------------------------------ +// Internal web browser doesn't change window.location.hash if the link points +// to the same page. +// RTW_Hash remembers the hash value when the page is loaded in the first time +// or a link is clicked. +// removeHiliteByHash cleans the high lighted elements according to the stored +// hash value +function RTW_Hash(aHash) { + if (aHash == null) { + this.fHash = ""; + } else { + this.fHash = aHash; + }; + + this.getHash = function() { + return this.fHash; + } + + this.setHash = function(aHash) { + this.fHash = aHash; + } +} + +RTW_Hash.instance = null; + +// Class RTW_TraceInfo -------------------------------------------------------- +function RTW_TraceInfo(aFileLinks) { + this.fFileLinks = aFileLinks; + this.fLines = new Array(); + this.fTotalLines = 0; // total number of highlighted lines + this.fNumLines = new Array(); + this.fFileIdxCache = new Array(); + this.fDisablePanel = false; + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + this.fCurrCodeNode = null; + this.getHtmlFileName = function(aIndex) { + if (aIndex < this.fFileLinks.length) { + var href = this.fFileLinks[aIndex].href; + return href.substring(href.lastIndexOf('/')+1); + } + } + this.getSrcFileName = function(aIndex) { + var name = this.getHtmlFileName(aIndex); + if (name) + name = RTW_TraceInfo.toSrcFileName(name); + return name; + } + this.getNumFileLinks = function() { + return this.fFileLinks.length; + } + this.setFileLinkColor = function(aIndex, aColor) { + var link = this.fFileLinks[aIndex]; + if (link && link.parentNode && link.parentNode.style) + link.parentNode.style.backgroundColor = aColor; + } + this.highlightFileLink = function(aIndex, aColor) { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, i == aIndex ? aColor : ""); + } + } + this.highlightCurrFileLink = function(aColor) { + this.highlightFileLink(this.fCurrFileIdx); + } + this.highlightLines = function(aCodeNode,aColor) { + this.fCurrCodeNode = aCodeNode; + var lines = this.fLines[this.getHtmlFileName(this.fCurrFileIdx)]; + if (lines && aCodeNode) { + for (var i = 0; i < lines.length; ++i) { + var lineObj = aCodeNode.childNodes[lines[i]-1]; + if (lineObj) + lineObj.style.backgroundColor=aColor; + } + } + } + this.getFileIdx = function(aFile) { + if (this.fFileIdxCache[aFile] != null) + return this.fFileIdxCache[aFile]; + for (var i = 0; i < this.fFileLinks.length; ++i) { + if (this.getHtmlFileName(i) == aFile) { + this.fFileIdxCache[aFile] = i; + return i; + } + } + return null; + } + this.getCurrFileIdx = function() { return this.fCurrFileIdx; } + this.setNumHighlightedLines = function(aFileIdx, aNumLines) { + this.fNumLines[aFileIdx] = aNumLines; + updateNumHighlightedLines(this.fFileLinks[aFileIdx], aNumLines); + } + this.getNumLines = function(aFileIdx) { + return this.fNumLines[aFileIdx] != null ? this.fNumLines[aFileIdx] : 0; + } + this.getNumLinesAll = function() { + var sum = 0; + var len = this.fNumLines.length; + for (var i = 0; i < len; ++i) { + sum += this.getNumLines(i); + } + return sum; + } + this.getPrevButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonPrev"); + else + return document.getElementById("rtwIdButtonPrev"); + } + this.getNextButton = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdButtonNext"); + else + return document.getElementById("rtwIdButtonNext"); + } + this.getPanel = function() { + var aFrame = getNavFrame(); + if (typeof aFrame !== "undefined" && aFrame !== null) + return aFrame.document.getElementById("rtwIdTracePanel"); + else + return document.getElementById("rtwIdTracePanel"); + } + this.removeHighlighting = function() { + for (var i = 0; i < this.fFileLinks.length; ++i) { + this.setFileLinkColor(i, ""); + this.setNumHighlightedLines(i, 0); + } + // remove highlight and reset current code node + try { + if (this.fCurrCodeNode != null) + this.highlightLines(getCodeNode(),""); + } catch (e) {}; + this.fCurrCodeNode = null; + if (this.getPrevButton()) { this.getPrevButton().disabled = true; } + if (this.getNextButton()) { this.getNextButton().disabled = true; } + if (this.getPanel()) { this.getPanel().style.display = "none"; } + this.fCurrFileIdx = -1; + this.fCurrLineIdx = -1; + } + this.setCurrLineIdx = function(aLineIdx) { + this.fCurrLineIdx = aLineIdx; + } + this.getCurrLineIdx = function() { return this.fCurrLineIdx; } + this.setCurrent = function(aFileIdx, aLineIdx) { + this.fCurrFileIdx = aFileIdx; + var numLines = this.getNumLines(aFileIdx); + if (!numLines || aLineIdx >= numLines) + this.fCurrLineIdx = -1; + else + this.fCurrLineIdx = aLineIdx; + var allNumLines = this.getNumLinesAll(); + if (this.getPrevButton()) { + this.getPrevButton().disabled = (allNumLines <= 1 || !this.hasPrev()); + } + if (this.getNextButton()) { + this.getNextButton().disabled = (allNumLines <= 1 || !this.hasNext()); + } + if (this.getPanel() && !this.fDisablePanel) { + this.getPanel().style.display = 'block'; + } + } + this.setDisablePanel = function(aDisable) { + this.fDisablePanel = aDisable; + } + this.getPrevFileIdx = function() { + if (this.fCurrLineIdx > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx - 1; i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + // update the navigation bar state + this.updateNavState = function() { + if (this.getPrevButton()) + this.getPrevButton().disabled = !this.hasPrev(); + if (this.getNextButton()) + this.getNextButton().disabled = !this.hasNext(); + setTraceNumber(); + } + this.hasPrev = function() { + return this.getPrevFileIdx() != null; + } + this.getFirstFileIdx = function() { + for (var i = 0; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + } + this.getLastFileIdx = function() { + for (var i = this.getNumFileLinks(); i >= 0; --i) + if (this.fNumLines[i] > 0) + return i; + } + this.goFirst = function() { + this.fCurrFileIdx = this.getFirstFileIdx(); + this.fCurrLineIdx = 0; + this.updateNavState(); + } + this.goLast = function() { + this.fCurrFileIdx = this.getLastFileIdx();; + this.fCurrLineIdx = this.getNumLines(this.fCurrFileIdx) - 1; + this.updateNavState(); + } + this.goPrev = function() { + var fileIdx = this.getPrevFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + --this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = this.getNumLines(fileIdx) - 1; + } + this.updateNavState(); + } + this.getNextFileIdx = function() { + if (this.fCurrLineIdx < this.getNumLines(this.fCurrFileIdx) - 1 && this.getNumLines(this.fCurrFileIdx) > 0) + return this.fCurrFileIdx; + for (var i = this.fCurrFileIdx + 1; i < this.getNumFileLinks(); ++i) + if (this.fNumLines[i] > 0) + return i; + return null; + } + this.hasNext = function() { + return this.getNextFileIdx() != null; + } + this.goNext = function() { + var fileIdx = this.getNextFileIdx(); + if (fileIdx == null) + return; + if (fileIdx == this.fCurrFileIdx) + ++this.fCurrLineIdx; + else { + this.fCurrFileIdx = fileIdx; + this.fCurrLineIdx = 0; + } + this.updateNavState(); + } + this.setTotalLines = function(num) { + this.fTotalLines = num; + } + this.getTotalLines = function() { return this.fTotalLines;} + this.setLines = function(aFile, aLines) { + this.fLines[aFile] = aLines; + var index = this.getFileIdx(aFile); + if (index != null) + this.setNumHighlightedLines(index,aLines.length); + } + this.getLines = function(aFile) { + return this.fLines[aFile]; + } + // get current on focus line number + this.getCurrLine = function() { + var file = this.getHtmlFileName(this.getCurrFileIdx()); + var lines = this.fLines[file]; + var line = null; + if (lines) { + var line = lines[this.fCurrLineIdx]; + } + return line; + } + this.getHRef = function(aFileIdx, aLineIdx, offset) { + var file = this.getHtmlFileName(aFileIdx); + var lines = this.fLines[file]; + if (lines) { + var line = lines[aLineIdx]; + line = offset_line(line, offset); + file = file+"#"+line; + } + return file; + } + + this.getCurrentHRef = function(offset) { + return this.getHRef(this.fCurrFileIdx, this.fCurrLineIdx, offset); + } + this.setInitLocation = function(aFile, aLine) { + var fileIdx = this.getFileIdx(aFile); + var lineIdx = null; + if (fileIdx != null && aLine) { + var lines = this.getLines(aFile); + for (var i = 0; i < lines.length; ++i) { + if (lines[i] == aLine) { + lineIdx = i; + break; + } + } + } + if (fileIdx == null || lineIdx == null) + this.setCurrent(-1,-1); + else + this.setCurrent(fileIdx,lineIdx); + } +} + +// Static methods in RTW_TraceInfo + +RTW_TraceInfo.getFileLinks = function(docObj) { + var links; + if (docObj && docObj.getElementsByName) + links = docObj.getElementsByName("rtwIdGenFileLinks"); + return links ? links : new Array(); +} + +RTW_TraceInfo.toSrcFileName = function(aHtmlFileName) { + aHtmlFileName = aHtmlFileName.replace(/_c.html$/,".c"); + aHtmlFileName = aHtmlFileName.replace(/_h.html$/,".h"); + aHtmlFileName = aHtmlFileName.replace(/_cpp.html$/,".cpp"); + aHtmlFileName = aHtmlFileName.replace(/_hpp.html$/,".hpp"); + aHtmlFileName = aHtmlFileName.replace(/_cc.html$/,".hpp"); + return aHtmlFileName; +} + +RTW_TraceInfo.instance = null; + +// Class RTW_TraceArgs -------------------------------------------------------- +// file.c:10,20,30&file.h:10,20,30[&color=value] or +// sid=model:1[&color=value] +RTW_TraceArgs = function(aHash) { + this.fColor = null; + this.fFontSize = null; + this.fInitFile = null; + this.fInitLine = null; + this.fSID = null; + this.fFiles = new Array(); + this.fLines = new Array(); + this.fMessage = null; + this.fBlock = null; + this.fNumBlocks = 0; + this.fUseExternalBrowser = true; + this.fInStudio = false; + this.fModel2CodeSrc = null; + this.fInCodeTrace = false; + this.fTraceData = null; + this.fFileIdx = []; // filename to fileId + this.fRows = []; // highlighted rows indexed by fileId + this.fIDs = []; // highlighted IDs indexed by fileId + + this.hasSid = function() { + return !(this.fSID == null); + } + this.parseCommand = function(aHash) { + var args = new Array(); + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf('='); + if (sep != -1) { + var cmd = arg.substring(0,sep); + var opt = arg.substring(sep+1); + switch (cmd.toLowerCase()) { + case "color": + this.fColor = opt; + break; + case "fontsize": + this.fFontSize = opt; + break; + case "initfile": + this.fInitFile = RTW_TraceArgs.toHtmlFileName(opt); + break; + case "initline": + this.fInitLine = opt; + break; + case "msg": + this.fMessage = opt; + break; + case "block": + this.fBlock = unescape(opt); + break; + case "numblocks": + this.fNumBlocks = parseInt(opt); + break; + case "sid": + this.fSID = opt; + // convert sid to code location + break; + case "model2code_src": + // model2code_src from model or webview + this.fModel2CodeSrc = opt; + break; + case "useexternalbrowser": + this.fUseExternalBrowser = (opt=="true"); + break; + case "instudio": + this.fInStudio = (opt=="true"); + break; + case "incodetrace": + this.fInCodeTrace = (opt=="true"); + break; + case "tracedata": + this.fTraceData = decodeURI(opt); + break; + } + } + } + } + this.parseUrlHash = function(aHash) { + var rows, sep, assignSep; + if (aHash) { + args = aHash.split('&'); + for (var i = 0; i < args.length; ++i) { + var arg = args[i]; + sep = arg.indexOf(':'); + assignSep = arg.indexOf('='); + if (sep !== -1 && assignSep === -1) { + var fileLines = arg.split(':'); + var htmlFileName = RTW_TraceArgs.toHtmlFileName(fileLines[0]); + this.fFileIdx[htmlFileName] = i; + this.fFiles.push(htmlFileName); + if (fileLines[1]) { + rows = fileLines[1].split(','); + rows = uniqueRows(rows); + this.fLines.push(rows); + this.fRows[i] = rows; + } + } + } + if (this.fInitFile == null && this.fFiles.length > 0) { + this.fInitFile = this.fFiles[0]; + this.fInitLine = (this.fLines[0] == null ? -1 : this.fLines[0][0]); + } + } + } + this.parseUrlHash2 = function(aHash) { + aHash = decodeURI(aHash); + var rows; + var ids; + if (aHash && aHash.length > 0 && aHash[0] === "[") { + var input = eval(aHash); + var i; + var j; + // set highlight files from url + for (i=0; i 0 + && top.rtwreport_document_frame.location.href !== "about:blank" && forceReload !== true) { + updateHyperlinks(); + return; + } + + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; + + // redirect the page based on the url + var initPage = null; + if (RTW_TraceArgs.instance.getNumFiles()) { + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + RTW_TraceInfo.instance.removeHighlighting() + var numFiles = RTW_TraceArgs.instance.getNumFiles(); + var tLines = 0; + for (var i = 0; i < numFiles; ++i) { + RTW_TraceInfo.instance.setLines(RTW_TraceArgs.instance.getFile(i),RTW_TraceArgs.instance.getLines(i)); + tLines += RTW_TraceArgs.instance.getLines(i).length; + } + RTW_TraceInfo.instance.setTotalLines(tLines); + if (aPanel == false) { + RTW_TraceInfo.instance.setDisablePanel(true); + } + var initFile = RTW_TraceArgs.instance.getInitFile(); + RTW_TraceInfo.instance.setInitLocation(initFile,RTW_TraceArgs.instance.getInitLine()); + if (!hasInCodeTrace()) { + initPage = RTW_TraceInfo.instance.getCurrentHRef(); + } else { + initPage = initFile; + } + } else { + // catch error that document frame is in another domain + try { + var fileDocObj = top.rtwreport_document_frame.document; + if (fileDocObj.location && (!fileDocObj.location.href || fileDocObj.location.href == "about:blank")) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + var tracePage = tocDocObj.getElementById("rtwIdTraceability"); + if (summaryPage) { + initPage = summaryPage.href; + } else if (tracePage) { + initPage = tracePage; + } + } + } catch(e) {}; + } + if (RTW_TraceArgs.instance && RTW_TraceArgs.instance.fMessage) { + // display diagnostic message + var linkId = "rtwIdMsgFileLink"; + var msgFile = tocDocObj.getElementById(linkId); + if (msgFile && msgFile.style) { + msgFile.style.display = "block"; + // Highlight the background of msg link + tocHiliteById(linkId); + } + initPage = "rtwmsg.html"; + } + if (initPage) { + var is_same_page = false; + try { + var fileDocObj = top.rtwreport_document_frame.document; + is_same_page = isSamePage(fileDocObj.location.href, initPage); + } catch(e) {}; + if (document.getElementById("rtwreport_document_frame")) { + document.getElementById("rtwreport_document_frame").setAttribute("src", initPage); + } else { + top.rtwreport_document_frame.location.href = initPage; + } + + if (is_same_page) { + // Goto the same page won't trigger onload function. + // Call it manuelly to highligh new code location. + rtwFileOnLoad(top.rtwreport_document_frame.document); + } + } +} + +// Compare if href1(i.e. file:///path/file1.html#222) and href2(i.e.file2.html) are same pages. +// isSamePage return true if file1 == file2. +function isSamePage(href1, href2) { + var page1 = href1.substring(href1.lastIndexOf('/')+1,href1.lastIndexOf('.html')); + var page2 = href2.substring(href2.lastIndexOf('/')+1,href2.lastIndexOf('.html')); + return (page1 == page2); +} + +// Callback for main document loading +function rtwMainOnLoad() { + rtwMainOnLoadFcn(document,null,true, false); + var newUrl; + // modify history state to avoid reload from pressing back + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser() && + typeof window.history.replaceState === "function") { + if (window.location.search.length > 0) { + if (window.location.search.indexOf("loaded=true") === -1) { + newUrl = document.location.pathname + window.location.search + '&loaded=true'; + } else { + newUrl = document.location.pathname + window.location.search; + } + } else { + newUrl = document.location.pathname + window.location.search + '?loaded=true'; + } + window.history.replaceState("","",newUrl); + } +} + +// Helper function for traceability report +function rtwMainReload(location) { + // remove highlight filename and lines before reloading the page + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + rtwMainOnLoadFcn(document,location,true,true); +} + +function rtwMainReloadNoPanel(location) { + rtwMainOnLoadFcn(document,location,false,true); +} + +// Callback for hyperlink "Remove Highlighting" +function rtwRemoveHighlighting() { + if (RTW_TraceInfo.instance) + RTW_TraceInfo.instance.removeHighlighting(); + if (rtwSrcFrame()) { + rtwSrcFrame().focus(); + } + if (hasInCodeTrace()) { + removeInCodeTraceHighlight(); + } +} + +// Display diagnostic message in document frame +function rtwDisplayMessage() { + var docObj = top.rtwreport_document_frame.document; + var msg = docObj.getElementById(RTW_TraceArgs.instance.fMessage); + if (!msg) { + msg = docObj.getElementById("rtwMsg_notTraceable"); + } + if (msg && msg.style) { + msg.style.display = "block"; // make message visible + var msgstr = msg.innerHTML; + // replace '%s' in message with block name + if (top.RTW_TraceArgs.instance) { + var sid = top.RTW_TraceArgs.instance.getBlock(); + if (sid) { + var block = sid; + if (top.RTW_rtwnameSIDMap && top.RTW_rtwnameSIDMap.instance && top.RTW_rtwnameSIDMap.instance.getRtwname(sid)) { + block = top.RTW_rtwnameSIDMap.instance.getRtwname(sid).rtwname; + block = block.replace("<", "<").replace(">", ">"); + } else { + block = sid; + } + if (block) { + msgstr = msgstr.replace("%s", block); + } + } + } + msg.innerHTML = msgstr; + } +} + +function updateHyperlinks() { + docObj = top.rtwreport_document_frame; + if (docObj && docObj.document) { + if (RTW_TraceArgs.instance === null || !RTW_TraceArgs.instance.getUseExternalBrowser()) { + var plain_link = docObj.document.getElementById("linkToText_plain"); + if (plain_link && plain_link.href && plain_link.href.indexOf("matlab:coder.internal.editUrlTextFile") === -1 ) { + plain_link.href = "matlab:coder.internal.editUrlTextFile('" + str2StrVar(plain_link.href) + "')"; + } + var alink = docObj.document.getElementById("linkToCS"); + var linkCmd = "matlab:coder.internal.viewCodeConfigsetFromReport"; + if (alink && alink.href && alink.href.indexOf(linkCmd) === -1) { + alink.href = linkCmd+ "('" + str2StrVar(alink.href) + "');"; + if(alink.style) { + alink.style.display = ""; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) { + hidden_link.style.display = "none"; + } + } + } + } else { + var alink = docObj.document.getElementById("linkToCS"); + if (alink && alink.style) { + alink.style.display = "none"; + hidden_link = docObj.document.getElementById("linkToCS_disabled"); + if (hidden_link) + hidden_link.style.display = ""; + } + if (typeof docObj.document.getElementsByClassName === "function") { + alinks = docObj.document.getElementsByClassName("callMATLAB"); + } else if (typeof docObj.document.getElementsByName === "function") { + alinks = docObj.document.getElementsByName("callMATLAB"); + } else { + alinks = []; + } + alink = docObj.document.getElementById("CodeGenAdvCheck"); + if (alink && alink.href && alink.href.indexOf("externalweb=true")===-1) { + alink.href = alink.href + "?externalweb=true"; + } + + if (typeof docObj.document.getElementsByName === "function") + var objs = docObj.document.getElementsByName("MATLAB_link"); + else + objs = []; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + objs[objIndex].style.display = "none"; + } + } + } + updateCode2ModelLinks(docObj.document); + // modify modelref links + update_modelref_report_link(top.rtwreport_contents_frame.document); + try { + // ignore browser security error + update_modelref_report_link(top.rtwreport_document_frame.document); + } catch(e) {}; +} + +function update_modelref_report_link(docObj) { + if (docObj.getElementsByName) { + var arg = ""; + if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser()) { + arg = "?useExternalBrowser=false"; + } + if (RTW_TraceArgs && RTW_TraceArgs.instance && RTW_TraceArgs.instance.getModel2CodeSrc() != null) { + if (arg.length > 0) + arg = arg + "&model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + else + arg = "?model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); + } + if (arg.length > 0) { + links = docObj.getElementsByName('external_link'); + for (var link_idx = 0; link_idx < links.length; ++link_idx) { + links[link_idx].href = links[link_idx].href + arg; + } + } + } +} + +function rtwResizeFrame(f) { + if (f) { + f.style.height = f.contentWindow.document.body.scrollHeight + "px"; + } +} + +function rtwPageOnLoad(id) { + // highlight toc entry + tocHiliteById(id); + // restore elements state + if (top && top.restoreState) { + if (top.rtwreport_contents_frame && top.rtwreport_contents_frame.document) + top.restoreState(top.rtwreport_contents_frame.document); + if (top.rtwreport_document_frame && top.rtwreport_document_frame.document) { + top.restoreState(top.rtwreport_document_frame.document); + rtwResizeFrame(top.rtwreport_document_frame.document.getElementById("rtwIdContentsIframe")); + } + } + updateHyperlinks(); +} + +// highlight code after changeSys +function rtwChangeSysCallback(sid) { + if (sid == "" || typeof RTW_Sid2UrlHash == "undefined" || !RTW_Sid2UrlHash.instance) + return false; + urlHash = RTW_Sid2UrlHash.instance.getUrlHash(sid); + if (urlHash != undefined) { + if (RTW_TraceArgs && RTW_TraceArgs.instance && + !RTW_TraceArgs.instance.getUseExternalBrowser()) + urlHash = (urlHash == "")? "?useExternalBrowser=false" : + urlHash+"&useExternalBrowser=false"; + rtwMainReload(urlHash, true); + return true; + } else { + // remove highlighting from traceinfo + rtwRemoveHighlighting(); + return false; + } +} + +function emlFileOnload(docObj) { + var loc = docObj.location; + if (loc.hash) { + var line = loc.hash.substring(1); + hiliteEmlLine(docObj, line); + } +} + +function hiliteEmlLine(docObj, line) { + var bgColor; + if (top.HiliteCodeStatus) + bgColor = "#66CCFF"; + else + bgColor = "#E8D152"; + // unhighlight + if (typeof docObj.HiliteLine != "undefined") { + trObj = docObj.getElementById("LN_"+docObj.HiliteLine); + if (trObj != null) { + trObj.style.backgroundColor = ""; + } + } + // hilighlight + trObj = docObj.getElementById("LN_"+line); + if (trObj != null) { + trObj.style.backgroundColor = bgColor; + docObj.HiliteLine = line; + } +} + +function emlLineOnClick(docObj,sid,line) { + if (top) { + top.HiliteCodeStatus = top.rtwChangeSysCallback(sid); + } + hiliteEmlLine(docObj, line); +} + +function updateCode2ModelLinks(docObj) { + var webviewFrame = top.document.getElementById('rtw_webviewMidFrame'); + var link2model = false; + var isTestHarness = false; + if (top.testHarnessInfo && top.testHarnessInfo.IsTestHarness === "1") { + isTestHarness = true; + } + if (webviewFrame || isTestHarness) { + if (webviewFrame && RTW_TraceArgs.instance && + (RTW_TraceArgs.instance.getModel2CodeSrc() !== "model" || + RTW_TraceArgs.instance.getUseExternalBrowser()) + ) { + hiliteCmd = "javascript:top.rtwHilite("; + } else { + hiliteCmd = "matlab:coder.internal.code2model("; + link2model = true; + } + var objs = docObj.getElementsByName('code2model'); + var o = null; + var str = ''; + var sid = ''; + var pattern = "'code2model',"; + for (var objIndex = 0; objIndex < objs.length; ++objIndex) { + o = objs[objIndex]; + str = o.href.substring(o.href.indexOf('(')+1); + if (str.indexOf(pattern) > -1) { + str = str.substring(str.indexOf(pattern) + pattern.length); + } + o.href = hiliteCmd + str; + if (link2model && isTestHarness) { + sid = str.substring(0, str.indexOf(")")); + o.href = hiliteCmd + sid + ",'" + + top.testHarnessInfo.HarnessName+ "','" + + top.testHarnessInfo.HarnessOwner+ "','" + + top.testHarnessInfo.OwnerFileName + "');"; + } + } + } +} + +function rtwHilite(aBlock,aParentSID) { + if (aBlock.indexOf('-') !== -1) { + // remove sid range: model:sid:2-10 => model:sid + var s; + s = aBlock.split(':'); + if (s.length > 0) { + s = s[s.length-1]; + if (s.indexOf('-') != -1) { + aBlock = aBlock.substring(0, aBlock.lastIndexOf(':')); + } + } + } + if (typeof aParentSID === "undefined") { + if (top.RTW_SidParentMap && top.RTW_SidParentMap.instance) + aParentSID = top.RTW_SidParentMap.instance.getParentSid(aBlock); + else + aParentSID = aBlock; + } + top.HiliteCodeStatus = true; + + // webview 2 defines an interface api, call slwebview. + if (top.slwebview) { + // webview 2.x + if (top.codeToWebView(aBlock, aParentSID) === -1) { + alert("Cannot highlight block in model Web view. It may not be exported."); + } + + } else { + // webview 1.x + if (hiliteBlockForRTWReport(aBlock,aParentSID) === false) { + if (hiliteBlockForRTWReport(aBlock, aBlock) === false) { + rtwHilite(aParentSID); + } + } + } +} + +function str2StrVar(str) { + return str.replace(/'/g,"''"); +} +window.onload=rtwMainOnLoad; + +// handle incode traceability highlighting +function inCodeTraceOnload() { + var tocDocObj = top.rtwreport_contents_frame.document; + if (!top.RTW_TraceArgs.instance) { + var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); + top.rtwreport_document_frame.location.href = summaryPage.href; + return; + } + + var files = top.RTW_TraceArgs.instance.getFile(); + if (files.length === 0) { + if (top.RTW_TraceArgs.instance) { + var block = top.RTW_TraceArgs.instance.getBlock(); + block = block.replace("<", "<").replace(">", ">"); + } + top.rtwreport_document_frame.document.write("
    No traceability information for block " + block + ".
    "); + return; + }; + + var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); + RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); + + // update filelist with num of highlighted lines + var tocDoc = top.rtwreport_contents_frame.document; + var tLines = 0; + for (var i=0; i 1) { + var spanNodes = parent.getElementsByTagName('span'); + var len = spanNodes.length; + if (len > 0) { + if (aNumLines > 0) { + /* display number of matches */ + spanNodes.item(len-1).innerHTML = " ("+aNumLines+")"; + } else { + /* clear number of matches */ + spanNodes.item(len-1).innerHTML = ""; + } + } + } +} + +function setupInStudio() { + if (top.whole) { + var tmp = top.whole.rows.split(","); + tmp[0] = "35px"; + top.whole.rows = tmp.join(); + } + if (top.main) { + var tmp = top.main.cols.split(","); + tmp[0] = "0"; + top.main.cols = tmp.join(); + } + // add file list to source file + if (top.Html2SrcLink && top.Html2SrcLink.instance && top.fileSelector) { + var myDoc = top.fileSelector.document; + var fileSelector = myDoc.createElement("select"); + fileSelector.id = "fileSelector"; + fileSelector.onchange = top.fileSelectorOnChange; + var filename; + var filelink; + fileSelector.innerHTML += ""; + for (var i=0; i < top.fileList.length; i++) { + filename = top.fileList[i]; + filelink = top.Html2SrcLink.instance.getLink2Src(filename); + fileSelector.innerHTML += ""; + } + var bodyNode = myDoc.body; + bodyNode.insertBefore(fileSelector, bodyNode.firstElementChild); + var textNode = myDoc.createElement("span"); + textNode.innerHTML = "Goto: "; + bodyNode.insertBefore(textNode, fileSelector); + var myCss = myDoc.createElement("link"); + myCss.type = "text/css"; + myCss.rel = "stylesheet"; + myCss.href = "rtwreport.css"; + myDoc.getElementsByTagName("head")[0].appendChild(myCss); + } +} + +function toggleNavSideBar(val) { + if (top.main) { + var tmp = top.main.cols.split(","); + + if (val === "on") { + tmp[tmp.length-1] = "15px"; + } else { + tmp[tmp.length-1] = "0"; + } + top.main.cols = tmp.join(); + if (top.rtwreport_nav_frame) + top.rtwreport_nav_frame.location.href = "nav.html"; + } +}; + +function toggleNavToolBar(val) +{ + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp1 = midFrame.rows.split(","); + var frameIdx = getNavToolbarFrameIdx(); + if (val === "on") { + tmp1[frameIdx] = "40px"; + } else { + tmp1[frameIdx] = "0"; + } + midFrame.rows = tmp1.join(); + if (top.rtwreport_navToolbar_frame) { + top.rtwreport_navToolbar_frame.location.href = "navToolbar.html"; + } + } +}; + +var GlobalConfig = { + navHiliteColor: "#0000ff", + fileLinkHiliteColor: "#ffff99", + navToolbarBgcolor: "ivory", + offset: 10, + hiliteToken: false +}; +var NavSideBarState = { + calLineHeight: 0, + overLink: false, + linkTarget: null, + lastLinkTarget: null, + linkTargetIdx: 0 +} +function drawNavSideBar() { + var rectHeight = 1; + if (!top || !top.rtwreport_document_frame || !top.rtwreport_nav_frame) return; + + if (!top.RTW_TraceArgs.instance) return; + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(); + if (fileIdx === undefined) return; + var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + if (rows.length === 0) return; // no highlighted line + + var codeTbl = top.rtwreport_document_frame.document.getElementById("codeTbl"); + if (!codeTbl) return; // no code table + + var nRows = codeTbl.rows.length + 1; + var canvas = top.rtwreport_nav_frame.document.getElementById("canvas"); + canvas.width = top.rtwreport_nav_frame.innerWidth; + canvas.height = top.rtwreport_nav_frame.innerHeight-2; + NavSideBarState.calLineHeight = canvas.height/nRows; + if (canvas.getContext) { + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + // fill background + ctx.fillStyle = GlobalConfig.navToolbarBgcolor; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = GlobalConfig.navHiliteColor; + for (var i=0;i" + anchorObj.text + "
  • "+ + size + "
  • "; + } + propObj.appendChild(ulObj); + + return propObj; +} +function getInspectLink(file, pathname, anchorObj) { + var model = top.reportModel; + var tokenId = anchorObj.id; + var navObj = document.createElement("div"); + navObj.id = "token_usage_nav"; + ulObj = document.createElement("ul"); + ulObj.id = "token_nav_links"; + ulObj.className="popup_attrib_list"; + var srcFileName = RTW_TraceInfo.toSrcFileName(file); + var defObj; + if (top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]) { + defObj = top.CodeDefine.instance.def[srcFileName + ":" + anchorObj.text]; + } else if (top.CodeDefine.instance.def[anchorObj.text]) { + defObj = top.CodeDefine.instance.def[anchorObj.text]; + } + var line = anchorObj.id.substring(0,anchorObj.id.indexOf("c")); + // link to model + if (top.TraceInfoFlag && top.TraceInfoFlag.instance && + top.TraceInfoFlag.instance.traceFlag[srcFileName+":"+anchorObj.id]) { + return null; + } + // link to def/decl + if (defObj) { + var filename = defObj.file.split(/\//); + filename = filename[filename.length-1]; + ulObj.innerHTML += "
  • " + anchorObj.text + " defined at " + RTW_TraceInfo.toSrcFileName(filename) + " line " + defObj.line + "
  • "; + } + navObj.appendChild(ulObj); + return navObj; +} + +var LastHiliteTokenId = null; +function rmHiliteClickedToken() { + if (LastHiliteTokenId) { + var o = top.rtwreport_document_frame.document.getElementById(LastHiliteTokenId); + if (o) { + o.className = o.className.replace("hiliteToken", ""); + } + } +} +function hiliteClickedToken(elem) { + rmHiliteClickedToken(); + LastHiliteTokenId = elem.id; + elem.className += " hiliteToken"; +} + +var initLine = null; +function scrollToInitLine() { + if (initLine) { + var lineElem = top.rtwreport_document_frame.document.getElementById(initLine); + if (lineElem) { + lineElem.scrollIntoView(); + } + } +} + +function scrollToLineBasedOnHash(hashValue) { + // move to the current highlight line if the hash is not empty + if (hashValue === "") { + if (top.RTW_TraceInfo.instance && top.RTW_TraceInfo.instance.getCurrLine() !== null) { + top.rtwreport_document_frame.document.location.href=top.RTW_TraceInfo.instance.getCurrentHRef(); + top.initLine = top.rtwreport_document_frame.document.location.hash.substr(1); + } + } else { + // scroll and hilite line + hashValue = hashValue.substr(1); + if (isNaN(hashValue)) { + // #fcn_name + var pattern = "+newPage"; + if (hashValue.indexOf(pattern) != -1) { + hashValue = hashValue.replace(pattern, ''); + var lineElem = top.rtwreport_document_frame.document.getElementById(hashValue); + initLine = hashValue; // save initLine in case the dom is updated later by anootation + if (lineElem) { + lineElem.scrollIntoView(); + addTagToCurrentLine(); + } + + } else { + var token = null; + pattern = ["var_", "fcn_", "type_"]; + for (var i =0; i < pattern.length; i++) { + if (hashValue.indexOf(pattern[i]) === 0) { + token = hashValue.substr(pattern[i].length); + break; + } + } + if (token !== null && top.CodeDefine && top.CodeDefine.instance) { + var addr; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var srcFileName; + if (top.RTW_TraceInfo) { + srcFileName = top.RTW_TraceInfo.toSrcFileName(filename); + } + if (top.CodeDefine.instance.def[srcFileName + ":" + token]) { + addr = top.CodeDefine.instance.def[srcFileName + ":" + token]; + } else { + addr = top.CodeDefine.instance.def[token]; + } + if (addr) { + hilite_line(addr.line); + } + } else { // token id like #line"c"#col + if (hashValue.indexOf("c") !== -1) { + hilite_line(hashValue.substr(0, hashValue.indexOf("c")), hashValue); + } + } + } + } else { // #line + hilite_line(hashValue); + } + } + return false; + // hilite line number and scroll with an offset + function hilite_line(line, tokenId) { + if (isNaN(line)) return; + if (!tokenId) { + tokenId = line; + } + var elem = top.rtwreport_document_frame.document.getElementById(tokenId); + hiliteClickedToken(elem); + initLine = offset_line(line); + scrollToInitLine(); + } +} + +function tokenLinkOnClick(event) { + var alink = event.currentTarget; + if (alink.pathname === top.rtwreport_document_frame.location.pathname) { + event.preventDefault(); + scrollToLineBasedOnHash(alink.hash); + } + return false; +} +function inspectToken(file, pathname, event) { + var height = "70px"; + // show inspect data + if (top.rtwreport_inspect_frame) { + var windowObj = getInspectWindow(); + var propObj = getInspectData(file, event.currentTarget); + var navObj = getInspectLink(file, pathname, event.currentTarget); + if (navObj === null) { + closeInspectWindow(); + return false; + } + if (propObj === null) { + height = "50px"; + } else { + windowObj.appendChild(propObj); + } + windowObj.appendChild(navObj); + var data = top.rtwreport_inspect_frame.document.getElementById("popup_window"); + if (data) { + data.parentNode.replaceChild(windowObj.cloneNode(true), data); + } + } + var offsetHeight = 0; + var docHeight = 0; + if (typeof(top.rtwInspectFrame().document.body.offsetHeight) === "number") { + offsetHeight = top.rtwInspectFrame().document.body.offsetHeight; + } + if (typeof(top.rtwInspectFrame().document.height) === "number") { + docHeight = top.rtwInspectFrame().document.height; + } + if (offsetHeight > 0) { + height = ""+offsetHeight+"px"; + } else if (docHeight > 0) { + height = ""+docHeight+"px"; + } + setInspectWindow(height); + return false; +} +function setInspectWindow(height) { + // show inspect code frame + var midFrame = rtwMidFrame(); + if (midFrame) { + var tmp = midFrame.rows.split(","); + tmp[getInspectFrameIdx()] = height; + midFrame.rows = tmp.join(); + } +} +function closeInspectWindow() { + setInspectWindow(0); + return false; +} + +// set the trace number in the navigation toolbar +function setTraceNumber() { + if (RTW_TraceInfo.instance) { + var aFrame = rtwNavToolbarFrame(); + if (aFrame) { + var node = aFrame.document.getElementById("rtwIdTraceNumber"); + // calculate current line index over total highlighted lines + var currNum = RTW_TraceInfo.instance.getCurrLineIdx(); + for (var idx=0;idx 0) + line = (line > GlobalConfig.offset ? line - GlobalConfig.offset : 1); + return line; +} + +function load_js(frame, file) { + var h = frame.document.getElementsByTagName("head")[0]; + var o = h.getElementsByTagName('script'); + for (var i=0;iBlock-to-Code Highlighting Message + + + +

    Block-to-Code Highlighting Message

    + + \ No newline at end of file diff --git a/src/validation/slprj/ert/FCC_New/html/rtwreport.css b/src/validation/slprj/ert/FCC_New/html/rtwreport.css new file mode 100644 index 0000000..54b994a --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/rtwreport.css @@ -0,0 +1,257 @@ +/* Copyright 2011-2016 The MathWorks, Inc. */ +body,p,table {font-family: calibri, verdana, sans-serif;} +button,.buton {font-family: calibri, verdana, sans-serif;} +button,.button {font-size: small;} +.small_font {font-size: small;} +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } +input { font-family: sans-serif, verdana, calibri; } +table { + background-color: #ffffff; + width: 100%; +} + +table.toc, table.button, table.panel { + border-style: none; +} + +/* LineNumber */ +.LN { + font-style: italic; + color: #888888; +} + +/* Comment */ +.CT { + font-style: italic; + color: #117755; +} + +/* PreProcessor */ +PP { + /* font-weight: bold; */ + color: #992211; +} + +/* Keyword */ +.KW { + /* font-weight: bold; */ + color: #0000FF; +} + +/* Datatype */ +.DT { + /* font-weight: bold; */ + color: #112266 +} + +.highlighted { + background-color: yellow; +} + +.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} + +input.search { + background-color: #ffffff; +} + +input.failedSearch { + background-color: #F78181; +} + +/* ensure that code2model links are comment green */ +a.code2model:link { + color: #117755; + font-style: italic; +} +a.code2model:visited{ + color: #117755; + font-style: italic; +} + +.toc td, .button td, .panel td { + border-style: none; + padding: 4px; +} + +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } + +/******* table *******/ +/* default table style */ +table.AltRow { + border-collapse: collapse; border: none; border-spacing: 0pt; + border-top: solid #4F81BD 1.0pt; border-bottom: solid #4F81BD 1.0pt; +} +table.AltRow th, table.AltRow td { padding: 2pt 8pt 2pt 2pt } +/* default alternating row style */ +table.AltRow tr.even td { background-color:#D3DFEE; border:none;} +table.AltRow tr.odd td { background-color:#FFFFFF; border:none;} +/* tr class="heading" */ +table.AltRow tr.heading td, table.AltRow th { + background-color:#FFFFFF; font-weight:bold; border:none; + border-bottom: solid #4F81BD 1.0pt; +} +/* table class="FirstColumn" */ +table.FirstColumn td:first-child { font-weight:bold } +/* table class="TotalRow" */ +table.TotalRow tr:last-child { font-weight:bold } +table.TotalRow tr:last-child td { border-top: solid #4F81BD 1.0pt } + +a.closeButton { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) ); + background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9'); + background-color:#f9f9f9; + -webkit-border-top-left-radius:20px; + -moz-border-radius-topleft:20px; + border-top-left-radius:20px; + -webkit-border-top-right-radius:20px; + -moz-border-radius-topright:20px; + border-top-right-radius:20px; + -webkit-border-bottom-right-radius:20px; + -moz-border-radius-bottomright:20px; + border-bottom-right-radius:20px; + -webkit-border-bottom-left-radius:20px; + -moz-border-radius-bottomleft:20px; + border-bottom-left-radius:20px; + text-indent:0; + border:2px solid #dcdcdc; + display:inline-block; + color:#454143; + font-family:Arial; + font-size:15px; + font-weight:bold; + font-style:normal; + height:20px; + line-height:20px; + width:20px; + text-decoration:none; + text-align:center; + cursor: pointer; +} +a.closeButton:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) ); + background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9', endColorstr='#f9f9f9'); + background-color:#e9e9e9; +} +a.closeButton:active { + position:relative; + top:1px; +} + +.button { + -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; + -webkit-border-top-left-radius:5px; + -moz-border-radius-topleft:5px; + border-top-left-radius:5px; + -webkit-border-top-right-radius:5px; + -moz-border-radius-topright:5px; + border-top-right-radius:5px; + -webkit-border-bottom-right-radius:5px; + -moz-border-radius-bottomright:5px; + border-bottom-right-radius:5px; + -webkit-border-bottom-left-radius:5px; + -moz-border-radius-bottomleft:5px; + border-bottom-left-radius:5px; + text-indent:0px; + border:1px solid #dcdcdc; + display:inline-block; + color:black; + font-family:Arial; + font-size:12px; + font-weight:bold; + font-style:normal; + height:12px; + line-height:12px; + width:45px; + text-decoration:none; + text-align:center; + text-shadow:1px 1px 0px #ffffff; +} +.button:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) ); + background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed'); + background-color:#dfdfdf; +}.button:active { + position:relative; + top:1px; +}.button:disabled { + color:#777777; +} + +ul.nav_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.nav_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} + +.nav_toolbar { + background-color: ivory; + margin-top: 0; +} + +.inspect_body { + margin: 0; + margin-bottom: 0; + display: inline; + vertical-align:middle; +} + +table.nav_table { + background-color: ivory; + border: none; + width: 100%; + display: inline; + vertical-align:middle; +} + +table#rtwIdTracePanel > tr > td { + white-space: nowrap; + table-layout:fixed; + vertical-align:middle; +} + +table.nav_table > button { + height: 20px; +} +select#fileSelector { + padding: 5px; + font-size: 16px; + line-height: 1; + border-radius: 0; + height: 34px; +} + +.treeTable table{ + table-layout: fixed; +} +.treeTable td:first-child > span{ + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + width: 100%; +} diff --git a/src/validation/slprj/ert/FCC_New/html/rtwreport_utils.js b/src/validation/slprj/ert/FCC_New/html/rtwreport_utils.js new file mode 100644 index 0000000..f58fb49 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/rtwreport_utils.js @@ -0,0 +1,92 @@ +// Copyright 2011-2013 The MathWorks, Inc. + + +function local_onload() { + if (typeof top.rtwreport_document_frame !== "undefined") { + var docObj = window.document; + var alink = docObj.getElementById("linkToText_plain"); + if (alink) { + alink.href = "matlab:coder.internal.editUrlTextFile('" + alink.href + "')"; + } + alink = docObj.getElementById("linkToCS"); + if (alink) { + alink.href = "matlab:coder.internal.viewCodeConfigsetFromReport('" + alink.href + "');"; + } + } +} + +var utils = (function() { + + // Load via Microsoft.XMLDOM--for older versions of IE + function loadXML_MSXMLDOM(filename, callback, async) { + if (navigator.appName == "Microsoft Internet Explorer") { + // Internet Explorer 5/6 + try { + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = async; + xmlDoc.onreadystatechange = function() { + if (xmlDoc.readyState == 4) { + callback(xmlDoc); + } + } + xmlDoc.load(filename); + return true; + } catch(e) { + } + } + return false; + } + + // Load via XMLHttpRequest + function loadXML_XHR(filename, callback, async) { + if (window.XMLHttpRequest) { + try { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + callback(this.responseXML); + } + } + xhr.open("GET", filename, async); + xhr.send(""); + return true; + } catch(e) { + if (navigator.appName === "Netscape" && e.code === 1012) { + // file not found: ignore + return true; + } + } + } + return false; + } + + return { + trimText: function(s) { + // In IE9, String.trim not present + if (s && s.trim) { + return s.trim(); + } + else { + return s; + } + }, + getText: function(elt) { + // In IE9, use 'text' property rather than 'textContent' + return elt.textContent ? elt.textContent : elt.text; + }, + loadXML: function(filename, callback, options) { + var async = !!options && typeof(options["async"]) !== "undefined" ? options.async : true; + if (!loadXML_XHR(filename, callback, async)) { + if (!loadXML_MSXMLDOM(filename, callback, async)) { + return false; + } + } + return true; + } + }; +})(); + +function code2model(sid) { + utils.loadXML("http://localhost:31415/matlab/feval/coder.internal.code2model?arguments=[\"" + sid + "\"]", function() {}); + //window.location.href = "matlab:coder.internal.code2model('" + sid + "')"; +} diff --git a/src/validation/slprj/ert/FCC_New/html/rtwshrink.js b/src/validation/slprj/ert/FCC_New/html/rtwshrink.js new file mode 100644 index 0000000..8e2affb --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/rtwshrink.js @@ -0,0 +1,210 @@ +// Copyright 2011-2017 The MathWorks, Inc. + +function RTW_STRUCT(prop, value) { + this.prop = prop; + if (typeof(value) == 'undefined') { + this.value = ""; + } else { + this.value = value; + } +} + +// initialize the cache when code generation report is first loaded +function RTW_BOOK() { + this.length = 0; + this.rtw_pages = new Array(); + this.getPage = function(file) { + return this.rtw_pages[file]; + }; + this.addPage = function(file) { + var page; + if (this.hasPage(file)) { + page = this.rtw_pages[file]; + } else { + page = new RTW_PAGE(file); + this.rtw_pages[file] = page; + } + return page; + }; + this.hasPage = function(file) { + return typeof(this.rtw_pages[file]) != 'undefined'; + }; + this.removePage = function(file) { + var tmp; + if (typeof(this.rtw_pages[file]) != 'undefined') { + tmp = this.rtw_pages[file]; + delete this.rtw_pages[file]; + this.length--; + } + return tmp; + }; +} + +if (!RTW_BOOK.instance) { + RTW_BOOK.instance = new RTW_BOOK(); +} + +function RTW_PAGE() { + this.length = 0; + this.items = new Array(); + this.pagename = ''; + if (arguments.length > 0 && typeof(arguments[1]) != 'undefined') { + this.pagename = arguments[1]; + } + + this.getItem = function(id) { + return this.items[id]; + }; + this.getItems = function() { + return this.items; + }; + this.addItem = function(id, value) { + var tmp; + if (typeof(value) != 'undefined') { + if (typeof(this.items[id]) != 'undefined') { + this.length++; + } else { + tmp = this.items[id]; + } + this.items[id] = value; + this.length++; + } + return tmp; + }; + this.hasItem = function(id) { + return typeof(this.items[id]) != 'undefined'; + }; + this.removeItem = function(id) { + var tmp; + if (typeof(this.items[id]) != 'undefined') { + tmp = this.items[id]; + delete this.items[id]; + this.length--; + } + return tmp; + }; +} + +function rtwTableShrink(doc, obj, id, isSymbol) { + var hide, hide_text, show, show_text; + if (isSymbol) { + hide = "[-]"; + hide_text = hide; + show = "[+]"; + show_text = show; + } else { + hide = "[hide]"; + hide_text = "[hide]"; + show = "[show]"; + show_text = "[show]"; + } + hide = "" + hide + ""; + show = "" + show + ""; + if (doc.getElementsByName) { + var o = doc.getElementsByName(id); + for (var oid = 0; oid < o.length; ++oid) { + if (o[oid].style.display === "none") { + o[oid].style.display = ""; + } else { + o[oid].style.display = "none"; + } + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } + + // IE supports innerText while other browsers support textContent + if (obj.textContent) { + var objText = obj.textContent; + } else { + var objText = obj.innerText; + } + + if (objText.toLowerCase() === show_text.toLowerCase()) { + obj.innerHTML = hide; + } else { + obj.innerHTML = show; + } + + if (addToPage) { + addToPage(doc, obj, 'innerHTML'); + } +} + +function rtwTableExpand(doc, controlObj, id) { + if (doc.getElementById) { + var obj = doc.getElementById(id); + if (obj && obj.style.display === "none") { + rtwTableShrink(doc, controlObj, id, false); + } + } +} + +function restoreState(docObj) { + var filename = docObj.location.href; + if (RTW_BOOK.instance && RTW_BOOK.instance.hasPage(filename)) { + var page = RTW_BOOK.instance.getPage(filename); + var items = page.getItems(); + var elem; + if (docObj.getElementsByName) { + for (var i in items) { + var o = docObj.getElementsByName(i); + for (var oid = 0; oid < o.length; ++oid) { + elem = o[oid]; + if (items[i].prop === 'display') { + if (elem.style.display === 'none') { + elem.style.display = ''; + } else { + elem.style.display = 'none'; + } + } else if (items[i].prop === 'innerHTML') { + elem.innerHTML = items[i].value; + } + } + } + } + } +} + +function addToPage(docObj, obj, prop) { + var filename = docObj.location.href; + if (RTW_BOOK.instance) { + var page; + if (RTW_BOOK.instance.hasPage(filename)) { + page = RTW_BOOK.instance.getPage(filename); + } else { + page = RTW_BOOK.instance.addPage(filename); + } + if (page.hasItem(obj.id)) { + page.removeItem(obj.id); + } else { + var my_struct; + if (prop === "display") { + my_struct = new RTW_STRUCT(prop, obj.style.display); + } else { + my_struct = new RTW_STRUCT(prop, obj.innerHTML); + } + page.addItem(obj.id, my_struct); + } + } +} + +function rtwSwitchView(doc, obj1, obj2) { + if (doc.getElementsByName) { + var o = doc.getElementsByName(obj1); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = "none"; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + var o = doc.getElementsByName(obj2); + for (var oid = 0; oid < o.length; ++oid) { + o[oid].style.display = ""; + } + if (o.length >= 0 && addToPage) { + addToPage(doc, o[0], 'display'); + } + } +} diff --git a/src/validation/slprj/ert/FCC_New/html/search.js b/src/validation/slprj/ert/FCC_New/html/search.js new file mode 100644 index 0000000..816380f --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/html/search.js @@ -0,0 +1,559 @@ +// Copyright 2007-2012 The MathWorks, Inc. + +function createHighlightSpanStart(num) +{ + return ""; +} + +var str2pos; // This is a map between a tag stripped string and the original string. +function getTagStrippedStringAndMap(aString) +{ + var tagStrippedString = new String(); + + str2pos = new Array(); + + var inTag = false; + var inScript = false; + + for (var strPos = 0; strPos < aString.length; strPos++) { + if (inTag && aString.charAt(strPos) == '>') { + inTag = false; + if (inScript && (strPos > 8) && (aString.slice(strPos, strPos - 8) == '/script>')) { + inScript = false; + } + continue; + } else if (!inTag && aString.charAt(strPos) == '<') { + inTag = true; + if (!inScript && aString.slice(strPos, strPos + 7) == ' str2posprev+1) // we have jumped some text, so there must be a tag + { + // insert end tag + newText += highlightEndTag; + + // insert intermediate body text tags + newText += bodyText.slice(str2posprev+1, str2pos[cnt]); + + // insert start tag + newText += highlightStartTag; + } + newText += bodyText.charAt(str2pos[cnt]); + str2posprev=str2pos[cnt]; + } + + // insert end + newText += highlightEndTag; + return newText; + +} + +// check to see if the sequence at position 'i' in taglessString is actually in +// the middle of an escape sequence. We assume escape sequences follow the pattern +// &;. We check for  , <, > and & +function isInEscapedSequence(i, taglessString, searchTerm) +{ + var escapeSeq = / |<|>|&/gi; + var maxEscapeSeqLength = 6; + var startPos = 0; + var endPos = 0; + + // exit if the search term has an escape sequence inside it + if (escapeSeq.test(searchTerm)) { + return false; + } + + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + // go back in the string until we find an ampersand or we hit maxEscapeSeqLength characters + tempI = i; + var bFound = false; + while (tempI >= 0 && tempI > (i-maxEscapeSeqLength)) { + if (taglessString.charAt(tempI) == "&") { + startPos = tempI; + bFound = true; + break; + } + tempI = tempI-1; + + // if we hit a ';' in any position other than the first while searching + // for an ampersand, then we cannot be inside an escape sequence + if (tempI >= 0 && taglessString.charAt(tempI) == ";") { + return false; + } + } + if (!bFound) { + return false; + } + // reset the escape sequence + escapeSeq = / |<|>|&/gi; + + var subString = taglessString.substring(startPos, startPos + maxEscapeSeqLength); + return escapeSeq.test(subString); +} + +// Adds highlighting to bodyText around searchTerm. Case sensitivity is optional. +// hitCount is used to a) count the number of search matches and b) Generate unique +// name strings for each highlighting SPAN element. +function addHighlight(bodyText, searchTerm, caseSensitive, hitCount) +{ + var highlightStartTag = ""; + var highlightEndTag = ""; + + var newText = ""; + var i = 0; + var previ = 0; + var bodyTextUC = bodyText.toUpperCase(); + + if (caseSensitive) { + var taglessString = getTagStrippedStringAndMap(bodyText); + } else { + var taglessString = getTagStrippedStringAndMap(bodyTextUC); + } + + // escape the search term in case the user input '<' or '>' etc + searchTerm = escapeSpecialChars(searchTerm); + + if (!caseSensitive) { + var searchTermUC = searchTerm.toUpperCase(); + } + + // search for subsequent matches + while (true) { + if (caseSensitive) { + i = taglessString.indexOf(searchTerm, i); + } else { + i = taglessString.indexOf(searchTermUC, i); + } + if (i < 0) break; + + // we have a match! + + // make sure that the match is not inside an escaped sequence of text + // such as   + if (isInEscapedSequence(i, taglessString, searchTerm)) { + i=i+1; + continue; + } + + // insert highlight tags that cross tag boundaries + highlightStartTag = createHighlightSpanStart(hitCount); + hitCount = hitCount+1; + newText += insertHighlighting(bodyText, previ, i, searchTerm.length, highlightStartTag, highlightEndTag); + previ = str2pos[i+searchTerm.length-1]+1; + + i = i + searchTerm.length; + } + + newText += bodyText.slice(previ, bodyText.length); + return [newText, hitCount]; +} + +function removeHighlight(bodyText) +{ + // We use regular expressions here rather than a straight text search because + // some browsers actually insert double quotes and capitalize. Also, each highlight + // name is uniquely numbered in order of discovery + var highlightStartTag = //i; + var highlightEndTag = /<\/span>/i; + + var newText = ""; + + var startPatternFirstIndex = -1; + var startPatternLastIndex = -1; + + var endPatternFirstIndex = -1; + var endPatternLastIndex = -1; + + while (highlightStartTag.test(bodyText) === true) { + startPatternFirstIndex = bodyText.search(highlightStartTag); + newText += bodyText.substring(0, startPatternFirstIndex); + startPatternLastIndex = bodyText.indexOf('>', startPatternFirstIndex+1); + + bodyText = bodyText.substr(startPatternLastIndex+1); + endPatternFirstIndex = bodyText.search(highlightEndTag); + newText += bodyText.substring(0, endPatternFirstIndex); + endPatternLastIndex = endPatternFirstIndex+7; + + bodyText = bodyText.substr(endPatternLastIndex); + } + if (startPatternFirstIndex < 0) { + return bodyText; + } else { + return newText+bodyText; + } +} + +function removeHighlightInAllDocs() +{ + if (top) { + for (var i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + if (typeof currentDoc.body !== "undefined" && currentDoc.body !== null) + currentDoc.body.innerHTML=removeHighlight(currentDoc.body.innerHTML); + } + } + } +} + +function findInDoc(searchStringFromSubmitBox, doc, caseSensitive, hitCount) +{ + var searchBody = doc.body.innerHTML; + // if the document is empty, or the documents is invalid, return + if (!doc.body || typeof(searchBody) === "undefined") { + return [false, hitCount]; + } + + // inject highlighting code into html + var result = addHighlight(searchBody, searchStringFromSubmitBox, caseSensitive, hitCount); + doc.body.innerHTML = result[0]; + + return [true, result[1]]; +} + +var currentlyHighlightedHit; + +function getSpansByName(name) +{ + var allSpans = []; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var currentDoc = top.frames[i].document; + var highlightedSpans = currentDoc.getElementsByName(name); + if (highlightedSpans && highlightedSpans.length && highlightedSpans.length > 0) { + for (j = 0; j < highlightedSpans.length; j++) { + allSpans = allSpans.concat(highlightedSpans[j]); + } + } + } + } + return allSpans; +} + +function isVisibleElement(elementID) +{ + if (elementID) + return elementID.offsetWidth > 0 || elementID.offsetHeight > 0; + else + return false; +} + +function areAllSpansVisible(spans) +{ + isVisible = true; + for (i = 0; i < highlightedSpans.length; i++) { + isVisible = isVisible && isVisibleElement(highlightedSpans[i]); + } + return isVisible; +} + +function getNextVisible() +{ + var isVisible = false; + var foundVisible = false; + while (!isVisible) { + currentlyHighlightedHit = currentlyHighlightedHit + 1; + highlightedSpans = setCurrentSearchMatchIfVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + isVisible = true; + } else if (currentlyHighlightedHit < totalHits) { + continue; + } else { + // we have reached the end + isVisible = false; + currentlyHighlightedHit = 0; + highlightedSpans = null; + break; + } + } + + return highlightedSpans; +} + +function clearCurrentSearchMatch() +{ + // clear prior highlighting + spanName = "highlight" + currentlyHighlightedHit; + highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (highlightedSpans[i]) { + highlightedSpans[i].setAttribute("class", "highlighted"); + } + } + } +} + +function setCurrentSearchMatchIfVisible(hitNum){ + currentlyHighlightedHit = hitNum; + var spanName = "highlight" + currentlyHighlightedHit; + var highlightedSpans = getSpansByName(spanName); + if (highlightedSpans && highlightedSpans.length) { + for (i = 0; i < highlightedSpans.length; i++) { + if (!isVisibleElement(highlightedSpans[i])) { + highlightedSpans = null; + break; + } + } + } + return highlightedSpans; +} + +// this takes in an option integer 'hitNum'. If not specified, it scrolls +// to the next hit +function scrollToNextHit(hitNum) +{ + var i = 0; + var found = false; + var spanName = ""; + var highlightedSpans; + var searchBox = findElement('searchTxtBox'); + + clearCurrentSearchMatch(); + + if (hitNum) { + // if a number is provided, use it + highlightedSpans = setCurrentSearchMatchIfVisible(hitNum); + } else { + // start working on next element to highlight + highlightedSpans = getNextVisible(); + } + + // we found the current + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + + // if highlightedSpans is invalid, then we did not find any valid, visible subsequent matches + // wrap to beginning or indicate no matches + } else { + // Element not found. Scroll to first visible element + currentlyHighlightedHit = 0; + var highlightedSpans = getNextVisible(currentlyHighlightedHit); + if (highlightedSpans && highlightedSpans.length > 0) { + highlightedSpans[0].scrollIntoView(); + for (i = 0; i < highlightedSpans.length; i++) { + highlightedSpans[i].setAttribute("class", "highlightedCurrent"); + } + searchBox.setAttribute("class", "search"); + } else { + // there aren't any matches + searchBox.setAttribute("class", "failedSearch"); + } + } +} + +// find search box +function findElement(element) +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") { + var elem = top.frames[i].document.getElementById(element); + if (elem) { + return elem; + } + } + } +} + +// Restore search term once form is submitted +function initSearchBox(strInitValue) +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.value = strInitValue; + } +} + +// Sets focus back on to the text box +function setFocusOnTxtBox() +{ + var txtBox = findElement('searchTxtBox'); + if (txtBox) { + txtBox.focus(); + txtBox.select(); + } + return txtBox; +} + +var previousSearchString; +var totalHits; +function findInAllDocs(searchStringFromSubmitBox, caseSensitive) +{ + if (previousSearchString != searchStringFromSubmitBox) { + // If the search string has changed or a new page has been loaded, do a new search + var hitCount = 1; + var i = 0; + var success = false; + previousSearchString = searchStringFromSubmitBox; + + // start by removing traceinfo highlighting + rtwRemoveHighlighting(); + + // remove all previous search highlighting + removeHighlightInAllDocs(); + + // 1. Iterate through all frames in window and search + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + + // if we have no search term, restore + if (searchStringFromSubmitBox !== "") { + // search and highlight in all frames + var srchResult = findInDoc(searchStringFromSubmitBox, currentDoc, caseSensitive, hitCount); + hitCount = srchResult[1]; + totalHits = srchResult[1]; + } + } + + // 2. Restore search term once form is submitted and text highlighted + if (searchStringFromSubmitBox != "") { + strInitValue = searchStringFromSubmitBox; + } + initSearchBox(strInitValue); + + // 3. Scroll to the first hit encountered + scrollToNextHit(1); + + // 4. Set focus back to text box and select text + var txtBox = setFocusOnTxtBox(); + if (txtBox) { + txtBox.select(); + } + + } else { + // If the search string is the same, then scroll to the next + // hit if the hit is valid. Else wrap back. + scrollToNextHit(); + } + return false; +} + +// if the search box is empty, clear highlighting +function clearIfEmpty() +{ + txtBox = findElement('searchTxtBox'); + if (txtBox.value == "") { + txtBox.setAttribute("class", "search"); + removeHighlightInAllDocs(); + previousSearchString=""; + setFocusOnTxtBox(); + } +} + +function keyPressSwitchyard(keyPressEvent) +{ + var kc; + keyPressEvent = (keyPressEvent == null ? window.keyPressEvent : keyPressEvent); + + // typically IE does not support this + if (!keyPressEvent || (typeof keyPressEvent == "undefined")) { + return; + } + + if (keyPressEvent.keyCode) { + kc=keyPressEvent.keyCode; + } else if (keyPressEvent.which) { + kc=keyPressEvent.which; + } else { + return; + } + + // we do not care about the browser find appearing. If it does appear, then + // we are running an external browser and that is okay. + + // handle Ctrl-Key combinations + if (keyPressEvent.ctrlKey) { + switch (kc) { + case 70: // Ctrl-F + { + setFocusOnTxtBox(); + break; + } + + default: break; + } + } +} + +function installDocumentKeyPressHandler() +{ + var i = 0; + for (i = 0; i < top.frames.length; i++) { + var currentDoc = top.frames[i].document; + currentDoc.onkeydown = keyPressSwitchyard; + } + top.document.onkeydown = keyPressSwitchyard; + + // This also clears search related highlighting + removeHighlightInAllDocs(); + currentlyHighlightedHit = 0; + if (previousSearchString) initSearchBox(previousSearchString); + previousSearchString = ""; +} + +// This function is a onresize callback for the rtwreport_contents_frame +// It is used to dynamically resize the searchbox based on the size of the frame. +function setWidthDynamic(frameID, elementID, extraSpace, minSize) +{ + var frame = document.getElementById(frameID); + + // sanity check input args + if (frame && extraSpace > 0 && minSize > 0) { + var frameWidth = frame.scrollWidth; + var newSize = extraSpace + minSize + 40; // 40 is the extra whitespace + var element = findElement(elementID); + if (element) + { + if (frameWidth < newSize) { + element.style.width = minSize; + } else { + element.style.width = frameWidth - extraSpace - 40; + } + } + } +} diff --git a/src/validation/slprj/ert/FCC_New/html/spinner.gif b/src/validation/slprj/ert/FCC_New/html/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4ab78302c5d6ff92def7688c291999a4fcbd70d GIT binary patch literal 4178 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 mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_New.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_New.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/slprj/ert/FCC_New/instrumented/FCC_New.mk b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New.mk new file mode 100644 index 0000000..bb369d2 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New.mk @@ -0,0 +1,414 @@ +########################################################################### +## Makefile generated for Simulink model 'FCC_New'. +## +## Makefile : FCC_New.mk +## Generated on : Thu Jul 16 18:51:21 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./FCC_New_rtwlib.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# MODELREF_LINK_RSPFILE Linker command listing model reference link objects +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = FCC_New +MAKEFILE = FCC_New.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../.. +MODELREF_LINK_RSPFILE = FCC_New_ref.rsp +COMPILER_COMMAND_FILE = FCC_New_comp.rsp +CMD_FILE = FCC_New.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = FCC_New_rtwlib.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./FCC_New_rtwlib.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=0 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=FCC_New -DNUMST=2 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/slprj/ert/FCC_New/FCC_New.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = FCC_New.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +MODELREF_LIBS = D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_rtwlib.lib + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/FCC_New/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/FCC_New/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : ../%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : ../%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +FCC_New.obj : $(START_DIR)/slprj/ert/FCC_New/FCC_New.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/slprj/ert/FCC_New/instrumented/FCC_New.rsp b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New.rsp new file mode 100644 index 0000000..e3cf028 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New.rsp @@ -0,0 +1 @@ +FCC_New.obj diff --git a/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_comp.rsp b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_comp.rsp new file mode 100644 index 0000000..3d815f9 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_comp.rsp @@ -0,0 +1,10 @@ +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl +-ID:/Documents/SCHOOL/McSCert/do178/src/validation +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/FCC_New +-ID:/Program\ Files/MATLAB/R2020a/extern/include +-ID:/Program\ Files/MATLAB/R2020a/simulink/include +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/src/ext_mode/common +-ID:/Program\ Files/MATLAB/R2020a/rtw/c/ert +-ID:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/_sharedutils diff --git a/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_ref.rsp b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_ref.rsp new file mode 100644 index 0000000..7f03cbb --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/instrumented/FCC_New_ref.rsp @@ -0,0 +1,2 @@ +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/instrumented/AHRSControl_rtwlib.lib +D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/instrumented/ActuatorControl_rtwlib.lib diff --git a/src/validation/slprj/ert/FCC_New/instrumented/buildInfo.mat b/src/validation/slprj/ert/FCC_New/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..2c03921d9420dda2d2d7eeb03c479b89fe7422f5 GIT binary patch literal 15486 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/instrumented/defines.txt b/src/validation/slprj/ert/FCC_New/instrumented/defines.txt new file mode 100644 index 0000000..da3c27e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=FCC_New +NUMST=2 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/FCC_New/instrumented/instrumentationInfo.mat b/src/validation/slprj/ert/FCC_New/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..7b85ac63f1ebe58186894c66220d262576f55d8a GIT binary patch literal 717 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSOp|8$ce3H9dIQV<0;Y{jGp;TuH~Z42 z%zU^x>G96|hA&M!|Euj`x|q2xf4&tH!|{`e7eJnNgL~S8A<0bP8AFm98%ILxr^E)q z4%P+>i>*skjP>{4uv9j++`YqO`qakOMqw>|mLqaMf8MO?+_{p+fHmMR!yOskZjfnC zaML)TrqzK>lbpDLMZo&`@+G^LKU*rMIxXed^U7sQo=r_zmby&rqtn&N||maD!hI0b>W{TWrl5!M2tbkN8&M_8LRPI wOxW1`7R+ICd9Ahn7;7I754V^2Y#WwKJmKmaWZ5q9#mS%2w_sv8_CjP50L57!CIA2c literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/instrumented/profiling_info.mat b/src/validation/slprj/ert/FCC_New/instrumented/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..db0e4330cca20fa1315dbe272d9e8602a8b50b91 GIT binary patch literal 368 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSnGlgdj zmlO_gJw42zEby7Ru&>&$E-1+_Agd~^&@)h#SvW+Fq4_e~43I_>G>r^NZfqP0t)CJZ zRP=a`ocy_y^=IYEN>#^|FJ~TAb)C8LXhJ2!ln{<${FZVv6nfS*`e#LE!EFUu+Vy~4 z9i-6;Zs`ZGYZ;R2z?Mo*+`u59{(Sk8UCW;>6;qv-^6Yu#vJXyI@7g6>t=t@XR*>O_ H7}o;;v^8 mlEnv.txt +for /f %%a in (mlEnv.txt) do set "%%a"\n +cd . + +if "%1"=="" ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_New.mk all) else ("D:\Program Files\MATLAB\R2020a\bin\win64\gmake" MATLAB_ROOT=%MATLAB_ROOT% ALT_MATLAB_ROOT=%ALT_MATLAB_ROOT% MATLAB_BIN=%MATLAB_BIN% ALT_MATLAB_BIN=%ALT_MATLAB_BIN% -f FCC_New.mk %1) +@if errorlevel 1 goto error_exit + +exit 0 + +:error_exit +echo The make command returned an error of %errorlevel% +exit 1 diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.mk b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.mk new file mode 100644 index 0000000..3313a09 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.mk @@ -0,0 +1,414 @@ +########################################################################### +## Makefile generated for Simulink model 'FCC_New'. +## +## Makefile : FCC_New.mk +## Generated on : Thu Jul 16 18:55:26 2020 +## MATLAB Coder version: 5.0 (R2020a) +## +## Build Info: +## +## Final product: ./FCC_New_rtwlib.lib +## Product type : static library +## Build type : Model Reference Library +## +########################################################################### + +########################################################################### +## MACROS +########################################################################### + +# Macro Descriptions: +# PRODUCT_NAME Name of the system to build +# MAKEFILE Name of this makefile +# MODELREF_LINK_RSPFILE Linker command listing model reference link objects +# COMPILER_COMMAND_FILE Compiler command listing model reference header paths +# CMD_FILE Command file +# MODELLIB Static library target + +PRODUCT_NAME = FCC_New +MAKEFILE = FCC_New.mk +MATLAB_ROOT = D:/Program Files/MATLAB/R2020a +MATLAB_BIN = D:/Program Files/MATLAB/R2020a/bin +MATLAB_ARCH_BIN = $(MATLAB_BIN)/win64 +MASTER_ANCHOR_DIR = +START_DIR = D:/Documents/SCHOOL/McSCert/do178/src/validation +SOLVER = +SOLVER_OBJ = +CLASSIC_INTERFACE = 0 +TGT_FCN_LIB = ISO_C +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS = 0 +RELATIVE_PATH_TO_ANCHOR = ../../../../../.. +MODELREF_LINK_RSPFILE = FCC_New_ref.rsp +COMPILER_COMMAND_FILE = FCC_New_comp.rsp +CMD_FILE = FCC_New.rsp +C_STANDARD_OPTS = -fwrapv +CPP_STANDARD_OPTS = -fwrapv +MODELLIB = FCC_New_rtwlib.lib + +########################################################################### +## TOOLCHAIN SPECIFICATIONS +########################################################################### + +# Toolchain Name: MinGW64 | gmake (64-bit Windows) +# Supported Version(s): 6.x +# ToolchainInfo Version: 2020a +# Specification Revision: 1.0 +# +#------------------------------------------- +# Macros assumed to be defined elsewhere +#------------------------------------------- + +# C_STANDARD_OPTS +# CPP_STANDARD_OPTS +# MINGW_ROOT +# MINGW_C_STANDARD_OPTS + +#----------- +# MACROS +#----------- + +WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wstrict-prototypes -Wnested-externs -Wpointer-arith -Wcast-align +WARN_FLAGS_MAX = $(WARN_FLAGS) -Wcast-qual -Wshadow +CPP_WARN_FLAGS = -Wall -W -Wwrite-strings -Winline -Wpointer-arith -Wcast-align +CPP_WARN_FLAGS_MAX = $(CPP_WARN_FLAGS) -Wcast-qual -Wshadow +MW_EXTERNLIB_DIR = $(MATLAB_ROOT)/extern/lib/win64/mingw64 +SHELL = %SystemRoot%/system32/cmd.exe + +TOOLCHAIN_SRCS = +TOOLCHAIN_INCS = +TOOLCHAIN_LIBS = -lws2_32 + +#------------------------ +# BUILD TOOL COMMANDS +#------------------------ + +# C Compiler: GNU C Compiler +CC_PATH = $(MINGW_ROOT) +CC = "$(CC_PATH)/gcc" + +# Linker: GNU Linker +LD_PATH = $(MINGW_ROOT) +LD = "$(LD_PATH)/g++" + +# C++ Compiler: GNU C++ Compiler +CPP_PATH = $(MINGW_ROOT) +CPP = "$(CPP_PATH)/g++" + +# C++ Linker: GNU C++ Linker +CPP_LD_PATH = $(MINGW_ROOT) +CPP_LD = "$(CPP_LD_PATH)/g++" + +# Archiver: GNU Archiver +AR_PATH = $(MINGW_ROOT) +AR = "$(AR_PATH)/ar" + +# MEX Tool: MEX Tool +MEX_PATH = $(MATLAB_ARCH_BIN) +MEX = "$(MEX_PATH)/mex" + +# Download: Download +DOWNLOAD = + +# Execute: Execute +EXECUTE = $(PRODUCT) + +# Builder: GMAKE Utility +MAKE_PATH = %MATLAB%/bin/win64 +MAKE = "$(MAKE_PATH)/gmake" + + +#------------------------- +# Directives/Utilities +#------------------------- + +CDEBUG = -g +C_OUTPUT_FLAG = -o +LDDEBUG = -g +OUTPUT_FLAG = -o +CPPDEBUG = -g +CPP_OUTPUT_FLAG = -o +CPPLDDEBUG = -g +OUTPUT_FLAG = -o +ARDEBUG = +STATICLIB_OUTPUT_FLAG = +MEX_DEBUG = -g +RM = @del +ECHO = @echo +MV = @move +RUN = + +#---------------------------------------- +# "Faster Builds" Build Configuration +#---------------------------------------- + +ARFLAGS = ruvs +CFLAGS = -c $(MINGW_C_STANDARD_OPTS) -m64 \ + -O0 +CPPFLAGS = -c $(CPP_STANDARD_OPTS) -m64 -std=c++11 \ + -O0 +CPP_LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib +DOWNLOAD_FLAGS = +EXECUTE_FLAGS = +LDFLAGS = -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -static -m64 +MEX_CPPFLAGS = +MEX_CPPLDFLAGS = +MEX_CFLAGS = +MEX_LDFLAGS = +MAKE_FLAGS = -f $(MAKEFILE) +SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,"$(MATLAB_ARCH_BIN)",-L"$(MATLAB_ARCH_BIN)" -Wl,--no-undefined \ + -Wl,--out-implib,$(basename $(PRODUCT)).lib + + + +########################################################################### +## OUTPUT INFO +########################################################################### + +PRODUCT = ./FCC_New_rtwlib.lib +PRODUCT_TYPE = "static library" +BUILD_TYPE = "Model Reference Library" + +########################################################################### +## INCLUDE PATHS +########################################################################### + +INCLUDES_BUILDINFO = + +INCLUDES = $(INCLUDES_BUILDINFO) + +########################################################################### +## DEFINES +########################################################################### + +DEFINES_BUILD_ARGS = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=0 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=1 +DEFINES_CUSTOM = +DEFINES_OPTS = -DTID01EQ=0 -DPORTABLE_WORDSIZES +DEFINES_STANDARD = -DMODEL=FCC_New -DNUMST=2 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 + +DEFINES = $(DEFINES_BUILD_ARGS) $(DEFINES_CUSTOM) $(DEFINES_OPTS) $(DEFINES_STANDARD) + +########################################################################### +## SOURCE FILES +########################################################################### + +SRCS = $(START_DIR)/slprj/ert/FCC_New/FCC_New.c + +ALL_SRCS = $(SRCS) + +########################################################################### +## OBJECTS +########################################################################### + +OBJS = FCC_New.obj + +ALL_OBJS = $(OBJS) + +########################################################################### +## PREBUILT OBJECT FILES +########################################################################### + +PREBUILT_OBJS = + +########################################################################### +## LIBRARIES +########################################################################### + +MODELREF_LIBS = D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/AHRSControl/sil/hostobj/instrumented/AHRSControl_rtwlib.lib D:/Documents/SCHOOL/McSCert/do178/src/validation/slprj/ert/ActuatorControl/sil/hostobj/instrumented/ActuatorControl_rtwlib.lib + +LIBS = + +########################################################################### +## SYSTEM LIBRARIES +########################################################################### + +SYSTEM_LIBS = + +########################################################################### +## ADDITIONAL TOOLCHAIN FLAGS +########################################################################### + +#--------------- +# C Compiler +#--------------- + +CFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CFLAGS += $(CFLAGS_BASIC) + +#----------------- +# C++ Compiler +#----------------- + +CPPFLAGS_BASIC = $(DEFINES) $(INCLUDES) @$(COMPILER_COMMAND_FILE) + +CPPFLAGS += $(CPPFLAGS_BASIC) + +#--------------------- +# MEX C++ Compiler +#--------------------- + +MEX_CPP_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CPPFLAGS += $(MEX_CPP_Compiler_BASIC) + +#----------------- +# MEX Compiler +#----------------- + +MEX_Compiler_BASIC = @$(COMPILER_COMMAND_FILE) + +MEX_CFLAGS += $(MEX_Compiler_BASIC) + +########################################################################### +## INLINED COMMANDS +########################################################################### + + +MINGW_C_STANDARD_OPTS = $(C_STANDARD_OPTS) + + +########################################################################### +## PHONY TARGETS +########################################################################### + +.PHONY : all build clean info prebuild download execute + + +all : build + @echo "### Successfully generated all binary outputs." + + +build : prebuild $(PRODUCT) + + +prebuild : + + +download : $(PRODUCT) + + +execute : download + + +########################################################################### +## FINAL TARGET +########################################################################### + +#--------------------------------- +# Create a static library +#--------------------------------- + +$(PRODUCT) : $(OBJS) $(PREBUILT_OBJS) + @echo "### Creating static library "$(PRODUCT)" ..." + $(AR) $(ARFLAGS) $(PRODUCT) @$(CMD_FILE) + @echo "### Created: $(PRODUCT)" + + +########################################################################### +## INTERMEDIATE TARGETS +########################################################################### + +#--------------------- +# SOURCE-TO-OBJECT +#--------------------- + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/FCC_New/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(START_DIR)/slprj/ert/FCC_New/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/rtw/c/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : $(MATLAB_ROOT)/simulink/src/%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +%.obj : ../../../%.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +%.obj : ../../../%.cpp + $(CPP) $(CPPFLAGS) -o "$@" "$<" + + +FCC_New.obj : $(START_DIR)/slprj/ert/FCC_New/FCC_New.c + $(CC) $(CFLAGS) -o "$@" "$<" + + +########################################################################### +## DEPENDENCIES +########################################################################### + +$(ALL_OBJS) : rtw_proj.tmw $(COMPILER_COMMAND_FILE) $(MAKEFILE) + + +########################################################################### +## MISCELLANEOUS TARGETS +########################################################################### + +info : + @echo "### PRODUCT = $(PRODUCT)" + @echo "### PRODUCT_TYPE = $(PRODUCT_TYPE)" + @echo "### BUILD_TYPE = $(BUILD_TYPE)" + @echo "### INCLUDES = $(INCLUDES)" + @echo "### DEFINES = $(DEFINES)" + @echo "### ALL_SRCS = $(ALL_SRCS)" + @echo "### ALL_OBJS = $(ALL_OBJS)" + @echo "### LIBS = $(LIBS)" + @echo "### MODELREF_LIBS = $(MODELREF_LIBS)" + @echo "### SYSTEM_LIBS = $(SYSTEM_LIBS)" + @echo "### TOOLCHAIN_LIBS = $(TOOLCHAIN_LIBS)" + @echo "### CFLAGS = $(CFLAGS)" + @echo "### LDFLAGS = $(LDFLAGS)" + @echo "### SHAREDLIB_LDFLAGS = $(SHAREDLIB_LDFLAGS)" + @echo "### CPPFLAGS = $(CPPFLAGS)" + @echo "### CPP_LDFLAGS = $(CPP_LDFLAGS)" + @echo "### CPP_SHAREDLIB_LDFLAGS = $(CPP_SHAREDLIB_LDFLAGS)" + @echo "### ARFLAGS = $(ARFLAGS)" + @echo "### MEX_CFLAGS = $(MEX_CFLAGS)" + @echo "### MEX_CPPFLAGS = $(MEX_CPPFLAGS)" + @echo "### MEX_LDFLAGS = $(MEX_LDFLAGS)" + @echo "### MEX_CPPLDFLAGS = $(MEX_CPPLDFLAGS)" + @echo "### DOWNLOAD_FLAGS = $(DOWNLOAD_FLAGS)" + @echo "### EXECUTE_FLAGS = $(EXECUTE_FLAGS)" + @echo "### MAKE_FLAGS = $(MAKE_FLAGS)" + + +clean : + $(ECHO) "### Deleting all derived files..." + $(RM) $(subst /,\,$(PRODUCT)) + $(RM) $(subst /,\,$(ALL_OBJS)) + $(ECHO) "### Deleted all derived files." + + diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.obj b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/FCC_New.obj new file mode 100644 index 0000000000000000000000000000000000000000..f559de5e0a15b02185c1a6bc0fb39e235b5668a7 GIT binary patch literal 2420 zcmaJ?Ply{;7=P1DH9~c=pf#;pA4?7+Cezra>(UCHZ6@7m*_2Q>?x|#xO?Dm0CQCA{ zYd|Qp2*X&|lL+EjltPPwf|t!&p@&`y-t@8_gdTd39;63p{l52aCQa4{dGGgr-*3L} zd+&RBuld>Y1e^IBA#XCI6U%RH`V8}Kc^@HJjgXrQd2mI22aje4qkpVnkES{w1=Il&urjXm{_Pxzqzx83R*Sc~nOV3>P+CFW3Ld#xf zekr#!Q=l8Y?niJTyhUfM;}-nMUjQE%M<*{qkGGIcPCxo`!q5kbYbfqIAk0T6 zTMB)p&^HSGpwPBL_Z0e5p~ngpV1=*2OebFhdYz$f0r6-*D|Anxe*nG8bQZbYSzu0Tb} vJ5LeL5}9)^zF+Ki{9d8kcIa;7_btuS*_AOs11GO}9VT*(PzPWh0?(+^3TN-A>6SOERr% zKq#~b!&ulS5yWRv1Vur?m(5zihrSg0R$o?7=tCc*57Gxw&$)N*ok^1|cwz4S?svX9 z=iHyUcV0VH?>8^LIdhnfm-Nx&+2dI~ojFFS&P>6Y(sYjZDXq;ALL%_|{E1AZ66^? zg^;hpynhfHO3F2@Rk!N_-85*B@!^cyxfEubcVJusXGO_Z}xN50ccQnI4j=btpQDE!e7~_n9d*OwfpoQ%2>5!Ui+C| zxak>crc;WUP9?tN6zP&vQhzD_jZ*Ul3uwB;bjzyObB*wVGxAMtL>Nf)>z#r!0^`nZ z$W(5_d(rR7^^v{kDIP>)MqJ`q;U8)0(}r+}yomZBI%~wFCI;9o(&!H)x_#Sc%MoDX zz!sw0B13S3Yz){>Ot&;|I!g%yfR11ufQmo||AmC=EGOt{RK4r$$XTjAc9vjs!Q8M+ zSWF%slk!3?VSpQ@T^2;dS4Dj41%f1tyK)?}MjVNI0fHj&XMj*~1^wJ$G<*dMu!03x zK~HKr#fKhrE7TD)=vGvx92Oe45;wu*g4C_RKJXwhz3jL}b}_Pk;pUcKXbKL5wQjSw zzJ6j(94PWsm`fg+D)0}9y%gfim`i4-dMK>SC6B@iD3Q?qNG2Ro${zl94}6~UxVK-# z3JSKTVHxq8!uD5q;()QO!1<8?yqM3Qpz7v)uA0lHHhKeVGc{;mO!eDWGD&*ovemI^ z<9%APx{E8Rm0Xr?^m~`!KzNwqwyFxismQ;9y8=sStFCAuZiZxTI}C<`Ne33_4j8K9RL`T`J-_M=3%B>D@`3rwfL z%Bx@_*1)8j_3SAiB+84HdL<{zGMW(W+fIu@>R0g1dg^D(nx1*^mGmlMoS z6U?0n=KciZ&m?+21aq(T@%Bv&heQ8g<^TU2P4Oa6MCsQ*0wpERJW0TR(t>&ZoqVrr j_j?`rpSIAnFW2o}e=ol38OB~lM^g=fzq&^q2TcC~XI<^~ literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/buildInfo.mat b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..73601e36af5f5e41307f505125924c7b81c4a2ca GIT binary patch literal 15688 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/compileInfo.mat b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/compileInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..a4d3b7ec56de9f26ef4cc684ff2a07dfc1d745ff GIT binary patch literal 2290 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/defines.txt b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/defines.txt new file mode 100644 index 0000000..da3c27e --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/defines.txt @@ -0,0 +1,15 @@ +MODEL=FCC_New +NUMST=2 +NCSTATES=0 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=0 +PORTABLE_WORDSIZES +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=0 +INTEGER_CODE=0 +MT=1 diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/instrumentationInfo.mat b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/instrumentationInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..3cabef19817e4ad97e6b427f191ee3ae71f37b0c GIT binary patch literal 717 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSGcudffITL5iiH(^R%@ch7&;jO9b;ct{e=c=B zxiW92<;tTxCq2A=Htc9*OqAyq`(3lZgoDH3r(T$$-p`Xucdo2dJ!*LHoZP>Ec82>- z9z3_wRn<`QXWKI|!=tVz4O2TUXKHq;&iq+vc+`^BHPTQa(>(oo#r`Wr5^JZQVJK~9 zo@9Mv!;WUwld@|Jw!euxwCwZ4C4VPJ>+YKW&u5x6%fFKiKh+yp{ueN9WSVhxLAlwN zHf83+%}I}U<~Mw4+WB8?57WiWb@}tHm>7V*h9t=rl3eOml)Yv!@T0bQ= z2zIbGSXgXbqGGJS_lBjispak+Cex=jwl)fD>9ZV>`}y-`UFXh~JO-=*e;Mw`@OFbt zbAp@30X3}-Y?|c64J-oI&zCRRwfxyqG1X})&z@Hpb%CgjDVjrEZ-nUD(TDdv& ztRO?sVLmmGN#SslPJm5nxTJ7^>!~r5A@>w9)}-e>SDw6ibSdWhq9c1Q%{j8@%p|Y> zHVZ7&1+*QutoxJ|^WemR4GT&(o^)0?TTse$J5k~7gRcw!G$}J|dn95EGCmTI@yu9_ x-(teX=C@!Dlgn$Z^~YHIczC$I#An;ET;d5=-yq9&i7!t6l)eQM!?714lK|eUA20v_ literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/mlEnv.txt b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/mlEnv.txt new file mode 100644 index 0000000..4dd92c5 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/mlEnv.txt @@ -0,0 +1,4 @@ +MATLAB_ROOT=E: +ALT_MATLAB_ROOT=E: +MATLAB_BIN=E:\bin +ALT_MATLAB_BIN=E:\bin diff --git a/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/profiling_info.mat b/src/validation/slprj/ert/FCC_New/sil/hostobj/instrumented/profiling_info.mat new file mode 100644 index 0000000000000000000000000000000000000000..00afd60f4e27834c41ef3b3c325fab2a8c986485 GIT binary patch literal 368 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NS}aZCnOXwB$+8Z zYq+Fvfa~dD24#WI%!Pf`esw`fegRokX@#DFs?5S6atzIv*=B$=nxJW9NOEK2NND|( z$e^OfbL8aDovc4AS5~Szu6#N3sH*GCl}8gQ8K#7A6yvv)o1xINuF*d$G7D}i$kMI{ z?CKzmR&Yx{fL+UwR0p + + + 323 + + true + AHRSControl + FCC_New:AHRSControl + + + true + ActuatorControl + FCC_New:ActuatorControl + + + true + FCC_New + FCC_New + + false + false + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + AAFJTQAAAAAOAAAAOAAAAAYAAAAIAAAAAgAAAAAAAAAFAAAACAAAAAAAAAABAAAAAQAAAAAAAAAFAAQAAQAAAAEAAAAAAAAA + {"Inports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Outports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","LocalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ParameterArguments":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedLocalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InternalData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Constants":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","DataTransfers":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ModelData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InitializeTerminate":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Execution":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedUtility":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}"} + 0.001 + #AHRS_Bus#HeliSystemDD_New.sldd# + true + true + true + false + true + false + true + true + + true + true + 32767 + -32768 + 2 + + true + D1 + 0.001 + 40 + 0 + + + + + + true + true + 32767 + -32768 + 2 + 1 + + true + D1 + 0.001 + 40 + 0 + + + + + + true + true + 32767 + -32768 + 2 + 2 + + true + D1 + 0.001 + 40 + 0 + + + + + + true + true + 32767 + -32768 + 2 + 3 + + true + D2 + 0.01 + 41 + 1 + + + + + + true + true + 32767 + -32768 + 2 + 4 + + true + D2 + 0.01 + 41 + 1 + + + + + + true + true + 32767 + -32768 + 2 + 5 + + true + D2 + 0.01 + 41 + 1 + + + + + + true + true + inf + -inf + 2 + 6 + + true + D2 + 0.01 + 41 + 1 + + + + + + true + true + inf + -inf + 2 + 7 + + true + D2 + 0.01 + 41 + 1 + + + + + + true + true + inf + -inf + 2 + 8 + + true + D2 + 0.01 + 41 + 1 + + + + + false + true + true + false + false + false + false + false + false + false + false + false + false + false + false + false + false + true + 3 + -1 + 12 + 12 + 0 + 0 + 2 + 2 + + + + + + + AHRS_Bus + AHRS_Bus + AHRS_Bus + false + false + false + + + + + true + inf + -inf + 2 + + true + D1 + 0.001 + 40 + 0 + + + + + + true + inf + -inf + 2 + 1 + + true + D1 + 0.001 + 40 + 0 + + + + + + true + inf + -inf + 2 + 2 + + true + D1 + 0.001 + 40 + 0 + + + + + false + false + true + + true + D1 + 0.001 + 40 + 0 + + + true + D2 + 0.01 + 41 + 1 + + 2 + <?xml version="1.0"?> +<slexec_sto version="1.1" packageUris="http://schema.mathworks.com/mf0/slexec_mm_sto/R2019b_201902271317"> + <sto.Registry type="sto.Registry" uuid="a958cac6-bf03-46a8-9f2e-c702a690fa23"> + <clocks type="sto.Timer" uuid="fe930611-35cf-402f-95a8-ea3dc56e922f"> + <needsToProvideTimeDuringExecution>true</needsToProvideTimeDuringExecution> + <clockTickConstraint>PeriodicWithFixedResolution</clockTickConstraint> + <resolution>0.001</resolution> + <specifiedTaskingMode>ClassicMultiTasking</specifiedTaskingMode> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="effd7f3c-f401-4a43-b8c8-475c07e48472"> + <baseTaskID>_task0</baseTaskID> + <computedFundamentalStepSize>0.001</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="12e404c9-791e-41b3-aa13-b6a0f2cfebb8"/> + <rates type="sto.Rate" uuid="fb89291c-0d30-4fc9-b342-87cc8ea932ba"/> + <rootTaskHierarchyElements type="sto.Task" uuid="6c441be1-5ed3-4c38-8935-0dbff979d484"> + <isExecutable>true</isExecutable> + <orderIndex>1</orderIndex> + <rates type="sto.Rate" uuid="12e404c9-791e-41b3-aa13-b6a0f2cfebb8"> + <annotation>D1</annotation> + <colorIndex>2</colorIndex> + <description>Discrete 1</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <registry type="sto.Registry" uuid="a958cac6-bf03-46a8-9f2e-c702a690fa23"/> + <taskId>_task0</taskId> + <rateSpec type="sto.RateSpec" uuid="1d2556f2-8763-4997-9906-0f8912f2b774"> + <period>0.001</period> + <rateType>ClassicPeriodicDiscrete</rateType> + </rateSpec> + </rates> + <elementType>Task</elementType> + <identifier>_task0</identifier> + <priority>40</priority> + </rootTaskHierarchyElements> + <rootTaskHierarchyElements type="sto.Task" uuid="8275c235-c777-4037-b071-1743420bed82"> + <isExecutable>true</isExecutable> + <orderIndex>2</orderIndex> + <rates type="sto.Rate" uuid="fb89291c-0d30-4fc9-b342-87cc8ea932ba"> + <annotation>D2</annotation> + <colorIndex>3</colorIndex> + <description>Discrete 2</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <rateIDX>1</rateIDX> + <registry type="sto.Registry" uuid="a958cac6-bf03-46a8-9f2e-c702a690fa23"/> + <taskId>_task1</taskId> + <rateSpec type="sto.RateSpec" uuid="0d3a42b3-94b6-4fd7-87f6-d0cb80a85979"> + <period>0.01</period> + <rateType>ClassicPeriodicDiscrete</rateType> + </rateSpec> + </rates> + <tNum>1</tNum> + <elementType>Task</elementType> + <identifier>_task1</identifier> + <priority>41</priority> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <clocks type="sto.Event" uuid="143044ee-3b1f-42d0-b581-be1994c0f023"> + <eventType>PARAMETER_CHANGE_EVENT</eventType> + <cNum>1</cNum> + <clockType>Event</clockType> + <identifier>ParameterChangeEvent</identifier> + <resolution>-1</resolution> + <specifiedTaskingMode>ExplicitTasking</specifiedTaskingMode> + <timeAdvanceMode>None</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="6bdbc9f7-7a9d-476b-9ba0-0698887b917b"> + <computedFundamentalStepSize>-1</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="454366e8-02a1-45d9-8937-cc2d39afb6d8"/> + <rootTaskHierarchyElements type="sto.Task" uuid="2abf7da9-8963-49a9-b472-b96d188bb4e2"> + <isExplicit>true</isExplicit> + <rates type="sto.Rate" uuid="454366e8-02a1-45d9-8937-cc2d39afb6d8"> + <eventSourceType>PARAMETER_CHANGE_EVENT</eventSourceType> + <rateIDX>-1</rateIDX> + <registry type="sto.Registry" uuid="a958cac6-bf03-46a8-9f2e-c702a690fa23"/> + <stringID>ParameterChangeEvent</stringID> + <taskId>ModelWideParameterChangeEvent</taskId> + <useForExecution>NotForExecution</useForExecution> + <rateSpec type="sto.RateSpec" uuid="63bcf0ba-871c-4540-aa2d-47ee03ee21d1"> + <period>inf</period> + <rateType>ModelWideParameterChangeEvent</rateType> + </rateSpec> + </rates> + <tNum>2</tNum> + <elementType>Task</elementType> + <identifier>ModelWideParameterChangeEvent</identifier> + <priority>-1</priority> + <schedulingClockID>ParameterChangeEvent</schedulingClockID> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <executionSpec>Undetermined</executionSpec> + <hasUnknownEdges>true</hasUnknownEdges> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="a897cd9d-ec2b-481d-a64b-ee9ca397cb30"> + <serializedConnectionProperties type="sto.SerializedConnectionProperties" uuid="7f29e558-f94e-48a6-b010-daa3484ef415"> + <expectedExecOrder>TargetFirst</expectedExecOrder> + <targetTaskIdentifier>_task0</targetTaskIdentifier> + </serializedConnectionProperties> + <taskIdentifier>_task1</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="22842f12-7e72-4e4b-aa0a-11857809797e"> + <serializedConnectionProperties type="sto.SerializedConnectionProperties" uuid="71d410a2-9b1c-44fc-b631-4db5cd682b42"> + <isInternal>true</isInternal> + <targetTaskIdentifier>_task1</targetTaskIdentifier> + </serializedConnectionProperties> + <taskIdentifier>_task0</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="0d7e8445-3fbb-411c-a6b9-f04167909f9e"> + <clockIdentifier>ParameterChangeEvent</clockIdentifier> + <taskIdentifier>ModelWideParameterChangeEvent</taskIdentifier> + </taskDependencyGraph> + <taskPriorityDirection>HighNumberLast</taskPriorityDirection> + <taskingMode>ClassicMultiTasking</taskingMode> + <tasks type="sto.Task" uuid="6c441be1-5ed3-4c38-8935-0dbff979d484"/> + <tasks type="sto.Task" uuid="8275c235-c777-4037-b071-1743420bed82"/> + <tasks type="sto.Task" uuid="2abf7da9-8963-49a9-b472-b96d188bb4e2"/> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + </sto.Registry> +</slexec_sto> + true + 0.001 + true + + + MdlrefDW_FCC_New_T + + + true + 0.001 + 2 + true + true + true + 2 + SOLVER_MODE_MULTITASKING + FixedStepDiscrete + SOLVER_TYPE_FIXEDSTEP + 2 + + 8 + 64 + 32 + 32 + 32 + 64 + 32 + 32 + 16 + 32 + 1 + true + true + 32 + + + + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 0 + 1 + 2 + + + + + true + true + true + true + + + FCC_New/RateTransition1 + FCC_New/RateTransition2 + FCC_New/RateTransition3 + + + + + + + + + + Actuator2_loop + true + FCC_New/ActuatorControl + -2 + ActuatorControl/Actuator_Control + FCC_New/ActuatorControl + Actuator2_loop + + 1 + 780.00048828125 + + + 1 + 914.00048828125 + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + ActuatorControl + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor2_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act2_cmd + 1 + + + Act2_pos + + + Actuator2 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Actuator3_loop + true + FCC_New/ActuatorControl + -2 + ActuatorControl/Actuator_Control + FCC_New/ActuatorControl + Actuator3_loop + + 1 + 809.00048828125 + + + 1 + 925.00048828125 + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + ActuatorControl + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor3_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act3_cmd + 1 + + + Act3_pos + + + Actuator3 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + AHRSLoopCtrl + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl + Heli_inner_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl + Heli_outer_loop + + -2 + AHRSControl/AHRS_Control + FCC_New/AHRSControl + AHRSLoopCtrl + + 14 + 327.0003662109375 + + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + + 14 + 429.000244140625 + + + 14 + 433.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + actuator_commands + 4 + + + voted_fb + 3 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 5 + + Numeric + numerictype('double') + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + Heli_inner_loop + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + pitch_feedback + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + roll_feedback + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + yaw_feedback + + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl + FCC_New/AHRSControl + Heli_inner_loop + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + actuator_commands + 4 + + + phi_cmd + 1 + + + r_cmd + 2 + + + theta_cmd + + + voted_fb + 3 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + Mid_Value + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRS_voter + FCC_New/AHRSControl + Mid_Value + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + O0 + 3 + + + AHRS1 + + + AHRS2 + 1 + + + AHRS3 + 2 + + + Mid_Value + 3 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Actuator1_loop + true + FCC_New/ActuatorControl + -2 + ActuatorControl/Actuator_Control + FCC_New/ActuatorControl + Actuator1_loop + + 1 + 751.00048828125 + + + 1 + 903.00048828125 + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + ActuatorControl + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor1_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act1_cmd + 1 + + + Act1_pos + + + Actuator1 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Filter + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_New/AHRSControl + Filter + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + + ({true}_0) + + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + + ({true}_0) + + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/Filter + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + O1 + 3 + + + FeedbackSum + 3 + + + Signal + + + filtered_Signal + 2 + + + prev_FeedbackSum + 1 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Pitch_loop + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + FCC_New/AHRSControl + Pitch_loop + + 1 + 438.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_theta_cmd + + + theta + 1 + + + theta_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + pitch_feedback + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_New/AHRSControl + pitch_feedback + + 1 + 359.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + ds + 2 + + + theta_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Roll_loop + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + FCC_New/AHRSControl + Roll_loop + + 1 + 461.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_phi_cmd + + + phi + 1 + + + phi_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Yaw_loop + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + FCC_New/AHRSControl + Yaw_loop + + 1 + 494.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_r_cmd + + + r + 1 + + + r_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + yaw_feedback + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_New/AHRSControl + yaw_feedback + + 1 + 395.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + dT + 2 + + + r_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + roll_feedback + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_New/AHRSControl + roll_feedback + + 1 + 377.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + dc + 2 + + + phi_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Single_Value + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRS_voter + FCC_New/AHRSControl + Single_Value + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + + + AHRS1_Valid + 3 + + + AHRS2 + 1 + + + AHRS2_Valid + 4 + + + AHRS3 + 2 + + + AHRS3_Valid + 5 + + + Single_Value + 6 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Heli_outer_loop + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Pitch_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Roll_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Yaw_loop + + -2 + AHRSControl/AHRS_Control/AHRSLoopCtrl + FCC_New/AHRSControl + Heli_outer_loop + + 14 + 433.000244140625 + + + 1 + 438.000244140625 + + + 14 + 456.000244140625 + + + 1 + 461.000244140625 + + + 14 + 489.000244140625 + + + 1 + 494.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + O1 + 5 + + + O2 + 6 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + phi_cmd + 5 + + + r_cmd + 6 + + + theta_cmd + 4 + + + voted_fb + 3 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Avg_Value + true + FCC_New/AHRSControl + -2 + AHRSControl/AHRS_Control/AHRS_voter + FCC_New/AHRSControl + Avg_Value + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + + + AHRS1_Valid + 3 + + + AHRS2 + 1 + + + AHRS2_Valid + 4 + + + AHRS3 + 2 + + + AHRS3_Valid + 5 + + + Avg_Value + 6 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Actuator_Control + true + FCC_New/ActuatorControl_caller + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + ActuatorControl/Actuator_Control + Actuator1_loop + + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + ActuatorControl/Actuator_Control + Actuator2_loop + + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + ActuatorControl/Actuator_Control + Actuator3_loop + + + 0.001 + + 0 + ActuatorControl + FCC_New/ActuatorControl + Actuator_Control + + 14 + 743.00048828125 + + + 1 + 751.00048828125 + + + 14 + 772.00048828125 + + + 1 + 780.00048828125 + + + 14 + 801.00048828125 + + + 1 + 809.00048828125 + + + 1 + 903.00048828125 + + + 1 + 914.00048828125 + + + 1 + 925.00048828125 + + FCC_New/ActuatorControl_caller + ActuatorControl + ActuatorControl + + FCC_New/ActuatorControl_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control + + ({true}_0) + + Scoped Export + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + O1 + 7 + + + O2 + 8 + + + Act1_cmd + 1 + + + Act1_pos + + + Act2_cmd + 3 + + + Act2_pos + 2 + + + Act3_cmd + 5 + + + Act3_pos + 4 + + + Actuator1 + 6 + + + Actuator2 + 7 + + + Actuator3 + 8 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + -1 + + + + AHRS_voter + true + FCC_New/AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + AHRSControl/AHRS_Control/AHRS_voter + Avg_Value + + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + AHRSControl/AHRS_Control/AHRS_voter + Mid_Value + + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + AHRSControl/AHRS_Control/AHRS_voter + Single_Value + + -2 + AHRSControl/AHRS_Control + FCC_New/AHRSControl + AHRS_voter + + 14 + 561.00048828125 + + + 14 + 598.00048828125 + + + 14 + 628.00048828125 + + AHRSControl/AHRS_Control/AHRS_voter_caller + AHRSControl + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + O0 + 3 + + + AHRS1 + + + AHRS2 + 1 + + + AHRS3 + 2 + + + voted_fb + 3 + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + AHRSControl_AHRS_Control + true + FCC_New/AHRSControl_caller + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + AHRSControl/AHRS_Control + AHRSLoopCtrl + + + AHRSControl/AHRS_Control/AHRS_voter_caller + AHRSControl/AHRS_Control + AHRS_voter + + + 0.01 + + 1 + AHRSControl + FCC_New/AHRSControl + AHRS_Control + + 14 + 325.0003662109375 + + + 14 + 327.0003662109375 + + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + + 14 + 429.000244140625 + + FCC_New/AHRSControl_caller + AHRSControl + AHRSControl + + FCC_New/AHRSControl_caller + + ({true}_0) + + + AHRSControl/AHRS_Control + + ({true}_0) + + Scoped Export + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + 3 + + + AHRS2 + 4 + + + AHRS3 + 5 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + actuator_commands + 6 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + + true + + + + + + sltpEvents + + + sltpTaskGroups + + + + + + D1 + + + _task0 + + + + D2 + + + _task1 + + + sltpTasks + + + + + \ No newline at end of file diff --git a/src/validation/slprj/ert/FCC_New/tmwinternal/binfo_mdlref.mat b/src/validation/slprj/ert/FCC_New/tmwinternal/binfo_mdlref.mat new file mode 100644 index 0000000000000000000000000000000000000000..f02bf9195a877a0f0b9e389afb39461e1672fb91 GIT binary patch literal 31045 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/tmwinternal/minfo_mdlref.mat b/src/validation/slprj/ert/FCC_New/tmwinternal/minfo_mdlref.mat new file mode 100644 index 0000000000000000000000000000000000000000..e793c716b17fa60ac3f16decf20b0ee6f34a070a GIT binary patch literal 2479 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_New/tmwinternal/simulink_cache.xml b/src/validation/slprj/ert/FCC_New/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..5661dc8 --- /dev/null +++ b/src/validation/slprj/ert/FCC_New/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + D4vwil7DnZOwF+buM4NeIg== + + \ No newline at end of file diff --git a/src/validation/slprj/ert/FCC_New/tmwinternal/tr b/src/validation/slprj/ert/FCC_New/tmwinternal/tr new file mode 100644 index 0000000000000000000000000000000000000000..3e9e5ba721526fca8aa13d86208e601dcc1ea62f GIT binary patch literal 11424 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/CompileInfo.xml b/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/CompileInfo.xml new file mode 100644 index 0000000..e97f0b0 --- /dev/null +++ b/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/CompileInfo.xml @@ -0,0 +1,2469 @@ + + + + 323 + + true + AHRSControl + FCC_Sys_New_harness:FCC_New:AHRSControl + + + true + ActuatorControl + FCC_Sys_New_harness:FCC_New:ActuatorControl + + + true + FCC_New + FCC_Sys_New_harness:FCC_New + + + true + FCC_Sys_New_harness + FCC_Sys_New_harness + + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + HeliSystemDD_New.sldd + AAFJTQAAAAAOAAAAOAAAAAYAAAAIAAAAAgAAAAAAAAAFAAAACAAAAAAAAAABAAAAAQAAAAAAAAAFAAQAAQAAAAEAAAAAAAAA + {"Inports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Outports":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","LocalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ParameterArguments":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalParameters":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedLocalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","GlobalDataStores":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InternalData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Constants":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","DataTransfers":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","ModelData":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","InitializeTerminate":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","Execution":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}","SharedUtility":"{\"Name\":\"Default\",\"Checksum\":\"Default\",\"PerInstancePropertiesChecksum\":\"\",\"MemorySectionName\":\"None\",\"MemorySectionChecksum\":\"None\"}"} + #AHRS_Bus#HeliSystemDD_New.sldd# + true + true + true + true + true + true + true + true + true + false + false + false + 6 + -1 + true + 12 + 12 + false + false + false + + + + + true + inf + -inf + + true + Cont + 0.001 + 40 + 1 + + + + + + true + inf + -inf + 1 + + true + Cont + 0.001 + 40 + 1 + + + + + + true + inf + -inf + 2 + + true + Cont + 0.001 + 40 + 1 + + + + + true + + true + true + 0 + 40 + 0 + + + true + Cont + 0.001 + 40 + 1 + + + true + D2 + 0.01 + 41 + 2 + + 2 + <?xml version="1.0"?> +<slexec_sto version="1.1" packageUris="http://schema.mathworks.com/mf0/slexec_mm_sto/R2019b_201902271317"> + <sto.Registry type="sto.Registry" uuid="7af9ec31-8d00-46b9-a406-18dad56ce986"> + <clocks type="sto.Timer" uuid="fb3e8fe5-e08a-4590-8ded-a9a560b9c023"> + <needsToProvideTimeDuringExecution>true</needsToProvideTimeDuringExecution> + <clockTickConstraint>PeriodicWithFixedResolution</clockTickConstraint> + <resolution>0.001</resolution> + <specifiedTaskingMode>ClassicMultiTasking</specifiedTaskingMode> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="c2faa222-832a-4daa-869c-2677bd208c85"> + <baseTaskID>_task0</baseTaskID> + <computedFundamentalStepSize>0.001</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="96902433-73bc-4e9c-a979-548d745d5b63"/> + <rates type="sto.Rate" uuid="e3a78f62-6bee-4b17-89e2-b8498d78adf7"/> + <rates type="sto.Rate" uuid="73a139b3-af98-44a4-9115-4b2e54e7dbbd"/> + <rates type="sto.Rate" uuid="2ab92d2b-4c8c-489f-9a01-055f563a1eb6"/> + <rootTaskHierarchyElements type="sto.Task" uuid="6829ce4b-0f65-4115-a08e-554a176936f0"> + <isExecutable>true</isExecutable> + <orderIndex>1</orderIndex> + <rates type="sto.Rate" uuid="96902433-73bc-4e9c-a979-548d745d5b63"> + <annotation>Cont</annotation> + <description>Continuous</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <registry type="sto.Registry" uuid="7af9ec31-8d00-46b9-a406-18dad56ce986"/> + <taskId>_task0</taskId> + <rateSpec type="sto.RateSpec" uuid="78ec9805-33a8-4e91-b269-2f95157083e0"/> + </rates> + <rates type="sto.Rate" uuid="e3a78f62-6bee-4b17-89e2-b8498d78adf7"> + <annotation>FiM</annotation> + <colorIndex>8</colorIndex> + <description>Fixed in Minor Step</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <rateIDX>-1</rateIDX> + <registry type="sto.Registry" uuid="7af9ec31-8d00-46b9-a406-18dad56ce986"/> + <taskId>_task0</taskId> + <useForExecution>NotForExecution</useForExecution> + <rateSpec type="sto.RateSpec" uuid="388681f7-719f-4cb1-b44c-92348395594b"> + <offset>1</offset> + <rateType>ZOHContinuous</rateType> + </rateSpec> + </rates> + <rates type="sto.Rate" uuid="73a139b3-af98-44a4-9115-4b2e54e7dbbd"> + <annotation>D1</annotation> + <colorIndex>2</colorIndex> + <description>Discrete 1</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <rateIDX>1</rateIDX> + <registry type="sto.Registry" uuid="7af9ec31-8d00-46b9-a406-18dad56ce986"/> + <taskId>_task0</taskId> + <rateSpec type="sto.RateSpec" uuid="239d6752-8b6a-408e-bf9a-e479d721490b"> + <period>0.001</period> + <rateType>ClassicPeriodicDiscrete</rateType> + </rateSpec> + </rates> + <elementType>Task</elementType> + <identifier>_task0</identifier> + <priority>40</priority> + </rootTaskHierarchyElements> + <rootTaskHierarchyElements type="sto.Task" uuid="3bf10435-f464-4c6a-a578-4e846b47a564"> + <isExecutable>true</isExecutable> + <orderIndex>2</orderIndex> + <rates type="sto.Rate" uuid="2ab92d2b-4c8c-489f-9a01-055f563a1eb6"> + <annotation>D2</annotation> + <colorIndex>3</colorIndex> + <description>Discrete 2</description> + <eventSourceType>UNSPECIFIED_EVENT_SOURCE</eventSourceType> + <rateIDX>2</rateIDX> + <registry type="sto.Registry" uuid="7af9ec31-8d00-46b9-a406-18dad56ce986"/> + <taskId>_task1</taskId> + <rateSpec type="sto.RateSpec" uuid="8f49352e-04e3-4e14-95e9-5fd21504ef5c"> + <period>0.01</period> + <rateType>ClassicPeriodicDiscrete</rateType> + </rateSpec> + </rates> + <tNum>1</tNum> + <elementType>Task</elementType> + <identifier>_task1</identifier> + <priority>41</priority> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <clocks type="sto.Event" uuid="1280edcc-54cc-4431-a068-97fc2df019c2"> + <eventType>PARAMETER_CHANGE_EVENT</eventType> + <cNum>1</cNum> + <clockType>Event</clockType> + <identifier>ParameterChangeEvent</identifier> + <resolution>-1</resolution> + <specifiedTaskingMode>ExplicitTasking</specifiedTaskingMode> + <timeAdvanceMode>None</timeAdvanceMode> + <clockDomain type="sto.ClockDomain" uuid="bf172d10-1701-438d-9538-b52d773da52d"> + <computedFundamentalStepSize>-1</computedFundamentalStepSize> + <rates type="sto.Rate" uuid="72226f32-4bbb-4903-98db-3f9a6141aa6e"/> + <rootTaskHierarchyElements type="sto.Task" uuid="a6854e0f-71bd-4fcd-95c6-bcf3cc601faf"> + <isExplicit>true</isExplicit> + <rates type="sto.Rate" uuid="72226f32-4bbb-4903-98db-3f9a6141aa6e"> + <eventSourceType>PARAMETER_CHANGE_EVENT</eventSourceType> + <rateIDX>-1</rateIDX> + <registry type="sto.Registry" uuid="7af9ec31-8d00-46b9-a406-18dad56ce986"/> + <stringID>ParameterChangeEvent</stringID> + <taskId>ModelWideParameterChangeEvent</taskId> + <useForExecution>NotForExecution</useForExecution> + <rateSpec type="sto.RateSpec" uuid="a49ae545-7bd0-4d50-b892-2810db3d7a6c"> + <period>inf</period> + <rateType>ModelWideParameterChangeEvent</rateType> + </rateSpec> + </rates> + <tNum>2</tNum> + <elementType>Task</elementType> + <identifier>ModelWideParameterChangeEvent</identifier> + <priority>-1</priority> + <schedulingClockID>ParameterChangeEvent</schedulingClockID> + </rootTaskHierarchyElements> + </clockDomain> + </clocks> + <executionSpec>Undetermined</executionSpec> + <hasUnknownEdges>true</hasUnknownEdges> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="f2105fca-fc1c-4f00-875f-d1a9fdbc0b5f"> + <serializedConnectionProperties type="sto.SerializedConnectionProperties" uuid="83ef5f41-b783-479f-83ae-bf05f57a9e0e"> + <expectedExecOrder>Unknown</expectedExecOrder> + <targetTaskIdentifier>_task0</targetTaskIdentifier> + </serializedConnectionProperties> + <taskIdentifier>_task1</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="8c3bcf0e-05b1-43d1-a4d3-1cbf6481d5cf"> + <serializedConnectionProperties type="sto.SerializedConnectionProperties" uuid="4bedf1b0-3a5f-4e3c-8894-fb8bc1d7c9c0"> + <expectedExecOrder>SourceFirst</expectedExecOrder> + <targetTaskIdentifier>_task1</targetTaskIdentifier> + </serializedConnectionProperties> + <taskIdentifier>_task0</taskIdentifier> + </taskDependencyGraph> + <taskDependencyGraph type="sto.SerializedTaskConnectionList" uuid="55cf1a6c-8956-4e88-8e74-a68db7623e22"> + <clockIdentifier>ParameterChangeEvent</clockIdentifier> + <taskIdentifier>ModelWideParameterChangeEvent</taskIdentifier> + </taskDependencyGraph> + <taskPriorityDirection>HighNumberLast</taskPriorityDirection> + <taskingMode>ClassicMultiTasking</taskingMode> + <tasks type="sto.Task" uuid="6829ce4b-0f65-4115-a08e-554a176936f0"/> + <tasks type="sto.Task" uuid="3bf10435-f464-4c6a-a578-4e846b47a564"/> + <tasks type="sto.Task" uuid="a6854e0f-71bd-4fcd-95c6-bcf3cc601faf"/> + <timeAdvanceMode>FixedStep</timeAdvanceMode> + </sto.Registry> +</slexec_sto> + true + + + + true + 0.001 + 2 + true + true + true + 2 + SOLVER_MODE_MULTITASKING + FixedStepDiscrete + SOLVER_TYPE_FIXEDSTEP + 2 + + 8 + 64 + 32 + 32 + 32 + 64 + 32 + 32 + 16 + 32 + 1 + true + true + 32 + + + + + + 0 + 1 + 2 + + + + + true + true + true + + + FCC_Sys_New_harness/Size-Type/Sync1 + FCC_Sys_New_harness/Size-Type/Sync10 + FCC_Sys_New_harness/Size-Type/Sync11 + FCC_Sys_New_harness/Size-Type/Sync12 + FCC_Sys_New_harness/Size-Type/Sync13 + FCC_Sys_New_harness/Size-Type/Sync14 + FCC_Sys_New_harness/Size-Type/Sync15 + FCC_Sys_New_harness/Size-Type/Sync16 + FCC_Sys_New_harness/Size-Type/Sync17 + FCC_Sys_New_harness/Size-Type/Sync18 + + + + + + + + + + AHRS_voter + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRS_voter + Avg_Value + + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRS_voter + Mid_Value + + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRS_voter + Single_Value + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + AHRS_voter + + 14 + 561.00048828125 + + + 14 + 598.00048828125 + + + 14 + 628.00048828125 + + AHRSControl/AHRS_Control/AHRS_voter_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + O0 + 3 + + + AHRS1 + + + AHRS2 + 1 + + + AHRS3 + 2 + + + voted_fb + 3 + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Actuator_Control + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl/Actuator_Control + Actuator1_loop + + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl/Actuator_Control + Actuator2_loop + + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl/Actuator_Control + Actuator3_loop + + + 0.001 + + 1 + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Actuator_Control + + 14 + 743.00048828125 + + + 1 + 751.00048828125 + + + 14 + 772.00048828125 + + + 1 + 780.00048828125 + + + 14 + 801.00048828125 + + + 1 + 809.00048828125 + + + 1 + 903.00048828125 + + + 1 + 914.00048828125 + + + 1 + 925.00048828125 + + FCC_New/ActuatorControl_caller + FCC_New + ActuatorControl + + FCC_New/ActuatorControl_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control + + ({true}_0) + + Scoped Export + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + O1 + 7 + + + O2 + 8 + + + Act1_cmd + 1 + + + Act1_pos + + + Act2_cmd + 3 + + + Act2_pos + 2 + + + Act3_cmd + 5 + + + Act3_pos + 4 + + + Actuator1 + 6 + + + Actuator2 + 7 + + + Actuator3 + 8 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + -1 + + + + Avg_Value + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRS_voter + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Avg_Value + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Avg_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + + + AHRS1_Valid + 3 + + + AHRS2 + 1 + + + AHRS2_Valid + 4 + + + AHRS3 + 2 + + + AHRS3_Valid + 5 + + + Avg_Value + 6 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Heli_outer_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Pitch_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Roll_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + Yaw_loop + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Heli_outer_loop + + 14 + 433.000244140625 + + + 1 + 438.000244140625 + + + 14 + 456.000244140625 + + + 1 + 461.000244140625 + + + 14 + 489.000244140625 + + + 1 + 494.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + O1 + 5 + + + O2 + 6 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + phi_cmd + 5 + + + r_cmd + 6 + + + theta_cmd + 4 + + + voted_fb + 3 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + roll_feedback + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + roll_feedback + + 1 + 377.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + dc + 2 + + + phi_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + AHRSControl_AHRS_Control + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control + AHRSLoopCtrl + + + AHRSControl/AHRS_Control/AHRS_voter_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control + AHRS_voter + + + 0.01 + + 2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + AHRS_Control + + 14 + 325.0003662109375 + + + 14 + 327.0003662109375 + + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + + 14 + 429.000244140625 + + FCC_New/AHRSControl_caller + FCC_New + AHRSControl + + FCC_New/AHRSControl_caller + + ({true}_0) + + + AHRSControl/AHRS_Control + + ({true}_0) + + Scoped Export + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + 3 + + + AHRS2 + 4 + + + AHRS3 + 5 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + actuator_commands + 6 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 1 + + Bus + AHRS_Bus + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + Yaw_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Yaw_loop + + 1 + 494.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Yaw_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_r_cmd + + + r + 1 + + + r_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Single_Value + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRS_voter + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Single_Value + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Single_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + I4 + 4 + + + I5 + 5 + + + O0 + 6 + + + AHRS1 + + + AHRS1_Valid + 3 + + + AHRS2 + 1 + + + AHRS2_Valid + 4 + + + AHRS3 + 2 + + + AHRS3_Valid + 5 + + + Single_Value + 6 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 1 + + Numeric + numerictype('boolean') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Roll_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Roll_loop + + 1 + 461.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Roll_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_phi_cmd + + + phi + 1 + + + phi_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Filter + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Filter + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + + ({true}_0) + + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback/Filter_caller + + ({true}_0) + + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/Filter + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + O1 + 3 + + + FeedbackSum + 3 + + + Signal + + + filtered_Signal + 2 + + + prev_FeedbackSum + 1 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + yaw_feedback + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback/Filter_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + yaw_feedback + + 1 + 395.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + dT + 2 + + + r_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Actuator1_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl/Actuator_Control + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Actuator1_loop + + 1 + 751.00048828125 + + + 1 + 903.00048828125 + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + FCC_New/ActuatorControl + FCC_New + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator1_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor1_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act1_cmd + 1 + + + Act1_pos + + + Actuator1 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + pitch_feedback + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback/Filter_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + Filter + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + pitch_feedback + + 1 + 359.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + ds + 2 + + + theta_cmd + + + voted_fb + 1 + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Mid_Value + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRS_voter + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Mid_Value + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRS_voter/Mid_Value + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + O0 + 3 + + + AHRS1 + + + AHRS2 + 1 + + + AHRS3 + 2 + + + Mid_Value + 3 + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + -1 + + + + Heli_inner_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/pitch_feedback_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + pitch_feedback + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/roll_feedback_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + roll_feedback + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop/yaw_feedback_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + yaw_feedback + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Heli_inner_loop + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + actuator_commands + 4 + + + phi_cmd + 1 + + + r_cmd + 2 + + + theta_cmd + + + voted_fb + 3 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 5 + + Numeric + numerictype('double') + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + AHRSLoopCtrl + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_inner_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl + Heli_inner_loop + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop_caller + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl + Heli_outer_loop + + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + AHRSLoopCtrl + + 14 + 327.0003662109375 + + + 14 + 329.0003662109375 + + + 14 + 354.000244140625 + + + 1 + 359.000244140625 + + + 14 + 372.000244140625 + + + 1 + 377.000244140625 + + + 14 + 390.000244140625 + + + 1 + 395.000244140625 + + + 14 + 429.000244140625 + + + 14 + 433.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + I2 + 2 + + + I3 + 3 + + + O0 + 4 + + + Pilot_phi_cmd + 1 + + + Pilot_r_cmd + 2 + + + Pilot_theta_cmd + + + actuator_commands + 4 + + + voted_fb + 3 + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 1 + + Numeric + numerictype(1,16,0) + + + + 5 + + Numeric + numerictype('double') + + + + 3 + + Numeric + numerictype('double') + + + -1 + + + + Actuator3_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl/Actuator_Control + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Actuator3_loop + + 1 + 809.00048828125 + + + 1 + 925.00048828125 + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + FCC_New/ActuatorControl + FCC_New + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator3_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor3_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act3_cmd + 1 + + + Act3_pos + + + Actuator3 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Pitch_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Pitch_loop + + 1 + 438.000244140625 + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + FCC_New/AHRSControl + FCC_New + AHRSControl + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop_caller + + ({true}_0) + + + AHRSControl/AHRS_Control/AHRSLoopCtrl/Heli_outer_loop/Pitch_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Pilot_theta_cmd + + + theta + 1 + + + theta_cmd + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + Actuator2_loop + true + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + -2 + Test Unit (copied from FCC_Sys_New)/FCC_New/ActuatorControl/Actuator_Control + FCC_Sys_New_harness/Test Unit (copied from FCC_Sys_New)/FCC_New + Actuator2_loop + + 1 + 780.00048828125 + + + 1 + 914.00048828125 + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + FCC_New/ActuatorControl + FCC_New + ActuatorControl + + ActuatorControl/Actuator_Control/Actuator2_loop_caller + + ({true}_0) + + + ActuatorControl/Actuator_Control/Actuaor2_loop + + ({true}_0) + + Scoped Local + + + I0 + + + I1 + 1 + + + O0 + 2 + + + Act2_cmd + 1 + + + Act2_pos + + + Actuator2 + 2 + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + + 1 + + Numeric + numerictype('double') + + + -1 + + + + + true + + + + + + sltpEvents + + + sltpTaskGroups + + + + + + Cont + + + _task0 + + + + D2 + + + _task1 + + + sltpTasks + + + + + \ No newline at end of file diff --git a/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/binfo.mat b/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/binfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..e75e1c2bcc1428f748c9e8f1a9b7e61bdbbe499c GIT binary patch literal 23424 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/minfo.mat b/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/minfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..e175f6c553cb2d6bc5ea278bd0810726dffaf466 GIT binary patch literal 2490 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 z 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 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/tr b/src/validation/slprj/ert/FCC_Sys_New_harness/tmwinternal/tr new file mode 100644 index 0000000000000000000000000000000000000000..3be252309cc70ffcf1af19e72dfc7ef5a4ff58e9 GIT binary patch literal 118700 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 Q4f=Qc|7R_KHR=ENe-|j^SpWb4 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/_sharedutils/AHRSControl_AHRS_Control.h b/src/validation/slprj/ert/_sharedutils/AHRSControl_AHRS_Control.h new file mode 100644 index 0000000..bd21151 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/AHRSControl_AHRS_Control.h @@ -0,0 +1,33 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: AHRSControl_AHRS_Control.h + * + * Code generated for Simulink model 'AHRSControl'. + * + * Model version : 1.131 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:50:39 2020 + */ + +#ifndef RTW_HEADER_AHRSControl_AHRS_Control_ +#define RTW_HEADER_AHRSControl_AHRS_Control_ + +/* Shared type includes */ +#include "rtwtypes.h" +#include "AHRS_Bus.h" + +extern void AHRSControl_AHRS_Control(const int16_T rtu_Pilot_theta_cmd, const + int16_T rtu_Pilot_phi_cmd, const int16_T rtu_Pilot_r_cmd, const AHRS_Bus + *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T + rty_actuator_commands[3]); + +#endif + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/_sharedutils/AHRS_Bus.h b/src/validation/slprj/ert/_sharedutils/AHRS_Bus.h new file mode 100644 index 0000000..a6b6099 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/AHRS_Bus.h @@ -0,0 +1,46 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: AHRS_Bus.h + * + * Code generated for Simulink model 'FCC_Sys_New_harness'. + * + * Model version : 1.91 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:26 2020 + */ + +#ifndef RTW_HEADER_AHRS_Bus_h_ +#define RTW_HEADER_AHRS_Bus_h_ +#include "rtwtypes.h" + +typedef struct { + /* Pitch angle */ + real_T theta; + + /* Roll angle */ + real_T phi; + + /* Heading angle */ + real_T psi; + + /* Pitch rate */ + real_T q; + + /* Roll rate */ + real_T p; + + /* Yaw rate */ + real_T r; + boolean_T valid; +} AHRS_Bus; + +#endif /* RTW_HEADER_AHRS_Bus_h_ */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/_sharedutils/Actuator_Control.h b/src/validation/slprj/ert/_sharedutils/Actuator_Control.h new file mode 100644 index 0000000..b09b7e6 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/Actuator_Control.h @@ -0,0 +1,32 @@ +/* + * Academic License - for use in teaching, academic research, and meeting + * course requirements at degree granting institutions only. Not for + * government, commercial, or other organizational use. + * + * File: Actuator_Control.h + * + * Code generated for Simulink model 'ActuatorControl'. + * + * Model version : 1.72 + * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019 + * C/C++ source code generated on : Thu Jul 16 18:51:02 2020 + */ + +#ifndef RTW_HEADER_Actuator_Control_ +#define RTW_HEADER_Actuator_Control_ + +/* Shared type includes */ +#include "rtwtypes.h" + +extern void Actuator_Control(const int16_T rtu_Act1_pos, const real_T + rtu_Act1_cmd, const int16_T rtu_Act2_pos, const real_T rtu_Act2_cmd, const + int16_T rtu_Act3_pos, const real_T rtu_Act3_cmd, int16_T *rty_Actuator1, + int16_T *rty_Actuator2, int16_T *rty_Actuator3); + +#endif + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/_sharedutils/checksummap.mat b/src/validation/slprj/ert/_sharedutils/checksummap.mat new file mode 100644 index 0000000000000000000000000000000000000000..2c38d39802c5198846acebf18de82b7fcb9e822d GIT binary patch literal 2272 zcmV<62p{)NK~zjZLLfCRFd$7qR4ry{Y-KDUP;6mzW^ZzBIv`L(S4mDbG%O%Pa%Ew3 zWn>_4ZaN@TXmub;b!;FpHXt!LIyEplGcq7DFfuS8ARr(hARr(hARr(hARr(hARr(h zARr(hARr(hARr(hARr(hARr(B00000000000ZB~{000132mk47K6H9ThVyCINl*#V1J?eO8H9O9qibEvs2=N*C3S4>s zaY6k6oVak{g47Sdm3iwOyq>Ig9Xqai@W|`+?Ec>G&6|1i-t*jW9Os{p9OtUOzoD-g zr`xW?{Y#1Kn!Z{zY}F6Aen0Enil2X?FGXb&RM~Hcnvxw?=|>)fu4I8?!jDOvj$%CA zU=my<wVVhy#+nk_vBwJw=zIaaGm;bo&XeUDKe z!q67&navo% z{5%A5?6C}p(Xv#?(~^NOS_VRlmX+l^Eg1--Wgx_8DXivc$v_w_10i1s!GZd9*@3c` zg(y)T4uIf#Z?iU2WiR0cTR=UKCB^~c2bJKV`)Pm(8OA4zBiaqy)Nc;5r79r=c?g@w z3Z(W#?SmWO@`R&p`sl|s*3>Qu7Rt^T+X1kI=5e4s0z+SS0hRVs zw?&!%m8@4v>3T2^-gkO=a5jFP%!4ydFAv_-JkkGwzGx zspjy!Z}DJ%ZDFafu(FJw!fNk3`b?Vlyz`Ed+yIx38Ha$q6%tUo~~Wz;z^5x#x6rNrd=z`7h~7Cc(Uv= zL}S`jSiKm#&c%~ummwM@Ug?+<@-Z~dw7r_Ucfd%6C)t#6jx zX!f5z|8D6e+W*4{R;EH+%K$>Z%MOFp8}aHtS%lfMdAW-9(ixSH`;mNPt)_j0UXowK+~q@f$3VN z=YiAn!0CD5t2qzEhI#JT$qfoL`Fm&IdA5R{nRsD#-Mo^qYpeb7@`87-*9bzS2B%#Fw)w2Pve%x+k!JYf_vz2?ff(` zJmPoEf{5zL*eEG9m@Y!95oB=BGm@T1Nop{A9HRj(WP&CCs)E1a@a_EU;xDvlVJcuA zk^?$T5~&OXLXuB$*i0m?8{#zTpwjg?YYt~^1P5c*5eSx*ed$T%lhAjl^Z(W1Y&x9H zG3$wC+~l#~Hjug*q;VEnopIU~oH>UxmveUE3==_^2uYzsW*A)blVSnZ?q!AD702#M zY1f*8E=U_h^=g0tsv_J;JzwYrDsA>DXn%MBHoE;64y2)MwFY2t*5)Z9qb z&qAWR)T8*28ZNl$gO;iCFoO)#&8m9#(c#$n1ydpQ6N1HI%0dK<0<#i1pj(yyTaH~j zZ!6TOZV>R6igFCs*w0Emr)U*L7<}{uQ&|h7EvH+-*>*T~ejt5>bJG{L=cSf_%UDlG1!Ov<{iZ-TTWPnje7fb(XqQY&h9}My=$FD6XeBb$G)AP=ZXBM zNaSOTY>J=fIY-SmHnm~qe&^QVtUH|bYL3)q7*t2EWrwp|$)UEr0Mv=|f@6Q7jE5(0 zQ02SR*ydb=S4N|b-=7@2cK+brBkVz-4KO1k?v=ac$+}e8&+Zw8E>GF_O7l(mo2T1Zc7elX%wfpFbNrl`CI*UG#&fRigk=a)rrrJ!?E*LcIRr-@gAYE uC*kSQ5#_NEEYYa5Ynf4W!DWIf1Z{h*vujz#+p6Hr4Dn{N`|N+G#FDnUw0V*M literal 0 HcmV?d00001 diff --git a/src/validation/slprj/ert/_sharedutils/html/AHRSControl_AHRS_Control_h.html b/src/validation/slprj/ert/_sharedutils/html/AHRSControl_AHRS_Control_h.html new file mode 100644 index 0000000..44972fb --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/AHRSControl_AHRS_Control_h.html @@ -0,0 +1,84 @@ + + + + + + + + + + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: AHRSControl_AHRS_Control.h
    7 *
    8 * Code generated for Simulink model 'AHRSControl'.
    9 *
    10 * Model version : 1.131
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:50:39 2020
    13 */
    14
    15#ifndef RTW_HEADER_AHRSControl_AHRS_Control_
    16#define RTW_HEADER_AHRSControl_AHRS_Control_
    17
    18/* Shared type includes */
    19#include "rtwtypes.h"
    20#include "AHRS_Bus.h"
    21
    22extern void AHRSControl_AHRS_Control(const int16_T rtu_Pilot_theta_cmd, const
    23 int16_T rtu_Pilot_phi_cmd, const int16_T rtu_Pilot_r_cmd, const AHRS_Bus
    24 *rtu_AHRS1, const AHRS_Bus *rtu_AHRS2, const AHRS_Bus *rtu_AHRS3, real_T
    25 rty_actuator_commands[3]);
    26
    27#endif
    28
    29/*
    30 * File trailer for generated code.
    31 *
    32 * [EOF]
    33 */
    34
    +
    + + diff --git a/src/validation/slprj/ert/_sharedutils/html/AHRS_Bus_h.html b/src/validation/slprj/ert/_sharedutils/html/AHRS_Bus_h.html new file mode 100644 index 0000000..f32541a --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/AHRS_Bus_h.html @@ -0,0 +1,110 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: AHRS_Bus.h
    7 *
    8 * Code generated for Simulink model 'FCC_Sys_New_harness'.
    9 *
    10 * Model version : 1.91
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:26 2020
    13 */
    14
    15#ifndef RTW_HEADER_AHRS_Bus_h_
    16#define RTW_HEADER_AHRS_Bus_h_
    17#include "rtwtypes.h"
    18
    19typedef struct {
    20 /* Pitch angle */
    21 real_T theta;
    22
    23 /* Roll angle */
    24 real_T phi;
    25
    26 /* Heading angle */
    27 real_T psi;
    28
    29 /* Pitch rate */
    30 real_T q;
    31
    32 /* Roll rate */
    33 real_T p;
    34
    35 /* Yaw rate */
    36 real_T r;
    37 boolean_T valid;
    38} AHRS_Bus;
    39
    40#endif /* RTW_HEADER_AHRS_Bus_h_ */
    41
    42/*
    43 * File trailer for generated code.
    44 *
    45 * [EOF]
    46 */
    47
    +
    + + diff --git a/src/validation/slprj/ert/_sharedutils/html/Actuator_Control_h.html b/src/validation/slprj/ert/_sharedutils/html/Actuator_Control_h.html new file mode 100644 index 0000000..48f1f58 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/Actuator_Control_h.html @@ -0,0 +1,82 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: Actuator_Control.h
    7 *
    8 * Code generated for Simulink model 'ActuatorControl'.
    9 *
    10 * Model version : 1.72
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:02 2020
    13 */
    14
    15#ifndef RTW_HEADER_Actuator_Control_
    16#define RTW_HEADER_Actuator_Control_
    17
    18/* Shared type includes */
    19#include "rtwtypes.h"
    20
    21extern void Actuator_Control(const int16_T rtu_Act1_pos, const real_T
    22 rtu_Act1_cmd, const int16_T rtu_Act2_pos, const real_T rtu_Act2_cmd, const
    23 int16_T rtu_Act3_pos, const real_T rtu_Act3_cmd, int16_T *rty_Actuator1,
    24 int16_T *rty_Actuator2, int16_T *rty_Actuator3);
    25
    26#endif
    27
    28/*
    29 * File trailer for generated code.
    30 *
    31 * [EOF]
    32 */
    33
    +
    + + diff --git a/src/validation/slprj/ert/_sharedutils/html/css/coder_app.css b/src/validation/slprj/ert/_sharedutils/html/css/coder_app.css new file mode 100644 index 0000000..d47cf0e --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/css/coder_app.css @@ -0,0 +1,184 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +pre#code { + font-family: Consolas, Courier; + font-size: small; +} + +.ct { + font-style: italic; + color: #117755 +} /* comment */ +.pp { + font-weight:bold; + color: #992211 +} /* preprocessor */ +.kw, .br { + font-weight:bold; + color: #112266 +} /* keyword or brace */ +.dt { + font-weight:bold; + color: #112266 +} /* data type */ +.tk { + font-style: normal; + color: #112266 +} /* regular token */ +pre#code a.req { + text-decoration: none; + color: #112266 +} +pre#code a.req_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.req_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +pre#code a.blk { + text-decoration: none; +} +pre#code a.blk_active { + cursor: pointer; + text-decoration: underline; +} +pre#code a.blk_active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} +a.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight token */ +tr.hilite { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); +} /* highlight row */ +a.hiliteToken, tr.hiliteToken, td.hiliteToken { + background-color: #ffff99; +} +.hiliteCurrentLine, tr.hiliteCurrentLine > td { + font-style: normal; + color: black; + background-color: rgba(150, 12, 116, 0.1); + box-shadow: inset 0 1px 0 0 rgba(150, 12, 116, 0.25), inset 0 -1px 0 0 rgba(150, 12, 116, 0.25); +} +span.hiliteTotalLine { + font-style: normal; + color: #aff; +} +a.tk { + text-decoration: none; +} +a.tk:hover { + text-decoration: none; +} +a.active { + text-decoration: underline; +} +a.active:hover { + cursor: pointer; + color: blue; + text-decoration: underline +} /* hyperlink */ +table.code { + border: 0px +} +table.code td { + vertical-align: top; +} +table.code td.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} +table.code > tr:first { + text-align: right; +} /* hyperlink */ + +ul.popup_attrib_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.popup_attrib_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} +.highlighted { + background-color:yellow; +} +a:class1 { + color: -webkit-link; + text-decoration: underline; + cursor: hand; +} +.scroll +{ + height:80px; + overflow:scroll; + overflow-x:hidden; +} +div#popup_window { + position: absolute; + background-color: rgb(203,203,255); + border: solid 3px #ECECEC; + border-radius: 5px; + /* shadow box around the window*/ + -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + box-shadow: 0 3px 3px rgba(0,0,0,0.4), inset 0 1px #FFF; + padding: 2px; +} +div#popup_window a { + text-decoration: none; + color: green; +} +div#popup_window a:hover { + cursor: pointer; + text-decoration: underline; + color: blue; +} +div#popup_window tr.selected { + background-color: #ffff99; +} +div#token_usage_nav { + border-bottom: 1px solid gray; +} +table#token_usage_details { + cellpadding: 100px; + table-layout:fixed; + border: 0px; +} +.token_usage_details_tabrow { + width: 40px; +} +table#token_usage_details td { + padding-right: 5em; + padding-left: 1em; +} +.token_usage_details_tabrow:hover { + background-color: gray; +} +.nav_table td.hidden { + display: none; +} +table#codeTbl tr td { + color: #112266 +} +table#codeTbl tr td { + padding-left: 10px; +} +table#codeTbl tr td:first-child { + font-style: italic; + color: #888888; + text-align: right; + padding-left:0px; +} + diff --git a/src/validation/slprj/ert/_sharedutils/html/inspect.html b/src/validation/slprj/ert/_sharedutils/html/inspect.html new file mode 100644 index 0000000..b628c7a --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/inspect.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + +
    + + diff --git a/src/validation/slprj/ert/_sharedutils/html/js/coder_app.js b/src/validation/slprj/ert/_sharedutils/html/js/coder_app.js new file mode 100644 index 0000000..3c34823 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/js/coder_app.js @@ -0,0 +1,525 @@ +/* Copyright 2013-2018 The MathWorks, Inc. */ +function queryByClassName(className, elem) { + if (!elem) elem = document.body; + if (typeof elem.querySelectorAll === "function") { + return elem.querySelectorAll("."+className); + } else { + return elem.getElementsByClass(className); + } +} + +function nav_token_usage_details(direction) { + var els = queryByClassName("token_usage_details_tabrow"); + var selectedIdx = 0; + var selectedClassName = "selected"; + for (selectedIdx; selectedIdx < els.length; selectedIdx++) { + if (els[selectedIdx].classList.contains(selectedClassName)) { + break; + } + } + var nextIdx = selectedIdx; + if (direction === -1 && selectedIdx > 0) { + nextIdx = selectedIdx-1; + } else if (direction === 1 && selectedIdx < els.length - 1) { + nextIdx = selectedIdx + 1; + } + if (nextIdx !== selectedIdx) { + els[selectedIdx].classList.remove(selectedClassName); + els[nextIdx].classList.add(selectedClassName); + els[nextIdx].scrollIntoView(alignWithTop=false); + } + return false; +} + +function tabrowClicked(event) { +} + +function popupOnload() { + var els = queryByClassName("token_usage_details_tabrow"); + for (var i=0; i" + + top.rtwGetFileName(link2Src) + "
    "; + var bodyNode = document.body; + bodyNode.insertBefore(link, bodyNode.firstElementChild); + } + top.updateHyperlinks(); + // update fileSelector frame + if (top.fileSelector) { + var o = top.fileSelector.document.getElementById('fileSelector'); + if (o) { + o.value = filename; + } + } + // add links to line numbers + var hasLineFlag = null; + if (top.TraceInfoLineFlag && top.TraceInfoLineFlag.instance) { + hasLineFlag = true; + } else { + hasLineFlag = false; + } + + if(hasLineFlag) { + var lines = queryByClassName("ln", codeElement); + var lineTraceFlag = top.TraceInfoLineFlag.instance.lineTraceFlag; + var lineNo = null; + for (var i=0; i= 0; --i) { + var childNode = trNode.childNodes[i]; + if (childNode.tagName.toUpperCase() === "TD") { + return childNode.childNodes; + } + } + return null; +} + +// see g1225075 +function fixBoxStyleFnHeaderLineWidths() { + // Match strings like "/**********/" which is the top line of + // a box-style function comment header + var reBoxHeader = /\/\*+\//; + + // Match strings like "' */" which is the contents of the text + // element originally generated in the report to pad the width of + // the line. + var rePadding = /'\s*\*\//; + + // All block identifier elements in the report page + blkLineElts = queryByClassName("blk"); + for (var i = 0; i < blkLineElts.length; ++i) { + var origPadding = blkLineElts[i].nextSibling; + if (origPadding.textContent.match(rePadding)) { + var spanElt = findParent(blkLineElts[i], { tagName: "span", className: "ct" }); + if (!spanElt) { + continue; + } + + // The numbered line in the report containing block identifier "i" + var tableRowElt = findParent(spanElt, { tagName: "tr" }); + if (!tableRowElt) { + continue; + } + + // Loop backward through table rows (i.e., report lines) looking + // for the "/***************/" start of the header. When found save + // its pixel width. Not actually the width of the itself but + // the span inside its last . This is will determine the real + // padding that is needed for proper alignment regardless of font + // or CKJ characters. + var targetWidth = 0; + var sanity = Number.MAX_VALUE; + var node = tableRowElt.previousSibling; + while (node && (sanity-- > 0)) { + var lastCellContents = getLastTableCellContents(node); + if (lastCellContents) { + if (lastCellContents.length === 0) { + break; + } + if (lastCellContents[0].textContent.match(reBoxHeader)) { + targetWidth = lastCellContents[0].offsetWidth; + break; + } + } + node = node.previousSibling; + } + + // If applying a new padding (i.e., targetWidth > 0), replace + // the original padding "' */' (a single text element) with + // two text elements and a span in between. The span will be the + // new pixel-accurate padding. + if (targetWidth > 0) { + var singleQuoteNode = document.createTextNode("'"); + var spacerNode = document.createElement('span'); + origPadding.textContent = "*/"; + origPadding.parentNode.insertBefore(spacerNode, origPadding); + origPadding.parentNode.insertBefore(singleQuoteNode, spacerNode); + + var padWidth = targetWidth - spanElt.offsetWidth; + spacerNode.style.display = 'inline-block'; + spacerNode.style.width = String(padWidth) + "px"; + spacerNode.style.height = '1em'; // cursor won't work w/o some height + spacerNode.style.cursor = 'text'; + } + } + } +} + +// the onload function for source file +function srcFileOnload() { + var codeElement = document.getElementById("codeTbl"); + var insertFunction = getInsertFunction(codeElement); + try { + var els = codeElement.getElementsByTagName("tr"); + for (var i = 0; i < els.length; i++) { + registerDelayedOnMouseOver(els[i], lineOnMouseIn, lineOnMouseOut); + } + updateToken(codeElement); + } catch (err) {}; + insertFunction(); + // add code to model hyperlinks for all tokens + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + // highlight the filename in the TOC frame + if (top.rtwreport_contents_frame && top.hiliteByFileName(top.rtwreport_document_frame.document.location.href)) { + // remove the highlights in the TOC frame if filename is hilite successfully + top.removeHiliteTOC(top.rtwreport_contents_frame); + } + + // annotate code with code coverage data + if (typeof rtwannotate === 'function') { + rtwannotate(filename.replace(/.html$/,"_cov.xml")); + } + + fixBoxStyleFnHeaderLineWidths(); + + // highlight token and row + if (top.RTW_TraceInfo.instance && top.RTW_TraceArgs.instance) { + var i; + // find the highlight file name + var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(filename); + var ids=[], rows=[]; + if (typeof fileIdx !== "undefined") { + ids = top.RTW_TraceArgs.instance.getIDs(fileIdx); + rows = top.RTW_TraceArgs.instance.getRows(fileIdx); + // highlight rows in file + for (i=0; i 0) + top.RTW_TraceInfo.instance.setInitLocation(filename,rows[0]); + else { + top.toggleNavSideBar("off"); + return; + } + } + + // display navigation side bar + if (top.rtwreport_nav_frame) top.rtwreport_nav_frame.location.reload(); + if (rows.length>0) { + top.toggleNavSideBar("on"); + top.toggleNavToolBar("on"); + } else { + top.toggleNavSideBar("off"); + } + } + top.scrollToLineBasedOnHash(document.location.hash); + function getHash() { + var loc; + var aHash=""; + var topDocObj = top.window.document; + // get the hash value from location. + loc = topDocObj.location; + loc = loc.search || loc.hash; + aHash = loc.substring(1); + aHash = decodeURI(aHash); + return aHash; + } +} + +function createPopup(filename, evt) { + var anchorObj = evt.currentTarget; + if (anchorObj.children.length > 0) + return; + var filename = location.pathname.split(/\//); + filename = filename[filename.length-1]; + var windowObj = top.getInspectWindow(); + var propObj = top.getInspectData(filename, anchorObj); + var navObj = top.getInspectLink(filename, location.pathname, anchorObj); + if (propObj) { + windowObj.appendChild(propObj); + windowObj.style.left = "0px"; + if (anchorObj.parentElement.nodeName === "TD" && + anchorObj.parentElement.parentElement.nodeName === "TR") { + anchorObj.parentElement.parentElement.lastChild.insertBefore(windowObj, + anchorObj.parentElement.parentElement.lastChild.lastChild.nextSibling); + var left = Math.min(evt.clientX , window.innerWidth - windowObj.scrollWidth - 30); + left = Math.max(0, left); + windowObj.style.left = "" + left + "px"; + } + } +}; + +function destroyPopup(anchorObj) { + var popWindow = document.getElementById("popup_window"); + if (popWindow) { + popWindow.parentElement.removeChild(popWindow); + } +}; diff --git a/src/validation/slprj/ert/_sharedutils/html/model_reference_types_h.html b/src/validation/slprj/ert/_sharedutils/html/model_reference_types_h.html new file mode 100644 index 0000000..0e48d99 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/model_reference_types_h.html @@ -0,0 +1,130 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: model_reference_types.h
    7 *
    8 * Code generated for Simulink model 'FCC_New'.
    9 *
    10 * Model version : 1.98
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:51:15 2020
    13 */
    14
    15#ifndef MODEL_REFERENCE_TYPES_H
    16#define MODEL_REFERENCE_TYPES_H
    17#include "rtwtypes.h"
    18#ifndef MODEL_REFERENCE_TYPES
    19#define MODEL_REFERENCE_TYPES
    20
    21/*===========================================================================*
    22 * Model reference type definitions *
    23 *===========================================================================*/
    24/*
    25 * This structure is used by model reference to
    26 * communicate timing information through the hierarchy.
    27 */
    28typedef struct _rtTimingBridge_tag rtTimingBridge;
    29struct _rtTimingBridge_tag {
    30 uint32_T nTasks;
    31 uint32_T** clockTick;
    32 uint32_T** clockTickH;
    33 uint32_T* taskCounter;
    34 real_T** taskTime;
    35 boolean_T** rateTransition;
    36 boolean_T *firstInitCond;
    37};
    38
    39/*
    40 * This structure is used by model reference to
    41 * communicate variable discrete rate timing information through the hierarchy.
    42 */
    43typedef struct _rtCtrlRateMdlRefTiming_tag rtCtrlRateMdlRefTiming;
    44struct _rtCtrlRateMdlRefTiming_tag {
    45 uint32_T firstCtrlRateTID;
    46 uint32_T* numTicksToNextHitForCtrlRate;
    47};
    48
    49#endif /* MODEL_REFERENCE_TYPES */
    50#endif /* MODEL_REFERENCE_TYPES_H */
    51
    52/*
    53 * File trailer for generated code.
    54 *
    55 * [EOF]
    56 */
    57
    +
    + + diff --git a/src/validation/slprj/ert/_sharedutils/html/nav.html b/src/validation/slprj/ert/_sharedutils/html/nav.html new file mode 100644 index 0000000..64f68db --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/nav.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/src/validation/slprj/ert/_sharedutils/html/navToolbar.html b/src/validation/slprj/ert/_sharedutils/html/navToolbar.html new file mode 100644 index 0000000..d07c72e --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/navToolbar.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/validation/slprj/ert/_sharedutils/html/rtwreport.css b/src/validation/slprj/ert/_sharedutils/html/rtwreport.css new file mode 100644 index 0000000..54b994a --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/rtwreport.css @@ -0,0 +1,257 @@ +/* Copyright 2011-2016 The MathWorks, Inc. */ +body,p,table {font-family: calibri, verdana, sans-serif;} +button,.buton {font-family: calibri, verdana, sans-serif;} +button,.button {font-size: small;} +.small_font {font-size: small;} +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } +input { font-family: sans-serif, verdana, calibri; } +table { + background-color: #ffffff; + width: 100%; +} + +table.toc, table.button, table.panel { + border-style: none; +} + +/* LineNumber */ +.LN { + font-style: italic; + color: #888888; +} + +/* Comment */ +.CT { + font-style: italic; + color: #117755; +} + +/* PreProcessor */ +PP { + /* font-weight: bold; */ + color: #992211; +} + +/* Keyword */ +.KW { + /* font-weight: bold; */ + color: #0000FF; +} + +/* Datatype */ +.DT { + /* font-weight: bold; */ + color: #112266 +} + +.highlighted { + background-color: yellow; +} + +.highlightedCurrent { + background-color: rgba(150, 12, 116, 0.1); +} + +input.search { + background-color: #ffffff; +} + +input.failedSearch { + background-color: #F78181; +} + +/* ensure that code2model links are comment green */ +a.code2model:link { + color: #117755; + font-style: italic; +} +a.code2model:visited{ + color: #117755; + font-style: italic; +} + +.toc td, .button td, .panel td { + border-style: none; + padding: 4px; +} + +h1 { font-weight: normal; color: #000066; } +td { vertical-align: top } +th { background-color: #eeeeee; text-align: left; } +a:link { color: #0033cc; } +a:visited { color: #666666; } + +/******* table *******/ +/* default table style */ +table.AltRow { + border-collapse: collapse; border: none; border-spacing: 0pt; + border-top: solid #4F81BD 1.0pt; border-bottom: solid #4F81BD 1.0pt; +} +table.AltRow th, table.AltRow td { padding: 2pt 8pt 2pt 2pt } +/* default alternating row style */ +table.AltRow tr.even td { background-color:#D3DFEE; border:none;} +table.AltRow tr.odd td { background-color:#FFFFFF; border:none;} +/* tr class="heading" */ +table.AltRow tr.heading td, table.AltRow th { + background-color:#FFFFFF; font-weight:bold; border:none; + border-bottom: solid #4F81BD 1.0pt; +} +/* table class="FirstColumn" */ +table.FirstColumn td:first-child { font-weight:bold } +/* table class="TotalRow" */ +table.TotalRow tr:last-child { font-weight:bold } +table.TotalRow tr:last-child td { border-top: solid #4F81BD 1.0pt } + +a.closeButton { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) ); + background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9'); + background-color:#f9f9f9; + -webkit-border-top-left-radius:20px; + -moz-border-radius-topleft:20px; + border-top-left-radius:20px; + -webkit-border-top-right-radius:20px; + -moz-border-radius-topright:20px; + border-top-right-radius:20px; + -webkit-border-bottom-right-radius:20px; + -moz-border-radius-bottomright:20px; + border-bottom-right-radius:20px; + -webkit-border-bottom-left-radius:20px; + -moz-border-radius-bottomleft:20px; + border-bottom-left-radius:20px; + text-indent:0; + border:2px solid #dcdcdc; + display:inline-block; + color:#454143; + font-family:Arial; + font-size:15px; + font-weight:bold; + font-style:normal; + height:20px; + line-height:20px; + width:20px; + text-decoration:none; + text-align:center; + cursor: pointer; +} +a.closeButton:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) ); + background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e9e9e9', endColorstr='#f9f9f9'); + background-color:#e9e9e9; +} +a.closeButton:active { + position:relative; + top:1px; +} + +.button { + -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; + -webkit-border-top-left-radius:5px; + -moz-border-radius-topleft:5px; + border-top-left-radius:5px; + -webkit-border-top-right-radius:5px; + -moz-border-radius-topright:5px; + border-top-right-radius:5px; + -webkit-border-bottom-right-radius:5px; + -moz-border-radius-bottomright:5px; + border-bottom-right-radius:5px; + -webkit-border-bottom-left-radius:5px; + -moz-border-radius-bottomleft:5px; + border-bottom-left-radius:5px; + text-indent:0px; + border:1px solid #dcdcdc; + display:inline-block; + color:black; + font-family:Arial; + font-size:12px; + font-weight:bold; + font-style:normal; + height:12px; + line-height:12px; + width:45px; + text-decoration:none; + text-align:center; + text-shadow:1px 1px 0px #ffffff; +} +.button:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #ededed) ); + background:-moz-linear-gradient( center top, #dfdfdf 5%, #ededed 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed'); + background-color:#dfdfdf; +}.button:active { + position:relative; + top:1px; +}.button:disabled { + color:#777777; +} + +ul.nav_list { + list-style-type:none; + display: block; + margin: 0; + padding: 0; +} +ul.nav_list li { + list-style-type:none; + display: inline; + margin: 0 18px 0 0; + padding: 0; +} + +.nav_toolbar { + background-color: ivory; + margin-top: 0; +} + +.inspect_body { + margin: 0; + margin-bottom: 0; + display: inline; + vertical-align:middle; +} + +table.nav_table { + background-color: ivory; + border: none; + width: 100%; + display: inline; + vertical-align:middle; +} + +table#rtwIdTracePanel > tr > td { + white-space: nowrap; + table-layout:fixed; + vertical-align:middle; +} + +table.nav_table > button { + height: 20px; +} +select#fileSelector { + padding: 5px; + font-size: 16px; + line-height: 1; + border-radius: 0; + height: 34px; +} + +.treeTable table{ + table-layout: fixed; +} +.treeTable td:first-child > span{ + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + width: 100%; +} diff --git a/src/validation/slprj/ert/_sharedutils/html/rtwreport_utils.js b/src/validation/slprj/ert/_sharedutils/html/rtwreport_utils.js new file mode 100644 index 0000000..f58fb49 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/rtwreport_utils.js @@ -0,0 +1,92 @@ +// Copyright 2011-2013 The MathWorks, Inc. + + +function local_onload() { + if (typeof top.rtwreport_document_frame !== "undefined") { + var docObj = window.document; + var alink = docObj.getElementById("linkToText_plain"); + if (alink) { + alink.href = "matlab:coder.internal.editUrlTextFile('" + alink.href + "')"; + } + alink = docObj.getElementById("linkToCS"); + if (alink) { + alink.href = "matlab:coder.internal.viewCodeConfigsetFromReport('" + alink.href + "');"; + } + } +} + +var utils = (function() { + + // Load via Microsoft.XMLDOM--for older versions of IE + function loadXML_MSXMLDOM(filename, callback, async) { + if (navigator.appName == "Microsoft Internet Explorer") { + // Internet Explorer 5/6 + try { + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = async; + xmlDoc.onreadystatechange = function() { + if (xmlDoc.readyState == 4) { + callback(xmlDoc); + } + } + xmlDoc.load(filename); + return true; + } catch(e) { + } + } + return false; + } + + // Load via XMLHttpRequest + function loadXML_XHR(filename, callback, async) { + if (window.XMLHttpRequest) { + try { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + callback(this.responseXML); + } + } + xhr.open("GET", filename, async); + xhr.send(""); + return true; + } catch(e) { + if (navigator.appName === "Netscape" && e.code === 1012) { + // file not found: ignore + return true; + } + } + } + return false; + } + + return { + trimText: function(s) { + // In IE9, String.trim not present + if (s && s.trim) { + return s.trim(); + } + else { + return s; + } + }, + getText: function(elt) { + // In IE9, use 'text' property rather than 'textContent' + return elt.textContent ? elt.textContent : elt.text; + }, + loadXML: function(filename, callback, options) { + var async = !!options && typeof(options["async"]) !== "undefined" ? options.async : true; + if (!loadXML_XHR(filename, callback, async)) { + if (!loadXML_MSXMLDOM(filename, callback, async)) { + return false; + } + } + return true; + } + }; +})(); + +function code2model(sid) { + utils.loadXML("http://localhost:31415/matlab/feval/coder.internal.code2model?arguments=[\"" + sid + "\"]", function() {}); + //window.location.href = "matlab:coder.internal.code2model('" + sid + "')"; +} diff --git a/src/validation/slprj/ert/_sharedutils/html/rtwtypes_h.html b/src/validation/slprj/ert/_sharedutils/html/rtwtypes_h.html new file mode 100644 index 0000000..c629a46 --- /dev/null +++ b/src/validation/slprj/ert/_sharedutils/html/rtwtypes_h.html @@ -0,0 +1,306 @@ + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    1/*
    2 * Academic License - for use in teaching, academic research, and meeting
    3 * course requirements at degree granting institutions only. Not for
    4 * government, commercial, or other organizational use.
    5 *
    6 * File: rtwtypes.h
    7 *
    8 * Code generated for Simulink model 'AHRSControl'.
    9 *
    10 * Model version : 1.131
    11 * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
    12 * C/C++ source code generated on : Thu Jul 16 18:50:39 2020
    13 */
    14
    15#ifndef RTWTYPES_H
    16#define RTWTYPES_H
    17
    18/* Logical type definitions */
    19#if (!defined(__cplusplus))
    20# ifndef false
    21# define false (0U)
    22# endif
    23
    24# ifndef true
    25# define true (1U)
    26# endif
    27#endif
    28
    29/*=======================================================================*
    30 * Target hardware information
    31 * Device type: Intel->x86-32 (Windows32)
    32 * Number of bits: char: 8 short: 16 int: 32
    33 * long: 32 long long: 64
    34 * native word size: 32
    35 * Byte ordering: LittleEndian
    36 * Signed integer division rounds to: Zero
    37 * Shift right on a signed integer as arithmetic shift: on
    38 *=======================================================================*/
    39#ifdef PORTABLE_WORDSIZES /* PORTABLE_WORDSIZES defined */
    40
    41/*=======================================================================*
    42 * Host information
    43 * Number of bits: char: 8 short: 16 int: 32
    44 * long: 32
    45 * long long: 64
    46 * native word size: 64
    47 *=======================================================================*/
    48
    49/*=======================================================================*
    50 * Fixed width word size data types: *
    51 * int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers *
    52 * uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers *
    53 * real32_T, real64_T - 32 and 64 bit floating point numbers *
    54 *=======================================================================*/
    55typedef signed char int8_T;
    56typedef unsigned char uint8_T;
    57typedef short int16_T;
    58typedef unsigned short uint16_T;
    59typedef int int32_T;
    60typedef unsigned int uint32_T;
    61typedef float real32_T;
    62typedef double real64_T;
    63
    64/*===========================================================================*
    65 * Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T, *
    66 * real_T, time_T, ulong_T, ulonglong_T. *
    67 *===========================================================================*/
    68typedef double real_T;
    69typedef double time_T;
    70typedef unsigned char boolean_T;
    71typedef int int_T;
    72typedef unsigned int uint_T;
    73typedef unsigned int ulong_T;
    74typedef unsigned long long ulonglong_T;
    75typedef char char_T;
    76typedef unsigned char uchar_T;
    77typedef char_T byte_T;
    78typedef long long int64_T;
    79typedef unsigned long long uint64_T;
    80
    81#else /* PORTABLE_WORDSIZES not defined */
    82
    83/*=======================================================================*
    84 * Fixed width word size data types: *
    85 * int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers *
    86 * uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers *
    87 * real32_T, real64_T - 32 and 64 bit floating point numbers *
    88 *=======================================================================*/
    89typedef signed char int8_T;
    90typedef unsigned char uint8_T;
    91typedef short int16_T;
    92typedef unsigned short uint16_T;
    93typedef int int32_T;
    94typedef unsigned int uint32_T;
    95typedef long long int64_T;
    96typedef unsigned long long uint64_T;
    97typedef float real32_T;
    98typedef double real64_T;
    99
    100/*===========================================================================*
    101 * Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T, *
    102 * real_T, time_T, ulong_T, ulonglong_T. *
    103 *===========================================================================*/
    104typedef double real_T;
    105typedef double time_T;
    106typedef unsigned char boolean_T;
    107typedef int int_T;
    108typedef unsigned int uint_T;
    109typedef unsigned long ulong_T;
    110typedef unsigned long long ulonglong_T;
    111typedef char char_T;
    112typedef unsigned char uchar_T;
    113typedef char_T byte_T;
    114
    115#endif /* PORTABLE_WORDSIZES */
    116
    117/*=======================================================================*
    118 * Min and Max: *
    119 * int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers *
    120 * uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers *
    121 *=======================================================================*/
    122#define MAX_int8_T ((int8_T)(127))
    123#define MIN_int8_T ((int8_T)(-128))
    124#define MAX_uint8_T ((uint8_T)(255U))
    125#define MAX_int16_T ((int16_T)(32767))
    126#define MIN_int16_T ((int16_T)(-32768))
    127#define MAX_uint16_T ((uint16_T)(65535U))
    128#define MAX_int32_T ((int32_T)(2147483647))
    129#define MIN_int32_T ((int32_T)(-2147483647-1))
    130#define MAX_uint32_T ((uint32_T)(0xFFFFFFFFU))
    131#define MAX_int64_T ((int64_T)(9223372036854775807LL))
    132#define MIN_int64_T ((int64_T)(-9223372036854775807LL-1LL))
    133#define MAX_uint64_T ((uint64_T)(0xFFFFFFFFFFFFFFFFULL))
    134
    135/* Block D-Work pointer type */
    136typedef void * pointer_T;
    137
    138#endif /* RTWTYPES_H */
    139
    140/*
    141 * File trailer for generated code.
    142 *
    143 * [EOF]
    144 */
    145
    +
    + + diff --git a/src/validation/slprj/ert/_sharedutils/html/spinner.gif b/src/validation/slprj/ert/_sharedutils/html/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4ab78302c5d6ff92def7688c291999a4fcbd70d GIT binary patch literal 4178 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 (Windows32) + * Number of bits: char: 8 short: 16 int: 32 + * long: 32 long long: 64 + * native word size: 32 + * Byte ordering: LittleEndian + * Signed integer division rounds to: Zero + * Shift right on a signed integer as arithmetic shift: on + *=======================================================================*/ +#ifdef PORTABLE_WORDSIZES /* PORTABLE_WORDSIZES defined */ + +/*=======================================================================* + * Host information + * Number of bits: char: 8 short: 16 int: 32 + * long: 32 + * long long: 64 + * native word size: 64 + *=======================================================================*/ + +/*=======================================================================* + * Fixed width word size data types: * + * int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers * + * uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers * + * real32_T, real64_T - 32 and 64 bit floating point numbers * + *=======================================================================*/ +typedef signed char int8_T; +typedef unsigned char uint8_T; +typedef short int16_T; +typedef unsigned short uint16_T; +typedef int int32_T; +typedef unsigned int uint32_T; +typedef float real32_T; +typedef double real64_T; + +/*===========================================================================* + * Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T, * + * real_T, time_T, ulong_T, ulonglong_T. * + *===========================================================================*/ +typedef double real_T; +typedef double time_T; +typedef unsigned char boolean_T; +typedef int int_T; +typedef unsigned int uint_T; +typedef unsigned int ulong_T; +typedef unsigned long long ulonglong_T; +typedef char char_T; +typedef unsigned char uchar_T; +typedef char_T byte_T; +typedef long long int64_T; +typedef unsigned long long uint64_T; + +#else /* PORTABLE_WORDSIZES not defined */ + +/*=======================================================================* + * Fixed width word size data types: * + * int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers * + * uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers * + * real32_T, real64_T - 32 and 64 bit floating point numbers * + *=======================================================================*/ +typedef signed char int8_T; +typedef unsigned char uint8_T; +typedef short int16_T; +typedef unsigned short uint16_T; +typedef int int32_T; +typedef unsigned int uint32_T; +typedef long long int64_T; +typedef unsigned long long uint64_T; +typedef float real32_T; +typedef double real64_T; + +/*===========================================================================* + * Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T, * + * real_T, time_T, ulong_T, ulonglong_T. * + *===========================================================================*/ +typedef double real_T; +typedef double time_T; +typedef unsigned char boolean_T; +typedef int int_T; +typedef unsigned int uint_T; +typedef unsigned long ulong_T; +typedef unsigned long long ulonglong_T; +typedef char char_T; +typedef unsigned char uchar_T; +typedef char_T byte_T; + +#endif /* PORTABLE_WORDSIZES */ + +/*=======================================================================* + * Min and Max: * + * int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers * + * uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers * + *=======================================================================*/ +#define MAX_int8_T ((int8_T)(127)) +#define MIN_int8_T ((int8_T)(-128)) +#define MAX_uint8_T ((uint8_T)(255U)) +#define MAX_int16_T ((int16_T)(32767)) +#define MIN_int16_T ((int16_T)(-32768)) +#define MAX_uint16_T ((uint16_T)(65535U)) +#define MAX_int32_T ((int32_T)(2147483647)) +#define MIN_int32_T ((int32_T)(-2147483647-1)) +#define MAX_uint32_T ((uint32_T)(0xFFFFFFFFU)) +#define MAX_int64_T ((int64_T)(9223372036854775807LL)) +#define MIN_int64_T ((int64_T)(-9223372036854775807LL-1LL)) +#define MAX_uint64_T ((uint64_T)(0xFFFFFFFFFFFFFFFFULL)) + +/* Block D-Work pointer type */ +typedef void * pointer_T; + +#endif /* RTWTYPES_H */ + +/* + * File trailer for generated code. + * + * [EOF] + */ diff --git a/src/validation/slprj/ert/_sharedutils/rtwtypeschksum.mat b/src/validation/slprj/ert/_sharedutils/rtwtypeschksum.mat new file mode 100644 index 0000000000000000000000000000000000000000..4bb6e1f7b5d924f7be9dab5e3682d10236898cc3 GIT binary patch literal 1515 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 OH}5D--pVGK_ZR?aXhi@3 literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/AHRSControl/tmwinternal/simulink_cache.xml b/src/validation/slprj/sim/varcache/AHRSControl/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..2c170d2 --- /dev/null +++ b/src/validation/slprj/sim/varcache/AHRSControl/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + 7f3aSNVoU30qHXW9CSFTIQ== + + \ No newline at end of file diff --git a/src/validation/slprj/sim/varcache/AHRSControl/varInfo.mat b/src/validation/slprj/sim/varcache/AHRSControl/varInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..ca0e0c6463d2ae2e76cff0fdcd36b4949c258556 GIT binary patch literal 1024 zcmbtSO>4qH5M8A$J(Siw)G$IB zB&7qhvu}3a%-avw@m`z`Z#Go!I-U|OV^Qa$*w3P5v$FZ9I~@#LW}SC8!p}s=leNvg zx12xcG1ppLvux9{HG}J_uJV$`q*Vs)EzQ3xj9pQ@Ca3AnE@=ctL=JvO{uC#HA5W9b zd-~ze1q0tAm;4Kw!z3TPV%^#SJN@xw*2z=w`{d{N_p~l`fe+jl@pAH+W@6Rr&4yyz zNaHZ1d>K9HRjdcR*qv+7e zTuOKKz^A}!tjfG}U+a;u?0f2e;9p5ScwgWZ`t$9d{uz1{>j3}vUDbmrh)085qc)}P NN8T^?*GMVe^#?mDS<(Oi literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/ActuatorControl/checksumOfCache.mat b/src/validation/slprj/sim/varcache/ActuatorControl/checksumOfCache.mat new file mode 100644 index 0000000000000000000000000000000000000000..9132a24081a90a78c09876ba59f4c86e4ff00ec3 GIT binary patch literal 392 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSf>P6fT&kE0a)WPvN-C0b;pRSS`S{y%zkKtK(&Vjdl6j8-LkC7N literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/ActuatorControl/tmwinternal/simulink_cache.xml b/src/validation/slprj/sim/varcache/ActuatorControl/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..b8423cd --- /dev/null +++ b/src/validation/slprj/sim/varcache/ActuatorControl/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + /lhm6Ci6z/pyTUJWeR+zeQ== + + \ No newline at end of file diff --git a/src/validation/slprj/sim/varcache/ActuatorControl/varInfo.mat b/src/validation/slprj/sim/varcache/ActuatorControl/varInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..1343b693dcb7c7481004d7038db124d0071b962b GIT binary patch literal 664 zcmb7AO>4qH5KW{N57PE0%)z6|###wE8FLWD6tMw&P3y)=S65=hzu`}IUeaI?zxv>1 zc6RgT&5Z8`BezFyO+mgJG@^x)bsDQMiFCYlXzWb~@11s?yjX^boRMBR6#Q&yxK(6z z$g-Wb?O3nW5-mY@!pLC`{3kx!%rdjWG?~C76FDM)`)6if>90^tb^N@~ literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/FCC_New/checksumOfCache.mat b/src/validation/slprj/sim/varcache/FCC_New/checksumOfCache.mat new file mode 100644 index 0000000000000000000000000000000000000000..a025c662ffb83bdffc1e664a220877dff97c6dbc GIT binary patch literal 392 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSA|TbL8)m#F5KKJvOPEZ88)%JY~Y;n=7&=qDdvLI`sSykA~_eQxd2@GM5q7& literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/FCC_New/tmwinternal/simulink_cache.xml b/src/validation/slprj/sim/varcache/FCC_New/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..599a4ae --- /dev/null +++ b/src/validation/slprj/sim/varcache/FCC_New/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + wHuMWbljhtPdRqF01+sI2A== + + \ No newline at end of file diff --git a/src/validation/slprj/sim/varcache/FCC_New/varInfo.mat b/src/validation/slprj/sim/varcache/FCC_New/varInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..818c582c81efa04febfbe7ab8caefc8f0b9103be GIT binary patch literal 680 zcmb7BO-sW-5Z!=^2T?EH_u#Q9n@^J5(iCjPl+pz1t!$c24Q?CB2gQHmPjx053_XN8 z@G|pe_f6jJhJO6wPpCC!H1uON%cU66rQ~&1lzWdZgY|r2nB5!jGh^!3uPYOLj9!>as~Ms0A(AO@I{Updx$&0lPnT0*G2hWeekUy zsCNLJ{sL-@PLI0&-1}ed&sNc9(p0FQ0fzJsu-^GXJ@T25dGuM;Vn3a37UDRrWST<% z96$K4{ygNn_FO;uSKvc_9#8bhZG$Hkw-VLa>OwV{YpRJb5;ZY&$7LzkTobRU^~WF& t%|~y4{uF}yPtVn@clV4L1N%3Cpg3gtE)w-hWZ3_Y9`}YtDtgaMz5yC=MtJ}L literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/FCC_Sys_New/checksumOfCache.mat b/src/validation/slprj/sim/varcache/FCC_Sys_New/checksumOfCache.mat new file mode 100644 index 0000000000000000000000000000000000000000..a025c662ffb83bdffc1e664a220877dff97c6dbc GIT binary patch literal 392 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSA|TbL8)m#F5KKJvOPEZ88)%JY~Y;n=7&=qDdvLI`sSykA~_eQxd2@GM5q7& literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/FCC_Sys_New/tmwinternal/simulink_cache.xml b/src/validation/slprj/sim/varcache/FCC_Sys_New/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..a510d92 --- /dev/null +++ b/src/validation/slprj/sim/varcache/FCC_Sys_New/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + 74txeNoghRI38j+5N+pxFg== + + \ No newline at end of file diff --git a/src/validation/slprj/sim/varcache/FCC_Sys_New/varInfo.mat b/src/validation/slprj/sim/varcache/FCC_Sys_New/varInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..818c582c81efa04febfbe7ab8caefc8f0b9103be GIT binary patch literal 680 zcmb7BO-sW-5Z!=^2T?EH_u#Q9n@^J5(iCjPl+pz1t!$c24Q?CB2gQHmPjx053_XN8 z@G|pe_f6jJhJO6wPpCC!H1uON%cU66rQ~&1lzWdZgY|r2nB5!jGh^!3uPYOLj9!>as~Ms0A(AO@I{Updx$&0lPnT0*G2hWeekUy zsCNLJ{sL-@PLI0&-1}ed&sNc9(p0FQ0fzJsu-^GXJ@T25dGuM;Vn3a37UDRrWST<% z96$K4{ygNn_FO;uSKvc_9#8bhZG$Hkw-VLa>OwV{YpRJb5;ZY&$7LzkTobRU^~WF& t%|~y4{uF}yPtVn@clV4L1N%3Cpg3gtE)w-hWZ3_Y9`}YtDtgaMz5yC=MtJ}L literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/checksumOfCache.mat b/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/checksumOfCache.mat new file mode 100644 index 0000000000000000000000000000000000000000..8e88b09a64735cab0f0b19b4b1e6a24c0beab3ef GIT binary patch literal 392 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSA|TbL8)m#F5KKJvOPEZ88)%JY~Y;n=7&=qDdvLI`sSykA~_eQxd2%sM5O=# literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/tmwinternal/simulink_cache.xml b/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..b99fb47 --- /dev/null +++ b/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + sfdyHzBTQG0a+B822/uHBg== + + \ No newline at end of file diff --git a/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/varInfo.mat b/src/validation/slprj/sim/varcache/FCC_Sys_New_harness/varInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..3b185b07b2746af139c926e96d63dfcf006ec582 GIT binary patch literal 680 zcmb7BO-sW-5Z!=^2T?EH_u#Q9n@^J5(iCjPl+pz1t!$c24Q?CB2gQHmPjx053_XN8 z@G|pe_f6jJhJO6wPpCC!H1uON%cU66rQ~&1lzWdZgY|r2nas~Ms0A(AO@I{Updx$&0lPnT0*G2hWeekUy zsCNLJ{sL-@PLI0&-1}ed&sNc9(p0FQ0fzJsu-^GXJ@T25dGuM;Vn3a37UDRrWST<% z96$K4{ygNn_FO;uSKvc_9#8bhZG$Hkw-VLa>OwV{YpRJb5;ZY&$7LzkTobRU^~WF& t%|~y4{uF}yPtVn@clV4L1N%3Cpg3gtE)w-hWZ3_Y9`}YtDtgaMz5x?DMs@%I literal 0 HcmV?d00001 diff --git a/src/validation/slprj/sl_proj.tmw b/src/validation/slprj/sl_proj.tmw new file mode 100644 index 0000000..f8db54a --- /dev/null +++ b/src/validation/slprj/sl_proj.tmw @@ -0,0 +1,2 @@ +Simulink Coder project marker file. Please don't change it. +slprjVersion: 10.1_079 \ No newline at end of file diff --git a/src/validation/test_generation/FCC_Sys_New/FCC_Sys_New_harness.slx b/src/validation/test_generation/FCC_Sys_New/FCC_Sys_New_harness.slx new file mode 100644 index 0000000000000000000000000000000000000000..4642783dbb48078d8a677d27e05f334b3935aa6e GIT binary patch literal 80702 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